diff --git a/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Article.java b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Article.java new file mode 100644 index 0000000000..6beac24827 --- /dev/null +++ b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Article.java @@ -0,0 +1,19 @@ +package com.baeldung.junit5.nested; + +public class Article { + private String name; + private Membership articleLevel; + + public Article(String name, Membership articleLevel) { + this.name = name; + this.articleLevel = articleLevel; + } + + public String getName() { + return name; + } + + public Membership getArticleLevel() { + return articleLevel; + } +} \ No newline at end of file diff --git a/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Membership.java b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Membership.java new file mode 100644 index 0000000000..de8e6f1fc8 --- /dev/null +++ b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Membership.java @@ -0,0 +1,16 @@ +package com.baeldung.junit5.nested; + +public enum Membership { + FREE(0), SILVER(10), GOLD(20); + + private final int level; + + Membership(int level) { + this.level = level; + } + + public int compare(Membership other) { + return level - other.level; + } + +} \ No newline at end of file diff --git a/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Publication.java b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Publication.java new file mode 100644 index 0000000000..998419acc9 --- /dev/null +++ b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/Publication.java @@ -0,0 +1,32 @@ +package com.baeldung.junit5.nested; + +import java.util.List; +import java.util.stream.Collectors; + +public class Publication { + private final List
articles; + + public Publication(List
articles) { + this.articles = articles; + } + + public List getReadableArticles(User user) { + return articles.stream() + .filter(a -> a.getArticleLevel() + .compare(user.getMembership()) <= 0) + .map(Article::getName) + .collect(Collectors.toList()); + } + + public List getLockedArticles(User user) { + return articles.stream() + .filter(a -> a.getArticleLevel() + .compare(user.getMembership()) > 0) + .map(Article::getName) + .collect(Collectors.toList()); + } + + public List
getArticles() { + return articles; + } +} \ No newline at end of file diff --git a/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/User.java b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/User.java new file mode 100644 index 0000000000..3e9d7ebeff --- /dev/null +++ b/testing-modules/junit5-annotations/src/main/java/com/baeldung/junit5/nested/User.java @@ -0,0 +1,19 @@ +package com.baeldung.junit5.nested; + +public class User { + private String name; + private Membership membership; + + public User(String name, Membership membership) { + this.name = name; + this.membership = membership; + } + + public String getName() { + return name; + } + + public Membership getMembership() { + return membership; + } +} \ No newline at end of file diff --git a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/nested/NestedTest.java b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/nested/NestedTest.java new file mode 100644 index 0000000000..47a7879d17 --- /dev/null +++ b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/nested/NestedTest.java @@ -0,0 +1,41 @@ +package com.baeldung.junit5.nested; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +public class NestedTest { + + @BeforeEach + void beforeEach() { + System.out.println("NestedTest.beforeEach()"); + } + + @Nested + class FirstNestedClass { + @BeforeEach + void beforeEach() { + System.out.println("FirstNestedClass.beforeEach()"); + } + + @Test + void test() { + System.out.println("FirstNestedClass.test()"); + } + } + + + @Nested + class SecondNestedClass { + @BeforeEach + void beforeEach() { + System.out.println("SecondNestedClass.beforeEach()"); + } + + @Test + void test() { + System.out.println("SecondNestedClass.test()"); + } + } + +} diff --git a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/nested/OnlinePublicationTest.java b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/nested/OnlinePublicationTest.java new file mode 100644 index 0000000000..faae1d2916 --- /dev/null +++ b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/nested/OnlinePublicationTest.java @@ -0,0 +1,93 @@ +package com.baeldung.junit5.nested; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +@DisplayName("given a article publication with three articles") +class OnlinePublicationTest { + private Publication publication; + + @BeforeEach + void setupArticlesAndPublication() { + Article freeArticle = new Article("free article", Membership.FREE); + Article silverArticle = new Article("silver level article", Membership.SILVER); + Article goldArticle = new Article("gold level article", Membership.GOLD); + publication = new Publication(Arrays.asList(freeArticle, silverArticle, goldArticle)); + } + + @Test + @DisplayName("then 3 articles are available") + void shouldHaveThreeArticlesInTotal() { + List
allArticles = publication.getArticles(); + assertThat(allArticles).hasSize(3); + } + + @Nested + @DisplayName("when a user with a 'free' membership logs in") + class UserWithAFreeMembership { + User freeFreya = new User("Freya", Membership.FREE); + + @Test + @DisplayName("then he should be able to read the 'free' articles") + void shouldOnlyReadFreeArticles() { + List articles = publication.getReadableArticles(freeFreya); + assertThat(articles).containsExactly("free article"); + } + + @Test + @DisplayName("then he shouldn't be able to read the 'silver' and 'gold' articles") + void shouldSeeSilverAndGoldLevelArticlesAsLocked() { + List articles = publication.getLockedArticles(freeFreya); + assertThat(articles).containsExactlyInAnyOrder("silver level article", "gold level article"); + } + } + + @Nested + @DisplayName("when a user with a 'silver' membership logs in") + class UserWithSilverMembership { + User silverSilvester = new User("Silvester", Membership.SILVER); + + @Test + @DisplayName("then he should be able to read the 'free' and 'silver' level articles") + void shouldOnlyReadFreeAndSilverLevelArticles() { + List articles = publication.getReadableArticles(silverSilvester); + assertThat(articles).containsExactlyInAnyOrder("free article", "silver level article"); + } + + @Test + @DisplayName("then he should see the 'gold' level articles as locked") + void shouldSeeGoldLevelArticlesAsLocked() { + List articles = publication.getLockedArticles(silverSilvester); + assertThat(articles).containsExactlyInAnyOrder("gold level article"); + } + } + + @Nested + @DisplayName("when a user with a 'gold' membership logs in") + class UserWithGoldMembership { + User goldenGeorge = new User("George", Membership.GOLD); + + @Test + @DisplayName("then he should be able to read all the articles") + void shouldSeeAllArticles() { + List articles = publication.getReadableArticles(goldenGeorge); + assertThat(articles).containsExactlyInAnyOrder("free article", "silver level article", "gold level article"); + } + + @Test + @DisplayName("then he should not see any article as locked") + void shouldNotHaveHiddenArticles() { + List articles = publication.getLockedArticles(goldenGeorge); + assertThat(articles).isEmpty(); + } + + } + +} \ No newline at end of file