public async Task Should_Get_Meal_Index_With_Filter() { _fixture.StartScope(); // Arrange-TestAccount var testAccount = (TestAccountProvider)_fixture.GetService <ICurrentAccountProvider>(); { // Arrange-Account var request = new Api.Features.Account.Create.Request { Email = _fixture.GetEmail(), Password = Guid.NewGuid().ToString() }; await _fixture.SendAsync(request); testAccount.Id = (await _fixture.ExecuteDbContextAsync(db => db.Accounts.SingleOrDefaultAsync(x => x.Email == request.Email))).Id; } { // Arrange-AccountSetting var request = new Api.Features.Account.UpdateSetting.Request { TargetCalories = 10 }; await _fixture.SendAsync(request); } { // Arrange-MealList var request = new Create.Request { Date = DateTime.UtcNow.Date, Time = "11:11", Text = "string", Calories = 3 }; await _fixture.SendAsync(request); request.Text = "string"; await _fixture.SendAsync(request); request.Text = "string1"; await _fixture.SendAsync(request); request.Text = "OverCalories"; // Now => 3+3+3+3 > 10 await _fixture.SendAsync(request); request.Date = request.Date.AddDays(1); // This will be used to create complex query request.Text = "New Day"; await _fixture.SendAsync(request); // Act var count = await _fixture.CountAsync <Meal>(); // Assert Assert.Equal(5, count); } { // Single Result Test // Arrange var request = new Index.Request { Filter = "CalorieStatus = 'false'" }; // Act var response = await _fixture.SendAsync(request); // Assert Assert.NotNull(response); Assert.Single(response.Items); Assert.Equal("11:11", response.Items.First().Time); Assert.Equal("OverCalories", response.Items.First().Text); } { // Multiple Result Test With Single Filter // Arrange var request = new Index.Request { Filter = "CalorieStatus = 'true'" }; // Act var response = await _fixture.SendAsync(request); // Assert Assert.NotNull(response); Assert.Equal(4, response.Items.Count); } { // Multiple Result Test With Multiple Filter // Arrange var request = new Index.Request { Filter = "(CalorieStatus = 'false') or (Text eq 'string')" }; // Act var response = await _fixture.SendAsync(request); // Assert Assert.NotNull(response); // 2 item by Text = 'string' + 1 item by CalorieStatus = 'false' Assert.Equal(3, response.Items.Count); Assert.Contains(response.Items, x => x.Text.Equals("string")); Assert.Contains(response.Items, x => x.Text.Equals("OverCalories")); } { // Single Result Test With Complex Multiple Filter // Arrange var request = new Index.Request { Filter = $"(CalorieStatus = 'true' or Text = 'New Day') AnD Date = '{DateTime.UtcNow.Date}'" }; // Act var response = await _fixture.SendAsync(request); // Assert Assert.NotNull(response); Assert.Equal(3, response.Items.Count); // Because of date expression Assert.DoesNotContain(response.Items, x => x.Text.Equals("New Day")); // Because of CalorieStatus expression // Even if first part of the expression matches this item, second part eliminated it Assert.DoesNotContain(response.Items, x => x.Text.Equals("OverCalories")); Assert.DoesNotContain(response.Items, x => x.CalorieStatus.Equals(false)); } }
public async Task Should_Get_Meal_Index_Without_Filter() { _fixture.StartScope(); // Arrange-TestAccount var testAccount = (TestAccountProvider)_fixture.GetService <ICurrentAccountProvider>(); { // Arrange-Account var request = new Api.Features.Account.Create.Request { Email = _fixture.GetEmail(), Password = Guid.NewGuid().ToString() }; await _fixture.SendAsync(request); testAccount.Id = (await _fixture.ExecuteDbContextAsync(db => db.Accounts.SingleOrDefaultAsync(x => x.Email == request.Email))).Id; } { // Arrange-AccountSetting var request = new Api.Features.Account.UpdateSetting.Request { TargetCalories = 10 }; await _fixture.SendAsync(request); } { // Arrange-MealList var request = new Create.Request { Date = DateTime.UtcNow.Date, Time = "11:11", Text = "string", Calories = 3 }; await _fixture.SendAsync(request); request.Date = request.Date.AddDays(1); request.Text = "string"; await _fixture.SendAsync(request); request.Date = request.Date.AddDays(1); request.Text = "string1"; await _fixture.SendAsync(request); request.Date = request.Date.AddDays(1); request.Text = "string1"; await _fixture.SendAsync(request); // Act var count = await _fixture.CountAsync <Meal>(); // Assert Assert.Equal(4, count); } { // Arrange var request = new Index.Request { PageSize = 100 }; // Act var response = await _fixture.SendAsync(request); // Assert Assert.NotNull(response); Assert.Equal(4, response.Items.Count); } }