public void GivenGitHubReturnedAnError_AuthenticateClient_ThrowsAnException() { // Arrange. var githubProvider = new GitHubProvider(new ProviderParams {Key = "aa", Secret = "bb"}); const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "error", "I dont' always use bayonets. But when I do, I transport them on Aircraft Carriers." }, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to retrieve an authorization code from GitHub. The error provided is: I dont' always use bayonets. But when I do, I transport them on Aircraft Carriers.", result.Message); }
public void GivenNoCodeAndNoErrorWasReturned_AuthenticateClient_ThrowsAnException() { // Arrange. var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }); const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "aaa", "bbb" }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal("No code parameter provided in the response query string from GitHub.", result.Message); }
public void GivenGitHubReturnedAnError_AuthenticateClient_ThrowsAnException() { // Arrange. var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }); const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "error", "I dont' always use bayonets. But when I do, I transport them on Aircraft Carriers." }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to retrieve an authorization code from GitHub. The error provided is: I dont' always use bayonets. But when I do, I transport them on Aircraft Carriers.", result.Message); }
public void ReturnsValidInitialization() { var provider = new GitHubProvider(); var valid = provider.Initialize("https://github.com/CatenaLogic/GitLink"); Assert.IsTrue(valid); }
public void ReturnsInValidInitialization() { var provider = new GitHubProvider(); var valid = provider.Initialize("https://bitbucket.org/CatenaLogic/GitLink"); Assert.IsFalse(valid); }
public async Task AuthenticateUserThrowsExceptionIfGitHubApiFails() { // Arrange var config = CreateProviderConfig(); var(restClientFactory, restClient) = CreateRestClientAndFactory(); // Arrnage - Calling GitHub API for token succeeds SetupTokenResultSuccess(restClient, "token"); // Arrange - Calling GitHub API to get user fails var response = Substitute.For <IRestResponse <UserResult> >(); response.IsSuccessful.Returns(false); restClient.ExecuteAsync <UserResult>(Arg.Any <RestRequest>()).Returns(Task.FromResult(response)); var provider = new GitHubProvider(config, restClientFactory, "url1", "url2"); var http = Substitute.For <HttpRequest>(); http.Query.Returns(new QueryCollection(new Dictionary <string, StringValues> { { "code", new StringValues("TestCode") } })); // Act / Assert await Assert.ThrowsAsync <NogginNetCoreAuthException>(() => provider.AuthenticateUser(http, "")); }
public async Task GetReadmeMarkdown_WhenMissing_ReturnsNull() { var provider = new GitHubProvider(); var content = await provider.GetReadmeMarkdown(Guid.NewGuid().ToString()); Assert.IsNull(content); }
public async Task GetReadmeMarkdown_WhenHasRelativeUrl_InflatesUrl() { var provider = new GitHubProvider(); var content = await provider.GetReadmeMarkdown("vscode-copyrawvalue"); Assert.NotNull(content); Assert.IsTrue(content.Contains(@"https://raw.githubusercontent.com/WereDev/vscode-copyrawvalue/master/resources/demo.gif?raw=true")); }
public void ReturnsValidRawGitUrl() { var provider = new GitHubProvider(); provider.Initialize("https://github.com/CatenaLogic/GitLink"); Assert.AreEqual("https://raw.github.com/CatenaLogic/GitLink", provider.RawGitUrl); }
public void ReturnsValidCompany() { var provider = new GitHubProvider(); provider.Initialize("https://github.com/CatenaLogic/GitLink"); Assert.AreEqual("CatenaLogic", provider.CompanyName); }
public async Task GetReadmeMarkdown_WhenAvailable_ReturnsDecodedString() { var provider = new GitHubProvider(); var content = await provider.GetReadmeMarkdown("Wu10Man"); Assert.NotNull(content); Assert.IsTrue(content.Contains('*')); }
public void ReturnsValidProject() { var provider = new GitHubProvider(); provider.Initialize("https://github.com/CatenaLogic/GitLink"); Assert.AreEqual("GitLink", provider.ProjectName); }
public void GivenExecutingUserInfoWorksButIsMissingSomeRequiredData_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestResponse = new Mock <IRestResponse <AccessTokenResult> >(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponse.Setup(x => x.Data).Returns(new AccessTokenResult { AccessToken = "aaa", TokenType = "overly attached girlfriend" }); var mockRestResponseUserInfo = new Mock <IRestResponse <UserInfoResult> >(); mockRestResponseUserInfo.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponseUserInfo.Setup(x => x.Data).Returns(new UserInfoResult()); // Missing required info. var mockRestClient = new Mock <IRestClient>(); mockRestClient .Setup(x => x.Execute <AccessTokenResult>(It.IsAny <IRestRequest>())) .Returns(mockRestResponse.Object); mockRestClient. Setup(x => x.Execute <UserInfoResult>(It.IsAny <IRestRequest>())) .Returns(mockRestResponseUserInfo.Object); mockRestClient.Setup(x => x.BuildUri(It.IsAny <IRestRequest>())) .Returns(new Uri("http://www.starwars.com")); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "code", "aaa" }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Retrieve some user info from the GitHub Api, but we're missing one or more of either: Id, Login, and Name.", result.Message); }
public void GivenExecutingUserInfoThrowsAnException_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestResponse = new Mock <IRestResponse <AccessTokenResult> >(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponse.Setup(x => x.Data).Returns(new AccessTokenResult { AccessToken = "aaa", TokenType = "overly attached girlfriend" }); var mockRestResponseUserInfo = new Mock <IRestResponse <UserInfoResult> >(); mockRestResponseUserInfo.Setup(x => x.StatusCode).Returns(HttpStatusCode.Unauthorized); mockRestResponseUserInfo.Setup(x => x.StatusDescription).Returns("Unauthorized"); var mockRestClient = new Mock <IRestClient>(); mockRestClient .Setup(x => x.Execute <AccessTokenResult>(It.IsAny <IRestRequest>())) .Returns(mockRestResponse.Object); mockRestClient. Setup(x => x.Execute <UserInfoResult>(It.IsAny <IRestRequest>())) .Returns(mockRestResponseUserInfo.Object); mockRestClient.Setup(x => x.BuildUri(It.IsAny <IRestRequest>())) .Returns(new Uri("http://www.starwars.com")); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "code", "aaa" }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to obtain User Info from GitHub OR the the response was not an HTTP Status 200 OK. Response Status: Unauthorized. Response Description: Unauthorized", result.Message); }
public void pull_first_commit_of_example_a() { var testSubject = new GitHubProvider(new FolderSync(A.Fake <ILogger>())); var source = JObject.Parse("{owner:\"acraven\",repository:\"saucy-examples\",commit:\"39f87ac936ae9fc1b11ef749538e61417d447917\",path:\"src/Saucy.Example.ProjectA\"}"); testSubject.Pull(source, _localPath); System.IO.Compression.ZipFile.ExtractToDirectory(@"TestData\FirstCommitProjectA.zip", _compareWithPath); AssertFoldersAreEqual(_localPath, _compareWithPath); }
public void pull_second_commit_of_example_a() { var testSubject = new GitHubProvider(new FolderSync(A.Fake <ILogger>())); var source = JObject.Parse("{owner:\"acraven\",repository:\"saucy-examples\",commit:\"d01f7c95a06a347fc6d73fa8c5fbe121d355ebc2\",path:\"src/Saucy.Example.ProjectA\"}"); testSubject.Pull(source, _localPath); System.IO.Compression.ZipFile.ExtractToDirectory(@"TestData\SecondCommitProjectA.zip", _compareWithPath); AssertFoldersAreEqual(_localPath, _compareWithPath); }
public void IsMatchReturnsExpectedResult(string json, bool expectedResult) { var packageLocator = JObject.Parse(json); var testSubject = new GitHubProvider(new FolderSync(A.Fake <ILogger>())); var result = testSubject.IsMatch(packageLocator); Assert.That(result, Is.EqualTo(expectedResult)); }
public void pull_third_commit_of_example_a_on_top_of_second_commit_should_remove_renamed_file() { var testSubject = new GitHubProvider(new FolderSync(A.Fake <ILogger>())); var source2 = JObject.Parse("{owner:\"acraven\",repository:\"saucy-examples\",commit:\"d01f7c95a06a347fc6d73fa8c5fbe121d355ebc2\",path:\"src/Saucy.Example.ProjectA\"}"); var source3 = JObject.Parse("{owner:\"acraven\",repository:\"saucy-examples\",commit:\"b984a5f482d4f4d459d24a20a321e73c6cb155ab\",path:\"src/Saucy.Example.ProjectA\"}"); testSubject.Pull(source2, _localPath); testSubject.Pull(source3, _localPath); System.IO.Compression.ZipFile.ExtractToDirectory(@"TestData\ThirdCommitProjectA.zip", _compareWithPath); AssertFoldersAreEqual(_localPath, _compareWithPath); }
public void pull_fourth_commit_of_example_a_including_binary_file() { var testSubject = new GitHubProvider(new FolderSync(A.Fake <ILogger>())); var source = JObject.Parse("{owner:\"acraven\",repository:\"saucy-examples\",commit:\"49e6eee853ef692e1936558445ff619bf45a1df8\",path:\"src/Saucy.Example.ProjectA\"}"); testSubject.Pull(source, _localPath); var contents = File.ReadAllBytes(_localPath + @"\Saucy.Example.ProjectA\256-bytes.bin"); var expectedContents = Enumerable.Range(0, 256).Select(c => (byte)c).ToArray(); CollectionAssert.AreEqual(contents, expectedContents); }
public void VerifyDefaultPropertyValues() { var provider = new GitHubProvider(_model, _blobCache); provider.InitialPath.Should().Be(string.Empty); provider.CanCreateFolder.Should().BeFalse(); provider.Created.Should().Be(_model.Created); provider.Name.Should().Be("GitHub"); provider.Id.Should().Be(_model.Id); provider.SupportsDirectAuth.Should().BeTrue(); provider.SupportsHostAuth.Should().BeFalse(); provider.SupportsOAuth.Should().BeFalse(); }
public async Task GenerateStartRequestDoesNotCallGitHubApi() { // Arrange var config = CreateProviderConfig(); var(restClientFactory, restClient) = CreateRestClientAndFactory(); var provider = new GitHubProvider(config, restClientFactory, "url1", "url2"); var http = Substitute.For <HttpRequest>(); // Act var result = await provider.GenerateStartRequestUrl(http); // Assert await restClient.DidNotReceive().ExecuteAsync <AccessTokenResult>(Arg.Any <IRestRequest>()); }
// The bootstrapper enables you to reconfigure the composition of the framework, // by overriding the various methods and properties. // For more information https://github.com/NancyFx/Nancy/wiki/Bootstrapper protected override void ConfigureRequestContainer(Nancy.TinyIoc.TinyIoCContainer container, NancyContext context) { base.ConfigureRequestContainer(container, context); var githubAuth = new GitHubProvider(new ProviderParams() { PublicApiKey = Environment.GetEnvironmentVariable("PEASANT_OAUTH_ID") ?? "68e704a8ede918f8d940", SecretApiKey = Environment.GetEnvironmentVariable("PEASANT_OAUTH_KEY") ?? "888b305d22b2d7251b087c5903be21f7eaca4e20", Scopes = new[] { "repo", "user", "status", } }); var authServiceFactory = new AuthenticationProviderFactory(); authServiceFactory.AddProvider(githubAuth); container.Register<IAuthenticationCallbackProvider>(new AuthenticationCallbackProvider()); BlobCache.ApplicationName = "Peasant"; }
public async Task GenerateStartRequestUrlReturnsToken() { // Arrange var config = CreateProviderConfig(); var(restClientFactory, restClient) = CreateRestClientAndFactory(); // Arrange - Calling GitHub API succeeds var provider = new GitHubProvider(config, restClientFactory, "url1", "url2"); var http = Substitute.For <HttpRequest>(); // Act var result = await provider.GenerateStartRequestUrl(http); // Assert Assert.NotNull(result.url); }
protected override void ConfigureApplicationContainer(TinyIoCContainer container) { base.ConfigureApplicationContainer(container); var githubProvider = new GitHubProvider(new ProviderParams() { Key = GithubConsumerKey, Secret = GithubConsumerSecret }); ((WorldDomination.Web.Authentication.ExtraProviders.GitHub.GitHubAuthenticationServiceSettings) githubProvider.DefaultAuthenticationServiceSettings).Scope = "user:email,public_repo"; var authenticationService = new AuthenticationService(); authenticationService.AddProvider(githubProvider); container.Register <IAuthenticationService>(authenticationService); }
public void GivenANullCallbackUriWhileTryingToRetrieveAnAccessToken_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock <IRestClient>(); var mockRestResponse = new Mock <IRestResponse <AccessTokenResult> >(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.BadRequest); mockRestResponse.Setup(x => x.StatusDescription).Returns("Bad Request"); mockRestResponse.Setup(x => x.Content).Returns("{\n \"error\" : \"invalid_request\"\n}"); mockRestClient .Setup(x => x.Execute <AccessTokenResult>(It.IsAny <IRestRequest>())) .Returns(mockRestResponse.Object); mockRestClient.Setup(x => x.BuildUri(It.IsAny <IRestRequest>())) .Returns(new Uri("http://www.starwars.com")); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "code", "aaa" }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { CallBackUri = new Uri("http://2p1s.com"), State = existingState }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to obtain an Access Token from GitHub OR the the response was not an HTTP Status 200 OK. Response Status: BadRequest. Response Description: Bad Request. Error Content: {\n \"error\" : \"invalid_request\"\n}. Error Message: --no error exception--.", result.Message); }
public void GivenAnRequestTokenWithMissingParameters_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock <IRestClient>(); mockRestClient.Setup(x => x.BuildUri(It.IsAny <IRestRequest>())) .Returns(new Uri("http://www.starwars.com")); var mockRestResponse = new Mock <IRestResponse <AccessTokenResult> >(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponse.Setup(x => x.Data).Returns(new AccessTokenResult()); mockRestClient .Setup(x => x.Execute <AccessTokenResult>(It.IsAny <IRestRequest>())) .Returns(mockRestResponse.Object); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "code", "aaa" }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Retrieved a GitHub Access Token but it doesn't contain one or more of either: access_token or token_type.", result.Message); }
public async Task SingleMilestone3() { if ((string.IsNullOrEmpty(_username) || string.IsNullOrEmpty(_password)) && string.IsNullOrEmpty(_token)) { Assert.Inconclusive("Unable to locate credentials for accessing GitHub API"); } else { var fileSystem = new FileSystem(); var currentDirectory = Environment.CurrentDirectory; var configuration = ConfigurationProvider.Provide(currentDirectory, fileSystem); var vcsProvider = new GitHubProvider(_mapper, configuration, _username, _password, _token); var releaseNotesBuilder = new ReleaseNotesBuilder(vcsProvider, "Chocolatey", "ChocolateyGUI", "0.13.0", configuration); var result = await releaseNotesBuilder.BuildReleaseNotes().ConfigureAwait(false); Debug.WriteLine(result); ClipBoardHelper.SetClipboard(result); } }
public async Task AuthenticateUserReturnsUserInfo() { // Arrange var config = CreateProviderConfig(); var(restClientFactory, restClient) = CreateRestClientAndFactory(); // Arrange - Calling GitHub API for token SetupTokenResultSuccess(restClient, "token"); // Arrange - Calling GitHub for user details var gitHubResponse = Substitute.For <IRestResponse <UserResult> >(); gitHubResponse.IsSuccessful.Returns(true); gitHubResponse.StatusCode.Returns(HttpStatusCode.OK); gitHubResponse.Data.Returns(new UserResult { Id = 2268, Login = "******", Name = "Richard Garside", AvatarUrl = "lookingood.jpg" }); restClient.ExecuteAsync <UserResult>(Arg.Any <RestRequest>()).Returns(Task.FromResult(gitHubResponse)); var provider = new GitHubProvider(config, restClientFactory, "url1", "url2"); var http = Substitute.For <HttpRequest>(); http.Query.Returns(new QueryCollection(new Dictionary <string, StringValues> { { "code", new StringValues("TestCode") }, })); // Act var authenticatedUser = await provider.AuthenticateUser(http, "secret"); // Assert Assert.Equal("Richard Garside", authenticatedUser.Name); Assert.Equal("NogginBox", authenticatedUser.UserName); Assert.Equal("lookingood.jpg", authenticatedUser.Picture); }
public void GivenSomeState_RedirectToAuthenticate_ReturnsAUri() { // Arrange. var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }); // Act. var result = githubProvider.RedirectToAuthenticate(new GitHubAuthenticationServiceSettings { CallBackUri = new Uri("http://wwww.pewpew.com/"), State = "bleh" }); // Assert. Assert.NotNull(result); Assert.Equal( "https://github.com/login/oauth/authorize?client_id=aa&scope=user:email&redirect_uri=http://wwww.pewpew.com/&response_type=code&state=bleh", result.AbsoluteUri); }
public void GivenAnErrorOccuredWhileTryingToRetrieveAnAccessToken_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock <IRestClient>(); const string errorMessage = "If God says he was not created by a creator, does that mean: god is an aetheist?"; mockRestClient.Setup(x => x.Execute <AccessTokenResult>(It.IsAny <IRestRequest>())) .Throws(new InvalidOperationException(errorMessage)); mockRestClient.Setup(x => x.BuildUri(It.IsAny <IRestRequest>())) .Returns(new Uri("http://www.starwars.com")); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "code", "aaa" }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal("Failed to retrieve an Access Token from GitHub.", result.Message); Assert.NotNull(result.InnerException); Assert.Equal(errorMessage, result.InnerException.Message); }
public void GivenAnInvalidRequestToken_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock <IRestClient>(); var mockRestResponse = new Mock <IRestResponse <AccessTokenResult> >(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.Unauthorized); mockRestResponse.Setup(x => x.StatusDescription).Returns("Unauthorized"); mockRestClient .Setup(x => x.Execute <AccessTokenResult>(It.IsAny <IRestRequest>())) .Returns(mockRestResponse.Object); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { { "code", "aaa" }, { "state", existingState } }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { CallBackUri = new Uri("http://2p1s.cBom"), State = existingState }; // Act. var result = Assert.Throws <AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to retrieve an Access Token from GitHub.", result.Message); }
public void GivenNoCodeAndNoErrorWasReturned_AuthenticateClient_ThrowsAnException() { // Arrange. var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }); const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"aaa", "bbb"}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal("No code parameter provided in the response query string from GitHub.", result.Message); }
public void GivenADifferentStateValue_AuthenticateClient_ThrowsAnException() { // Arrange. var githubProvider = new GitHubProvider("aa", "bb", null); var queryStringParameters = new NameValueCollection { {"code", "a"}, {"state", "b"} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings() { State = "as", CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal("The states do not match. It's possible that you may be a victim of a CSRF.", result.Message); }
public void GivenSomeState_RedirectToAuthenticate_ReturnsAUri() { // Arrange. var githubProvider = new GitHubProvider(new ProviderParams {Key = "aa", Secret = "bb"}); // Act. var result = githubProvider.RedirectToAuthenticate(new GitHubAuthenticationServiceSettings { CallBackUri = new Uri("http://wwww.pewpew.com/"), State = "bleh" }); // Assert. Assert.NotNull(result); Assert.Equal( "https://github.com/login/oauth/authorize?client_id=aa&redirect_uri=http://wwww.pewpew.com/&response_type=code&state=bleh", result.AbsoluteUri); }
public void GivenAnErrorOccuredWhileTryingToRetrieveAnAccessToken_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock<IRestClient>(); const string errorMessage = "If God says he was not created by a creator, does that mean: god is an aetheist?"; mockRestClient.Setup(x => x.Execute<AccessTokenResult>(It.IsAny<IRestRequest>())) .Throws(new InvalidOperationException(errorMessage)); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"code", "aaa"}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal("Failed to obtain an Access Token from GitHub OR the the response was not an HTTP Status 200 OK. Response Status: -- null response --. Response Description: ", result.Message); Assert.NotNull(result.InnerException); Assert.Equal(errorMessage, result.InnerException.Message); }
public void GivenAnRequestTokenWithMissingParameters_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock<IRestClient>(); var mockRestResponse = new Mock<IRestResponse<AccessTokenResult>>(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponse.Setup(x => x.Data).Returns(new AccessTokenResult()); mockRestClient .Setup(x => x.Execute<AccessTokenResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponse.Object); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"code", "aaa"}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Retrieved a GitHub Access Token but it doesn't contain one or more of either: access_token or token_type", result.Message); }
public void GivenANullCallbackUriWhileTryingToRetrieveAnAccessToken_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock<IRestClient>(); var mockRestResponse = new Mock<IRestResponse<AccessTokenResult>>(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.BadRequest); mockRestResponse.Setup(x => x.StatusDescription).Returns("Bad Request"); mockRestResponse.Setup(x => x.Content).Returns("{\n \"error\" : \"invalid_request\"\n}"); mockRestClient .Setup(x => x.Execute<AccessTokenResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponse.Object); var githubProvider = new GitHubProvider(new ProviderParams {Key = "aa", Secret = "bb"}) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"code", "aaa"}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { CallBackUri = new Uri("http://2p1s.com"), State = existingState }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to obtain an Access Token from GitHub OR the the response was not an HTTP Status 200 OK. Response Status: BadRequest. Response Description: Bad Request", result.Message); }
public void GivenAnInvalidRequestToken_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestClient = new Mock<IRestClient>(); var mockRestResponse = new Mock<IRestResponse<AccessTokenResult>>(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.Unauthorized); mockRestResponse.Setup(x => x.StatusDescription).Returns("Unauthorized"); mockRestClient .Setup(x => x.Execute<AccessTokenResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponse.Object); var githubProvider = new GitHubProvider(new ProviderParams {Key = "aa", Secret = "bb"}) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"code", "aaa"}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { CallBackUri = new Uri("http://2p1s.cBom"), State = existingState }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to retrieve an Access Token from GitHub.", result.Message); }
public void GivenExecutingUserInfoThrowsAnException_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestResponse = new Mock<IRestResponse<AccessTokenResult>>(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponse.Setup(x => x.Data).Returns(new AccessTokenResult { AccessToken = "aaa", TokenType = "overly attached girlfriend" }); var mockRestResponseUserInfo = new Mock<IRestResponse<UserInfoResult>>(); mockRestResponseUserInfo.Setup(x => x.StatusCode).Returns(HttpStatusCode.Unauthorized); mockRestResponseUserInfo.Setup(x => x.StatusDescription).Returns("Unauthorized"); var mockRestClient = new Mock<IRestClient>(); mockRestClient .Setup(x => x.Execute<AccessTokenResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponse.Object); mockRestClient. Setup(x => x.Execute<UserInfoResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponseUserInfo.Object); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"code", "aaa"}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Failed to obtain User Info from GitHub OR the the response was not an HTTP Status 200 OK. Response Status: Unauthorized. Response Description: Unauthorized", result.Message); }
public void GivenExecutingUserInfoWorksButIsMissingSomeRequiredData_AuthenticateClient_ThrowsAnException() { // Arrange. var mockRestResponse = new Mock<IRestResponse<AccessTokenResult>>(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponse.Setup(x => x.Data).Returns(new AccessTokenResult { AccessToken = "aaa", TokenType = "overly attached girlfriend" }); var mockRestResponseUserInfo = new Mock<IRestResponse<UserInfoResult>>(); mockRestResponseUserInfo.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponseUserInfo.Setup(x => x.Data).Returns(new UserInfoResult()); // Missing required info. var mockRestClient = new Mock<IRestClient>(); mockRestClient .Setup(x => x.Execute<AccessTokenResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponse.Object); mockRestClient. Setup(x => x.Execute<UserInfoResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponseUserInfo.Object); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"code", "aaa"}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = Assert.Throws<AuthenticationException>( () => githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters)); // Assert. Assert.NotNull(result); Assert.Equal( "Retrieve some user info from the GitHub Api, but we're missing one or more of either: Id, Login, and Name.", result.Message); }
public void GivenExecutingRetrieveSomeUserInfo_AuthenticateClient_ReturnsAnAuthenticatedClient() { // Arrange. const string accessToken = "aaa"; var mockRestResponse = new Mock<IRestResponse<AccessTokenResult>>(); mockRestResponse.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponse.Setup(x => x.Data).Returns(new AccessTokenResult { AccessToken = accessToken, TokenType = "overly attached girlfriend" }); var userInfoResult = new UserInfoResult { Email = "aaa", Id = "1", Name = "eee" }; var mockRestResponseUserInfo = new Mock<IRestResponse<UserInfoResult>>(); mockRestResponseUserInfo.Setup(x => x.StatusCode).Returns(HttpStatusCode.OK); mockRestResponseUserInfo.Setup(x => x.Data).Returns(userInfoResult); var mockRestClient = new Mock<IRestClient>(); mockRestClient .Setup(x => x.Execute<AccessTokenResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponse.Object); mockRestClient. Setup(x => x.Execute<UserInfoResult>(It.IsAny<IRestRequest>())) .Returns(mockRestResponseUserInfo.Object); var githubProvider = new GitHubProvider(new ProviderParams { Key = "aa", Secret = "bb" }) { RestClientFactory = new RestClientFactory(mockRestClient.Object) }; const string existingState = "Oops! - Tasselhoff Burrfoot"; var queryStringParameters = new NameValueCollection { {"code", accessToken}, {"state", existingState} }; var gitHubAuthenticationServiceSettings = new GitHubAuthenticationServiceSettings { State = existingState, CallBackUri = new Uri("http://2p1s.com") }; // Act. var result = githubProvider.AuthenticateClient(gitHubAuthenticationServiceSettings, queryStringParameters); // Assert. Assert.NotNull(result); Assert.Equal("github", result.ProviderName); Assert.Equal(accessToken, result.AccessToken); Assert.Equal(new DateTime(),result.AccessTokenExpiresOn); Assert.NotNull(result.UserInformation); Assert.Equal(GenderType.Unknown, result.UserInformation.Gender); Assert.Equal(userInfoResult.Id, result.UserInformation.Id); Assert.Equal(userInfoResult.Name, result.UserInformation.Name); }
public void throw_argument_null_exception_if_saucy_path_is_null() { var testSubject = new GitHubProvider(new FolderSync(A.Fake <ILogger>())); Assert.That(() => testSubject.Pull(new JObject(), null), Throws.InstanceOf <ArgumentNullException>()); }