From 02885951fc92f53aa65914e57a8433f415d0e76d Mon Sep 17 00:00:00 2001 From: gagan5133 Date: Fri, 27 Jan 2017 16:44:29 -0600 Subject: [PATCH] 3 solutions completed. --- .../Execise.Tests/UnitTests.cs | 17 +++++++++++-- .../Exercise/BookBorrowable.cs | 25 +++++++++++++++++-- DesignPatternsSolution/Exercise/Item.cs | 8 ++++-- DesignPatternsSolution/Exercise/LibObject.cs | 12 ++++++++- DesignPatternsSolution/Exercise/Library.cs | 11 +++++++- DesignPatternsSolution/Exercise/Person.cs | 4 ++- .../Exercise/Registration.cs | 25 +++++++++++++++++++ 7 files changed, 93 insertions(+), 9 deletions(-) diff --git a/DesignPatternsSolution/Execise.Tests/UnitTests.cs b/DesignPatternsSolution/Execise.Tests/UnitTests.cs index 0a3b80e..c84f6c7 100644 --- a/DesignPatternsSolution/Execise.Tests/UnitTests.cs +++ b/DesignPatternsSolution/Execise.Tests/UnitTests.cs @@ -10,6 +10,9 @@ public class UnitTests [TestMethod] public void LibraryShouldBeSingleton() { + Library lib1 = Library.getLib(); + Library lib2 = Library.getLib(); + Assert.ReferenceEquals(lib1, lib2); //check that when you create a Library instance second time, //you get exactly the same instance as for a very first time } @@ -18,21 +21,31 @@ public void LibraryShouldBeSingleton() [TestMethod] public void BookShouldRegister() { + Book book = new Book("Gary", "Program coding", 2017, 1, new Exercise.RegistrationApi()); + Assert.AreNotEqual(-1, RegistrationRepository.Register(book)); } //test that an customer was registered successfully by checking the returned Id value is not -1 [TestMethod] public void CustomerShouldRegister() { + Customer customer = new Customer("Gagandeep", "Winnipeg", new Exercise.RegistrationApi()); + Assert.AreNotEqual(-1, RegistrationRepository.Register(customer)); } //test that a book can be borrowed [TestMethod] public void CanBorrowBook() { + Book book1 = new Book("Gary2", "Program coding", 2017, 200, new Exercise.RegistrationApi()); + BookBorrowable bookborrow = new BookBorrowable(book1, new Decorator()); + + bookborrow.Borrow(); + Assert.AreEqual(199, book1.AvailableAmount); + //create a borrowable book with available amount more than one. //Run BorrowOne method of the BookBorrowable instance. Check that total amount was reduced by one. - - } + + } } } diff --git a/DesignPatternsSolution/Exercise/BookBorrowable.cs b/DesignPatternsSolution/Exercise/BookBorrowable.cs index 21bd9cf..e52a5c1 100644 --- a/DesignPatternsSolution/Exercise/BookBorrowable.cs +++ b/DesignPatternsSolution/Exercise/BookBorrowable.cs @@ -1,7 +1,28 @@ namespace Exercise { - public class BookBorrowable + public class BookBorrowable : Book { - + private Book book; + private Decorator decorator; + + public BookBorrowable(Book book, Decorator decorator) + : base(book.Author, book.NameOrTitle, book.YearCreated, book.AvailableAmount, new Exercise.RegistrationApi()) + { + this.book = book; + this.decorator = decorator; + } + + public void Borrow() + { + decorator.Borrow(book); + } + } + + public class Decorator + { + public void Borrow(Book book) + { + book.AvailableAmount--; + } } } diff --git a/DesignPatternsSolution/Exercise/Item.cs b/DesignPatternsSolution/Exercise/Item.cs index 92c21e1..edee09d 100644 --- a/DesignPatternsSolution/Exercise/Item.cs +++ b/DesignPatternsSolution/Exercise/Item.cs @@ -2,7 +2,9 @@ { public abstract class Item : LibObject { - public Item(int amount, int year) + //public Item(int amount, int year) + public Item(int amount, int year, IRegistrationApi registrationApi) + : base(registrationApi) { AvailableAmount = amount; ObjType = ObjectType.Item; @@ -12,7 +14,9 @@ public Item(int amount, int year) public class Book : Item { - public Book(string author, string title, int year, int amount) : base(amount, year) + //public Book(string author, string title, int year, int amount) : base(amount, year) + public Book(string author, string title, int year, int amount, IRegistrationApi registrationApi) + : base(amount, year, registrationApi) { NameOrTitle = title; Author = author; diff --git a/DesignPatternsSolution/Exercise/LibObject.cs b/DesignPatternsSolution/Exercise/LibObject.cs index cf1e2bb..9cb2217 100644 --- a/DesignPatternsSolution/Exercise/LibObject.cs +++ b/DesignPatternsSolution/Exercise/LibObject.cs @@ -1,12 +1,22 @@ namespace Exercise { - public abstract class LibObject + public abstract class LibObject : IRegistarable { + private IRegistrationApi registrationApi; + protected LibObject(IRegistrationApi registrationApi) + { + this.registrationApi = registrationApi; + } public int ObjectId { get; set; } public int AvailableAmount { get; set; } public string NameOrTitle { get; set; } public ObjectType ObjType { get; set; } public int YearCreated { get; set; } + + public RegisteredObject GetRegistrationInfo() + { + return registrationApi.GetRegistrationInfo(this); + } } public enum ObjectType diff --git a/DesignPatternsSolution/Exercise/Library.cs b/DesignPatternsSolution/Exercise/Library.cs index 1d9dde4..aad8f41 100644 --- a/DesignPatternsSolution/Exercise/Library.cs +++ b/DesignPatternsSolution/Exercise/Library.cs @@ -4,14 +4,23 @@ public class Library { //implement Singleton to make sure only one library will exist - + static Library lib = new Library(); + + private Library() { } //Implement Register method by utilizing RegistrationRepository (complete missing parts) + + public static Library getLib() + { + return lib; + } public int Register() { // return RegistrationRepository.Register(); //dummy, just to compile + + return 0; } } diff --git a/DesignPatternsSolution/Exercise/Person.cs b/DesignPatternsSolution/Exercise/Person.cs index 2c2ed21..5e953cb 100644 --- a/DesignPatternsSolution/Exercise/Person.cs +++ b/DesignPatternsSolution/Exercise/Person.cs @@ -7,7 +7,9 @@ public class Customer : LibObject public string Address { get; set; } public DateTime RegisteredAt { get; set; } - public Customer(string name, string addr) + //public Customer(string name, string addr) + public Customer(string name, string addr, IRegistrationApi registrationApi) + : base(registrationApi) { NameOrTitle = name; Address = addr; diff --git a/DesignPatternsSolution/Exercise/Registration.cs b/DesignPatternsSolution/Exercise/Registration.cs index f8c4eb0..0568404 100644 --- a/DesignPatternsSolution/Exercise/Registration.cs +++ b/DesignPatternsSolution/Exercise/Registration.cs @@ -3,6 +3,31 @@ using System.Linq; namespace Exercise { + + + public interface IRegistrationApi + { + RegisteredObject GetRegistrationInfo(LibObject libObject); + } + + public class RegistrationApi : IRegistrationApi + { + public RegistrationApi() + { + } + + public RegisteredObject GetRegistrationInfo(LibObject libObject) + { + return new RegisteredObject + { + Info = libObject.NameOrTitle, + AvailableAmount = libObject.AvailableAmount, + Id = libObject.ObjectId + }; + } + } + + public interface IRegistarable { RegisteredObject GetRegistrationInfo();