fix some issue and cover by test (#669)

This commit is contained in:
Cédric Michel
2022-01-25 16:50:15 +01:00
committed by GitHub
parent 6847cdaa0c
commit 87ae6c618c
14 changed files with 268 additions and 81 deletions

View File

@@ -1,10 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;
@@ -54,35 +49,65 @@ public class AccountControllerSignIn : IClassFixture<TestApplication>
response.EnsureSuccessStatusCode();
var stringResponse = await response.Content.ReadAsStringAsync();
string token = GetRequestVerificationToken(stringResponse);
string token = WebPageHelpers.GetRequestVerificationToken(stringResponse);
Assert.True(token.Length > 50);
}
private string GetRequestVerificationToken(string input)
{
string regexpression = @"name=""__RequestVerificationToken"" type=""hidden"" value=""([-A-Za-z0-9+=/\\_]+?)""";
var regex = new Regex(regexpression);
var match = regex.Match(input);
return match.Groups.Values.LastOrDefault().Value;
}
[Fact]
public async Task ReturnsSuccessfulSignInOnPostWithValidCredentials()
{
var getResponse = await Client.GetAsync("/identity/account/login");
getResponse.EnsureSuccessStatusCode();
var stringResponse1 = await getResponse.Content.ReadAsStringAsync();
string token = GetRequestVerificationToken(stringResponse1);
var keyValues = new List<KeyValuePair<string, string>>();
keyValues.Add(new KeyValuePair<string, string>("Email", "demouser@microsoft.com"));
keyValues.Add(new KeyValuePair<string, string>("Password", "Pass@word1"));
keyValues.Add(new KeyValuePair<string, string>("__RequestVerificationToken", token));
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Email", "demouser@microsoft.com"),
new KeyValuePair<string, string>("Password", "Pass@word1"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(stringResponse1))
};
var formContent = new FormUrlEncodedContent(keyValues);
var postResponse = await Client.PostAsync("/identity/account/login", formContent);
Assert.Equal(HttpStatusCode.Redirect, postResponse.StatusCode);
Assert.Equal(new System.Uri("/", UriKind.Relative), postResponse.Headers.Location);
}
[Fact]
public async Task UpdatePhoneNumberProfile()
{
//Login
var getResponse = await Client.GetAsync("/identity/account/login");
getResponse.EnsureSuccessStatusCode();
var stringResponse1 = await getResponse.Content.ReadAsStringAsync();
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Email", "demouser@microsoft.com"),
new KeyValuePair<string, string>("Password", "Pass@word1"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(stringResponse1))
};
var formContent = new FormUrlEncodedContent(keyValues);
await Client.PostAsync("/identity/account/login", formContent);
//Profile page
var profileResponse = await Client.GetAsync("/manage/my-account");
profileResponse.EnsureSuccessStatusCode();
var stringProfileResponse = await profileResponse.Content.ReadAsStringAsync();
//Update phone number
var updateProfileValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Email", "demouser@microsoft.com"),
new KeyValuePair<string, string>("PhoneNumber", "03656565"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(stringProfileResponse))
};
var updateProfileContent = new FormUrlEncodedContent(updateProfileValues);
var postProfileResponse = await Client.PostAsync("/manage/my-account", updateProfileContent);
Assert.Equal(HttpStatusCode.Redirect, postProfileResponse.StatusCode);
var profileResponse2 = await Client.GetAsync("/manage/my-account");
var stringProfileResponse2 = await profileResponse2.Content.ReadAsStringAsync();
Assert.Contains("03656565", stringProfileResponse2);
}
}

View File

@@ -1,13 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.eShopWeb.FunctionalTests.Web;
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;
namespace Microsoft.eShopWeb.FunctionalTests.WebRazorPages;
namespace Microsoft.eShopWeb.FunctionalTests.Web.Pages.Basket;
[Collection("Sequential")]
public class BasketPageCheckout : IClassFixture<TestApplication>
@@ -22,45 +16,32 @@ public class BasketPageCheckout : IClassFixture<TestApplication>
public HttpClient Client { get; }
private string GetRequestVerificationToken(string input)
{
string regexpression = @"name=""__RequestVerificationToken"" type=""hidden"" value=""([-A-Za-z0-9+=/\\_]+?)""";
var regex = new Regex(regexpression);
var match = regex.Match(input);
return match.Groups.Values.LastOrDefault().Value;
}
[Fact]
public async Task RedirectsToLoginIfNotAuthenticated()
{
// Arrange & Act
// Load Home Page
var response = await Client.GetAsync("/");
response.EnsureSuccessStatusCode();
var stringResponse1 = await response.Content.ReadAsStringAsync();
string token = GetRequestVerificationToken(stringResponse1);
string token = WebPageHelpers.GetRequestVerificationToken(stringResponse1);
// Add Item to Cart
var keyValues = new List<KeyValuePair<string, string>>();
keyValues.Add(new KeyValuePair<string, string>("id", "2"));
keyValues.Add(new KeyValuePair<string, string>("name", "shirt"));
keyValues.Add(new KeyValuePair<string, string>("price", "19.49"));
keyValues.Add(new KeyValuePair<string, string>("__RequestVerificationToken", token));
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("id", "2"),
new KeyValuePair<string, string>("name", "shirt"),
new KeyValuePair<string, string>("price", "19.49"),
new KeyValuePair<string, string>("__RequestVerificationToken", token)
};
var formContent = new FormUrlEncodedContent(keyValues);
var postResponse = await Client.PostAsync("/basket/index", formContent);
postResponse.EnsureSuccessStatusCode();
var stringResponse = await postResponse.Content.ReadAsStringAsync();
// Assert
Assert.Contains(".NET Black &amp; White Mug", stringResponse);
keyValues.Clear();
keyValues.Add(new KeyValuePair<string, string>("__RequestVerificationToken", token));
formContent = new FormUrlEncodedContent(keyValues);
var postResponse2 = await Client.PostAsync("/Basket/Checkout", formContent);

View File

@@ -0,0 +1,68 @@
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;
namespace Microsoft.eShopWeb.FunctionalTests.Web.Pages.Basket;
[Collection("Sequential")]
public class CheckoutTest : IClassFixture<TestApplication>
{
public CheckoutTest(TestApplication factory)
{
Client = factory.CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = true
});
}
public HttpClient Client { get; }
[Fact]
public async Task SucessfullyPay()
{
// Load Home Page
var response = await Client.GetAsync("/");
response.EnsureSuccessStatusCode();
var stringResponse = await response.Content.ReadAsStringAsync();
// Add Item to Cart
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("id", "2"),
new KeyValuePair<string, string>("name", "shirt"),
new KeyValuePair<string, string>("price", "19.49"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(stringResponse))
};
var formContent = new FormUrlEncodedContent(keyValues);
var postResponse = await Client.PostAsync("/basket/index", formContent);
postResponse.EnsureSuccessStatusCode();
var stringPostResponse = await postResponse.Content.ReadAsStringAsync();
Assert.Contains(".NET Black &amp; White Mug", stringPostResponse);
//Load login page
var loginResponse = await Client.GetAsync("/Identity/Account/Login");
var longinKeyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("email", "demouser@microsoft.com"),
new KeyValuePair<string, string>("password", "Pass@word1"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(await loginResponse.Content.ReadAsStringAsync()))
};
var loginFormContent = new FormUrlEncodedContent(longinKeyValues);
var loginPostResponse = await Client.PostAsync("/Identity/Account/Login?ReturnUrl=%2FBasket%2FCheckout", loginFormContent);
var loginStringResponse = await loginPostResponse.Content.ReadAsStringAsync();
//Basket checkout (Pay now)
var checkOutKeyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Items[0].Id", "2"),
new KeyValuePair<string, string>("Items[0].Quantity", "1"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(loginStringResponse))
};
var checkOutContent = new FormUrlEncodedContent(checkOutKeyValues);
var checkOutResponse = await Client.PostAsync("/basket/checkout", checkOutContent);
var stringCheckOutResponse = await checkOutResponse.Content.ReadAsStringAsync();
Assert.Contains("/Basket/Success", checkOutResponse.RequestMessage.RequestUri.ToString());
Assert.Contains("Thanks for your Order!", stringCheckOutResponse);
}
}

View File

@@ -0,0 +1,100 @@
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;
namespace Microsoft.eShopWeb.FunctionalTests.Web.Pages.Basket;
[Collection("Sequential")]
public class IndexTest : IClassFixture<TestApplication>
{
public IndexTest(TestApplication factory)
{
Client = factory.CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = true
});
}
public HttpClient Client { get; }
[Fact]
public async Task OnPostUpdateTo50Successfully()
{
// Load Home Page
var response = await Client.GetAsync("/");
response.EnsureSuccessStatusCode();
var stringResponse1 = await response.Content.ReadAsStringAsync();
string token = WebPageHelpers.GetRequestVerificationToken(stringResponse1);
// Add Item to Cart
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("id", "2"),
new KeyValuePair<string, string>("name", "shirt"),
new KeyValuePair<string, string>("price", "19.49"),
new KeyValuePair<string, string>("__RequestVerificationToken", token)
};
var formContent = new FormUrlEncodedContent(keyValues);
var postResponse = await Client.PostAsync("/basket/index", formContent);
postResponse.EnsureSuccessStatusCode();
var stringResponse = await postResponse.Content.ReadAsStringAsync();
Assert.Contains(".NET Black &amp; White Mug", stringResponse);
//Update
var updateKeyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Items[0].Id", WebPageHelpers.GetId(stringResponse)),
new KeyValuePair<string, string>("Items[0].Quantity", "50"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(stringResponse))
};
var updateContent = new FormUrlEncodedContent(updateKeyValues);
var updateResponse = await Client.PostAsync("/basket/update", updateContent);
var stringUpdateResponse = await updateResponse.Content.ReadAsStringAsync();
Assert.Contains("/basket/update", updateResponse.RequestMessage.RequestUri.ToString());
Assert.Contains("974.50", stringUpdateResponse);
}
[Fact]
public async Task OnPostUpdateTo0EmptyBasket()
{
// Load Home Page
var response = await Client.GetAsync("/");
response.EnsureSuccessStatusCode();
var stringResponse1 = await response.Content.ReadAsStringAsync();
string token = WebPageHelpers.GetRequestVerificationToken(stringResponse1);
// Add Item to Cart
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("id", "2"),
new KeyValuePair<string, string>("name", "shirt"),
new KeyValuePair<string, string>("price", "19.49"),
new KeyValuePair<string, string>("__RequestVerificationToken", token)
};
var formContent = new FormUrlEncodedContent(keyValues);
var postResponse = await Client.PostAsync("/basket/index", formContent);
postResponse.EnsureSuccessStatusCode();
var stringResponse = await postResponse.Content.ReadAsStringAsync();
Assert.Contains(".NET Black &amp; White Mug", stringResponse);
//Update
var updateKeyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Items[0].Id", WebPageHelpers.GetId(stringResponse)),
new KeyValuePair<string, string>("Items[0].Quantity", "0"),
new KeyValuePair<string, string>(WebPageHelpers.TokenTag, WebPageHelpers.GetRequestVerificationToken(stringResponse))
};
var updateContent = new FormUrlEncodedContent(updateKeyValues);
var updateResponse = await Client.PostAsync("/basket/update", updateContent);
var stringUpdateResponse = await updateResponse.Content.ReadAsStringAsync();
Assert.Contains("/basket/update", updateResponse.RequestMessage.RequestUri.ToString());
Assert.Contains("Basket is empty", stringUpdateResponse);
}
}

View File

@@ -0,0 +1,27 @@
using System.Text.RegularExpressions;
namespace Microsoft.eShopWeb.FunctionalTests.Web;
public static class WebPageHelpers
{
public static string TokenTag = "__RequestVerificationToken";
public static string GetRequestVerificationToken(string input)
{
string regexpression = @"name=""__RequestVerificationToken"" type=""hidden"" value=""([-A-Za-z0-9+=/\\_]+?)""";
return RegexSearch(regexpression, input);
}
public static string GetId(string input)
{
string regexpression = @"name=""Items\[0\].Id"" value=""(\d)""";
return RegexSearch(regexpression, input);
}
private static string RegexSearch(string regexpression, string input)
{
var regex = new Regex(regexpression);
var match = regex.Match(input);
return match.Groups.Values.LastOrDefault().Value;
}
}