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

            long          notValidId            = 1;
            var           testModuleContentView = new ModuleContentUpdateViewModel();
            ModuleContent nullModuleContent     = null;
            string        error = "Module content cannot be null.";

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

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

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

            var result = await moduleContentsController.UpdateModuleContent(testModuleContentView, notValidId);

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

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

            var testId            = 1;
            var testModule        = new Module();
            var testModuleContent = new ModuleContentViewModel()
            {
                ModuleId = testId
            };

            cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Admin.ToString());
            unitOfWork.Modules.GetById(testId).Returns(testModule);
            unitOfWork.ModuleContents.GetLastModuleContentByModuleId(testModuleContent.ModuleId).Returns(1);

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

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

            var result = await moduleContentsController.AddModuleContent(testModuleContent);

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

            Assert.Equal(200, okResult.StatusCode);
        }
        public async void UpdateModuleContent_CalledAndRoleIsNotAdmin_ReturnsBadRequestWithError()
        {
            IUnitOfWork    unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager cookieManager = Substitute.For <ICookieManager>();
            var            context       = Substitute.For <HttpContext>();

            long          testId = 1;
            var           testModuleContentView = new ModuleContentUpdateViewModel();
            ModuleContent nullModuleContent     = null;
            string        error = "Only Admins can update module content.";

            unitOfWork.ModuleContents.GetById(testId).Returns(nullModuleContent);
            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.UpdateModuleContent(testModuleContentView, testId);

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

            Assert.Equal(error, returnValue);
        }
        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_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);
        }
        public async void AddModuleContent_CalledWithNull_ReturnsBadRequestWithError()
        {
            IUnitOfWork    unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager cookieManager = Substitute.For <ICookieManager>();
            var            context       = Substitute.For <HttpContext>();

            ModuleContentViewModel nullModuleContent = null;
            string error = "Module content cannot be null.";

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

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

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

            var result = await moduleContentsController.AddModuleContent(nullModuleContent);

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

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

            var testId     = 1;
            var testModule = new Module {
                Id = testId
            };
            var testModuleContents = new List <ModuleContent>()
            {
                new ModuleContent {
                    Module = testModule
                }, new ModuleContent {
                    Module = testModule
                }, new ModuleContent {
                    Module = testModule
                }, new ModuleContent {
                    Module = testModule
                }
            };

            unitOfWork.ModuleContents.GetModuleContentsByModuleId(testId).Returns(testModuleContents);

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

            var result = await moduleContentsController.GetModuleContentByModuleId(testId);

            var okObjectResult = Assert.IsType <OkObjectResult>(result);
            var retrunValue    = Assert.IsType <List <ModuleContent> >(okObjectResult.Value);

            Assert.Equal(testModuleContents.Count, retrunValue.Count);
            Assert.Equal(testId, retrunValue[0].Module.Id);
        }
        public async void AddModuleContent_CalledWithInvalidValidModuleContent_ReturnsNotFoundWithModuleId()
        {
            IUnitOfWork    unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager cookieManager = Substitute.For <ICookieManager>();
            var            context       = Substitute.For <HttpContext>();

            var    notValidId        = 1;
            Module nullModule        = null;
            var    testModuleContent = new ModuleContentViewModel()
            {
                ModuleId = notValidId
            };

            cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Admin.ToString());
            unitOfWork.Modules.GetById(notValidId).Returns(nullModule);
            unitOfWork.ModuleContents.GetLastModuleContentByModuleId(testModuleContent.ModuleId).Returns(0);

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

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

            var result = await moduleContentsController.AddModuleContent(testModuleContent);

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

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

            var testId = 1235;
            List <ModuleContent> nullModuleContents = null;

            unitOfWork.ModuleContents.GetModuleContentsByModuleId(testId).Returns(nullModuleContents);

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

            var result = await moduleContentsController.GetModuleContentByModuleId(testId);

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

            Assert.Equal(testId, returnValue);
        }
        public async void GetAllModuleContents_Called_ReturnsOkWithListOfModuleContents()
        {
            IUnitOfWork    unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager cookieManager = Substitute.For <ICookieManager>();

            var testModuleContents = new List <ModuleContent>()
            {
                new ModuleContent(), new ModuleContent(), new ModuleContent(), new ModuleContent()
            };

            unitOfWork.ModuleContents.GetAll().Returns(testModuleContents);

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

            var result = await moduleContentsController.GetAllModuleContents();

            var okObjectResult = Assert.IsType <OkObjectResult>(result);
            var returnValue    = Assert.IsType <List <ModuleContent> >(okObjectResult.Value);

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

            long          testId            = 1;
            long          testcontentId     = 1;
            ModuleContent nullModuleContent = null;
            string        error             = "Only Admins can update module content.";

            unitOfWork.ModuleContents.GetById(testId).Returns(nullModuleContent);
            cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Student.ToString());

            var moduleContentsController = new ModuleContentsController(unitOfWork, cookieManager);

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