Example #1
0
def test_register_noninteractive(tmp_path: Path,
                                 capsys: CaptureFixture) -> None:
    """Asserts error is raised when registering with noninteractive terminal"""
    expectation = """
╭──────────────────────────────────────────────────────────────────────────────╮
│                          Global Bento Configuration                          │
╰──────────────────────────────────────────────────────────────────────────────╯
Thanks for installing Bento, a free and opinionated toolkit for gradually
adopting linters and program analysis in your codebase!

Registration: We’ll use your email to provide support and share product
updates. You can unsubscribe at any time.

✘ This installation of Bento is not registered.

Please either:
◦ Register Bento by running it in an interactive terminal
◦ Run Bento with `--agree --email [EMAIL]`
"""

    with tmp_config(tmp_path) as ctx:
        registrar = Registrar(click_context=ctx, agree=False, email=None)

        with pytest.raises(NonInteractiveTerminalException) as ex:
            registrar.verify()

        assert ex.value.code == 3

    outerr = capsys.readouterr()
    assert outerr.err == expectation
    assert not outerr.out
Example #2
0
def test_register_agree_flag(tmp_path: Path) -> None:
    """Validates registration if agreement in flag"""

    with fake_input(tmp_path, f"{QA_TEST_EMAIL_ADDRESS}\n\n") as ctx:
        registrar = Registrar(click_context=ctx, agree=True, email=None)

        assert registrar.verify()
        assert read_global_config() == {"email": QA_TEST_EMAIL_ADDRESS}
Example #3
0
def test_register_agree_email(tmp_path: Path, capsys: CaptureFixture) -> None:
    """Asserts registration is skipped with both email and agree"""
    with tmp_config(tmp_path) as ctx:
        registrar = Registrar(click_context=ctx,
                              agree=True,
                              email=QA_TEST_EMAIL_ADDRESS)

        assert registrar.verify()

    outerr = capsys.readouterr()
    assert not outerr.err
    assert not outerr.out
Example #4
0
def test_register_email_option(tmp_path: Path) -> None:
    """Validates registration if email via command line"""

    with setup_global_gitignore(tmp_path):
        with fake_input(tmp_path, "\n") as ctx:
            registrar = Registrar(click_context=ctx,
                                  agree=False,
                                  email=QA_TEST_EMAIL_ADDRESS)

            assert registrar.verify()
            assert read_global_config() == {
                "terms_of_service": TERMS_OF_SERVICE_VERSION
            }
Example #5
0
def test_register_no_agree(tmp_path: Path, capsys: CaptureFixture) -> None:
    """Asserts registration fails when rejecting ToS"""

    expectation = """✘ Bento did NOT install. Bento beta users must agree to the terms of service to
continue. Please reach out to us at [email protected] with questions or concerns."""

    with fake_input(tmp_path, f"{QA_TEST_EMAIL_ADDRESS}\nn\n") as ctx:
        registrar = Registrar(click_context=ctx, agree=False, email=None)

        assert not registrar.verify()
        assert read_global_config() == {"email": QA_TEST_EMAIL_ADDRESS}

    output = capsys.readouterr()
    assert expectation in output.err
    assert not output.out
Example #6
0
def test_register_setup_gitignore(tmp_path: Path) -> None:
    """Validates that registration configures global gitignore"""

    tmp_ignore = tmp_path / ".gitignore"
    with patch("bento.git.global_ignore_path", lambda p: tmp_ignore):
        with fake_input(tmp_path, "\n\n") as ctx:
            registrar = Registrar(click_context=ctx,
                                  agree=False,
                                  email=QA_TEST_EMAIL_ADDRESS)
            assert registrar.verify()

        with tmp_ignore.open("r") as stream:
            lines = [l.rstrip() for l in stream]

        assert ".bento/" in lines
        assert ".bentoignore" in lines
Example #7
0
def test_already_registered(tmp_path: Path, capsys: CaptureFixture) -> None:
    """Asserts registration skipped if current"""

    with setup_global_gitignore(tmp_path):
        with tmp_config(tmp_path) as ctx:
            persist_global_config({
                "email": QA_TEST_EMAIL_ADDRESS,
                "terms_of_service": TERMS_OF_SERVICE_VERSION,
            })
            registrar = Registrar(click_context=ctx,
                                  agree=False,
                                  email=QA_TEST_EMAIL_ADDRESS)
            assert registrar.verify()

    output = capsys.readouterr()
    assert not output.err
    assert not output.out
Example #8
0
def test_register_happy_path(tmp_path: Path, capsys: CaptureFixture) -> None:
    """Asserts registration succeeds when sending email and agreeing to ToS"""

    email_question = "What is your email address?"
    tos_question = "Continue and agree to Bento's terms of service and privacy policy?"

    with setup_global_gitignore(tmp_path):
        with fake_input(tmp_path, f"{QA_TEST_EMAIL_ADDRESS}\n\n") as ctx:
            registrar = Registrar(click_context=ctx, agree=False, email=None)

            assert registrar.verify()
            assert read_global_config() == {
                "email": QA_TEST_EMAIL_ADDRESS,
                "terms_of_service": "0.3.0",
            }

    outerr = capsys.readouterr()
    assert email_question in outerr.err
    assert tos_question in outerr.err
    assert not outerr.out