diff --git a/DesignPatternsSolution/Execise.Tests/Execise.Tests.csproj b/DesignPatternsSolution/Execise.Tests/Execise.Tests.csproj index 71e68ac..4f78f0d 100644 --- a/DesignPatternsSolution/Execise.Tests/Execise.Tests.csproj +++ b/DesignPatternsSolution/Execise.Tests/Execise.Tests.csproj @@ -8,7 +8,7 @@ Properties Execise.Tests Execise.Tests - v4.5.2 + v4.5 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 @@ -16,6 +16,7 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest + true diff --git a/DesignPatternsSolution/Execise.Tests/UnitTests.cs b/DesignPatternsSolution/Execise.Tests/UnitTests.cs index 0a3b80e..3c3c52c 100644 --- a/DesignPatternsSolution/Execise.Tests/UnitTests.cs +++ b/DesignPatternsSolution/Execise.Tests/UnitTests.cs @@ -12,18 +12,36 @@ public void LibraryShouldBeSingleton() { //check that when you create a Library instance second time, //you get exactly the same instance as for a very first time + var libOne = Library.GetLibrary(); + var libTwo = Library.GetLibrary(); + Assert.AreSame(libOne, libTwo); + + } //test that an book was registered successfully by checking the returned Id value is not -1 [TestMethod] public void BookShouldRegister() { + var lib = Library.GetLibrary(); + var book = new Book("The Dude", "The Big Lebowski", 1998, 100, new LibObjectRegisterAPI()); + + var retval = lib.Register(book); + Assert.AreNotEqual(-1, retval); + + } //test that an customer was registered successfully by checking the returned Id value is not -1 [TestMethod] public void CustomerShouldRegister() { + var lib = Library.GetLibrary(); + + var customer = new Customer("The Dude", "609 Venezia Avenue", new LibObjectRegisterAPI()); + + var retval = lib.Register(customer); + Assert.AreNotEqual(-1, retval); } //test that a book can be borrowed @@ -32,7 +50,13 @@ public void CanBorrowBook() { //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. - + var lib = Library.GetLibrary(); + var book = new BookBorrowable("The Dude", "The Big Lebowski", 1998, 100, new LibObjectRegisterAPI()); + + var retval = lib.Register(book); + + Assert.IsTrue(book.BorrowBook()); + } } } diff --git a/DesignPatternsSolution/Exercise/BookBorrowable.cs b/DesignPatternsSolution/Exercise/BookBorrowable.cs index 21bd9cf..da69bbd 100644 --- a/DesignPatternsSolution/Exercise/BookBorrowable.cs +++ b/DesignPatternsSolution/Exercise/BookBorrowable.cs @@ -1,7 +1,19 @@ namespace Exercise { - public class BookBorrowable + public class BookBorrowable: Book { - + public BookBorrowable(string author, string title, int year, int amount, IRegisterAPI registerApi) : base(author, title, year, amount, registerApi) + { + } + + public bool BorrowBook() + { + if (this.AvailableAmount > 0) + { + this.AvailableAmount--; + return true; + } + return false; + } } } diff --git a/DesignPatternsSolution/Exercise/Exercise.csproj b/DesignPatternsSolution/Exercise/Exercise.csproj index d2cc582..87a49ae 100644 --- a/DesignPatternsSolution/Exercise/Exercise.csproj +++ b/DesignPatternsSolution/Exercise/Exercise.csproj @@ -9,9 +9,10 @@ Properties Exercise Exercise - v4.5.2 + v4.5 512 true + AnyCPU diff --git a/DesignPatternsSolution/Exercise/Item.cs b/DesignPatternsSolution/Exercise/Item.cs index 92c21e1..e9d8c53 100644 --- a/DesignPatternsSolution/Exercise/Item.cs +++ b/DesignPatternsSolution/Exercise/Item.cs @@ -2,7 +2,7 @@ { public abstract class Item : LibObject { - public Item(int amount, int year) + public Item(int amount, int year, IRegisterAPI registerApi): base(registerApi) { AvailableAmount = amount; ObjType = ObjectType.Item; @@ -12,11 +12,14 @@ 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, IRegisterAPI registerApi) + : base(amount, year, registerApi) { NameOrTitle = title; Author = author; } public string Author { get; set; } + + } } diff --git a/DesignPatternsSolution/Exercise/LibObject.cs b/DesignPatternsSolution/Exercise/LibObject.cs index cf1e2bb..a845efd 100644 --- a/DesignPatternsSolution/Exercise/LibObject.cs +++ b/DesignPatternsSolution/Exercise/LibObject.cs @@ -1,12 +1,23 @@ namespace Exercise { - public abstract class LibObject + public abstract class LibObject: IRegistarable { 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; } + protected IRegisterAPI _RegisterApi; + + public RegisteredObject GetRegistrationInfo() + { + return _RegisterApi.GetRegisteredObject(this); + } + + public LibObject(IRegisterAPI iRegisterApi) + { + _RegisterApi = iRegisterApi; + } } public enum ObjectType diff --git a/DesignPatternsSolution/Exercise/Library.cs b/DesignPatternsSolution/Exercise/Library.cs index 1d9dde4..6f22bbc 100644 --- a/DesignPatternsSolution/Exercise/Library.cs +++ b/DesignPatternsSolution/Exercise/Library.cs @@ -2,17 +2,22 @@ { public class Library { + + static Library _library = new Library(); + //implement Singleton to make sure only one library will exist + private Library() + {} + + public static Library GetLibrary() { return _library; } - //Implement Register method by utilizing RegistrationRepository (complete missing parts) - public int Register() + public int Register(IRegistarable registarable) { - // return RegistrationRepository.Register(); + return RegistrationRepository.Register(registarable); - //dummy, just to compile - return 0; + } } } diff --git a/DesignPatternsSolution/Exercise/Person.cs b/DesignPatternsSolution/Exercise/Person.cs index 2c2ed21..9fb8d20 100644 --- a/DesignPatternsSolution/Exercise/Person.cs +++ b/DesignPatternsSolution/Exercise/Person.cs @@ -7,7 +7,7 @@ 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, IRegisterAPI registerApi): base (registerApi) { NameOrTitle = name; Address = addr; @@ -19,5 +19,6 @@ public void SetId(int id) { ObjectId = id; } + } } diff --git a/DesignPatternsSolution/Exercise/Registration.cs b/DesignPatternsSolution/Exercise/Registration.cs index f8c4eb0..9c202f4 100644 --- a/DesignPatternsSolution/Exercise/Registration.cs +++ b/DesignPatternsSolution/Exercise/Registration.cs @@ -56,4 +56,32 @@ public override string ToString() return Info + " " + "Available: " + AvailableAmount; } } + + public interface IRegisterAPI + { + RegisteredObject GetRegisteredObject(LibObject libObject); + } + + public class LibObjectRegisterAPI : IRegisterAPI + { + + public LibObjectRegisterAPI() + { + } + + + public RegisteredObject GetRegisteredObject(LibObject libObject) + { + RegisteredObject regObJ = new RegisteredObject + { + Info = libObject.NameOrTitle, + AvailableAmount = libObject.AvailableAmount, + Id = libObject.ObjectId + }; + + return regObJ; + } + } + + }