Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }