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 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 Task <IActionResult> AddAssigment([FromBody] AssigmentViewModel assigment)
        {
            if (assigment == null)
            {
                return(BadRequest("Assigment cannot be null."));
            }

            var Module = await _unitOfWork.Modules.GetById(assigment.ModuleId);

            if (Module != null)
            {
                var Assigment = new Assigment {
                    Title = assigment.Title, Description = assigment.Description, Url = assigment.Url, Module = Module
                };
                _unitOfWork.Assigments.Add(Assigment);
                await _unitOfWork.Complete();

                return(Ok());
            }
            return(NotFound(assigment.ModuleId));
        }
        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);
        }