public async Task Test_TwitterController_Pass()
        {
            //Arrange
            TwitterAuthModel twitterAuthModel = new TwitterAuthModel
            {
                APIKey = "<api key>"
            };

            TwitterClient client = new TwitterClient(this.SecuritySettings, this.MockHttpClient.Object);

            TwitterAuthenticator authenticator = new TwitterAuthenticator(this.SecuritySettings.TwitterSecuritySettings,
                                                                          client);

            var controller = new TwitterController(authenticator);

            //Act
            var result = await controller.Create(twitterAuthModel);

            var twitterAccessToken = ((result as ObjectResult).Value as string);

            //Assert
            Assert.IsType <ObjectResult>(result);
            Assert.True(twitterAccessToken.IsValidJwtToken());
            this.MockHttpClient.Verify(x => x.SendAsync <TwitterResponseModel>(It.IsAny <HttpRequestMessage>()), Times.Once);
        }
        public async Task Test_TwitterController_NoAuthorizationCode_Fail()
        {
            //Arrange

            //Authorization Code absent
            TwitterAuthModel twitterAuthModel = new TwitterAuthModel
            {
                APIKey = "<api key>"
            };

            TwitterClient client = new TwitterClient(this.SecuritySettings, this.MockHttpClient.Object);

            TwitterAuthenticator authenticator = new TwitterAuthenticator(this.SecuritySettings.TwitterSecuritySettings,
                                                                          client);

            var controller = new TwitterController(authenticator);

            try
            {
                //Act
                var result = await controller.Create(twitterAuthModel);
            }
            catch (SecurityException ex)
            {
                //Assert
                Assert.IsType <SecurityException>(ex);
                this.MockTwitterClient.Verify(x => x.PostSecurityRequest(), Times.Never);
            }
        }
        public async Task Test_TwitterController_NoAPIKey_Fail()
        {
            //Arrange

            //API Key absent
            TwitterAuthModel facebookAuthModel = new TwitterAuthModel();

            TwitterClient client = new TwitterClient(this.SecuritySettings, this.MockHttpClient.Object);

            TwitterAuthenticator authenticator = new TwitterAuthenticator(this.SecuritySettings.TwitterSecuritySettings,
                                                                          client);

            var controller = new TwitterController(authenticator);

            try
            {
                //Act
                var result = await controller.Create(facebookAuthModel);
            }
            catch (SecurityException)
            {
                //Assert
                this.MockTwitterClient.Verify(x => x.PostSecurityRequest(), Times.Never);
            }
        }
Beispiel #4
0
        public async Task <IActionResult> Create([FromBody] TwitterAuthModel user)
        {
            try
            {
                var response = await this.authentication.IsValidUser(user);

                if (response.IsAuthenticated)
                {
                    return(new ObjectResult(response.AccessToken));
                }
                return(BadRequest());
            }
            catch (Exception ex)
            {
                throw new SecurityException(ex.Message);
            }
        }
        public async Task Test_TwitterController_TwitterAuthorizeAttribute_InvalidAPIKey_ReturnsUnauthorizedResult()
        {
            var config = new ConfigurationBuilder()
                         .AddJsonFile("securitySettings.json")
                         .Build();

            // Arrange
            var server = new TestServer(new WebHostBuilder()
                                        .UseConfiguration(config)
                                        .UseStartup <Startup>());
            var client   = server.CreateClient();
            var url      = "/twitter";
            var expected = HttpStatusCode.Unauthorized;

            TwitterAuthModel twitterAuthModel = new TwitterAuthModel
            {
                APIKey = "invalid api key"
            };

            HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(twitterAuthModel));

            // Act
            var response = await client.PostAsync(url, httpContent);

            // Assert
            Assert.Equal(expected, response.StatusCode);

            //Arrange
            httpContent = new StringContent(string.Empty);

            // Act
            response = await client.PostAsync(url, httpContent).ConfigureAwait(false);

            // Assert
            Assert.Equal(expected, response.StatusCode);
        }
        public async Task Test_TwitterController_TwitterAuth_Fail()
        {
            //Arrange

            //Twitter Client returns IsAuthenticated false
            this.MockTwitterClient = this.InitMockTwitterClient(this.SecuritySettings, false);

            TwitterAuthModel facebookAuthModel = new TwitterAuthModel
            {
                APIKey = "<api key>"
            };

            TwitterAuthenticator authenticator = new TwitterAuthenticator(this.SecuritySettings.TwitterSecuritySettings,
                                                                          this.MockTwitterClient.Object);

            var controller = new TwitterController(authenticator);

            //Act
            var result = await controller.Create(facebookAuthModel);

            //Assert
            Assert.IsType <BadRequestResult>(result);
            this.MockTwitterClient.Verify(x => x.PostSecurityRequest(), Times.Once);
        }