Example #1
0
        public async Task Should_Update_Meal()
        {
            _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;
            }

            Guid id;
            {
                // Arrange-Meal-To-Update
                var request = new Create.Request
                {
                    Date     = DateTime.UtcNow.Date,
                    Time     = "11:11",
                    Text     = "string",
                    Calories = 3
                };
                var response = await _fixture.SendAsync(request);

                id = response.Id;
            }

            {
                // Arrange
                var request = new Update.Request
                {
                    Id       = id,
                    Date     = DateTime.UtcNow.Date.AddDays(1),
                    Time     = "11:15",
                    Text     = "Another String",
                    Calories = 22
                };

                // Act
                await _fixture.SendAsync(request);

                var meal =
                    await _fixture.ExecuteDbContextAsync(db => db.Meals.SingleOrDefaultAsync(x => x.Id == id));

                // Assert
                Assert.Equal(request.Date.ToShortDateString(), meal.Date.ToShortDateString());
                Assert.Equal(request.Time, meal.Time.ToShortTimeString());
                Assert.Equal(request.Text, meal.Text);
                Assert.Equal(request.Calories, meal.Calories);
                Assert.False(meal.CalorieStatus);
                Assert.Equal(testAccount.Id, meal.AccountId);
            }
        }
Example #2
0
        public async Task Throws_Update_Exception_If_Sender_Is_Not_Meal_Owner()
        {
            _fixture.StartScope();

            // Arrange-TestAccount(RegularUser)
            var testAccount = (TestAccountProvider)_fixture.GetService <ICurrentAccountProvider>();

            testAccount.Role = Role.RegularUser;

            {   // 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;
            }

            // This is created by another Account
            var createRequest = new Create.Request
            {
                Date     = DateTime.UtcNow.Date,
                Time     = "11:11",
                Text     = "string",
                Calories = 3
            };
            var createResponse = await _fixture.SendAsync(createRequest);

            {   // Arrange-Account(Change the 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
                var request = new Update.Request
                {
                    Id       = createResponse.Id,
                    Date     = DateTime.UtcNow.Date.AddDays(1),
                    Time     = "11:15",
                    Text     = "Another String",
                    Calories = 22
                };

                // Act & Assert
                await Assert.ThrowsAsync <RestException>(() => _fixture.SendAsync(request));
            }
        }
Example #3
0
        public async Task Should_Set_True_To_CalorieStatus_If_CurrentCalories_IsLessThan_TargetCalories_With_Multiple_Meals()
        {
            _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 = 3
                };
                await _fixture.SendAsync(request);
            }

            {   // Arrange
                var request = new Create.Request
                {
                    Date     = DateTime.UtcNow.Date,
                    Time     = "11:11",
                    Text     = Guid.NewGuid().ToString(),
                    Calories = 1
                };

                // Act
                await _fixture.SendAsync(request);

                var response = await _fixture.SendAsync(request);

                var meal = await _fixture.FindAsync <Meal>(response.Id);

                // Assert
                Assert.NotNull(response);
                Assert.Equal(request.Date.ToShortDateString(), meal.Date.ToShortDateString());
                Assert.Equal(request.Time, meal.Time.ToShortTimeString());
                Assert.Equal(request.Text, meal.Text);
                Assert.Equal(request.Calories, meal.Calories);
                Assert.True(meal.CalorieStatus);
                Assert.Equal(testAccount.Id, meal.AccountId);
            }
        }
Example #4
0
        public async Task Should_Delete_Meal()
        {
            _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;
            }

            Guid id;
            {
                // Arrange-Meal-To-Delete
                var request = new Create.Request
                {
                    Date     = DateTime.UtcNow.Date,
                    Time     = "11:11",
                    Text     = "string",
                    Calories = 3
                };
                var response = await _fixture.SendAsync(request);

                id = response.Id;
            }

            {
                // Arrange
                var request = new Delete.Request
                {
                    Id = id
                };

                // Act
                await _fixture.SendAsync(request);

                var count = await _fixture.CountAsync <Meal>();

                // Assert
                Assert.Equal(0, count);
            }
        }
Example #5
0
        public async Task Throws_Update_Exception_For_Invalid_Identifier()
        {
            _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-Meal-To-Update
                var request = new Create.Request
                {
                    Date     = DateTime.UtcNow.Date,
                    Time     = "11:11",
                    Text     = "string",
                    Calories = 3
                };
                await _fixture.SendAsync(request);
            }

            {
                // Arrange
                var request = new Update.Request
                {
                    Id       = Guid.NewGuid(),
                    Date     = DateTime.UtcNow.Date.AddDays(1),
                    Time     = "11:15",
                    Text     = "Another String",
                    Calories = 22
                };

                // Act & Assert
                await Assert.ThrowsAsync <RestException>(() => _fixture.SendAsync(request));
            }
        }
Example #6
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));
            }
        }
Example #7
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);
            }
        }