public async Task FiltersWithCustomQueryFiltersEquals() { // Arrange var user = _userFaker.Generate(); var firstUsernameCharacter = user.Username[0]; _context.Users.Add(user); _context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/users?filter[firstCharacter]=eq:{firstUsernameCharacter}"; var request = new HttpRequestMessage(httpMethod, route); // @TODO - Use fixture var builder = new WebHostBuilder().UseStartup <Startup>(); var server = new TestServer(builder); var client = server.CreateClient(); // Act var response = await client.SendAsync(request); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = _fixture.GetDeserializer().DeserializeList <User>(body).Data; Assert.True(deserializedBody.All(u => u.Username[0] == firstUsernameCharacter)); }
public async Task Can_Fetch_Many_To_Many_Through_All() { // Arrange var context = _fixture.GetService <AppDbContext>(); var article = _articleFaker.Generate(); var tag = _tagFaker.Generate(); context.Articles.RemoveRange(context.Articles); await context.SaveChangesAsync(); var articleTag = new ArticleTag(context) { Article = article, Tag = tag }; context.ArticleTags.Add(articleTag); await context.SaveChangesAsync(); var route = "/api/v1/articles?include=tags"; // @TODO - Use fixture var builder = new WebHostBuilder() .UseStartup <TestStartup>(); var server = new TestServer(builder); var client = server.CreateClient(); // Act var response = await client.GetAsync(route); // Assert var body = await response.Content.ReadAsStringAsync(); Assert.True(HttpStatusCode.OK == response.StatusCode, $"{route} returned {response.StatusCode} status code with payload: {body}"); var document = JsonConvert.DeserializeObject <Document>(body); Assert.NotEmpty(document.Included); var articleResponseList = _fixture.GetDeserializer().DeserializeList <Article>(body).Data; Assert.NotNull(articleResponseList); var articleResponse = articleResponseList.FirstOrDefault(a => a.Id == article.Id); Assert.NotNull(articleResponse); Assert.Equal(article.Name, articleResponse.Name); var tagResponse = Assert.Single(articleResponse.Tags); Assert.Equal(tag.Id, tagResponse.Id); Assert.Equal(tag.Name, tagResponse.Name); }
public async Task Can_Get_TodoItems_Paginate_Check() { // Arrange await _context.ClearTableAsync <TodoItem>(); await _context.SaveChangesAsync(); var expectedResourcesPerPage = _fixture.GetRequiredService <IJsonApiOptions>().DefaultPageSize.Value; var person = new Person(); var todoItems = _todoItemFaker.Generate(expectedResourcesPerPage + 1); foreach (var todoItem in todoItems) { todoItem.Owner = person; _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync(); } var httpMethod = new HttpMethod("GET"); var route = "/api/v1/todoItems"; var request = new HttpRequestMessage(httpMethod, route); // Act var response = await _fixture.Client.SendAsync(request); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = _fixture.GetDeserializer().DeserializeMany <TodoItem>(body).Data; // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotEmpty(deserializedBody); Assert.True(deserializedBody.Count <= expectedResourcesPerPage, $"There are more items on the page than the default page size. {deserializedBody.Count} > {expectedResourcesPerPage}"); }
public async Task Can_Create_User_With_Password() { // Arrange var user = _userFaker.Generate(); var serializer = _fixture.GetSerializer <User>(p => new { p.Password, p.Username }); var httpMethod = new HttpMethod("POST"); var route = $"/api/v1/users"; var request = new HttpRequestMessage(httpMethod, route); request.Content = new StringContent(serializer.Serialize(user)); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json"); // Act var response = await _fixture.Client.SendAsync(request); // Assert Assert.Equal(HttpStatusCode.Created, response.StatusCode); // response assertions var body = await response.Content.ReadAsStringAsync(); var returnedUser = _fixture.GetDeserializer().DeserializeSingle <User>(body).Data; var document = JsonConvert.DeserializeObject <Document>(body); Assert.False(document.SingleData.Attributes.ContainsKey("password")); Assert.Equal(user.Username, document.SingleData.Attributes["username"]); // db assertions var dbUser = await _context.Users.FindAsync(returnedUser.Id); Assert.Equal(user.Username, dbUser.Username); Assert.Equal(user.Password, dbUser.Password); }
public async Task Can_Fetch_Many_To_Many_Through_Id() { // Arrange var context = _fixture.GetRequiredService <AppDbContext>(); var article = _articleFaker.Generate(); var tag = _tagFaker.Generate(); var articleTag = new ArticleTag { Article = article, Tag = tag }; context.ArticleTags.Add(articleTag); await context.SaveChangesAsync(); var route = $"/api/v1/articles/{article.Id}/tags"; // @TODO - Use fixture var builder = WebHost.CreateDefaultBuilder() .UseStartup <TestStartup>(); var server = new TestServer(builder); var client = server.CreateClient(); // Act var response = await client.GetAsync(route); // Assert var body = await response.Content.ReadAsStringAsync(); Assert.True(HttpStatusCode.OK == response.StatusCode, $"{route} returned {response.StatusCode} status code with payload: {body}"); var document = JsonConvert.DeserializeObject <Document>(body); Assert.Single(document.ManyData); var tagResponse = _fixture.GetDeserializer().DeserializeMany <Tag>(body).Data.First(); Assert.NotNull(tagResponse); Assert.Equal(tag.Id, tagResponse.Id); Assert.Equal(tag.Name, tagResponse.Name); }