public async void DeleteAssigment_CalledAndRoleIsNotAdmin_ReturnsBadRequestWithError()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();
            var            context        = Substitute.For <HttpContext>();

            long   testId        = 1;
            var    testAssigment = new Assigment();
            string error         = "Only Admins can delete assigments.";

            _cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Student.ToString());
            _unitOfWork.Assigments.GetById(Arg.Any <long>()).Returns(testAssigment);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

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

            var result = await assigmentsController.DeleteAssigment(testId);

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

            Assert.Equal(error, returnValue);
        }
        public async void GetRandomAssigment_CalledWithValidModulename_ReturnsOkWithAssigmentUrl()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            string testModuleName = "Oop";

            string[] testUrls  = new string[] { "test", "test2" };
            Module   oopModule = new Module()
            {
                Title = "Oop"
            };
            var assigments = new List <Assigment>()
            {
                new Assigment {
                    Url = "test", Module = oopModule
                }, new Assigment {
                    Url = "test2", Module = oopModule
                }
            };

            _unitOfWork.Assigments.GetAssigmentsByModuleName(testModuleName).Returns(assigments);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.GetRandomAssigment(testModuleName);

            var okobjectReesult = Assert.IsType <OkObjectResult>(result);
            var returnValue     = Assert.IsType <Assigment>(okobjectReesult.Value);

            Assert.Equal(testModuleName, returnValue.Module.Title);
            Assert.Contains(returnValue.Url, testUrls);
        }
        public async void GetAssigmentsByModule_CalledWithValidModuleName_ReturnOkWithAssigmentsCollection()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            var oopModule = new Module()
            {
                Title = "Oop"
            };
            var oopAssigmentList = new List <Assigment>()
            {
                new Assigment()
                {
                    Module = oopModule
                }, new Assigment()
                {
                    Module = oopModule
                }
            };
            string moduleName = "Oop";

            _unitOfWork.Assigments.GetAssigmentsByModuleName(moduleName).Returns(oopAssigmentList);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.GetAssigmentsByModule(moduleName);

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

            Assert.Equal(oopAssigmentList.Count, returnValue.Count);
            Assert.Equal(moduleName, returnValue[0].Module.Title);
        }
        public async void DeleteAssigment_CalledWithValidId_ReturnsOk()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();
            var            context        = Substitute.For <HttpContext>();

            long testId        = 1;
            var  testAssgiment = new Assigment();

            _cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Admin.ToString());
            _unitOfWork.Assigments.GetById(Arg.Any <long>()).Returns(testAssgiment);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

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

            var result = await assigmentsController.DeleteAssigment(testId);

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

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

            long      testId        = default;
            Assigment nullAssigment = null;

            _cookieManager.GetRoleFromToken(Arg.Any <string>()).Returns(Role.Admin.ToString());
            _unitOfWork.Assigments.GetById(Arg.Any <long>()).Returns(nullAssigment);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

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

            var result = await assigmentsController.DeleteAssigment(testId);

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

            Assert.Equal(testId, returnValue);
        }
        public async void AddAssigment_CalledWithValidAssigment_ReturnOk()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            long testId        = 1;
            var  testAssigment = new AssigmentViewModel()
            {
                ModuleId = testId
            };
            var testModule = new Module()
            {
                Id = testId
            };

            _unitOfWork.Modules.GetById(testId).Returns(testModule);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.AddAssigment(testAssigment);

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

            Assert.Equal(200, okResult.StatusCode);
        }
        public async void GetAssigmentsByModule_CalledWithNull_ReturnsBadRequestWithError()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            string nullModuleName = null;
            string error          = "Module name cannot be null.";

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.GetAssigmentsByModule(nullModuleName);

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

            Assert.Equal(error, returnValue);
        }
        public async void AddAssigment_CalledWithNull_ReturnsBadRequestWithError()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            AssigmentViewModel nullAssigment = null;
            string             error         = "Assigment cannot be null.";

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.AddAssigment(nullAssigment);

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

            Assert.Equal(error, returnValue);
        }
        public async void GetRandomAssigment_CalledInvalidModuleName_ReturnsNotFountWithModuleName()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            string           notValidModuleName = "CSarja";
            List <Assigment> nullAssigment      = null;

            _unitOfWork.Assigments.GetAssigmentsByModuleName(notValidModuleName).Returns(nullAssigment);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.GetRandomAssigment(notValidModuleName);

            var notFountObjectResult = Assert.IsType <NotFoundObjectResult>(result);
            var returnValue          = Assert.IsType <string>(notFountObjectResult.Value);

            Assert.Equal(notValidModuleName, returnValue);
        }
        public async void GetAllAssigments_Called_ReturnOkWithAssigmentsCollection()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            var AssigmentList = new List <Assigment>()
            {
                new Assigment(), new Assigment(), new Assigment(), new Assigment()
            };

            _unitOfWork.Assigments.GetAll().Returns(AssigmentList);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.GetAllAssigments();

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

            Assert.Equal(AssigmentList.Count, returnValue.Count);
        }
        public async void AddAssigment_CalledWithInvalidAssigment_ReturnsNotFoundWithModuleId()
        {
            IUnitOfWork    _unitOfWork    = Substitute.For <IUnitOfWork>();
            ICookieManager _cookieManager = Substitute.For <ICookieManager>();

            long notValidId    = default;
            var  testAssigment = new AssigmentViewModel()
            {
                ModuleId = notValidId
            };
            Module nullModule = null;

            _unitOfWork.Modules.GetById(Arg.Any <long>()).Returns(nullModule);

            var assigmentsController = new AssigmentsController(_unitOfWork, _cookieManager);

            var result = await assigmentsController.AddAssigment(testAssigment);

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

            Assert.Equal(notValidId, returnValue);
        }