예제 #1
0
        public async void LunchService_GetRestaurantsAsync_ReturnsRestaurantDtos()
        {
            // arrange
            Mock <IGetLunchOptions> mockOptions = new Mock <IGetLunchOptions>();
            Mock <IRepository>      mockRepo    = new Mock <IRepository>();
            Mock <IChaos>           mockRandom  = new Mock <IChaos>();
            Mock <IRestaurantCache> mockCache   = new Mock <IRestaurantCache>();
            LunchService            target      = new LunchService(mockOptions.Object, mockRepo.Object, mockRandom.Object, mockCache.Object);

            mockOptions.Setup(x => x.GetAllRestaurantsInZipAsync(It.IsAny <string>())).ReturnsAsync(new List <RestaurantDto> {
                new RestaurantDto {
                    Name = "Bob's Burgers",
                },
                new RestaurantDto {
                    Name = "Jimmy Pesto's Pizzaria",
                },
            });
            string zip = "38655";

            // act
            var result = await target.GetRestaurantsAsync(zip);

            // assert
            Assert.Equal(2, result.Count());
        }
예제 #2
0
        /// <summary>
        /// (Required) Entry method of your Lambda function.
        /// </summary>
        /// <param name="lambdaEvent">Type returned from CodeMash</param>
        /// <param name="context">Context data of a function (function config)</param>
        /// <returns></returns>
        public async Task <APIGatewayProxyResponse> Handler(CustomEventRequest <BasicInput> lambdaEvent, ILambdaContext context)
        {
            // - Get environment variable
            var divisionId = Environment.GetEnvironmentVariable("division");

            var division = new Division {
                Id = divisionId
            };

            var lunchService = new LunchService
            {
                HrService = new HrService
                {
                    EmployeesRepository = new EmployeesRepository()
                },
                MenuRepository = new MenuRepository()
            };

            var menu = await lunchService.CreateBlankMenu(division);

            var body = new Dictionary <string, string>
            {
                { "menu", menu.Id }
            };

            return(new APIGatewayProxyResponse
            {
                Body = JsonConvert.SerializeObject(body),
                StatusCode = 200,
                Headers = new Dictionary <string, string> {
                    { "Content-Type", "application/json" }
                }
            });
        }
예제 #3
0
        public async void UpdateAsync_ReturnsLunchModified_WhenIdExist()
        {
            var lunch         = GetADefaultLunch();
            var lunchModified = new Lunch
            {
                Id        = lunch.Id,
                Date      = DateTime.Today.AddDays(-1),
                MealId    = Guid.NewGuid(),
                UpdatedBy = "updater"
            };

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

                await context.SaveChangesAsync();
            }

            Lunch result = null;

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

            Assert.NotNull(result);
            Assert.Equal(lunchModified.Id, result.Id);
            Assert.NotEqual(lunchModified.UpdatedOn, result.UpdatedOn);
            Assert.Equal(lunchModified.UpdatedBy, result.UpdatedBy);
            Assert.Equal(lunchModified.MealId, result.MealId);
            Assert.Equal(lunchModified.Date, result.Date);
        }
예제 #4
0
        public void Employee_ElevatorSwipeTest_ShouldPrintToConsole()
        {
            var xService = new LunchService();

            _employeeElevator = new Employee(xService);
            _employeeElevator.SwipeCard();
        }
예제 #5
0
 public HomeController(ILogger <HomeController> logger, ILocationRepository locationRepository, LunchService lunchService, ILunchOrderRepository lunchOrderRepository)
 {
     _logger               = logger;
     _locationRepository   = locationRepository;
     _lunchOrderRepository = lunchOrderRepository;
     _lunchService         = lunchService;
 }
예제 #6
0
        public async Task DeleteByIdAsync_ReturnsZero_WhenIdNotExist()
        {
            var result = 0;

            using (var context = new MSLunchesContext(GetDbOptions("DeleteByIdAsync_ReturnsCountOfChanges_WhenIdExist")))
            {
                var classUnderTest = new LunchService(context);
                result = await classUnderTest.DeleteByIdAsync(Guid.NewGuid());
            }

            Assert.True(result == 0);
        }
예제 #7
0
        public async Task <APIGatewayProxyResponse> Handler(CustomEventRequest <BasicInput> lambdaEvent, ILambdaContext context)
        {
            //var lunchDate = DateTime.Parse(Environment.GetEnvironmentVariable("lunchTime"));
            // var menuID = Environment.GetEnvironmentVariable("menuID");


            var lunchDate = DateTime.Parse("2020-02-09");
            var menuID    = "5e3c016f214efe00018721ab";


            var service    = new CodeMashRepository <MenuEntity>(Client);
            var menuEntity = await service.FindOneByIdAsync(
                menuID,
                new DatabaseFindOneOptions()
                );

            var menu = new Menu(DateTime.Now, null, null)
            {
                Id       = menuID,
                Division = new Division()
                {
                    Id = menuEntity.DivisionId
                }
            };

            var lunchService = new LunchService()
            {
                HrService = new HrService()
                {
                    EmployeesRepository = new EmployeesRepository()
                },
                MenuRepository     = new MenuRepository(),
                NotificationSender = new NotificationSender()
            };


            await lunchService.AdjustMenuLunchTime(lunchDate, menu, menuEntity.Employees);

            var response = new
            {
                lambdaEvent,
            };

            return(new APIGatewayProxyResponse
            {
                Body = JsonConvert.SerializeObject(response),
                StatusCode = 200,
                Headers = new Dictionary <string, string> {
                    { "Content-Type", "application/json" }
                }
            });
        }
예제 #8
0
        public async Task GetValueAsync_CallsRepo()
        {
            var repo   = new Mock <ILunchRepository>();
            var logger = new Mock <IObjectLogger>();

            repo.Setup(x => x.GetValueAsync(It.IsAny <int>())).Returns(Task.FromResult("some value"));

            var service = new LunchService(repo.Object, logger.Object);
            var result  = await service.GetValueAsync(1);

            repo.Verify(x => x.GetValueAsync(It.IsAny <int>()), Times.Exactly(1));
            Assert.AreEqual(result, "some value");
        }
예제 #9
0
        public async void UpdateAsync_ReturnsNull_WhenIdNotExist()
        {
            var lunchModified = GetADefaultLunch();

            Lunch result = null;

            using (var context = new MSLunchesContext(GetDbOptions("UpdateAsync_ReturnsNull_WhenIdNotExist")))
            {
                var classUnderTest = new LunchService(context);
                result = await classUnderTest.UpdateAsync(lunchModified);
            }

            Assert.Null(result);
        }
예제 #10
0
        public async Task GetIntValueAsync_CallsRepo()
        {
            var repo   = new Mock <ILunchRepository>();
            var logger = new Mock <IObjectLogger>();

            repo.Setup(x => x.GetIntValueAsync()).Returns(Task.FromResult(12));

            var service = new LunchService(repo.Object, logger.Object);
            var result  = await service.GetIntValueAsync();

            repo.Verify(x => x.GetIntValueAsync(), Times.Exactly(1));
            Assert.IsInstanceOfType(result, typeof(int));
            Assert.AreEqual(result, 12);
        }
예제 #11
0
        public async void CreateAsync_ReturnsCreatedLunch()
        {
            var   lunch  = GetADefaultLunch();
            Lunch result = null;

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

            Assert.NotNull(result);
            Assert.NotEqual(Guid.Empty, result.Id);
            Assert.NotEqual(default(DateTime), result.CreatedOn);
            Assert.Equal(lunch.MealId, result.MealId);
            Assert.Equal(lunch.Date, result.Date);
        }
예제 #12
0
        public async void LunchService_GetRestaurantAsync_FiltersOutNopes()
        {
            // arrange
            Mock <IGetLunchOptions> mockOptions = new Mock <IGetLunchOptions>();
            Mock <IRepository>      mockRepo    = new Mock <IRepository>();
            Mock <IChaos>           mockRandom  = new Mock <IChaos>();
            IRestaurantCache        cache       = new RestaurantCacheMock();

            mockRandom.Setup(m => m.Next(It.IsAny <int>())).Returns(0);
            Guid sessionGuid = Guid.NewGuid();

            mockOptions.Setup(x => x.GetAvailableRestaurantOptionsAsync(sessionGuid, It.IsAny <SearchOptions>())).ReturnsAsync(new List <RestaurantDto> {
                new RestaurantDto {
                    Name = "COok OOout",
                    Id   = "rest3"
                },
                new RestaurantDto {
                    Name = "Jimmy Pesto's Pizzaria",
                    Id   = "rest2"
                },
                new RestaurantDto {
                    Name = "Bob's Burgers",
                    Id   = "rest1"
                },
            });
            mockRepo.Setup(x => x.GetNopesAsync(It.IsAny <IEnumerable <int> >())).ReturnsAsync(new List <string> {
                "rest2",
                "rest3"
            });
            List <int> users = new List <int> {
                1, 2
            };
            LunchService target = new LunchService(mockOptions.Object, mockRepo.Object, mockRandom.Object, cache);

            // act
            var result = await target.GetRestaurantAsync(sessionGuid, new SearchOptions()
            {
                UserIds = users
            });

            // assert
            Assert.Equal("Bob's Burgers", result.Name);
        }
예제 #13
0
        public async Task GetByIdAsync_ReturnsNull_WhenIdNotExist()
        {
            var dbOptions = GetDbOptions("GetByIdAsync_ReturnsLunch_WhenIdExist");

            using (var context = new MSLunchesContext(dbOptions))
            {
                context.Lunches.Add(GetADefaultLunch());
                context.SaveChanges();
            }

            Lunch result = null;

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

            Assert.Null(result);
        }
예제 #14
0
        public async Task GetAsync_ReturnsLunches()
        {
            var mealType = new MealType
            {
                Id           = 1,
                Description  = "desc",
                IsSelectable = true
            };

            var meal = GetADefaultMeal(Guid.NewGuid(), mealType.Id);

            var lunch1 = GetADefaultLunch(Guid.NewGuid(), meal.Id);
            var lunch2 = GetADefaultLunch(Guid.NewGuid(), meal.Id);

            var dbOptions = GetDbOptions("GetAsync_ReturnsLunches");

            using (var context = new MSLunchesContext(dbOptions))
            {
                await context.MealTypes.AddAsync(mealType);

                await context.Meals.AddAsync(meal);

                await context.Lunches.AddAsync(lunch1);

                await context.Lunches.AddAsync(lunch2);

                await context.SaveChangesAsync();
            }

            IEnumerable <Lunch> result = null;

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

            Assert.NotNull(result);
            Assert.Contains(result, lunch => Equals(lunch, lunch1));
            Assert.Contains(result, lunch => Equals(lunch, lunch2));
        }
예제 #15
0
        public async Task DeleteByIdAsync_ReturnsCountOfChanges_WhenIdExist()
        {
            var lunch = GetADefaultLunch();

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

                await context.SaveChangesAsync();
            }

            var result = 0;

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

            Assert.True(result > 0);
        }
예제 #16
0
        public async void LunchService_GetRestaurantAsync_ThrowTooManyRequestsWhenOutOfSuggestions()
        {
            Mock <IGetLunchOptions> mockOptions = new Mock <IGetLunchOptions>();
            Mock <IRepository>      mockRepo    = new Mock <IRepository>();
            Mock <IChaos>           mockRandom  = new Mock <IChaos>();
            IRestaurantCache        cache       = new RestaurantCacheMock();
            const string            expected    = "bob's burgers";
            Guid sessionId = Guid.NewGuid();

            mockOptions.Setup(x => x.GetAvailableRestaurantOptionsAsync(sessionId, It.IsAny <SearchOptions>())).ReturnsAsync(new List <RestaurantDto> {
                new RestaurantDto {
                    Name = expected,
                },
            });
            LunchService target = new LunchService(mockOptions.Object, mockRepo.Object, mockRandom.Object, cache);

            // act
            var result = await target.GetRestaurantAsync(sessionId, new SearchOptions());

            // assert
            await Assert.ThrowsAsync <TooManyRequestsException>(async() => await target.GetRestaurantAsync(sessionId, new SearchOptions()));
        }
예제 #17
0
        public async void LunchService_GetRestaurantAsync_ReturnsRestaurantDto()
        {
            // arrange
            Mock <IGetLunchOptions> mockOptions = new Mock <IGetLunchOptions>();
            Mock <IRepository>      mockRepo    = new Mock <IRepository>();
            Mock <IChaos>           mockRandom  = new Mock <IChaos>();
            Mock <IRestaurantCache> mockCache   = new Mock <IRestaurantCache>();
            LunchService            target      = new LunchService(mockOptions.Object, mockRepo.Object, mockRandom.Object, mockCache.Object);
            const string            expected    = "bob's burgers";
            Guid sessionId = Guid.NewGuid();

            mockOptions.Setup(x => x.GetAvailableRestaurantOptionsAsync(sessionId, It.IsAny <SearchOptions>())).ReturnsAsync(new List <RestaurantDto> {
                new RestaurantDto {
                    Name = expected,
                },
            });

            // act
            var result = await target.GetRestaurantAsync(sessionId, new SearchOptions());

            // assert
            Assert.Equal(expected, result.Name);
        }
예제 #18
0
        /// <summary>
        /// (Required) Entry method of your Lambda function.
        /// </summary>
        /// <param name="lambdaEvent">Type returned from CodeMash</param>
        /// <param name="context">Context data of a function (function config)</param>
        /// <returns></returns>
        public async Task <APIGatewayProxyResponse> Handler(CustomEventRequest <BasicInput> lambdaEvent, ILambdaContext context)
        {
            var menuRepo = new MenuRepository();

            var menu = await menuRepo.GetClosestMenu();

            var lunchService = new LunchService
            {
                MenuRepository     = menuRepo,
                NotificationSender = new NotificationSender()
            };

            var response = await lunchService.SendMessageAboutFoodOrder(menu);

            return(new APIGatewayProxyResponse
            {
                Body = JsonConvert.SerializeObject(response),
                StatusCode = 200,
                Headers = new Dictionary <string, string> {
                    { "Content-Type", "application/json" }
                }
            });
        }
예제 #19
0
 public HomeController(LunchService service)
 {
     _service = service;
 }