committed by
GitHub
14 changed files with 268 additions and 81 deletions
@ -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 & 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); |
|||
} |
|||
} |
|||
@ -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 & 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 & 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); |
|||
|
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue