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