From 2ce9fcc2333ef889aedb5a31554e26a013fc314c Mon Sep 17 00:00:00 2001 From: Chris R Date: Thu, 3 Dec 2015 11:11:48 -0800 Subject: [PATCH] Fix facebook tests. --- MusicStore.sln | 56 +++++++++++++++++++ NuGet.config | 1 - .../FacebookMockBackChannelHttpHandler.cs | 29 ++++++---- src/MusicStore/wwwroot/web.config | 29 +++++----- .../Implementation/FacebookLoginScenarios.cs | 2 +- 5 files changed, 92 insertions(+), 25 deletions(-) diff --git a/MusicStore.sln b/MusicStore.sln index 2c4d82c56d..d46ebebd0c 100644 --- a/MusicStore.sln +++ b/MusicStore.sln @@ -21,6 +21,55 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MusicStore", "src\MusicStor EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MusicStore.Test", "test\MusicStore.Test\MusicStore.Test.xproj", "{CA663205-77DE-4E55-B300-85594181B5A9}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mocks", "Mocks", "{D7CB3341-F932-4AC6-8F4E-EDC62F03C064}" + ProjectSection(SolutionItems) = preProject + shared\Mocks\Readme.md = shared\Mocks\Readme.md + shared\Mocks\StartupOpenIdConnectTesting.cs = shared\Mocks\StartupOpenIdConnectTesting.cs + shared\Mocks\StartupSocialTesting.cs = shared\Mocks\StartupSocialTesting.cs + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Facebook", "Facebook", "{B53E1D6D-4A18-4AA2-BE59-146D6B7F310D}" + ProjectSection(SolutionItems) = preProject + shared\Mocks\Facebook\FacebookMockBackChannelHttpHandler.cs = shared\Mocks\Facebook\FacebookMockBackChannelHttpHandler.cs + shared\Mocks\Facebook\TestFacebookEvents.cs = shared\Mocks\Facebook\TestFacebookEvents.cs + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{E839AEB0-7926-4FEE-B22C-11AF7EF5D4BF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{78715843-B625-414E-9074-56908C48EF28}" + ProjectSection(SolutionItems) = preProject + shared\Mocks\Common\CustomStateDataFormat.cs = shared\Mocks\Common\CustomStateDataFormat.cs + shared\Mocks\Common\Helpers.cs = shared\Mocks\Common\Helpers.cs + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Google", "Google", "{A6D34706-33E8-45D4-9E3D-8EB8C9EAD9B2}" + ProjectSection(SolutionItems) = preProject + shared\Mocks\Google\GoogleMockBackChannelHttpHandler.cs = shared\Mocks\Google\GoogleMockBackChannelHttpHandler.cs + shared\Mocks\Google\TestGoogleEvents.cs = shared\Mocks\Google\TestGoogleEvents.cs + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MicrosoftAccount", "MicrosoftAccount", "{86DDEB7E-F29D-41BD-9866-65EB01A8CFED}" + ProjectSection(SolutionItems) = preProject + shared\Mocks\MicrosoftAccount\MicrosoftAccountMockBackChannelHandler.cs = shared\Mocks\MicrosoftAccount\MicrosoftAccountMockBackChannelHandler.cs + shared\Mocks\MicrosoftAccount\TestMicrosoftAccountEvents.cs = shared\Mocks\MicrosoftAccount\TestMicrosoftAccountEvents.cs + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenIdConnect", "OpenIdConnect", "{B76F2C95-C066-4CAB-AA2B-287FA039C786}" + ProjectSection(SolutionItems) = preProject + shared\Mocks\OpenIdConnect\CustomStringDataFormat.cs = shared\Mocks\OpenIdConnect\CustomStringDataFormat.cs + shared\Mocks\OpenIdConnect\keys.json = shared\Mocks\OpenIdConnect\keys.json + shared\Mocks\OpenIdConnect\openid-configuration.json = shared\Mocks\OpenIdConnect\openid-configuration.json + shared\Mocks\OpenIdConnect\OpenIdConnectBackChannelHttpHandler.cs = shared\Mocks\OpenIdConnect\OpenIdConnectBackChannelHttpHandler.cs + shared\Mocks\OpenIdConnect\TestOpenIdConnectEvents.cs = shared\Mocks\OpenIdConnect\TestOpenIdConnectEvents.cs + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Twitter", "Twitter", "{6CA9AC03-039E-4993-8164-C27E418683C5}" + ProjectSection(SolutionItems) = preProject + shared\Mocks\Twitter\CustomTwitterStateDataFormat.cs = shared\Mocks\Twitter\CustomTwitterStateDataFormat.cs + shared\Mocks\Twitter\TestTwitterEvents.cs = shared\Mocks\Twitter\TestTwitterEvents.cs + shared\Mocks\Twitter\TwitterMockBackChannelHttpHandler.cs = shared\Mocks\Twitter\TwitterMockBackChannelHttpHandler.cs + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -71,5 +120,12 @@ Global {A319ACCE-060B-4385-9534-9F2202F6180E} = {363D2681-31A6-48C9-90BB-9ACFF4A41F06} {3CFBED5D-2ED8-49DB-96FB-BDAA748DC5A0} = {B7B176B6-8D4D-4EF1-BBD2-DDA650C78FFF} {CA663205-77DE-4E55-B300-85594181B5A9} = {363D2681-31A6-48C9-90BB-9ACFF4A41F06} + {D7CB3341-F932-4AC6-8F4E-EDC62F03C064} = {E839AEB0-7926-4FEE-B22C-11AF7EF5D4BF} + {B53E1D6D-4A18-4AA2-BE59-146D6B7F310D} = {D7CB3341-F932-4AC6-8F4E-EDC62F03C064} + {78715843-B625-414E-9074-56908C48EF28} = {D7CB3341-F932-4AC6-8F4E-EDC62F03C064} + {A6D34706-33E8-45D4-9E3D-8EB8C9EAD9B2} = {D7CB3341-F932-4AC6-8F4E-EDC62F03C064} + {86DDEB7E-F29D-41BD-9866-65EB01A8CFED} = {D7CB3341-F932-4AC6-8F4E-EDC62F03C064} + {B76F2C95-C066-4CAB-AA2B-287FA039C786} = {D7CB3341-F932-4AC6-8F4E-EDC62F03C064} + {6CA9AC03-039E-4993-8164-C27E418683C5} = {D7CB3341-F932-4AC6-8F4E-EDC62F03C064} EndGlobalSection EndGlobal diff --git a/NuGet.config b/NuGet.config index a6026c9cf9..5500f6d507 100644 --- a/NuGet.config +++ b/NuGet.config @@ -3,6 +3,5 @@ - diff --git a/shared/Mocks/Facebook/FacebookMockBackChannelHttpHandler.cs b/shared/Mocks/Facebook/FacebookMockBackChannelHttpHandler.cs index 45e1b3b28b..8d8c55e587 100644 --- a/shared/Mocks/Facebook/FacebookMockBackChannelHttpHandler.cs +++ b/shared/Mocks/Facebook/FacebookMockBackChannelHttpHandler.cs @@ -1,4 +1,6 @@ #if TESTING +using System; +using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -16,23 +18,29 @@ namespace MusicStore.Mocks.Facebook protected async override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var response = new HttpResponseMessage(); - var queryParameters = new QueryCollection(QueryHelpers.ParseQuery(request.RequestUri.Query)); - if (request.RequestUri.AbsoluteUri.StartsWith("https://graph.facebook.com/v2.2/oauth/access_token")) + if (request.RequestUri.AbsoluteUri.StartsWith("https://graph.facebook.com/v2.5/oauth/access_token")) { - if (queryParameters["grant_type"] == "authorization_code") + var formData = new FormCollection(await FormReader.ReadFormAsync(await request.Content.ReadAsStreamAsync())); + if (formData["grant_type"] == "authorization_code") { - if (queryParameters["code"] == "ValidCode") + if (formData["code"] == "ValidCode") { - Helpers.ThrowIfConditionFailed(() => ((string)queryParameters["redirect_uri"]).EndsWith("signin-facebook"), "Redirect URI is not ending with /signin-facebook"); - Helpers.ThrowIfConditionFailed(() => queryParameters["client_id"] == "[AppId]", "Invalid client Id received"); - Helpers.ThrowIfConditionFailed(() => queryParameters["client_secret"] == "[AppSecret]", "Invalid client secret received"); - response.Content = new StringContent("access_token=ValidAccessToken&expires=100"); + Helpers.ThrowIfConditionFailed(() => ((string)formData["redirect_uri"]).EndsWith("signin-facebook"), "Redirect URI is not ending with /signin-facebook"); + Helpers.ThrowIfConditionFailed(() => formData["client_id"] == "[AppId]", "Invalid client Id received"); + Helpers.ThrowIfConditionFailed(() => formData["client_secret"] == "[AppSecret]", "Invalid client secret received"); + response.Content = new StringContent("{ \"access_token\": \"ValidAccessToken\", \"expires_in\": \"100\" }"); } + else + { + response.StatusCode = (HttpStatusCode)400; + } + return response; } } - else if (request.RequestUri.AbsoluteUri.StartsWith("https://graph.facebook.com/v2.2/me")) + else if (request.RequestUri.AbsoluteUri.StartsWith("https://graph.facebook.com/v2.5/me")) { + var queryParameters = new QueryCollection(QueryHelpers.ParseQuery(request.RequestUri.Query)); Helpers.ThrowIfConditionFailed(() => queryParameters["appsecret_proof"].Count > 0, "appsecret_proof is empty"); if (queryParameters["access_token"] == "ValidAccessToken") { @@ -42,9 +50,10 @@ namespace MusicStore.Mocks.Facebook { response.Content = new StringContent("{\"error\":{\"message\":\"Invalid OAuth access token.\",\"type\":\"OAuthException\",\"code\":190}}"); } + return response; } - return await Task.FromResult(response); + throw new NotImplementedException(request.RequestUri.AbsoluteUri); } } } diff --git a/src/MusicStore/wwwroot/web.config b/src/MusicStore/wwwroot/web.config index c56d5b7976..4f95c98da3 100644 --- a/src/MusicStore/wwwroot/web.config +++ b/src/MusicStore/wwwroot/web.config @@ -1,16 +1,19 @@  - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/E2ETests/Implementation/FacebookLoginScenarios.cs b/test/E2ETests/Implementation/FacebookLoginScenarios.cs index 035c950be6..0bdacd0c29 100644 --- a/test/E2ETests/Implementation/FacebookLoginScenarios.cs +++ b/test/E2ETests/Implementation/FacebookLoginScenarios.cs @@ -30,7 +30,7 @@ namespace E2ETests var content = new FormUrlEncodedContent(formParameters.ToArray()); response = await _httpClient.PostAsync("Account/ExternalLogin", content); - Assert.Equal("https://www.facebook.com/v2.2/dialog/oauth", response.Headers.Location.AbsoluteUri.Replace(response.Headers.Location.Query, string.Empty)); + Assert.Equal("https://www.facebook.com/v2.5/dialog/oauth", response.Headers.Location.AbsoluteUri.Replace(response.Headers.Location.Query, string.Empty)); var queryItems = new QueryCollection(QueryHelpers.ParseQuery(response.Headers.Location.Query)); Assert.Equal("code", queryItems["response_type"]); Assert.Equal("[AppId]", queryItems["client_id"]);