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;
+ }
+ }
+
+
}