public IRemoteWebUrlProvider CreateUrlProvider(string remoteUrl, bool forceGitHub = false) { Regex r = new Regex(RemoteRegex); Match m = r.Match(remoteUrl); if (!m.Success) { return(null); } string server = m.Groups["server"].Value; bool isGitHub = string.Equals(server, GitHubFqdn, StringComparison.OrdinalIgnoreCase) || forceGitHub; if (!isGitHub) { return(null); } string user = m.Groups["user"].Value; string repository = m.Groups["repository"].Value; GitHubRemoteParameters parameters = new GitHubRemoteParameters(server, user, repository); IGitHubRemoteWebUrlProvider gitHubProvider = _gitHubProviderMaker(parameters); return(gitHubProvider); }
public void GivenAGitHubUrl_ThenReturnsGitHubProvider( string remoteUrl, bool forceGitHub, bool expectGitHub, string host = null, string user = null, string repository = null) { IGitHubRemoteParameters makerCalledWith = null; IGitHubRemoteWebUrlProvider providerMock = Mock.Of <IGitHubRemoteWebUrlProvider>(); int makerCalledTimes = 0; IGitHubRemoteWebUrlProvider GitHubProviderMaker(IGitHubRemoteParameters gitHubRemoteParameters) { makerCalledWith = gitHubRemoteParameters; makerCalledTimes++; return(providerMock); } IRemoteWebUrlProviderFactory f = new RemoteWebUrlProviderFactory(GitHubProviderMaker); // Act. IGitHubRemoteWebUrlProvider providerReturned = f.CreateUrlProvider(remoteUrl, forceGitHub) as IGitHubRemoteWebUrlProvider; // Verify. if (expectGitHub) { Assert.NotNull(providerReturned); Assert.Same(providerMock, providerReturned); Assert.Equal(1, makerCalledTimes); Assert.Equal(host, makerCalledWith.Server); Assert.Equal(user, makerCalledWith.User); Assert.Equal(repository, makerCalledWith.Repository); } else { Assert.Null(providerReturned); Assert.Equal(0, makerCalledTimes); } }