diff --git a/DesignPatternsSolution/DesignPatternsSolution.sln b/DesignPatternsSolution/DesignPatternsSolution.sln index e5b257d..75f0446 100644 --- a/DesignPatternsSolution/DesignPatternsSolution.sln +++ b/DesignPatternsSolution/DesignPatternsSolution.sln @@ -1,11 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Exercise", "Exercise\Exercise.csproj", "{EA98A53A-F8CD-4539-9E57-1FEF2D64F13A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Execise.Tests", "Execise.Tests\Execise.Tests.csproj", "{464FBD03-CA8B-4926-8F69-66726819DA02}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Exercise.Tests", "Execise.Tests\Exercise.Tests.csproj", "{464FBD03-CA8B-4926-8F69-66726819DA02}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documents", "Documents", "{8C88EFFA-EC68-42ED-A482-A7B8964538E8}" ProjectSection(SolutionItems) = preProject diff --git a/DesignPatternsSolution/Execise.Tests/Execise.Tests.csproj b/DesignPatternsSolution/Execise.Tests/Exercise.Tests.csproj similarity index 98% rename from DesignPatternsSolution/Execise.Tests/Execise.Tests.csproj rename to DesignPatternsSolution/Execise.Tests/Exercise.Tests.csproj index 71e68ac..4f78f0d 100644 --- a/DesignPatternsSolution/Execise.Tests/Execise.Tests.csproj +++ b/DesignPatternsSolution/Execise.Tests/Exercise.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..09c2f7b 100644 --- a/DesignPatternsSolution/Execise.Tests/UnitTests.cs +++ b/DesignPatternsSolution/Execise.Tests/UnitTests.cs @@ -1,7 +1,7 @@ using Exercise; using Microsoft.VisualStudio.TestTools.UnitTesting; -namespace Execise.Tests +namespace Exercise.Tests { [TestClass] public class UnitTests @@ -12,18 +12,28 @@ 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 + Library library1 = Library.getInstance(); + Library library2 = Library.getInstance(); + + Assert.AreEqual(library1, library2); } //test that an book was registered successfully by checking the returned Id value is not -1 [TestMethod] public void BookShouldRegister() { + Book book = new Book("Mr. Smart", "My Book", 1985, 20); + int result = RegistrationRepository.Register(book); + Assert.AreNotEqual(-1, result); } //test that an customer was registered successfully by checking the returned Id value is not -1 [TestMethod] public void CustomerShouldRegister() { + Customer customer = new Customer("John Doe", "123 Fourth St."); + int result = RegistrationRepository.Register(customer); + Assert.AreNotEqual(-1, result); } //test that a book can be borrowed @@ -32,7 +42,17 @@ 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. - - } + + Book myBook = new Book("Glen Miller", "My Book", 1990, 50); + + int oldCount = myBook.AvailableAmount; + + Borrowable bookBorrowable = new Borrowable(null, new BorrowOne(myBook)); + bookBorrowable.BorrowOne(); + + int newCount = myBook.AvailableAmount; + + Assert.AreEqual(oldCount - 1, newCount); + } } } diff --git a/DesignPatternsSolution/Exercise/BookBorrowable.cs b/DesignPatternsSolution/Exercise/BookBorrowable.cs index 21bd9cf..5c6236e 100644 --- a/DesignPatternsSolution/Exercise/BookBorrowable.cs +++ b/DesignPatternsSolution/Exercise/BookBorrowable.cs @@ -1,7 +1,48 @@ namespace Exercise { - public class BookBorrowable + public abstract class ABorrowable { - + public virtual void BorrowOne() { } + protected BorrowOne borrowOneProcedure; + public ABorrowable(BorrowOne borrowOneProcedure) + { + this.borrowOneProcedure = borrowOneProcedure; + } + } + + public class Borrowable : ABorrowable + { + private ABorrowable borrowableToExtend; + + public Borrowable(ABorrowable borrowable, BorrowOne borrowOneProcedure) + : base(borrowOneProcedure) + { + borrowableToExtend = borrowable; + } + + public override void BorrowOne() + { + if (borrowableToExtend != null) + { + borrowableToExtend.BorrowOne(); + } + + borrowOneProcedure.borrowOne(); + } + } + + public class BorrowOne + { + private LibObject libObject; + + public BorrowOne(LibObject libObject) + { + this.libObject = libObject; + } + + public void borrowOne() + { + this.libObject.AvailableAmount--; + } } } 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..eefa80c 100644 --- a/DesignPatternsSolution/Exercise/Item.cs +++ b/DesignPatternsSolution/Exercise/Item.cs @@ -10,13 +10,23 @@ public Item(int amount, int year) } } - public class Book : Item + public class Book : Item, IRegistarable { - 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) { NameOrTitle = title; Author = author; } public string Author { get; set; } + + public RegisteredObject GetRegistrationInfo() + { + RegisteredObject registeredObject = new RegisteredObject(); + registeredObject.Info = this.NameOrTitle; + registeredObject.AvailableAmount = this.AvailableAmount; + + return registeredObject; + } } } diff --git a/DesignPatternsSolution/Exercise/Library.cs b/DesignPatternsSolution/Exercise/Library.cs index 1d9dde4..1252e2f 100644 --- a/DesignPatternsSolution/Exercise/Library.cs +++ b/DesignPatternsSolution/Exercise/Library.cs @@ -2,9 +2,14 @@ { public class Library { - //implement Singleton to make sure only one library will exist + private static Library library = new Library(); - + private Library() { } + + public static Library getInstance() + { + return library; + } //Implement Register method by utilizing RegistrationRepository (complete missing parts) public int Register() diff --git a/DesignPatternsSolution/Exercise/Person.cs b/DesignPatternsSolution/Exercise/Person.cs index 2c2ed21..685975f 100644 --- a/DesignPatternsSolution/Exercise/Person.cs +++ b/DesignPatternsSolution/Exercise/Person.cs @@ -2,7 +2,7 @@ namespace Exercise { - public class Customer : LibObject + public class Customer : LibObject, IRegistarable { public string Address { get; set; } public DateTime RegisteredAt { get; set; } @@ -19,5 +19,14 @@ public void SetId(int id) { ObjectId = id; } + + public RegisteredObject GetRegistrationInfo() + { + RegisteredObject registeredObject = new RegisteredObject(); + registeredObject.Info = this.NameOrTitle; + registeredObject.AvailableAmount = this.AvailableAmount; + + return registeredObject; + } } }