public async Task TestGetAllStores()
        {
            var provider = CommonTestUtils.InitializeDatabaseProvider();

            provider.AddStore(new Store()
            {
                Address = "Test Address1", Name = "TestName1"
            });
            provider.AddStore(new Store()
            {
                Address = "Test Address2", Name = "TestName2"
            });
            await provider.Save();

            var controller = new StoresController(provider, CommonTestUtils.InitializeMapper());
            var result     = controller.GetStores();

            var okResult = Assert.IsType <OkObjectResult>(result);
            var model    = Assert.IsAssignableFrom <StoresListResponseDto>(okResult.Value);

            Assert.Equal(2, model.Stores.Count);
            Assert.Equal(2, model.TotalElements);
            Assert.Equal(200, okResult.StatusCode);
            return;
        }
        public async Task AvailableProductsShouldReturnView()
        {
            // arrange
            var mockRepo = new Mock <IUnitOfWork>();

            mockRepo.Setup(x => x.StoreRepository.All())
            .ReturnsAsync(new List <Store> {
                new Store {
                    StoreId = 1
                }
            });

            var controller = new StoresController(mockRepo.Object, null);

            // act
            IActionResult result = await controller.Index();

            // assert
            // ...that the result is a ViewResult
            var viewResult = Assert.IsAssignableFrom <ViewResult>(result);
            // ...that the model of the view is a List<Store>
            var list = Assert.IsAssignableFrom <List <Store> >(viewResult.Model);
            // ...that the list has one element with ID 1 (based on the MockRepo's data)
            Store store = Assert.Single(list);

            Assert.Equal(1, store.StoreId);
            // we might also test that the correct view was chosen (DailyTasks/Index)

            mockRepo.Verify(x => x.StoreRepository.All(), Times.Once); // verify that the method was called once
        }
 public StoresControllerTests()
 {
     // In our tests we choose to ignore whatever logging is being done. We still need to mock it to avoid
     // null reference exceptions; loose mocks just handle whatever you throw at them.
     _loggerMock       = new Mock <ILogger <StoresController> >(MockBehavior.Loose);
     _storeRepoMock    = new Mock <IStoreRepository>(MockBehavior.Strict);
     _storesController = new StoresController(_storeRepoMock.Object, _loggerMock.Object);
 }
예제 #4
0
        public void Delete()
        {
            // Arrange
            StoresController controller = new StoresController();

            // Act
            controller.DeleteStore(100);

            // Assert
        }
예제 #5
0
        public async void NonExistentId_ReturnsNotFoundResult()
        {
            int id           = 3;
            var storeService = Mock.Of <IStoreService>(
                s => s.GetByIdAsync(id) == Task.FromResult <StoreDto>(null));
            var controller = new StoresController(storeService);

            var result = await controller.GetAsync(id);

            Assert.IsType <NotFoundResult>(result.Result);
        }
예제 #6
0
 public void Index_GetStores()
 {
     using (var context = new ApplicationDbContext(options))
     {
         var dataProtectionProvider = new EphemeralDataProtectionProvider();
         storeController = new StoresController(context, dataProtectionProvider, mockHttpContextAccessor.Object, mockEnvironment.Object);
         var resultTask = storeController.Index();
         resultTask.Wait();
         var model = (List <Store>)((ViewResult)resultTask.Result).Model;
         Assert.AreEqual(1, model.Count);
     }
 }
예제 #7
0
        public async Task DeleteStoreWhichDoesntExistInDatabase_ReturnNotFoundScreen()
        {
            var bookRepo  = new FakeBookRepository();
            var pubRepo   = new FakePublisherRepository();
            var storeRepo = new FakeStoreRepository();

            var controller = new StoresController(bookRepo, pubRepo, storeRepo);

            var result = await controller.Delete(1) as ViewResult;

            Assert.AreEqual("NotFound", result.ViewName);
        }
        public async void UserCanDeleteStoreById()
        {
            var store = CreateRandomStore();
            var mock  = new Mock <IStoreService>();

            mock.Setup(x => x.FindByIdAsync(store.StoreId)).ReturnsAsync(store);

            var controller = new StoresController(mock.Object);

            var response = await controller.DeleteById(store.StoreId);

            Assert.IsType <OkObjectResult>(response.Result);
        }
        public async void GetStoreWithIncorrectIdWillReturnNotFound()
        {
            var mapper = Helper.CreateMapperWithProfile <StoreProfile>();
            var store  = CreateRandomStore();
            var mock   = new Mock <IStoreRepository>();

            var service    = new StoreService(mock.Object, mapper);
            var controller = new StoresController(service);

            var response = await controller.GetById(store.StoreId);

            Assert.IsType <NotFoundResult>(response.Result);
        }
예제 #10
0
 public void Details_By_StoreId()
 {
     using (var context = new ApplicationDbContext(options))
     {
         var dataProtectionProvider = new EphemeralDataProtectionProvider();
         storeController = new StoresController(context, dataProtectionProvider, mockHttpContextAccessor.Object, mockEnvironment.Object);
         var resultTask = storeController.Details(1);
         resultTask.Wait();
         Assert.IsNotNull(resultTask.Result);
         var model = (Tuple <IList <Product>, Store>)((ViewResult)resultTask.Result).Model;
         Assert.AreEqual(1, model.Item2.StoreId);
     }
 }
        public async void UpdateStoreWithExistingNameWillReturnBadRequest()
        {
            var store   = CreateRandomStore();
            var request = new Fixture().Create <StoreRequest>();
            var mock    = new Mock <IStoreService>();

            mock.Setup(x => x.UpdateAsync(store, request)).Throws <ApiException>();

            var controller = new StoresController(mock.Object);
            var response   = await controller.UpdateById(store.StoreId, request);

            Assert.IsType <NotFoundResult>(response.Result);
        }
예제 #12
0
        public void Post()
        {
            // Arrange
            StoresController controller = new StoresController();

            // Act
            var testStore = new Store {
                id = 100, Name = "Store 100", Address = "Street 100"
            };

            controller.PostStore(testStore);

            // Assert
        }
예제 #13
0
        public async Task CheckCreationOfStore_RedirectToActionResult()
        {
            var store = new Store();

            var bookRepo  = new FakeBookRepository();
            var pubRepo   = new FakePublisherRepository();
            var storeRepo = new FakeStoreRepository();

            var controller = new StoresController(bookRepo, pubRepo, storeRepo);

            var result = await controller.Create(store);

            Assert.IsInstanceOfType(result, typeof(RedirectToActionResult));
        }
        public async void UserCanAddStore()
        {
            var mapper  = Helper.CreateMapperWithProfile <StoreProfile>();
            var request = new Fixture().Create <StoreRequest>();
            var mock    = new Mock <IStoreService>();

            mock.Setup(x => x.AddAsync(request)).ReturnsAsync(mapper.Map <Store>(request));

            var controller = new StoresController(mock.Object);

            var response = await controller.Add(request);

            Assert.IsType <CreatedAtActionResult>(response.Result);
        }
예제 #15
0
        public void Put()
        {
            // Arrange
            StoresController controller = new StoresController();

            // Act
            var testStore = new Store {
                id = 100, Name = "Store 100", Address = "Street 100"
            };

            testStore.Name = "updated field";
            controller.PutStore(100, testStore);

            // Assert
        }
        public async void AddingExistingStoreWillReturnBadRequest()
        {
            var mapper  = Helper.CreateMapperWithProfile <StoreProfile>();
            var request = new Fixture().Create <StoreRequest>();
            var mock    = new Mock <IStoreRepository>();

            mock.Setup(x => x.Find(request.StoreName, request.Address)).ReturnsAsync(mapper.Map <Store>(request));

            var service    = new StoreService(mock.Object, mapper);
            var controller = new StoresController(service);

            var response = await controller.Add(request);

            Assert.IsType <BadRequestObjectResult>(response.Result);
        }
예제 #17
0
        public async void ReturnsAllFromService()
        {
            IEnumerable <StoreDto> stores = new[]
            {
                new StoreDto(42, "HugeStore", "123.123", "42.42"),
                new StoreDto(43, "TinyStore", "123.123", "42.42"),
            };
            var storeService = Mock.Of <IStoreService>(
                s => s.GetAllAsync() == Task.FromResult(stores));
            var controller = new StoresController(storeService);

            var result = await controller.GetAsync();

            Assert.Equal(stores, result.Value);
        }
예제 #18
0
        public async void ExistingId_ReturnsDto()
        {
            // This test is pretty bad, it only tests
            // that the controller returns the store
            // that the service returns.
            var id           = 3;
            var store        = new StoreDto(id, "HugeStore", "123.132", "42.42");
            var storeService = Mock.Of <IStoreService>(
                s => s.GetByIdAsync(id) == Task.FromResult(store));
            var controller = new StoresController(storeService);

            var result = await controller.GetAsync(id);

            Assert.Equal(store, result.Value);
        }
예제 #19
0
        public void GetById()
        {
            // Arrange
            StoresController controller = new StoresController();

            // Act
            var store = controller.GetStore(1);

            // Assert
            var testStore = new Store {
                id = 1, Name = "Store 1", Address = "Street 1"
            };

            Assert.AreEqual(store, testStore);
        }
예제 #20
0
        public async Task CheckCreationOfStoreByWrongPerson_RedirectToModel()
        {
            var store = new Store();

            var bookRepo  = new FakeBookRepository();
            var pubRepo   = new FakePublisherRepository();
            var storeRepo = new FakeStoreRepository();

            var controller = new StoresController(bookRepo, pubRepo, storeRepo);

            controller.ModelState.AddModelError("", "pickAnything");

            var result = await controller.Create(store) as ViewResult;

            Assert.AreEqual(store, result.Model);
        }
예제 #21
0
        public void Get()
        {
            // Arrange
            StoresController controller = new StoresController();

            // Act
            IEnumerable <Store> stores = controller.GetStores();

            // Assert
            Assert.IsNotNull(stores);
            Assert.AreEqual(3, stores.Count());
            var testStore = new Store {
                id = 1, Name = "Store 1", Address = "Street 1"
            };

            Assert.AreEqual(stores, testStore);
        }
        public async void UserCanGetStoreById(int storesCount)
        {
            var stores = CreateRandomStoresList(storesCount);
            var mapper = Helper.CreateMapperWithProfile <StoreProfile>();
            var store  = stores.FirstOrDefault();
            var mock   = new Mock <IStoreRepository>();

            mock.Setup(x => x.Find(store.StoreId))
            .ReturnsAsync(stores.FirstOrDefault(x => x.StoreId == store?.StoreId));

            var service    = new StoreService(mock.Object, mapper);
            var controller = new StoresController(service);

            var response = await controller.GetById(store?.StoreId ?? -1);

            Assert.IsType <OkObjectResult>(response.Result);
        }
예제 #23
0
        public async Task Index_DisplayStores()
        {
            // ARRANGE

            var mockRepository = new Mock <IRepository>();

            // create a moq that returns store
            mockRepository.Setup(r => r.GetAllStoresAsync()).ReturnsAsync(GetTestSessions());

            // make a using my mock
            var controller = new StoresController(mockRepository.Object);

            // ACT
            var result = await controller.Index("");

            // assert
            var viewResult = Assert.IsType <ViewResult>(result);
        }
        public async Task IndexShouldReturnViewWithData()
        {
            // arrange
            var mockRepo = new Mock <IUnitOfWork>();

            // Moq gives us Mock class
            // which can implement interfaces at runtime
            // 1. you create the Mock
            // 2. you Setup the mock (giving it behavior)
            // 3. you give mock.Object to your test subject object
            // (4. you can use methods like Verify ot make sure that things were called on the mock object)
            mockRepo.Setup(x => x.StoreRepository.All())
            .ReturnsAsync(new List <Store> {
                new Store {
                    StoreId = 1
                }
            });

            // mockRepo.Setup(x => x.Delete(It.IsAny<int>()))
            // mockRepo.Setup(x => x.Delete(It.IsInRange<int>(-99999, 0, Moq.Range.Inclusive)))
            // mockRepo.Setup(x => x.Delete(5))
            //     .ThrowsAsync(new InvalidOperationException());

            var controller = new StoresController(mockRepo.Object, null);

            // act
            IActionResult result = await controller.Index();

            // assert
            // ...that the result is a ViewResult
            var viewResult = Assert.IsAssignableFrom <ViewResult>(result);
            // ...that the model of the view is a List<Store>
            var list = Assert.IsAssignableFrom <List <Store> >(viewResult.Model);
            // ...that the list has one element with ID 1 (based on the MockRepo's data)
            Store store = Assert.Single(list);

            Assert.Equal(1, store.StoreId);
            // we might also test that the correct view was chosen (DailyTasks/Index)

            mockRepo.Verify(x => x.StoreRepository.All(), Times.Once); // verify that the method was called once
        }
        public async void UserCanViewAllStore(int storesCount)
        {
            var stores     = CreateRandomStoresList(storesCount);
            var repository = new Mock <IStoreRepository>();

            repository.Setup(x => x.All()).ReturnsAsync(stores);

            var service    = new StoreService(repository.Object, Helper.CreateMapperWithProfile <StoreProfile>());
            var controller = new StoresController(service);

            var response = await controller.All();

            if (storesCount > 0)
            {
                Assert.IsType <OkObjectResult>(response.Result);
                Assert.Equal(stores, ((OkObjectResult)response.Result).Value);
            }
            else
            {
                Assert.IsType <NoContentResult>(response.Result);
            }
        }
        public void ReturnIndexViewWithStoresList_WithActionIndex()
        {
            // Arrange
            IEnumerable <Store> storeList = new List <Store> {
                new Store {
                    Id = 1, Name = "Auchan"
                }
            };
            Mock <IRepository <Store> > mockRepo = new Mock <IRepository <Store> >();

            mockRepo.Setup(repo => repo.FindAll()).Returns(storeList);

            StoresController sut = new StoresController(mockRepo.Object);

            // Act
            var result = sut.Index();

            // Assert
            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <IEnumerable <Store> >(viewResult.Model);

            Assert.Equal(storeList.Count(), model.Count());
        }
 public StoresControllerTest()
 {
     DBConfiguration.ConnectionString = "server=localhost;user id=root;password=root;port=8889;database=event_planner_tests;";
     _controller = new StoresController();
     _store      = new Store("TestName");
 }