public void Get_Assigned_Book()
        {
            var bookAssignment = new BookAssignToStudent
            {
                Id     = 1,
                BookId = 123,
                Book   = new Book {
                    Id = 123, Name = "Software Engineering", Author = "ABC", IsIssued = true
                },
                IssueDate = DateTime.Now,
                DueDate   = DateTime.Now.AddDays(7),
                StudentId = 100,
                Student   = new Student {
                    Id = 1, Name = "Ali"
                }
            };

            var mockBookService           = new Mock <IBookService>();
            var mockBookAssignmentService = new Mock <IBookAssignmentService>();

            mockBookAssignmentService.Setup(r => r.GetAssignedBook(123)).Returns(bookAssignment);
            var controller = new BooksController(mockBookService.Object, mockBookAssignmentService.Object);

            var actionResult = controller.Assign(123);
            var result       = Assert.IsType <OkObjectResult>(actionResult);
            var assignedBook = Assert.IsType <BookAssignToStudent>(result.Value);

            Assert.True(assignedBook.Book.IsIssued);

            mockBookAssignmentService.Verify(s => s.GetAssignedBook(123), Times.Once());
        }
        public void Extend_DueDate_Of_Assigned_Book()
        {
            var bookAssignment = new BookAssignToStudent
            {
                Id     = 1,
                BookId = 123,
                Book   = new Book {
                    Id = 123, Name = "Software Engineering", Author = "ABC", IsIssued = true
                },
                IssueDate = DateTime.Now,
                DueDate   = DateTime.Now.AddDays(7),
                StudentId = 100,
                Student   = new Student {
                    Id = 1, Name = "Ali"
                }
            };

            var mockBookService           = new Mock <IBookService>();
            var mockBookAssignmentService = new Mock <IBookAssignmentService>();
            var newDueDate = DateTime.Now.AddDays(10);

            mockBookAssignmentService.Setup(r => r.ExtendDueDate(123, 100, newDueDate)).Returns("Success");
            var controller = new BooksController(mockBookService.Object, mockBookAssignmentService.Object);

            var request = new ExtendDueDateRequest {
                BookId = 123, StudentId = 100, NewDueDate = newDueDate
            };
            var actionResult = controller.Extend(request);

            Assert.IsType <NoContentResult>(actionResult);

            mockBookAssignmentService.Verify(s => s.ExtendDueDate(123, 100, newDueDate), Times.Once());
        }
        public string AssignBook(int bookId, int studentId)
        {
            var isValid = ValidateBookAndStudent(bookId, studentId);

            if (!isValid)
            {
                return("Either student or book does not exist!");
            }

            var isBookAlreadyIssued = _context.BookAssignToStudents.Any(a => a.Book.Id == bookId && a.Book.IsIssued == true);

            if (isBookAlreadyIssued)
            {
                return("Book is already issued to the student.");
            }

            var book = _context.Books.First(a => a.Id == bookId);

            book.IsIssued = true;

            _context.Update(book);

            var now = DateTime.Now;

            var student = _context.Students.FirstOrDefault(a => a.Id == studentId);

            var bookAssignToStudent = new BookAssignToStudent
            {
                BookId    = bookId,
                Book      = book,
                StudentId = studentId,
                Student   = student,
                IssueDate = now,
                DueDate   = now.AddDays(7)
            };

            _context.Add(bookAssignToStudent);
            _context.SaveChanges();

            return("Success");
        }