public IMember AddMember(string firstName, string lastName, string contactPhone, string emailAddress) { var member = new Member( firstName, lastName, contactPhone, emailAddress, MemberList.Count); MemberList.Add(member); return member; }
public void AddFineThrowsArgumentExceptionIfNegative() { var member = new Member("test", "member", "phone", "email", 1); var ex = Assert.Throws<ArgumentException>(() => member.AddFine(-5.00f)); Assert.Equal("Fine must not be negative value", ex.Message); }
public void CanAddLoanToMember() { var member = new Member("test", "member", "phone", "email", 1); // Can add a loan. var loan = Substitute.For<ILoan>(); member.AddLoan(loan); Assert.Contains(loan, member.Loans); }
public void AddLoanThrowsInvalidOperationExceptionIfMemberIsNotAllowedToBorrow() { // Set member to BORROWING_DISALLOWED var member = new Member("test", "member", "phone", "email", 1) { State = MemberState.BORROWING_DISALLOWED }; var loan = Substitute.For<ILoan>(); var ex = Assert.Throws<InvalidOperationException>(() => member.AddLoan(loan)); Assert.Equal("Cannot add a loan when member is not allowed to borrow", ex.Message); }
public void AddLoanThrowsArgumentNullExceptionIfLoanIsNull() { var member = new Member("test", "member", "phone", "email", 1); // Null loan. ILoan loan = null; var ex = Assert.Throws<ArgumentException>(() => member.AddLoan(loan)); Assert.Equal("Loan cannot be null", ex.Message); }
public void CanGetBook() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); DateTime borrowDate = DateTime.Today; DateTime dueDate = DateTime.Today.AddDays(7); var loan = new Loan(book, member, borrowDate, dueDate); Assert.Equal(book, loan.Book); }
public void CanCommitLoan() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); DateTime borrowDate = DateTime.Today; DateTime dueDate = DateTime.Today.AddDays(7); var loanId = 1; var loan = new Loan(book, member, borrowDate, dueDate); loan.Commit(loanId); }
public void CanAddLoanToMember() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); // Add a loan. var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(14)) { State = LoanState.CURRENT }; member.AddLoan(loan); Assert.Contains(loan, member.Loans); }
public void BorrowBookThrowsRuntimeExceptionIfBookIsNotCurrentlyAvailable() { // Set book state to something other than Available. var book = new Book("author", "title", "call number", 1) { State = BookState.LOST }; var member = new Member("first", "last", "phone", "email", 1); var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(7)); // Associate the book with the loan. var ex = Assert.Throws<InvalidOperationException>(() => book.Borrow(loan)); Assert.Equal("Cannot borrow a book that is not available", ex.Message); }
public void AddLoanThrowsInvalidOperationExceptionIfMemberIsNotAllowedToBorrow() { var book = new Book("author", "title", "call number", 1); // Set member to BORROWING_DISALLOWED var member = new Member("first", "last", "phone", "email", 1) { State = MemberState.BORROWING_DISALLOWED }; var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(14)) { State = LoanState.CURRENT }; var ex = Assert.Throws<InvalidOperationException>(() => member.AddLoan(loan)); Assert.Equal("Cannot add a loan when member is not allowed to borrow", ex.Message); }
public void CanBorrowBook() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(7)); // Associate the book with the loan. book.Borrow(loan); // Set book state to ON_LOAN - affected by GetLoanFromBookReturnsNullIfBookIsNotON_LOAN() book.State = BookState.ON_LOAN; Assert.Equal(loan, book.Loan); }
public void WhenBorrowingAllowedAndFinePaidBorrowingAllowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); Assert.False(member.HasReachedLoanLimit); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); member.AddFine(5.00f); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); member.PayFine(5.00f); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); }
public void CanCreateLoan() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); DateTime borrowDate = DateTime.Today; DateTime dueDate = DateTime.Today.AddDays(7); // Jim has stated that the initial spec is incorrect and it should not take an ID, but should return a default ID of 0. var loan = new Loan(book, member, borrowDate, dueDate); Assert.NotNull(loan); // By new rule, assert ID = 0. Assert.Equal(0, loan.ID); }
public void WhenBorrowingAllowedAndFinedMoreThanMaxBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); var fineAmount = BookConstants.FINE_LIMIT + 1.00f; Assert.False(member.HasReachedLoanLimit); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); member.AddFine(fineAmount); Assert.True(member.HasReachedFineLimit); Assert.True(fineAmount > BookConstants.FINE_LIMIT); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void CanRemoveLoanFromMember() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(14)) { State = LoanState.CURRENT }; member.AddLoan(loan); // Make sure Member has Loan. Assert.Contains(loan, member.Loans); member.RemoveLoan(loan); // Make sure Loan has been removed from Member. Assert.DoesNotContain(loan, member.Loans); }
public void CanGetLoans() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); var loan1 = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(14)) { State = LoanState.CURRENT }; var loan2 = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(14)) { State = LoanState.CURRENT }; var loan3 = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(14)) { State = LoanState.CURRENT }; var loan4 = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(14)) { State = LoanState.CURRENT }; member.AddLoan(loan1); member.AddLoan(loan2); member.AddLoan(loan3); Assert.Equal(3, member.Loans.Count()); Assert.Contains(loan1, member.Loans); Assert.DoesNotContain(loan4, member.Loans); }
public void CanAddFineToMember() { var member = new Member("test", "member", "phone", "email", 1); const float fine1 = 5.50f; const float fine2 = 2.00f; // Has no fines after being created. Assert.Equal(0, member.FineAmount); // Can add a fine. member.AddFine(fine1); Assert.Equal(fine1, member.FineAmount); // Make sure it will increment by additional amount. member.AddFine(fine2); Assert.Equal(fine1 + fine2, member.FineAmount); }
public void WhenBorrowingAllowedAndHasOverdueLoansBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); var loan = Substitute.For<ILoan>(); loan.CheckOverDue(DateTime.Today).Returns(true); loan.IsOverDue.Returns(true); member.AddLoan(loan); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); foreach (var l in member.Loans) l.CheckOverDue(DateTime.Today); Assert.True(member.HasOverDueLoans); loan.Received().CheckOverDue(DateTime.Today); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void HasOverdueLoansReturnsFalseIfNoLoanIsOverdue() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); // Add a single loan that is not overdue. var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(7)); member.Loans.Add(loan); Assert.False(member.HasOverDueLoans); }
public void WhenMemberCreatedShouldBeBorrowingAllowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); }
public void WhenBorrowingDisallowedAndLoanRemovedButHasOverdueLoanBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); var overdue = Substitute.For<ILoan>(); member.AddLoan(overdue); overdue.IsOverDue.Returns(true); while (!member.HasReachedLoanLimit) { var loan = Substitute.For<ILoan>(); member.AddLoan(loan); } // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); // Remove the first one that isn't the overdue mock. member.RemoveLoan(member.Loans.First(l => l != overdue)); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void WhenBorrowingDisallowedAndLoanRemovedButHasFinesBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); while (!member.HasReachedLoanLimit) { var loan = Substitute.For<ILoan>(); member.AddLoan(loan); } member.AddFine(BookConstants.FINE_LIMIT + 1.00f); // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); // Remove the first one that isn't the overdue mock. member.RemoveLoan(member.Loans[0]); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void WhenBorrowingDisallowedAndFinePaidButStillOverFineLimitBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); var fineAmount = BookConstants.FINE_LIMIT + 5.00f; member.AddFine(fineAmount); // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); member.PayFine(fineAmount - BookConstants.FINE_LIMIT); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void WhenBorrowingDisallowedAndFinePaidButLoanLimitStillReachedBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); var fineAmount = BookConstants.FINE_LIMIT + 5.00f; while (!member.HasReachedLoanLimit) { var loan = Substitute.For<ILoan>(); member.AddLoan(loan); } member.AddFine(fineAmount); // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); member.PayFine(fineAmount); Assert.True(member.HasReachedLoanLimit); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void WhenBorrowingDisallowedAndFinePaidButHasOverdueLoansBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); var loan = Substitute.For<ILoan>(); var fineAmount = BookConstants.FINE_LIMIT + 5.00f; member.AddLoan(loan); member.AddFine(fineAmount); loan.IsOverDue.Returns(true); // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); member.PayFine(fineAmount); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void WhenBorrowingAllowedAndRemovingLoanBorrowingAllowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); var loan = Substitute.For<ILoan>(); member.AddLoan(loan); Assert.False(member.HasReachedLoanLimit); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); member.RemoveLoan(loan); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); }
public void WhenBorrowingDisallowedAndLoanRemovedBorrowingAllowed() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); while (!member.HasReachedLoanLimit) { var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(7)) { State = LoanState.CURRENT }; member.AddLoan(loan); } // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); member.RemoveLoan(member.Loans[0]); Assert.Equal(MemberState.BORROWING_ALLOWED, member.State); }
public void WhenBorrowingDisallowedAndLoanRemovedButHasFinesBorrowingDisallowed() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); while (!member.HasReachedLoanLimit) { var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(7)) { State = LoanState.CURRENT }; member.AddLoan(loan); } member.AddFine(BookConstants.FINE_LIMIT + 1.00f); // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); // Remove the first one that isn't the overdue mock. member.RemoveLoan(member.Loans[0]); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void WhenBorrowingAllowedAndLoanAddedAndLimitReachedBorrowingDisallowed() { var member = new Member("firstName", "lastName", "contactPhone", "emailAddress", 1); while (!member.HasReachedLoanLimit) { var loan = Substitute.For<ILoan>(); member.AddLoan(loan); } Assert.True(member.HasReachedLoanLimit); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }
public void WhenBorrowingDisallowedAndLoanRemovedButHasOverdueLoanBorrowingDisallowed() { var book = new Book("author", "title", "call number", 1); var member = new Member("first", "last", "phone", "email", 1); var overdue = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(7)) { State = LoanState.CURRENT }; member.AddLoan(overdue); // Set it to overdue overdue.CheckOverDue(DateTime.Today.AddMonths(1)); while (!member.HasReachedLoanLimit) { var loan = new Loan(book, member, DateTime.Today, DateTime.Today.AddDays(7)) { State = LoanState.CURRENT }; member.AddLoan(loan); } // Borrowing state disallowed. Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); // Remove the first one that isn't the overdue mock. member.RemoveLoan(member.Loans.First(l => l != overdue)); Assert.Equal(MemberState.BORROWING_DISALLOWED, member.State); }