public void Assign_Book_To_Student()
        {
            var options = new DbContextOptionsBuilder <SchoolLibraryContext>()
                          .UseInMemoryDatabase("Book_Assignment_Student")
                          .Options;

            using (var context = new SchoolLibraryContext(options))
            {
                context.Students.Add(new Student
                {
                    Id   = 100,
                    Name = "Ali"
                });

                context.Books.Add(new Book
                {
                    Id       = 555,
                    Name     = "How to become a millinaire",
                    IsIssued = false,
                    Author   = "XYZ"
                });

                context.SaveChanges();
            }

            using (var context = new SchoolLibraryContext(options))
            {
                var service = new BookAssignmentService(context);
                service.AssignBook(555, 100);
                var book = context.Books.Find(555);
                Assert.True(book.IsIssued);
            }
        }
Esempio n. 2
0
        public void Add(Book newBook)
        {
            var book = Get(newBook.Id);

            if (book == null)
            {
                _context.Add(newBook);
                _context.SaveChanges();
            }
        }
        public void Add(Student student)
        {
            var newStudent = Get(student.Id);

            if (newStudent == null)
            {
                _context.Add(student);
                _context.SaveChanges();
            }
        }
        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");
        }
        public void Not_Assign_Same_Book_To_Multiple_Students()
        {
            var options = new DbContextOptionsBuilder <SchoolLibraryContext>()
                          .UseInMemoryDatabase("Not_Assign_Same_Book_To_Multiple_Students")
                          .Options;

            using (var context = new SchoolLibraryContext(options))
            {
                context.Students.Add(new Student
                {
                    Id   = 100,
                    Name = "Ali"
                });

                context.Students.Add(new Student
                {
                    Id   = 200,
                    Name = "Rehmat"
                });

                context.Books.Add(new Book
                {
                    Id       = 555,
                    Name     = "How to become a millinaire",
                    IsIssued = false,
                    Author   = "XYZ"
                });

                context.SaveChanges();
            }

            using (var context = new SchoolLibraryContext(options))
            {
                var service = new BookAssignmentService(context);
                service.AssignBook(555, 100);

                var bookAssignedTo100 = context.BookAssignToStudents.SingleOrDefault(a => a.Student.Id == 100);
                Assert.NotNull(bookAssignedTo100);

                service.AssignBook(555, 200);
                var bookAssignedTo200 = context.BookAssignToStudents.SingleOrDefault(a => a.Student.Id == 200);
                Assert.Null(bookAssignedTo200);
            }
        }
        public void Extend_DueDate_Of_Assigned_Book()
        {
            var options = new DbContextOptionsBuilder <SchoolLibraryContext>()
                          .UseInMemoryDatabase("Extend_DueDate_Of_Assigned_Book")
                          .Options;

            using (var context = new SchoolLibraryContext(options))
            {
                context.Students.Add(new Student
                {
                    Id   = 100,
                    Name = "Ali"
                });

                context.Books.Add(new Book
                {
                    Id       = 555,
                    Name     = "How to become a millinaire",
                    IsIssued = false,
                    Author   = "XYZ"
                });

                context.SaveChanges();
            }

            using (var context = new SchoolLibraryContext(options))
            {
                var service = new BookAssignmentService(context);
                service.AssignBook(555, 100);

                var assignedBook = service.GetAssignedBook(555);
                Assert.True(assignedBook.Book.IsIssued);

                var response = service.ExtendDueDate(assignedBook.BookId, assignedBook.StudentId, assignedBook.DueDate.AddDays(7));

                Assert.Equal("Success", response);
            }
        }
        public void Get_Overdue_Books()
        {
            var options = new DbContextOptionsBuilder <SchoolLibraryContext>()
                          .UseInMemoryDatabase("Get_Overdue_Books")
                          .Options;

            using (var context = new SchoolLibraryContext(options))
            {
                context.Students.Add(new Student
                {
                    Id   = 100,
                    Name = "Ali"
                });

                context.Books.Add(new Book
                {
                    Id       = 555,
                    Name     = "How to become a millinaire",
                    IsIssued = false,
                    Author   = "XYZ"
                });

                context.Books.Add(new Book
                {
                    Id       = 556,
                    Name     = "Some New Book 1",
                    IsIssued = false,
                    Author   = "XYZ 1"
                });

                context.Books.Add(new Book
                {
                    Id       = 557,
                    Name     = "Some New Book 2",
                    IsIssued = false,
                    Author   = "XYZ 2"
                });

                context.SaveChanges();
            }

            using (var context = new SchoolLibraryContext(options))
            {
                var service = new BookAssignmentService(context);
                service.AssignBook(555, 100);
                service.AssignBook(556, 100);
                service.AssignBook(557, 100);

                var assignedBook1 = context.BookAssignToStudents.Single(b => b.BookId == 555);
                assignedBook1.DueDate = DateTime.Now.AddDays(-5);
                var assignedBook2 = context.BookAssignToStudents.Single(b => b.BookId == 557);
                assignedBook2.DueDate = DateTime.Now.AddDays(-5);

                context.UpdateRange(new object[] { assignedBook1, assignedBook2 });
                context.SaveChanges();

                var response = service.GetOverdueBooks();

                Assert.Equal(2, response.Count());
            }
        }