public async Task IndexShouldReturnsViewWithCorrectModel()
        {
            // Arrange
            var brands = DataHelper.GetDrugGroupsCollection();
            var adminDrugGroupsService = new Mock <IAdminDrugGroupsService>();

            adminDrugGroupsService
            .Setup(s => s.AllAsync())
            .ReturnsAsync(brands);

            var controller = new DrugGroupsController(adminDrugGroupsService.Object, null);

            // Act
            var result = await controller.Index();

            // Assert
            result.Should().NotBeNull();
            result.Should().BeOfType <ViewResult>();
            var viewName = result.As <ViewResult>().ViewName;

            viewName.Should().BeNull();
            var model     = result.As <ViewResult>().Model;
            var viewModel = model.As <DrugGroupListingViewModel>();

            viewModel.Should().NotBeNull();
        }
        public async Task GetUpdateShouldReturnViewWithValidModel()
        {
            // Arrange
            var drugGroupDb            = DataHelper.GetDrugGroup();
            var adminDrugGroupsService = new Mock <IAdminDrugGroupsService>();

            adminDrugGroupsService
            .Setup(s => s.GetByIdAsync(It.IsAny <int>()))
            .ReturnsAsync(drugGroupDb);

            var controller = new DrugGroupsController(adminDrugGroupsService.Object, null);

            // Act
            var result = await controller.Update(drugGroupDb.Id);

            // Assert
            result.Should().NotBeNull();
            result.Should().BeOfType <ViewResult>();
            result.As <ViewResult>().ViewName.Should().BeNull();
            var model = result.As <ViewResult>().Model;

            model.Should().BeOfType <DrugGroupFormModel>();
            var formModel = model.As <DrugGroupFormModel>();

            formModel.Id.Should().Be(drugGroupDb.Id);
            formModel.Name.Should().Be(drugGroupDb.Name);
            formModel.Admin.Name.Should().Be(drugGroupDb.Admin.Name);
            formModel.AdminId.Should().Be(drugGroupDb.AdminId);
        }
        public void GetCreateShouldReturnView()
        {
            // Arrange
            var controller = new DrugGroupsController(null, null);

            // Act
            var result = controller.Create();

            // Assert
            result.Should().NotBeNull();
            result.Should().BeOfType <ViewResult>();
            var viewName = result.As <ViewResult>().ViewName;

            viewName.Should().BeNull();
        }
        public async Task DeleteShouldReturnsNotFoundWhenDbReturnsNull()
        {
            // Arrange
            var drugGroupId            = 1;
            var adminDrugGroupsService = new Mock <IAdminDrugGroupsService>();

            adminDrugGroupsService
            .Setup(s => s.GetByIdAsync(It.IsAny <int>()))
            .ReturnsAsync(() => null);

            var controller = new DrugGroupsController(adminDrugGroupsService.Object, null);

            // Act
            var result = await controller.Delete(drugGroupId);

            // Assert
            result.Should().NotBeNull();
            result.As <NotFoundResult>().StatusCode.Should().Be(WebConstants.StatusCodeNotFound);
        }
        public async Task PostUpdateShouldReturnsViewWithModelWhenModelNameExists()
        {
            // Arrange
            var resultDrugGroup        = new DrugGroup();
            var drugGroupFormModel     = DataHelper.GetDrugGroupFormModel();
            var adminDrugGroupsService = new Mock <IAdminDrugGroupsService>();

            adminDrugGroupsService
            .Setup(s => s.UpdateAsync(It.IsAny <DrugGroup>()))
            .Callback((DrugGroup model) => { resultDrugGroup = model; })
            .ReturnsAsync(false);

            var controller = new DrugGroupsController(adminDrugGroupsService.Object, null);

            // Act
            var result = await controller.Update(drugGroupFormModel);

            // Assert
            result.Should().NotBeNull();
            controller.ModelState[WebConstants.StatusMessage].Errors[0].ErrorMessage.Should().Be(WebConstants.DrugGroupNameExists);
        }
        public async Task DeleteReturnRedirectWithValidId()
        {
            // Arrange
            string successMessage         = null;
            var    resultDrugGroup        = new DrugGroup();
            var    drugGroupDb            = DataHelper.GetDrugGroup();
            var    adminDrugGroupsService = new Mock <IAdminDrugGroupsService>();

            adminDrugGroupsService
            .Setup(s => s.GetByIdAsync(It.IsAny <int>()))
            .ReturnsAsync(drugGroupDb);

            adminDrugGroupsService
            .Setup(s => s.DeleteAsync(It.IsAny <DrugGroup>()))
            .Callback((DrugGroup model) => { resultDrugGroup = model; })
            .Returns(Task.CompletedTask);

            var tempData = new Mock <ITempDataDictionary>();

            tempData
            .SetupSet(t => t[WebConstants.TempDataSuccessMessageKey] = It.IsAny <string>())
            .Callback((string key, object message) => successMessage = message as string);

            var controller = new DrugGroupsController(adminDrugGroupsService.Object, null);

            controller.TempData = tempData.Object;

            // Act
            var result = await controller.Delete(drugGroupDb.Id);

            // Assert
            successMessage.Should().Be($"Drug group {drugGroupDb.Name} successfully deleted.");

            result.Should().BeOfType <RedirectToActionResult>();

            result.As <RedirectToActionResult>().ActionName.Should().Be("Index");
        }
        public async Task PostUpdateShouldReturnRedirectWithValidModel()
        {
            // Arrange
            var    resultDrugGroup        = new DrugGroup();
            string successMessage         = null;
            var    drugGroupFormModel     = DataHelper.GetDrugGroupFormModel();
            var    adminDrugGroupsService = new Mock <IAdminDrugGroupsService>();

            adminDrugGroupsService
            .Setup(s => s.UpdateAsync(It.IsAny <DrugGroup>()))
            .Callback((DrugGroup model) => { resultDrugGroup = model; })
            .ReturnsAsync(true);

            var tempData = new Mock <ITempDataDictionary>();

            tempData
            .SetupSet(t => t[WebConstants.TempDataSuccessMessageKey] = It.IsAny <string>())
            .Callback((string key, object message) => successMessage = message as string);

            var controller = new DrugGroupsController(adminDrugGroupsService.Object, null);

            controller.TempData = tempData.Object;

            // Act
            var result = await controller.Update(drugGroupFormModel);

            // Assert
            resultDrugGroup.Should().NotBeNull();
            resultDrugGroup.Name.Should().Be(drugGroupFormModel.Name);
            resultDrugGroup.AdminId.Should().Be(drugGroupFormModel.AdminId);

            successMessage.Should().Be($"Drug group {drugGroupFormModel.Name} successfully updated.");

            result.Should().BeOfType <RedirectToActionResult>();

            result.As <RedirectToActionResult>().ActionName.Should().Be("Index");
        }