diff --git a/src/MusicStore/Controllers/AccountController.cs b/src/MusicStore/Controllers/AccountController.cs index b98da81495..2431928888 100644 --- a/src/MusicStore/Controllers/AccountController.cs +++ b/src/MusicStore/Controllers/AccountController.cs @@ -23,7 +23,7 @@ namespace MusicStore.Controllers // // GET: /Account/Login [AllowAnonymous] - public IActionResult Login(string returnUrl=null) + public IActionResult Login(string returnUrl = null) { ViewBag.ReturnUrl = returnUrl; return View(); @@ -34,7 +34,7 @@ namespace MusicStore.Controllers [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] - public async Task Login(LoginViewModel model, string returnUrl=null) + public async Task Login(LoginViewModel model, string returnUrl = null) { if (ModelState.IsValid) { @@ -93,7 +93,7 @@ namespace MusicStore.Controllers // // GET: /Account/Manage - public IActionResult Manage(ManageMessageId? message=null) + public IActionResult Manage(ManageMessageId? message = null) { ViewBag.StatusMessage = message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed." diff --git a/src/MusicStore/LocalConfig.json b/src/MusicStore/LocalConfig.json index 275809424a..04a1af7dd1 100644 --- a/src/MusicStore/LocalConfig.json +++ b/src/MusicStore/LocalConfig.json @@ -3,10 +3,10 @@ "DefaultAdminPassword": "YouShouldChangeThisPassword1!", "Data": { "DefaultConnection": { - "Connectionstring": "Server=(localdb)\\v11.0;Database=MusicStore7;Trusted_Connection=True;MultipleActiveResultSets=true" + "Connectionstring": "Server=(localdb)\\v11.0;Database=MusicStore;Trusted_Connection=True;MultipleActiveResultSets=true" }, "IdentityConnection": { - "Connectionstring": "Server=(localdb)\\v11.0;Database=MusicStoreIdentity7;Trusted_Connection=True;MultipleActiveResultSets=true" + "Connectionstring": "Server=(localdb)\\v11.0;Database=MusicStoreIdentity;Trusted_Connection=True;MultipleActiveResultSets=true" } } } \ No newline at end of file diff --git a/test/E2ETests/SmokeTests.cs b/test/E2ETests/SmokeTests.cs index ce10910ee4..7184ffe2dc 100644 --- a/test/E2ETests/SmokeTests.cs +++ b/test/E2ETests/SmokeTests.cs @@ -8,11 +8,14 @@ namespace E2ETests { public class SmokeTests { + private string ApplicationBaseUrl = null; + [Theory] [InlineData(HostType.Helios, KreFlavor.DesktopClr, "http://localhost:5001/")] //[InlineData(HostType.SelfHost, KreFlavor.DesktopClr, "http://localhost:5002/")] public void SmokeTestSuite(HostType hostType, KreFlavor kreFlavor, string applicationBaseUrl) { + ApplicationBaseUrl = applicationBaseUrl; var hostProcess = DeploymentUtility.StartApplication(hostType, kreFlavor); try @@ -21,32 +24,127 @@ namespace E2ETests var httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(applicationBaseUrl) }; //Request to base address and check if various parts of the body are rendered - var response = httpClient.GetAsync(string.Empty).Result; - var responseContent = response.Content.ReadAsStringAsync().Result; - Console.WriteLine("Home page content : {0}", responseContent); - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.Contains("ASP.NET MVC Music Store", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.Contains("Register", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.Contains("Login", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.Contains("mvcmusicstore.codeplex.com", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.Contains("/Images/home-showcase.png", responseContent, StringComparison.OrdinalIgnoreCase); - Console.WriteLine("Application initialization successful."); + VerifyHomePage(httpClient); //Making a request to a protected resource should automatically redirect to login page - Console.WriteLine("Trying to access StoreManager without signing in.."); - response = httpClient.GetAsync("/StoreManager/").Result; - responseContent = response.Content.ReadAsStringAsync().Result; - Assert.Contains("

Use a local account to log in.

", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.Equal(applicationBaseUrl + "Account/Login?ReturnUrl=%2FStoreManager%2F", response.RequestMessage.RequestUri.AbsoluteUri); - Console.WriteLine("Redirected to login page as expected."); + AccessStoreWithoutPermissions(httpClient); - //Register a user - Need a way to get the antiforgery token and send it in the request as a form encoded parameter - response = httpClient.GetAsync("/Account/Register").Result; - responseContent = response.Content.ReadAsStringAsync().Result; + //Register a user - Negative scenario where the Password & ConfirmPassword do not match + RegisterUserWithNonMatchingPasswords(httpClient, httpClientHandler); - var generatedUserName = Guid.NewGuid().ToString().Replace("-", string.Empty); - Console.WriteLine("Creating a new user with name '{0}'", generatedUserName); - var formParameters = new List> + //Register a valid user + var generatedUserName = RegisterValidUser(httpClient, httpClientHandler); + + //Register a user - Negative scenario : Trying to register a user name that's already registered. + RegisterExistingUser(httpClient, httpClientHandler, generatedUserName); + + //Logout from this user session - This should take back to the home page + SignOutUser(httpClient, httpClientHandler, generatedUserName); + + //Sign in scenarios: Invalid password - Expected an invalid user name password error. + SignInWithInvalidPassword(httpClient, httpClientHandler, generatedUserName); + + //Sign in scenarios: Valid user name & password. + SignInWithUser(httpClient, httpClientHandler, generatedUserName, "Password~1"); + + //Change password scenario + ChangePassword(httpClient, httpClientHandler, generatedUserName); + + //Making a request to a protected resource that this user does not have access to - should automatically redirect to login page again + AccessStoreWithoutPermissions(httpClient, generatedUserName); + + //Logout from this user session - This should take back to the home page + SignOutUser(httpClient, httpClientHandler, generatedUserName); + + //Login as an admin user + SignInWithUser(httpClient, httpClientHandler, "Administrator", "YouShouldChangeThisPassword1!"); + + //Now navigating to the store manager should work fine as this user has the necessary permission to administer the store. + AccessStoreWithPermissions(httpClient); + + //Create an album + CreateAlbum(httpClient, httpClientHandler); + + //Logout from this user session - This should take back to the home page + SignOutUser(httpClient, httpClientHandler, "Administrator"); + } + finally + { + //Shutdown the host process + hostProcess.Kill(); + } + } + + private void VerifyHomePage(HttpClient httpClient) + { + var response = httpClient.GetAsync(string.Empty).Result; + var responseContent = response.Content.ReadAsStringAsync().Result; + Console.WriteLine("Home page content : {0}", responseContent); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Contains("ASP.NET MVC Music Store", responseContent, StringComparison.OrdinalIgnoreCase); + Assert.Contains("
  • Home
  • ", responseContent, StringComparison.OrdinalIgnoreCase); + Assert.Contains("Store ", responseContent, StringComparison.OrdinalIgnoreCase); + Assert.Contains("