public async Task Error_page_then_apply_migrations() { TestServer server = SetupTestServer <BloggingContextWithMigrations, ApplyMigrationsMiddleware>(); var client = server.CreateClient(); var expectedMigrationsEndpoint = "/ApplyDatabaseMigrations"; var expectedContextType = typeof(BloggingContextWithMigrations).AssemblyQualifiedName; // Step One: Initial request with database failure HttpResponseMessage response = await client.GetAsync("http://localhost/"); Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); var content = await response.Content.ReadAsStringAsync(); // Ensure the url we're going to test is what the page is using in it's JavaScript var javaScriptEncoder = new JavaScriptStringEncoder(); Assert.Contains("req.open(\"POST\", \"" + JavaScriptEncode(expectedMigrationsEndpoint) + "\", true);", content); Assert.Contains("var formBody = \"context=" + JavaScriptEncode(UrlEncode(expectedContextType)) + "\";", content); // Step Two: Request to migrations endpoint var formData = new FormUrlEncodedContent(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("context", expectedContextType) }); response = await client.PostAsync("http://localhost" + expectedMigrationsEndpoint, formData); content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); // Step Three: Successful request after migrations applied response = await client.GetAsync("http://localhost/"); content = await response.Content.ReadAsStringAsync(); Assert.Equal("Saved a Blog", content); }
public string JavaScriptEncode(string content) { return(JavaScriptStringEncoder.JavaScriptStringEncode(content)); }