From be182bf0e259bc92bee4b507d3fe9d002580cf06 Mon Sep 17 00:00:00 2001 From: Enock97 Date: Wed, 24 Jan 2024 11:15:31 +0100 Subject: [PATCH] Completed both exercises. All tests pass. --- src/main/java/com/booleanuk/core/Article.java | 31 +---- src/main/java/com/booleanuk/core/Author.java | 41 ++++++ src/main/java/com/booleanuk/core/Book.java | 31 +---- src/main/java/com/booleanuk/core/Library.java | 77 ++--------- .../java/com/booleanuk/core/Newspaper.java | 15 +-- src/main/java/com/booleanuk/core/Stock.java | 35 +++++ .../java/com/booleanuk/core/AuthorTest.java | 39 ++++++ .../java/com/booleanuk/core/LibraryTest.java | 122 ++++++++++++++++++ .../java/com/booleanuk/core/StockTest.java | 38 ++++++ 9 files changed, 293 insertions(+), 136 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Author.java create mode 100644 src/main/java/com/booleanuk/core/Stock.java create mode 100644 src/test/java/com/booleanuk/core/AuthorTest.java create mode 100644 src/test/java/com/booleanuk/core/LibraryTest.java create mode 100644 src/test/java/com/booleanuk/core/StockTest.java diff --git a/src/main/java/com/booleanuk/core/Article.java b/src/main/java/com/booleanuk/core/Article.java index 1e359b0..237607c 100644 --- a/src/main/java/com/booleanuk/core/Article.java +++ b/src/main/java/com/booleanuk/core/Article.java @@ -1,35 +1,8 @@ package com.booleanuk.core; -public class Article { - String title; - - boolean onLoan = false; +public class Article extends Stock{ public Article(String title) { - this.title = title; - } - - public boolean 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"; + super(title); } } diff --git a/src/main/java/com/booleanuk/core/Author.java b/src/main/java/com/booleanuk/core/Author.java new file mode 100644 index 0000000..425cc77 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Author.java @@ -0,0 +1,41 @@ +package com.booleanuk.core; + +public class Author { + + String name; + + String contactInformation; + + String website; + + Article article; + Book book; + Newspaper newspaper; + + public Author(Article article, String name, String contactInformation, String website) { + this.article = article; + this.name = name; + this.contactInformation = contactInformation; + this.website = website; + } + public Author(Book book, String name, String contactInformation, String website) { + this.book = book; + this.name = name; + this.contactInformation = contactInformation; + this.website = website; + } + + public String getArticleAuthorInfo() { + return "Article: " + article.title + + "Author name: " + this.name + + ", Contact information: " + this.contactInformation + + ", Website: " + this.website; + } + + public String getBookAuthorInfo() { + return "Book: " + book.title + + "Author name: " + this.name + + ", Contact information: " + this.contactInformation + + ", Website: " + this.website; + } +} diff --git a/src/main/java/com/booleanuk/core/Book.java b/src/main/java/com/booleanuk/core/Book.java index 9261f65..776803a 100644 --- a/src/main/java/com/booleanuk/core/Book.java +++ b/src/main/java/com/booleanuk/core/Book.java @@ -1,35 +1,8 @@ package com.booleanuk.core; -public class Book { - String title; - - boolean onLoan = false; +public class Book extends Stock { public Book(String title) { - this.title = title; - } - - public boolean 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"; + super(title); } } diff --git a/src/main/java/com/booleanuk/core/Library.java b/src/main/java/com/booleanuk/core/Library.java index f03ecf0..e8cf97d 100644 --- a/src/main/java/com/booleanuk/core/Library.java +++ b/src/main/java/com/booleanuk/core/Library.java @@ -1,77 +1,20 @@ package com.booleanuk.core; +import java.util.ArrayList; import java.util.List; public class Library { - List
articles; - List books; - List newspapers; + List stockItems = new ArrayList<>(); - 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); + public void addToStock(Stock item) { + this.stockItems.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 = this.articles.stream() - .filter(article -> article.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkIn(); - } - - public String checkOutArticle(String title) { - List
filtered = this.articles.stream() - .filter(article -> article.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkOut(); - } - - public String checkInBook(String title) { - List filtered = this.books.stream() - .filter(book -> book.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkIn(); - } - - public String checkOutBook(String title) { - List filtered = this.books.stream() - .filter(book -> book.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkOut(); - } - - public String checkInNewspaper(String title) { - List filtered = this.newspapers.stream() - .filter(newspaper -> newspaper.title.equals(title)) + public String checkInStock(String title) { + List filtered = this.stockItems.stream() + .filter(stock -> stock.title.equals(title)) .toList(); if (filtered.size() < 1) { @@ -81,9 +24,9 @@ public String checkInNewspaper(String title) { return filtered.get(0).checkIn(); } - public String checkOutNewspaper(String title) { - List filtered = this.newspapers.stream() - .filter(newspaper -> newspaper.title.equals(title)) + public String checkOutStock(String title) { + List filtered = this.stockItems.stream() + .filter(stock -> stock.title.equals(title)) .toList(); if (filtered.size() < 1) { diff --git a/src/main/java/com/booleanuk/core/Newspaper.java b/src/main/java/com/booleanuk/core/Newspaper.java index 8411d9c..cd7a345 100644 --- a/src/main/java/com/booleanuk/core/Newspaper.java +++ b/src/main/java/com/booleanuk/core/Newspaper.java @@ -1,22 +1,15 @@ package com.booleanuk.core; -public class Newspaper { - String title; - - boolean onLoan = false; - +public class Newspaper extends Stock { public Newspaper(String title) { - this.title = title; + super(title); } - - public boolean isOnLoan() { - return onLoan; - } - + @Override public String checkIn() { return "newspapers are not available for loan"; } + @Override public String checkOut() { return "newspapers are not available for loan"; } diff --git a/src/main/java/com/booleanuk/core/Stock.java b/src/main/java/com/booleanuk/core/Stock.java new file mode 100644 index 0000000..af4ed14 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Stock.java @@ -0,0 +1,35 @@ +package com.booleanuk.core; + +public class Stock { + + String title; + boolean onLoan = false; + + public Stock(String title) { + this.title = title; + } + + public boolean 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/src/test/java/com/booleanuk/core/AuthorTest.java b/src/test/java/com/booleanuk/core/AuthorTest.java new file mode 100644 index 0000000..86d6f1d --- /dev/null +++ b/src/test/java/com/booleanuk/core/AuthorTest.java @@ -0,0 +1,39 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class AuthorTest { + + @Test + void getArticleAuthorInfo() { + Article article = new Article("An Adventure to Space"); + Author author = new Author(article,"Neil Degrasse Tyson", "neil.degrasse.tyson@hotmail.com", "www.neildegrassetyson.com"); + + String result = "Article: An Adventure to Space" + + "Author name: Neil Degrasse Tyson" + + ", Contact information: neil.degrasse.tyson@hotmail.com" + + ", Website: www.neildegrassetyson.com"; + + String expectedResult = author.getArticleAuthorInfo(); + + Assertions.assertEquals(expectedResult, result); + } + + @Test + void getBookAuthorInfo() { + Book book = new Book("Lord of the Rings"); + Author author = new Author(book,"JRR Tolkien", "jrr.tolkien@hotmail.com", "www.lordoftherings.com"); + + String result = "Book: Lord of the Rings" + + "Author name: JRR Tolkien" + + ", Contact information: jrr.tolkien@hotmail.com" + + ", Website: www.lordoftherings.com"; + + String expectedResult = author.getBookAuthorInfo(); + + Assertions.assertEquals(expectedResult, result); + } +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/core/LibraryTest.java b/src/test/java/com/booleanuk/core/LibraryTest.java new file mode 100644 index 0000000..78a105c --- /dev/null +++ b/src/test/java/com/booleanuk/core/LibraryTest.java @@ -0,0 +1,122 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class LibraryTest { + + @Test + void testAddToStock() { + Library library = new Library(); + + Stock article = new Article("Deep dive into Games of Throne"); + Stock book = new Book("The Maze Runner"); + Stock newspaper= new Newspaper("BBC Today's News"); + + library.addToStock(article); + library.addToStock(book); + library.addToStock(newspaper); + + boolean articleIsAdded = library.stockItems.contains(article); + boolean bookIsAdded = library.stockItems.contains(book); + boolean newspaperIsAdded = library.stockItems.contains(newspaper); + + Assertions.assertTrue(articleIsAdded); + Assertions.assertTrue(bookIsAdded); + Assertions.assertTrue(newspaperIsAdded); + } + + @Test + void testCheckInStockIsOnLoan() { + Library library = new Library(); + + Stock article = new Article("Deep dive into Games of Thrones"); + Stock book = new Book("The Maze Runner"); + Stock newspaper= new Newspaper("BBC Today's News"); + library.addToStock(article); + library.addToStock(book); + library.addToStock(newspaper); + + library.checkOutStock("Deep dive into Games of Thrones"); + library.checkOutStock("The Maze Runner"); + library.checkOutStock("BBC Today's News"); + + String result1 = library.checkInStock("Deep dive into Games of Thrones"); + String result2 = library.checkInStock("The Maze Runner"); + String result3 = library.checkInStock("BBC Today's News"); + + Assertions.assertEquals("item has been checked in", result1); + Assertions.assertEquals("item has been checked in", result2); + Assertions.assertEquals("newspapers are not available for loan", result3); + + } + + @Test + void testCheckInStockNotOnLoan() { + Library library = new Library(); + Stock article = new Article("Deep dive into Games of Throne"); + Stock book = new Book("The Maze Runner"); + Stock newspaper= new Newspaper("BBC Today's News"); + + library.addToStock(article); + library.addToStock(book); + library.addToStock(newspaper); + + String result1 = library.checkInStock("Deep dive into Games of Throne"); + String result2 = library.checkInStock("The Maze Runner"); + String result3 = library.checkInStock("BBC Today's News"); + + Assertions.assertEquals("item is not currently on loan", result1); + Assertions.assertEquals("item is not currently on loan", result2); + Assertions.assertEquals("newspapers are not available for loan", result3); + } + + + @Test + void testCheckOutStockIfAvailable() { + Library library = new Library(); + Stock article = new Article("Deep dive into Games of Throne"); + Stock book = new Book("The Maze Runner"); + Stock newspaper= new Newspaper("BBC Today's News"); + + library.addToStock(article); + library.addToStock(book); + library.addToStock(newspaper); + + String result1 = library.checkOutStock("Deep dive into Games of Throne"); + String result2 = library.checkOutStock("The Maze Runner"); + String result3 = library.checkOutStock("BBC Today's News"); + + Assertions.assertEquals("item has been checked out", result1); + Assertions.assertEquals("item has been checked out", result2); + Assertions.assertEquals("newspapers are not available for loan", result3); + + } + + @Test + void testCheckOutStockIfNotAvailable() { + Library library = new Library(); + Stock article = new Article("Deep dive into Games of Throne"); + Stock book = new Book("The Maze Runner"); + Stock newspaper= new Newspaper("BBC Today's News"); + + library.addToStock(article); + library.addToStock(book); + library.addToStock(newspaper); + + library.checkOutStock("Deep dive into Games of Throne"); + library.checkOutStock("The Maze Runner"); + library.checkOutStock("BBC Today's News"); + + String result1 = library.checkOutStock("Deep dive into Games of Throne"); + String result2 = library.checkOutStock("The Maze Runner"); + String result3 = library.checkOutStock("BBC Today's News"); + + Assertions.assertEquals("item is currently on loan", result1); + Assertions.assertEquals("item is currently on loan", result2); + Assertions.assertEquals("newspapers are not available for loan", result3); + + } +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/core/StockTest.java b/src/test/java/com/booleanuk/core/StockTest.java new file mode 100644 index 0000000..d48965a --- /dev/null +++ b/src/test/java/com/booleanuk/core/StockTest.java @@ -0,0 +1,38 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class StockTest { + + @Test + public void shouldCheckOutIfAvailable() { + Stock stock = new Stock("JUnit Rocks"); + Assertions.assertEquals("item has been checked out", stock.checkOut()); + } + + @Test + public void shouldDeclineIfNotAvailableToCheckout() { + Stock stock = new Stock("JUnit Rocks"); + stock.checkOut(); + + Assertions.assertEquals("item is currently on loan", stock.checkOut()); + } + + @Test + public void shouldCheckInIfOnLoan() { + Stock stock = new Stock("JUnit Rocks"); + stock.checkOut(); + + Assertions.assertEquals("item has been checked in", stock.checkIn()); + } + + @Test + public void shouldDeclineCheckInIfNotOnLoan() { + Stock stock = new Stock("JUnit Rocks"); + + Assertions.assertEquals("item is not currently on loan", stock.checkIn()); + } +} \ No newline at end of file