public async Task GetAsync_ReturnsUserLunches()
        {
            var userId     = "09123091823";
            var userLunch1 = GetUserLunch(Guid.NewGuid(), Guid.NewGuid(), userId);
            var userLunch2 = GetUserLunch(Guid.NewGuid(), Guid.NewGuid(), userId);
            var userLunch3 = GetUserLunch();

            var dbOptions = GetDbOptions("GetAsync_ReturnsLunches");

            using (var context = new MSLunchesContext(dbOptions))
            {
                await context.UserLunches.AddAsync(userLunch1);

                await context.UserLunches.AddAsync(userLunch2);

                await context.UserLunches.AddAsync(userLunch3);

                await context.SaveChangesAsync();
            }

            IEnumerable <UserLunch> result = null;

            using (var context = new MSLunchesContext(dbOptions))
            {
                var classUnderTest = new UserLunchService(context);
                result = await classUnderTest.GetAsync(userId);
            }

            Assert.NotNull(result);
            Assert.Contains(result, lunch => Equals(lunch, userLunch1));
            Assert.Contains(result, lunch => Equals(lunch, userLunch2));
            Assert.DoesNotContain(result, lunch => Equals(lunch, userLunch3));
        }
        public async void CreateAsync_ReturnsCreatedLunch()
        {
            var lunchId = Guid.NewGuid();

            using (var context = new MSLunchesContext(GetDbOptions("CreateAsync_ReturnsCreatedLunch")))
            {
                context.Lunches.Add(GetLunch(lunchId));
                context.SaveChanges();
            }

            var       lunch  = GetUserLunch(lunchId: lunchId);
            UserLunch result = null;

            using (var context = new MSLunchesContext(GetDbOptions("CreateAsync_ReturnsCreatedLunch")))
            {
                var classUnderTest = new UserLunchService(context);
                result = await classUnderTest.CreateAsync(lunch);
            }

            Assert.NotNull(result);
            Assert.NotEqual(Guid.Empty, result.Id);
            Assert.NotEqual(default(DateTime), result.CreatedOn);
            Assert.Equal(lunch.Approved, result.Approved);
            Assert.Equal(lunch.LunchId, result.LunchId);
            Assert.Equal(lunch.UserId, result.UserId);
        }
        public async Task GetByIdAsync_ReturnsNull_WhenIdNotExist()
        {
            var dbOptions = GetDbOptions("GetByIdAsync_ReturnsLunch_WhenIdExist");

            using (var context = new MSLunchesContext(dbOptions))
            {
                context.UserLunches.Add(GetUserLunch());
                context.SaveChanges();
            }

            UserLunch result = null;

            using (var context = new MSLunchesContext(dbOptions))
            {
                var classUnderTest = new UserLunchService(context);
                result = await classUnderTest.GetByIdAsync(Guid.NewGuid());
            }

            Assert.Null(result);
        }
        public async Task DeleteByIdAsync_ThrowsNotFoundException_WhenIdNotExist()
        {
            Exception exception = null;

            using (var context = new MSLunchesContext(GetDbOptions("DeleteByIdAsync_ThrowsNotFoundException_WhenIdNotExist")))
            {
                var classUnderTest = new UserLunchService(context);
                try
                {
                    await classUnderTest.DeleteByIdAsync(Guid.NewGuid());
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
            }

            var result = Assert.IsType <NotFoundException>(exception);

            Assert.False(string.IsNullOrEmpty(result.Message));
        }
        public async Task DeleteByIdAsync_ReturnsCountOfChanges_WhenIdExist()
        {
            var userLunch = GetUserLunch();

            using (var context = new MSLunchesContext(GetDbOptions("DeleteByIdAsync_ReturnsCountOfChanges_WhenIdExist")))
            {
                await context.UserLunches.AddAsync(userLunch);

                await context.SaveChangesAsync();
            }

            var result = 0;

            using (var context = new MSLunchesContext(GetDbOptions("DeleteByIdAsync_ReturnsCountOfChanges_WhenIdExist")))
            {
                var classUnderTest = new UserLunchService(context);
                result = await classUnderTest.DeleteByIdAsync(userLunch.Id);
            }

            Assert.True(result > 0);
        }
        public async void UpdateAsync_ReturnsNull_WhenIdNotExist()
        {
            var       lunchModified = GetUserLunch();
            Exception exception     = null;

            using (var context = new MSLunchesContext(GetDbOptions("UpdateAsync_ReturnsNull_WhenIdNotExist")))
            {
                var classUnderTest = new UserLunchService(context);
                try
                {
                    await classUnderTest.UpdateAsync(lunchModified);
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
            }

            var notFoundException = Assert.IsType <NotFoundException>(exception);

            Assert.False(string.IsNullOrEmpty(notFoundException.Message));
        }
        public async void UpdateAsync_ReturnsLunchModified_WhenIdExist()
        {
            var lunchId           = Guid.NewGuid();
            var userLunch         = GetUserLunch();
            var userLunchModified = new UserLunch
            {
                Id        = userLunch.Id,
                Approved  = !userLunch.Approved,
                LunchId   = lunchId,
                UserId    = "newUserId1",
                UpdatedBy = "updater"
            };

            using (var context = new MSLunchesContext(GetDbOptions("UpdateAsync_ReturnsLunchModified_WhenIdExist")))
            {
                await context.Lunches.AddAsync(GetLunch(lunchId));

                await context.UserLunches.AddAsync(userLunch);

                await context.SaveChangesAsync();
            }

            UserLunch result = null;

            using (var context = new MSLunchesContext(GetDbOptions("UpdateAsync_ReturnsLunchModified_WhenIdExist")))
            {
                var classUnderTest = new UserLunchService(context);
                result = await classUnderTest.UpdateAsync(userLunchModified);
            }

            Assert.NotNull(result);
            Assert.Equal(userLunchModified.Id, result.Id);
            Assert.NotEqual(userLunchModified.UpdatedOn, result.UpdatedOn);
            Assert.Equal(userLunchModified.UpdatedBy, result.UpdatedBy);
            Assert.Equal(userLunchModified.Approved, result.Approved);
            Assert.Equal(userLunchModified.UserId, result.UserId);
            Assert.Equal(userLunchModified.LunchId, result.LunchId);
        }