From 426b1f342b9541ed02bd0129993830b2b73f2f2f Mon Sep 17 00:00:00 2001 From: Mateusz Pietrzak Date: Sun, 4 Feb 2024 13:44:53 +0100 Subject: [PATCH] Completed all tasks --- tdd-oop-inheritance.CSharp.Main/Article.cs | 42 -------- tdd-oop-inheritance.CSharp.Main/Book.cs | 42 -------- .../Items/Article.cs | 10 ++ .../Items/Author.cs | 13 +++ tdd-oop-inheritance.CSharp.Main/Items/Book.cs | 10 ++ tdd-oop-inheritance.CSharp.Main/Items/Item.cs | 35 +++++++ .../Items/Newspaper.cs | 18 ++++ tdd-oop-inheritance.CSharp.Main/Library.cs | 97 ++++--------------- tdd-oop-inheritance.CSharp.Main/Newspaper.cs | 31 ------ .../ArticleTest.cs | 57 +++++------ tdd-oop-inheritance.CSharp.Test/AuthorTest.cs | 55 +++++++++++ tdd-oop-inheritance.CSharp.Test/BookTest.cs | 40 ++++---- .../LibraryTest.cs | 94 ++++++++++++++++++ .../NewspaperTest.cs | 21 ++-- 14 files changed, 317 insertions(+), 248 deletions(-) delete mode 100644 tdd-oop-inheritance.CSharp.Main/Article.cs delete mode 100644 tdd-oop-inheritance.CSharp.Main/Book.cs create mode 100644 tdd-oop-inheritance.CSharp.Main/Items/Article.cs create mode 100644 tdd-oop-inheritance.CSharp.Main/Items/Author.cs create mode 100644 tdd-oop-inheritance.CSharp.Main/Items/Book.cs create mode 100644 tdd-oop-inheritance.CSharp.Main/Items/Item.cs create mode 100644 tdd-oop-inheritance.CSharp.Main/Items/Newspaper.cs delete mode 100644 tdd-oop-inheritance.CSharp.Main/Newspaper.cs create mode 100644 tdd-oop-inheritance.CSharp.Test/AuthorTest.cs create mode 100644 tdd-oop-inheritance.CSharp.Test/LibraryTest.cs diff --git a/tdd-oop-inheritance.CSharp.Main/Article.cs b/tdd-oop-inheritance.CSharp.Main/Article.cs deleted file mode 100644 index 2f92909..0000000 --- a/tdd-oop-inheritance.CSharp.Main/Article.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace tdd_oop_inheritance.CSharp.Main -{ - public class Article { - public string title; - - bool onLoan = false; - - public Article(string title) { - this.title = title; - } - - public bool isOnLoan() { - return onLoan; - } - - public string checkIn() { - if (!this.isOnLoan()) { - return "item is not currently on loan"; - } - - this.onLoan = false; - - return "item has been checked in"; - } - - public string checkOut() { - if (this.isOnLoan()) { - return "item is currently on loan"; - } - - this.onLoan = true; - - return "item has been checked out"; - } - } -} diff --git a/tdd-oop-inheritance.CSharp.Main/Book.cs b/tdd-oop-inheritance.CSharp.Main/Book.cs deleted file mode 100644 index ab271ef..0000000 --- a/tdd-oop-inheritance.CSharp.Main/Book.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace tdd_oop_inheritance.CSharp.Main -{ - public class Book { - public string title; - - bool onLoan = false; - - public Book(string title) { - this.title = title; - } - - public bool isOnLoan() { - return onLoan; - } - - public string checkIn() { - if (!this.isOnLoan()) { - return "item is not currently on loan"; - } - - this.onLoan = false; - - return "item has been checked in"; - } - - public string checkOut() { - if (this.isOnLoan()) { - return "item is currently on loan"; - } - - this.onLoan = true; - - return "item has been checked out"; - } - } -} diff --git a/tdd-oop-inheritance.CSharp.Main/Items/Article.cs b/tdd-oop-inheritance.CSharp.Main/Items/Article.cs new file mode 100644 index 0000000..424d468 --- /dev/null +++ b/tdd-oop-inheritance.CSharp.Main/Items/Article.cs @@ -0,0 +1,10 @@ +using Items; + +public class Article : Item +{ + public Author Author { get; } + public Article(string title, Author author) : base(title) + { + Author = author; + } +} \ No newline at end of file diff --git a/tdd-oop-inheritance.CSharp.Main/Items/Author.cs b/tdd-oop-inheritance.CSharp.Main/Items/Author.cs new file mode 100644 index 0000000..f71cc06 --- /dev/null +++ b/tdd-oop-inheritance.CSharp.Main/Items/Author.cs @@ -0,0 +1,13 @@ +public class Author +{ + public string Name { get; } + public string ContactInformation { get; } + public string Website { get; } + + public Author(string name, string contactInformation, string website) + { + Name = name; + ContactInformation = contactInformation; + Website = website; + } +} \ No newline at end of file diff --git a/tdd-oop-inheritance.CSharp.Main/Items/Book.cs b/tdd-oop-inheritance.CSharp.Main/Items/Book.cs new file mode 100644 index 0000000..c5b0199 --- /dev/null +++ b/tdd-oop-inheritance.CSharp.Main/Items/Book.cs @@ -0,0 +1,10 @@ +using Items; + +public class Book : Item +{ + public Author Author { get; } + public Book(string title, Author author) : base(title) + { + Author = author; + } +} \ No newline at end of file diff --git a/tdd-oop-inheritance.CSharp.Main/Items/Item.cs b/tdd-oop-inheritance.CSharp.Main/Items/Item.cs new file mode 100644 index 0000000..073c9c3 --- /dev/null +++ b/tdd-oop-inheritance.CSharp.Main/Items/Item.cs @@ -0,0 +1,35 @@ +namespace Items +{ + public abstract class Item + { + public string Title { get; set; } + public bool OnLoan { get; set; } + + public Item(string title) + { + Title = title; + } + + public string CheckIn() + { + if (!OnLoan) + { + return "Item is not currently on loan"; + } + + OnLoan = false; + return "Item has been checked in"; + } + + public string CheckOut() + { + if (OnLoan) + { + return "Item is currently on loan"; + } + + OnLoan = true; + return "Item has been checked out"; + } + } +} diff --git a/tdd-oop-inheritance.CSharp.Main/Items/Newspaper.cs b/tdd-oop-inheritance.CSharp.Main/Items/Newspaper.cs new file mode 100644 index 0000000..a9e4527 --- /dev/null +++ b/tdd-oop-inheritance.CSharp.Main/Items/Newspaper.cs @@ -0,0 +1,18 @@ +using Items; + +public class Newspaper : Item +{ + public Newspaper(string title) : base(title) + { + } + + public new string CheckIn() + { + return "Newspapers are not available for loan"; + } + + public new string CheckOut() + { + return "Newspapers are not available for loan"; + } +} \ No newline at end of file diff --git a/tdd-oop-inheritance.CSharp.Main/Library.cs b/tdd-oop-inheritance.CSharp.Main/Library.cs index 2c36d5b..74e3df5 100644 --- a/tdd-oop-inheritance.CSharp.Main/Library.cs +++ b/tdd-oop-inheritance.CSharp.Main/Library.cs @@ -1,89 +1,28 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Items; -namespace tdd_oop_inheritance.CSharp.Main +public class Library { - public class Library { - List
articles = new List
(); - List books = new List(); - List newspapers = new List(); + public List items = new List(); - public void addToStock(Article item) { - this.articles.Add(item); - } - - public void addToStock(Book item) { - this.books.Add(item); - } - - public void addToStock(Newspaper item) { - this.newspapers.Add(item); - } - - // The following methods may contain code that you are unfamiliar with. The strange syntax of article -> something - // is called a lambda expression (https://www.w3schools.com/java/java_lambda.asp) - public string checkInArticle(string title) { - - List
filtered = (List
)this.articles.Where(article => article.title.Equals(title)); - - if (filtered.Count() < 1) { - return "item is not part of the library's collection"; - } - - return filtered[0].checkIn(); - } - - public string checkOutArticle(string title) { - List
filtered = (List
)this.articles.Where(article => article.title.Equals(title)); - - if (filtered.Count() < 1) { - return "item is not part of the library's collection"; - } - - return filtered[0].checkOut(); - } - - public string checkInBook(string title) { - List filtered = (List)this.books.Where(book => book.Equals(title)); - - if (filtered.Count() < 1) { - return "item is not part of the library's collection"; - } - - return filtered[0].checkIn(); - } - - public string checkOutBook(string title) { - List filtered = (List)this.books.Where(book => book.Equals(title)); - - if (filtered.Count() < 1) { - return "item is not part of the library's collection"; - } + public void AddToStock(Item item) + { + items.Add(item); + } - return filtered[0].checkOut(); + public string CheckInOut(string title, bool checkOut) where T : Item + { + if (typeof(T) == typeof(Newspaper)) + { + return "Newspapers are not available for loan"; } - public string checkInNewspaper(string title) { - List filtered = (List)this.newspapers.Where(newspaper => newspaper.title.Equals(title)); - - if (filtered.Count() < 1) { - return "item is not part of the library's collection"; - } + T item = items.OfType().FirstOrDefault(i => i.Title.Equals(title)); - return filtered[0].checkIn(); + if (item == null) + { + return "Item is not part of the library's collection"; } - public string checkOutNewspaper(string title) { - List filtered = (List)this.newspapers.Where(newspaper => newspaper.title.Equals(title)); - - if (filtered.Count() < 1) { - return "item is not part of the library's collection"; - } - - return filtered[0].checkOut(); - } + return checkOut ? item.CheckOut() : item.CheckIn(); } -} +} \ No newline at end of file diff --git a/tdd-oop-inheritance.CSharp.Main/Newspaper.cs b/tdd-oop-inheritance.CSharp.Main/Newspaper.cs deleted file mode 100644 index 1a35505..0000000 --- a/tdd-oop-inheritance.CSharp.Main/Newspaper.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace tdd_oop_inheritance.CSharp.Main -{ - public class Newspaper - { - public string title; - - Boolean onLoan = false; - - public Newspaper(string title) { - this.title = title; - } - - public bool isOnLoan() { - return onLoan; - } - - public string checkIn() { - return "newspapers are not available for loan"; - } - - public string checkOut() { - return "newspapers are not available for loan"; - } - } -} diff --git a/tdd-oop-inheritance.CSharp.Test/ArticleTest.cs b/tdd-oop-inheritance.CSharp.Test/ArticleTest.cs index 31c16ff..924ecaa 100644 --- a/tdd-oop-inheritance.CSharp.Test/ArticleTest.cs +++ b/tdd-oop-inheritance.CSharp.Test/ArticleTest.cs @@ -1,41 +1,44 @@ -using tdd_oop_inheritance.CSharp.Main; -using NUnit.Framework; +using NUnit.Framework; +using Items; namespace tdd_oop_inheritance.CSharp.Test { class ArticleTest { - [Test] - public void shouldCheckOutIfAvailable() - { - Article article = new Article("JUnit Rocks"); - Assert.AreEqual("item has been checked out", article.checkOut()); - } - - [Test] - public void shouldDeclineIfNotAvailableToCheckout() - { - Article article = new Article("JUnit Rocks"); - article.checkOut(); + private Author author; + private Article article; - Assert.AreEqual("item is currently on loan", article.checkOut()); - } + [SetUp] + public void SetUp() + { + author = new Author("Dan Brown", "dan@brown.com", "www.danbrown.com"); + article = new Article("JUnit Rocks", author); + } [Test] - public void shouldCheckInIfOnLoan() - { - Article article = new Article("JUnit Rocks"); - article.checkOut(); + public void ShouldCheckOutIfAvailable() + { + Assert.That(article.CheckOut(), Is.EqualTo("Item has been checked out")); + } - Assert.AreEqual("item has been checked in", article.checkIn()); - } + [Test] + public void ShouldDeclineIfNotAvailableToCheckout() + { + article.CheckOut(); + Assert.That(article.CheckOut(), Is.EqualTo("Item is currently on loan")); + } [Test] - public void shouldDeclineCheckInIfNotOnLoan() - { - Article article = new Article("JUnit Rocks"); + public void ShouldCheckInIfOnLoan() + { + article.CheckOut(); + Assert.That(article.CheckIn(), Is.EqualTo("Item has been checked in")); + } - Assert.AreEqual("item is not currently on loan", article.checkIn()); - } + [Test] + public void ShouldDeclineCheckInIfNotOnLoan() + { + Assert.That(article.CheckIn(), Is.EqualTo("Item is not currently on loan")); + } } } \ No newline at end of file diff --git a/tdd-oop-inheritance.CSharp.Test/AuthorTest.cs b/tdd-oop-inheritance.CSharp.Test/AuthorTest.cs new file mode 100644 index 0000000..efdf087 --- /dev/null +++ b/tdd-oop-inheritance.CSharp.Test/AuthorTest.cs @@ -0,0 +1,55 @@ +namespace tdd_oop_inheritance.CSharp.Test +{ + using NUnit.Framework; + + [TestFixture] + public class AuthorTest + { + private Author author; + private Book book; + private Article article; + + [SetUp] + public void SetUp() + { + author = new Author("Dan Brown", "dan@brown.com", "www.danbrown.com"); + book = new Book("C# Programming", author); + article = new Article("C# Fundamentals", author); + } + + [Test] + public void ShouldCreateAuthorWithCorrectInformation() + { + Assert.That(author.Name, Is.EqualTo("Dan Brown")); + Assert.That(author.ContactInformation, Is.EqualTo("dan@brown.com")); + Assert.That(author.Website, Is.EqualTo("www.danbrown.com")); + } + + [Test] + public void ShouldIncludeAuthorInformationInBook() + { + Assert.That(book.Title, Is.EqualTo("C# Programming")); + Assert.That(book.Author, Is.EqualTo(author)); + } + + [Test] + public void ShouldCheckOutBookIfAvailable() + { + Assert.That(book.CheckOut(), Is.EqualTo("Item has been checked out")); + } + + [Test] + public void ShouldIncludeAuthorInformationInArticle() + { + Assert.That(article.Title, Is.EqualTo("C# Fundamentals")); + Assert.That(article.Author, Is.EqualTo(author)); + } + + [Test] + public void ShouldCheckInArticleIfOnLoan() + { + article.CheckOut(); + Assert.That(article.CheckIn(), Is.EqualTo("Item has been checked in")); + } + } +} diff --git a/tdd-oop-inheritance.CSharp.Test/BookTest.cs b/tdd-oop-inheritance.CSharp.Test/BookTest.cs index 6e382ec..87058c6 100644 --- a/tdd-oop-inheritance.CSharp.Test/BookTest.cs +++ b/tdd-oop-inheritance.CSharp.Test/BookTest.cs @@ -1,41 +1,43 @@ -using tdd_oop_inheritance.CSharp.Main; -using NUnit.Framework; +using NUnit.Framework; +using Items; namespace tdd_oop_inheritance.CSharp.Test { public class BookTest { + private Author author; + private Book book; + + [SetUp] + public void SetUp() + { + author = new Author("Dan Brown", "dan@brown.com", "www.danbrown.com"); + book = new Book("JUnit Rocks", author); + } [Test] - public void shouldCheckOutIfAvailable() + public void ShouldCheckOutIfAvailable() { - Book book = new Book("JUnit Rocks"); - Assert.AreEqual("item has been checked out", book.checkOut()); + Assert.That(book.CheckOut(), Is.EqualTo("Item has been checked out")); } [Test] - public void shouldDeclineIfNotAvailableToCheckout() + public void ShouldDeclineIfNotAvailableToCheckout() { - Book book = new Book("JUnit Rocks"); - book.checkOut(); - - Assert.AreEqual("item is currently on loan", book.checkOut()); + book.CheckOut(); + Assert.That(book.CheckOut(), Is.EqualTo("Item is currently on loan")); } [Test] - public void shouldCheckInIfOnLoan() + public void ShouldCheckInIfOnLoan() { - Book book = new Book("JUnit Rocks"); - book.checkOut(); - - Assert.AreEqual("item has been checked in", book.checkIn()); + book.CheckOut(); + Assert.That(book.CheckIn(), Is.EqualTo("Item has been checked in")); } [Test] - public void shouldDeclineCheckInIfNotOnLoan() + public void ShouldDeclineCheckInIfNotOnLoan() { - Book book = new Book("JUnit Rocks"); - - Assert.AreEqual("item is not currently on loan", book.checkIn()); + Assert.That(book.CheckIn(), Is.EqualTo("Item is not currently on loan")); } } } \ No newline at end of file diff --git a/tdd-oop-inheritance.CSharp.Test/LibraryTest.cs b/tdd-oop-inheritance.CSharp.Test/LibraryTest.cs new file mode 100644 index 0000000..78e36fe --- /dev/null +++ b/tdd-oop-inheritance.CSharp.Test/LibraryTest.cs @@ -0,0 +1,94 @@ +using NUnit.Framework; + +namespace tdd_oop_inheritance.CSharp.Test +{ + public class LibraryTest + { + private Author author; + private Article article; + private Library library; + private Book book; + private Newspaper newspaper; + + [SetUp] + public void SetUp() + { + library = new Library(); + author = new Author("Dan Brown", "dan@brown.com", "www.danbrown.com"); + article = new Article("C# Fundamentals", author); + book = new Book("C# Programming", author); + newspaper = new Newspaper("C# for dummies"); + } + + [Test] + public void ShouldAddArticleToStock() + { + library.AddToStock(article); + Assert.That(library.items, Contains.Item(article)); + } + + [Test] + public void ShouldAddBookToStock() + { + library.AddToStock(book); + Assert.That(library.items, Contains.Item(book)); + } + + [Test] + public void ShouldAddNewspaperToStock() + { + library.AddToStock(newspaper); + Assert.That(library.items, Contains.Item(newspaper)); + } + + [Test] + public void ShouldCheckInArticleIfOnLoan() + { + library.AddToStock(article); + article.CheckOut(); + + string result = library.CheckInOut
("C# Fundamentals", false); + Assert.That(result, Is.EqualTo("Item has been checked in")); + } + + [Test] + public void ShouldDeclineCheckInArticleIfNotOnLoan() + { + library.AddToStock(article); + + string result = library.CheckInOut
("C# Fundamentals", false); + Assert.That(result, Is.EqualTo("Item is not currently on loan")); + } + + [Test] + public void ShouldCheckOutBookIfAvailable() + { + library.AddToStock(book); + + string result = library.CheckInOut("C# Programming", true); + Assert.That(result, Is.EqualTo("Item has been checked out")); + } + + [Test] + public void ShouldDeclineCheckOutBookIfNotAvailable() + { + library.AddToStock(book); + book.CheckOut(); + + string result = library.CheckInOut("C# Programming", true); + Assert.That(result, Is.EqualTo("Item is currently on loan")); + } + + [Test] + public void ShouldBeUnavailableForCheckInNewspaper() + { + library.AddToStock(newspaper); + + string result = library.CheckInOut("The Daily C#", true); + Assert.That(result, Is.EqualTo("Newspapers are not available for loan")); + + result = library.CheckInOut("The Daily C#", false); + Assert.That(result, Is.EqualTo("Newspapers are not available for loan")); + } + } +} diff --git a/tdd-oop-inheritance.CSharp.Test/NewspaperTest.cs b/tdd-oop-inheritance.CSharp.Test/NewspaperTest.cs index ff07ea7..667b774 100644 --- a/tdd-oop-inheritance.CSharp.Test/NewspaperTest.cs +++ b/tdd-oop-inheritance.CSharp.Test/NewspaperTest.cs @@ -1,22 +1,27 @@ -using tdd_oop_inheritance.CSharp.Main; -using NUnit.Framework; +using NUnit.Framework; +using Items; namespace tdd_oop_inheritance.CSharp.Test { public class NewspaperTest { + private Newspaper newspaper; + [SetUp] + public void SetUp() + { + newspaper = new Newspaper("The Daily Java"); + + } [Test] - public void shouldBeUnavailableForCheckIn() + public void ShouldBeUnavailableForCheckIn() { - Newspaper newspaper = new Newspaper("The Daily Java"); - Assert.AreEqual("newspapers are not available for loan", newspaper.checkIn()); + Assert.That(newspaper.CheckIn(), Is.EqualTo("Newspapers are not available for loan")); } [Test] - public void shouldBeUnavailableForCheckOut() + public void ShouldBeUnavailableForCheckOut() { - Newspaper newspaper = new Newspaper("The Daily Java"); - Assert.AreEqual("newspapers are not available for loan", newspaper.checkOut()); + Assert.That(newspaper.CheckOut(), Is.EqualTo("Newspapers are not available for loan")); } } } \ No newline at end of file