import pytest from clearml_agent.helper.repo import Git NO_CHANGE = object() def param(url, expected, user=False, password=False): """ Helper function for creating parametrization arguments. :param url: input url :param expected: expected output URL or NO_CHANGE if the same as input URL :param user: Add `agent.git_user=USER` to config :param password: Add `agent.git_password=PASSWORD` to config """ expected_repr = "NO_CHANGE" if expected is NO_CHANGE else None user = "USER" if user else None password = "PASSWORD" if password else None return pytest.param( url, expected, user, password, id="-".join(filter(None, (url, user, password, expected_repr))), ) @pytest.mark.parametrize( "url,expected,user,password", [ param("https://bitbucket.org/company/repo", NO_CHANGE), param("https://bitbucket.org/company/repo", NO_CHANGE, user=True), param("https://bitbucket.org/company/repo", NO_CHANGE, password=True), param( "https://bitbucket.org/company/repo", NO_CHANGE, user=True, password=True ), param("https://user@bitbucket.org/company/repo", NO_CHANGE), param("https://user@bitbucket.org/company/repo", NO_CHANGE, user=True), param("https://user@bitbucket.org/company/repo", NO_CHANGE, password=True), param( "https://user@bitbucket.org/company/repo", "https://USER:PASSWORD@bitbucket.org/company/repo", user=True, password=True, ), param("https://user:password@bitbucket.org/company/repo", NO_CHANGE), param("https://user:password@bitbucket.org/company/repo", NO_CHANGE, user=True), param( "https://user:password@bitbucket.org/company/repo", NO_CHANGE, password=True ), param( "https://user:password@bitbucket.org/company/repo", NO_CHANGE, user=True, password=True, ), param("ssh://git@bitbucket.org/company/repo", NO_CHANGE), param("ssh://git@bitbucket.org/company/repo", NO_CHANGE, user=True), param("ssh://git@bitbucket.org/company/repo", NO_CHANGE, password=True), param( "ssh://git@bitbucket.org/company/repo", NO_CHANGE, user=True, password=True ), param("git@bitbucket.org:company/repo.git", NO_CHANGE), param("git@bitbucket.org:company/repo.git", NO_CHANGE, user=True), param("git@bitbucket.org:company/repo.git", NO_CHANGE, password=True), param( "git@bitbucket.org:company/repo.git", NO_CHANGE, user=True, password=True ), ], ) def test(url, user, password, expected): config = {"agent": {"git_user": user, "git_pass": password}} result = Git.add_auth(config, url) expected = result if expected is NO_CHANGE else expected assert result == expected