diff --git a/src/main/java/com/booleanuk/core/Article.java b/src/main/java/com/booleanuk/core/Article.java index 1e359b0..5edfe8e 100644 --- a/src/main/java/com/booleanuk/core/Article.java +++ b/src/main/java/com/booleanuk/core/Article.java @@ -1,35 +1,7 @@ package com.booleanuk.core; -public class Article { - String title; - - boolean onLoan = false; - - 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"; +public class Article extends LibraryItem { + public Article(String title,Author author) { + super(title,author); } } 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..9e50705 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Author.java @@ -0,0 +1,29 @@ +package com.booleanuk.core; + + + +public class Author { + private String name; + private String contactInformation; + private String website; + + public Author(String name, String contactInformation, String website) { + this.name = name; + this.contactInformation = contactInformation; + this.website = website; + } + + // Getter methods for author information + public String getName() { + return name; + } + + public String getContactInformation() { + return contactInformation; + } + + public String getWebsite() { + return website; + } +} + diff --git a/src/main/java/com/booleanuk/core/Book.java b/src/main/java/com/booleanuk/core/Book.java index 9261f65..9f82cb4 100644 --- a/src/main/java/com/booleanuk/core/Book.java +++ b/src/main/java/com/booleanuk/core/Book.java @@ -1,35 +1,7 @@ package com.booleanuk.core; -public class Book { - String title; - - boolean onLoan = false; - - 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"; +public class Book extends LibraryItem { + public Book(String title,Author author) { + super(title,author); } } diff --git a/src/main/java/com/booleanuk/core/Library.java b/src/main/java/com/booleanuk/core/Library.java index f03ecf0..6004adc 100644 --- a/src/main/java/com/booleanuk/core/Library.java +++ b/src/main/java/com/booleanuk/core/Library.java @@ -1,78 +1,24 @@ package com.booleanuk.core; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class Library { - List
articles; - List books; - List newspapers; + List items; - public void addToStock(Article item) { - this.articles.add(item); + public Library() { + this.items = new ArrayList<>(); } - public void addToStock(Book item) { - this.books.add(item); + public void addToStock(LibraryItem item) { + this.items.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 = 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)) - .toList(); + public String checkInItem(String title) { + List filtered = this.items.stream() + .filter(item -> item.title.equals(title)) + .collect(Collectors.toList()); if (filtered.size() < 1) { return "item is not part of the library's collection"; @@ -81,10 +27,10 @@ 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)) - .toList(); + public String checkOutItem(String title) { + List filtered = this.items.stream() + .filter(item -> item.title.equals(title)) + .collect(Collectors.toList()); if (filtered.size() < 1) { return "item is not part of the library's collection"; diff --git a/src/main/java/com/booleanuk/core/LibraryItem.java b/src/main/java/com/booleanuk/core/LibraryItem.java new file mode 100644 index 0000000..9c84ebd --- /dev/null +++ b/src/main/java/com/booleanuk/core/LibraryItem.java @@ -0,0 +1,41 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + + + +public class LibraryItem { + String title; + boolean onLoan = false; + private Author author; + public LibraryItem(String title,Author author) { + this.title = title; + this.author=author; + } + public Author getAuthor() { + return author; + } + 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/main/java/com/booleanuk/core/Newspaper.java b/src/main/java/com/booleanuk/core/Newspaper.java index 8411d9c..adf486f 100644 --- a/src/main/java/com/booleanuk/core/Newspaper.java +++ b/src/main/java/com/booleanuk/core/Newspaper.java @@ -1,23 +1,20 @@ package com.booleanuk.core; -public class Newspaper { - String title; - - boolean onLoan = false; - +public class Newspaper extends LibraryItem { public Newspaper(String title) { - this.title = title; + super(title,null); } - - public boolean isOnLoan() { - return onLoan; + @Override + public Author getAuthor() { + return null; } - + @Override public String checkIn() { return "newspapers are not available for loan"; } + @Override public String checkOut() { return "newspapers are not available for loan"; } -} +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/core/ArticleTest.java b/src/test/java/com/booleanuk/core/ArticleTest.java index 00bbaeb..206a5d1 100644 --- a/src/test/java/com/booleanuk/core/ArticleTest.java +++ b/src/test/java/com/booleanuk/core/ArticleTest.java @@ -1,35 +1,48 @@ package com.booleanuk.core; - import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -class ArticleTest { - @Test - public void shouldCheckOutIfAvailable() { - Article article = new Article("JUnit Rocks"); - Assertions.assertEquals("item has been checked out", article.checkOut()); - } +public class ArticleTest { @Test - public void shouldDeclineIfNotAvailableToCheckout() { - Article article = new Article("JUnit Rocks"); - article.checkOut(); + public void shouldCheckOutArticleIfAvailable() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("Java for Beginners",author); + library.addToStock(article); - Assertions.assertEquals("item is currently on loan", article.checkOut()); + Assertions.assertEquals("item has been checked out", library.checkOutItem("Java for Beginners")); } @Test - public void shouldCheckInIfOnLoan() { - Article article = new Article("JUnit Rocks"); - article.checkOut(); + public void shouldDeclineArticleIfNotAvailableToCheckout() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("Java for Beginners",author); + library.addToStock(article); + library.checkOutItem("Java for Beginners"); + + Assertions.assertEquals("item is currently on loan", library.checkOutItem("Java for Beginners")); + } - Assertions.assertEquals("item has been checked in", article.checkIn()); + @Test + public void shouldCheckInArticleIfOnLoan() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("Java for Beginners",author); + library.addToStock(article); + library.checkOutItem("Java for Beginners"); + + Assertions.assertEquals("item has been checked in", library.checkInItem("Java for Beginners")); } @Test - public void shouldDeclineCheckInIfNotOnLoan() { - Article article = new Article("JUnit Rocks"); + public void shouldDeclineCheckInArticleIfNotOnLoan() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("Java for Beginners",author); + library.addToStock(article); - Assertions.assertEquals("item is not currently on loan", article.checkIn()); + Assertions.assertEquals("item is not currently on loan", library.checkInItem("Java for Beginners")); } } 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..b32db08 --- /dev/null +++ b/src/test/java/com/booleanuk/core/AuthorTest.java @@ -0,0 +1,16 @@ +package com.booleanuk.core; + +import com.booleanuk.core.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class AuthorTest { + + @Test + public void shouldGetAuthorInformation() { + Author author = new Author("Petros Mylonas", "Petros.mylonas@email.com", "www.petrosmylonas.com"); + Assertions.assertEquals("Petros Mylonas", author.getName()); + Assertions.assertEquals("Petros.mylonas@email.com", author.getContactInformation()); + Assertions.assertEquals("www.petrosmylonas.com", author.getWebsite()); + } +} diff --git a/src/test/java/com/booleanuk/core/BookTest.java b/src/test/java/com/booleanuk/core/BookTest.java index 180a165..eb7ce49 100644 --- a/src/test/java/com/booleanuk/core/BookTest.java +++ b/src/test/java/com/booleanuk/core/BookTest.java @@ -1,35 +1,50 @@ package com.booleanuk.core; +import com.booleanuk.core.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class BookTest { - @Test - public void shouldCheckOutIfAvailable() { - Book book = new Book("JUnit Rocks"); - Assertions.assertEquals("item has been checked out", book.checkOut()); - } @Test - public void shouldDeclineIfNotAvailableToCheckout() { - Book book = new Book("JUnit Rocks"); - book.checkOut(); + public void shouldCheckOutBookIfAvailable() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Book book = new Book("Java Programming",author); + library.addToStock(book); - Assertions.assertEquals("item is currently on loan", book.checkOut()); + Assertions.assertEquals("item has been checked out", library.checkOutItem("Java Programming")); } @Test - public void shouldCheckInIfOnLoan() { - Book book = new Book("JUnit Rocks"); - book.checkOut(); + public void shouldDeclineBookIfNotAvailableToCheckout() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Book book = new Book("Java Programming",author); + library.addToStock(book); + library.checkOutItem("Java Programming"); + + Assertions.assertEquals("item is currently on loan", library.checkOutItem("Java Programming")); + } - Assertions.assertEquals("item has been checked in", book.checkIn()); + @Test + public void shouldCheckInBookIfOnLoan() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Book book = new Book("Java Programming",author); + library.addToStock(book); + library.checkOutItem("Java Programming"); + + Assertions.assertEquals("item has been checked in", library.checkInItem("Java Programming")); } @Test - public void shouldDeclineCheckInIfNotOnLoan() { - Book book = new Book("JUnit Rocks"); + public void shouldDeclineCheckInBookIfNotOnLoan() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Book book = new Book("Java Programming",author); + library.addToStock(book); - Assertions.assertEquals("item is not currently on loan", book.checkIn()); + Assertions.assertEquals("item is not currently on loan", library.checkInItem("Java Programming")); } } 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..cbdbf2b --- /dev/null +++ b/src/test/java/com/booleanuk/core/LibraryTest.java @@ -0,0 +1,52 @@ +package com.booleanuk.core; + +import com.booleanuk.core.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class LibraryTest { + + @Test + public void shouldCheckOutArticleIfAvailable() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("JUnit Rocks",author); + library.addToStock(article); + + Assertions.assertEquals("item has been checked out", library.checkOutItem("JUnit Rocks")); + } + + @Test + public void shouldDeclineArticleIfNotAvailableToCheckout() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("JUnit Rocks",author); + library.addToStock(article); + library.checkOutItem("JUnit Rocks"); + + Assertions.assertEquals("item is currently on loan", library.checkOutItem("JUnit Rocks")); + } + + @Test + public void shouldCheckInArticleIfOnLoan() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("JUnit Rocks",author); + library.addToStock(article); + library.checkOutItem("JUnit Rocks"); + + Assertions.assertEquals("item has been checked in", library.checkInItem("JUnit Rocks")); + } + + @Test + public void shouldDeclineCheckInArticleIfNotOnLoan() { + Library library = new Library(); + Author author = new Author("Petros Mylonas", "Petros.Mylonas@email.com", "www.petrosmylonas.com"); + Article article = new Article("JUnit Rocks",author); + library.addToStock(article); + + Assertions.assertEquals("item is not currently on loan", library.checkInItem("JUnit Rocks")); + } + + // Similar modifications for Book and Newspaper tests +} diff --git a/src/test/java/com/booleanuk/core/NewspaperTest.java b/src/test/java/com/booleanuk/core/NewspaperTest.java index 38195af..e818725 100644 --- a/src/test/java/com/booleanuk/core/NewspaperTest.java +++ b/src/test/java/com/booleanuk/core/NewspaperTest.java @@ -1,18 +1,26 @@ package com.booleanuk.core; +import com.booleanuk.core.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class NewspaperTest { + @Test public void shouldBeUnavailableForCheckIn() { + Library library = new Library(); Newspaper newspaper = new Newspaper("The Daily Java"); - Assertions.assertEquals("newspapers are not available for loan", newspaper.checkIn()); + library.addToStock(newspaper); + + Assertions.assertEquals("newspapers are not available for loan", library.checkInItem("The Daily Java")); } @Test public void shouldBeUnavailableForCheckOut() { + Library library = new Library(); Newspaper newspaper = new Newspaper("The Daily Java"); - Assertions.assertEquals("newspapers are not available for loan", newspaper.checkOut()); + library.addToStock(newspaper); + + Assertions.assertEquals("newspapers are not available for loan", library.checkOutItem("The Daily Java")); } }