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);
            }
Example #2
0
            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);
            }
Example #3
0
            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);
            }
Example #4
0
            public void ReturnsValidInitialization()
            {
                var provider = new GitHubProvider();
                var valid    = provider.Initialize("https://github.com/CatenaLogic/GitLink");

                Assert.IsTrue(valid);
            }
Example #5
0
            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, ""));
        }
Example #7
0
        public async Task GetReadmeMarkdown_WhenMissing_ReturnsNull()
        {
            var provider = new GitHubProvider();
            var content  = await provider.GetReadmeMarkdown(Guid.NewGuid().ToString());

            Assert.IsNull(content);
        }
Example #8
0
        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"));
        }
Example #9
0
            public void ReturnsValidRawGitUrl()
            {
                var provider = new GitHubProvider();

                provider.Initialize("https://github.com/CatenaLogic/GitLink");

                Assert.AreEqual("https://raw.github.com/CatenaLogic/GitLink", provider.RawGitUrl);
            }
Example #10
0
            public void ReturnsValidCompany()
            {
                var provider = new GitHubProvider();

                provider.Initialize("https://github.com/CatenaLogic/GitLink");

                Assert.AreEqual("CatenaLogic", provider.CompanyName);
            }
Example #11
0
        public async Task GetReadmeMarkdown_WhenAvailable_ReturnsDecodedString()
        {
            var provider = new GitHubProvider();
            var content  = await provider.GetReadmeMarkdown("Wu10Man");

            Assert.NotNull(content);
            Assert.IsTrue(content.Contains('*'));
        }
Example #12
0
            public void ReturnsValidProject()
            {
                var provider = new GitHubProvider();

                provider.Initialize("https://github.com/CatenaLogic/GitLink");

                Assert.AreEqual("GitLink", provider.ProjectName);
            }
Example #13
0
            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);
            }
Example #14
0
            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);
            }
Example #15
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
        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));
        }
Example #18
0
        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);
        }
Example #19
0
        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);
        }
Example #20
0
        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>());
        }
Example #22
0
        // 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);
        }
Example #24
0
        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);
        }
Example #25
0
            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);
            }
Example #26
0
            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);
        }
Example #29
0
            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);
            }
Example #30
0
            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);
            }
Example #31
0
            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);
            }
Example #42
0
        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>());
        }