from __future__ import annotations

from pre_commit_hooks.check_vcs_permalinks import main


def test_trivial(tmpdir):
    f = tmpdir.join('f.txt').ensure()
    assert not main((str(f),))


def test_passing(tmpdir):
    f = tmpdir.join('f.txt')
    f.write_binary(
        # permalinks are ok
        b'https://github.com/asottile/test/blob/649e6/foo%20bar#L1\n'
        # tags are ok
        b'https://github.com/asottile/test/blob/1.0.0/foo%20bar#L1\n'
        # links to files but not line numbers are ok
        b'https://github.com/asottile/test/blob/main/foo%20bar\n'
        # regression test for overly-greedy regex
        b'https://github.com/ yes / no ? /blob/main/foo#L1\n',
    )
    assert not main((str(f),))


def test_failing(tmpdir, capsys):
    with tmpdir.as_cwd():
        tmpdir.join('f.txt').write_binary(
            b'https://github.com/asottile/test/blob/main/foo#L1\n'
            b'https://example.com/asottile/test/blob/main/foo#L1\n',
        )

        assert main(('f.txt', '--additional-github-domain', 'example.com'))
        out, _ = capsys.readouterr()
        assert out == (
            'f.txt:1:https://github.com/asottile/test/blob/main/foo#L1\n'
            'f.txt:2:https://example.com/asottile/test/blob/main/foo#L1\n'
            '\n'
            'Non-permanent github link detected.\n'
            'On any page on github press [y] to load a permalink.\n'
        )
