Ctrl K
ComunidadGuías…

tests/test_cloud_cta.py

Rama v8 · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""The post-build Graphify Cloud CTA is interactive-only, opt-out-able, and
shown once per project (so CI, piped output, and the AI-assistant pipeline
never see it, and repeat local builds stay quiet)."""
import io
import sys

from graphify import cli


class _TTYBuf(io.StringIO):
    def isatty(self):
        return True


class _PipeBuf(io.StringIO):
    def isatty(self):
        return False


def _run(out_dir, monkeypatch, *, tty=True):
    buf = _TTYBuf() if tty else _PipeBuf()
    monkeypatch.setattr(sys, "stdout", buf)
    cli._print_cloud_cta(out_dir)
    return buf.getvalue()


def _clear_optout(monkeypatch):
    monkeypatch.delenv("GRAPHIFY_NO_TIPS", raising=False)
    monkeypatch.delenv("GRAPHIFY_NO_CTA", raising=False)


def test_cta_prints_on_a_tty(tmp_path, monkeypatch):
    _clear_optout(monkeypatch)
    out = _run(tmp_path / "graphify-out", monkeypatch, tty=True)
    assert "Graphify Cloud" in out
    assert "app.graphify.com" in out


def test_cta_suppressed_when_not_a_tty(tmp_path, monkeypatch):
    _clear_optout(monkeypatch)
    out = _run(tmp_path / "graphify-out", monkeypatch, tty=False)
    assert out == ""
    # a non-TTY run must not leave the marker either, so a later TTY run still shows it
    assert not (tmp_path / "graphify-out" / ".cloud-cta-shown").exists()


def test_cta_respects_the_opt_out_env_vars(tmp_path, monkeypatch):
    for var in ("GRAPHIFY_NO_TIPS", "GRAPHIFY_NO_CTA"):
        _clear_optout(monkeypatch)
        monkeypatch.setenv(var, "1")
        out = _run(tmp_path / f"out-{var}", monkeypatch, tty=True)
        assert out == "", f"{var} should suppress the CTA"


def test_cta_shows_once_per_project(tmp_path, monkeypatch):
    _clear_optout(monkeypatch)
    out_dir = tmp_path / "graphify-out"
    first = _run(out_dir, monkeypatch, tty=True)
    second = _run(out_dir, monkeypatch, tty=True)
    assert "Graphify Cloud" in first
    assert second == "", "the CTA must not repeat on later builds of the same project"
    assert (out_dir / ".cloud-cta-shown").exists()