public async void DeleteModuleContent_CalledWithInvalidId_RetrunsNotFoundWithId()
        {
            IUnitOfWork    unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager cookieManager = Substitute.For <ICookieManager>();
            var            context       = Substitute.For <HttpContext>();

            long          notValidId        = 1;
            ModuleContent nullModuleContent = null;
            List <Video>  nullVideos        = null;

            cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Admin.ToString());
            unitOfWork.ModuleContents.GetById(notValidId).Returns(nullModuleContent);
            unitOfWork.Videos.GetVideosByModuleContentId(notValidId).Returns(nullVideos);

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

            moduleContentsController.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };

            var result = await moduleContentsController.DeleteModuleContent(notValidId);

            var notFoundObjectResult = Assert.IsType <NotFoundObjectResult>(result);
            var returnValue          = Assert.IsType <long>(notFoundObjectResult.Value);

            Assert.Equal(notValidId, returnValue);
        }
        public async void DeleteModuleContent_CalledAndUserRoleIsNotAdmin_ReturnsBadRequestWithError()
        {
            IUnitOfWork    unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager cookieManager = Substitute.For <ICookieManager>();
            var            context       = Substitute.For <HttpContext>();

            long   testId = 1;
            string error  = "Only Admins can delete module contents.";

            cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Student.ToString());

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

            moduleContentsController.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };

            var result = await moduleContentsController.DeleteModuleContent(testId);

            var badRequestObjectResult = Assert.IsType <BadRequestObjectResult>(result);
            var returnValue            = Assert.IsType <string>(badRequestObjectResult.Value);

            Assert.Equal(error, returnValue);
        }
        public async void DeleteModuleContent_CalledWithValidId_ReturnsOk()
        {
            IUnitOfWork    unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager cookieManager = Substitute.For <ICookieManager>();
            var            context       = Substitute.For <HttpContext>();

            long testId            = 1;
            var  testModuleContent = new ModuleContent();
            var  testVideos        = new List <Video>()
            {
                new Video(), new Video(), new Video(), new Video()
            };

            cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Admin.ToString());
            unitOfWork.ModuleContents.GetById(testId).Returns(testModuleContent);
            unitOfWork.Videos.GetVideosByModuleContentId(testId).Returns(testVideos);

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

            moduleContentsController.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };

            var result = await moduleContentsController.DeleteModuleContent(testId);

            var okResult = Assert.IsType <OkResult>(result);

            Assert.Equal(200, okResult.StatusCode);
        }