From 34487431d2378a138dc4f2bac72246c81b0488ea Mon Sep 17 00:00:00 2001 From: kksaunders251 Date: Thu, 10 Apr 2025 21:03:11 +0000 Subject: [PATCH 1/5] feat: add TikTokVideo class with core features, exceptions, and test file --- .../InvalidViewIncrementException.java | 8 ++ .../tiktokvideosystem/TiktokVideo.java | 88 +++++++++++++++++++ .../tiktokvideosystem/TiktokVideoTest.java | 10 +++ 3 files changed, 106 insertions(+) create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java new file mode 100644 index 000000000..d40287095 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java @@ -0,0 +1,8 @@ +package com.codedifferently.lesson16.tiktokvideosystem; + +public class InvalidViewIncrementException extends RuntimeException { + public InvalidViewIncrementException(String message) { + super(message); + +} +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java new file mode 100644 index 000000000..5bf6717e2 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java @@ -0,0 +1,88 @@ +package com.codedifferently.lesson16.tiktokvideosystem; + +import java.util.ArrayList; + + + +public class TiktokVideo { + private String creatorName; + private int viewsCount; + private int likesCount; + private VideoCategory videoCategory; + private ArrayList commentsList; + + public enum VideoCategory { + DANCE, + COMEDY, + VLOG, + TUTORIAL +} + + +public TiktokVideo(String creatorName, int viewsCount, int likesCount, VideoCategory videoCategory ){ +this.creatorName = creatorName; +this.viewsCount = viewsCount; +this.likesCount = likesCount; +this.videoCategory = videoCategory; +this.commentsList = new ArrayList<>(); +} + + +//One function uses a conditional expression to check if the video has more than a specific number of views (e.g., 1 million views). +public void increaseViews(int amount){ + // Use a conditional to check if amount is positive +if (amount > 0){ + // If so, add amount to the views +this.viewsCount += amount; +} + // Else, either print a message or throw an exception +else{ +throw new InvalidViewIncrementException("View increase amount must be positive."); +} +} + +public double likeToViewRatio() { + if (viewsCount == 0) { + return 0.0; + } + + int totalLikes = 0; +//used chat because I was not sure how to make a ratio within a for loop + for (int i = 0; i < likesCount; i++) { + totalLikes++; + } + + double ratio = (double) totalLikes / viewsCount; + return ratio; +} +public void displayComments(ArrayList userComments){ + if(userComments == null){ + System.out.println("No comments yet. Be the first to comment!"); + } else { + for(int i = 0; i < userComments.size(); i++){ + System.out.println(userComments.get(i)); + + } + } +} +public void addComments(String comment){ + + commentsList.add(comment); +} +public String getCreator(){ + return this.creatorName; +} +public void setVideoCategory(VideoCategory videoType){ + this.videoCategory = videoType; +} +public VideoCategory getVideoCategory (){ + return this.videoCategory; + +} +} + + + + + + diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java new file mode 100644 index 000000000..96bc4297e --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java @@ -0,0 +1,10 @@ +package com.codedifferently.lesson16.tiktokvideosystem; +import static com.codedifferently.lesson16.tiktokvideosystem.InvalidViewIncrementException; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class TiktokVideoTest { + @Test + +} From 76707f4e841cc1ef78010e40b5353e92ec0f2c7e Mon Sep 17 00:00:00 2001 From: kksaunders251 Date: Fri, 11 Apr 2025 14:01:31 +0000 Subject: [PATCH 2/5] feat: adds unit test to test file and updates formatting in exception & main files --- .../InvalidViewIncrementException.java | 9 +- .../tiktokvideosystem/TiktokVideo.java | 119 +++++++++--------- .../tiktokvideosystem/TiktokVideoTest.java | 49 +++++++- 3 files changed, 107 insertions(+), 70 deletions(-) diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java index d40287095..ad6c8e5e4 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/InvalidViewIncrementException.java @@ -1,8 +1,7 @@ package com.codedifferently.lesson16.tiktokvideosystem; -public class InvalidViewIncrementException extends RuntimeException { - public InvalidViewIncrementException(String message) { - super(message); - -} +public class InvalidViewIncrementException extends RuntimeException { + public InvalidViewIncrementException(String message) { + super(message); + } } diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java index 5bf6717e2..e787e36b9 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java @@ -2,87 +2,86 @@ import java.util.ArrayList; - - public class TiktokVideo { - private String creatorName; - private int viewsCount; - private int likesCount; - private VideoCategory videoCategory; - private ArrayList commentsList; + private String creatorName; + private int viewsCount; + private int likesCount; + private VideoCategory videoCategory; + private ArrayList commentsList; - public enum VideoCategory { + public enum VideoCategory { DANCE, COMEDY, VLOG, TUTORIAL -} - - -public TiktokVideo(String creatorName, int viewsCount, int likesCount, VideoCategory videoCategory ){ -this.creatorName = creatorName; -this.viewsCount = viewsCount; -this.likesCount = likesCount; -this.videoCategory = videoCategory; -this.commentsList = new ArrayList<>(); -} - - -//One function uses a conditional expression to check if the video has more than a specific number of views (e.g., 1 million views). -public void increaseViews(int amount){ - // Use a conditional to check if amount is positive -if (amount > 0){ - // If so, add amount to the views -this.viewsCount += amount; -} - // Else, either print a message or throw an exception -else{ -throw new InvalidViewIncrementException("View increase amount must be positive."); -} -} + } + + public TiktokVideo( + String creatorName, int viewsCount, int likesCount, VideoCategory videoCategory) { + this.creatorName = creatorName; + this.viewsCount = viewsCount; + this.likesCount = likesCount; + this.videoCategory = videoCategory; + this.commentsList = new ArrayList<>(); + } + + // One function uses a conditional expression to check if the video has more than a specific + // number of views (e.g., 1 million views). + public void increaseViews(int amount) { + // Use a conditional to check if amount is positive + if (amount > 0) { + // If so, add amount to the views + this.viewsCount += amount; + } + // Else, either print a message or throw an exception + else { + throw new InvalidViewIncrementException("View increase amount must be positive."); + } + } -public double likeToViewRatio() { + public double likeToViewRatio() { if (viewsCount == 0) { - return 0.0; + return 0.0; } int totalLikes = 0; -//used chat because I was not sure how to make a ratio within a for loop + // used chat because I was not sure how to make a ratio within a for loop for (int i = 0; i < likesCount; i++) { - totalLikes++; + totalLikes++; } double ratio = (double) totalLikes / viewsCount; return ratio; -} -public void displayComments(ArrayList userComments){ - if(userComments == null){ - System.out.println("No comments yet. Be the first to comment!"); - } else { - for(int i = 0; i < userComments.size(); i++){ - System.out.println(userComments.get(i)); + } - } + public void displayComments(ArrayList userComments) { + if (userComments == null) { + System.out.println("No comments yet. Be the first to comment!"); + } else { + for (int i = 0; i < userComments.size(); i++) { + System.out.println(userComments.get(i)); + } } -} -public void addComments(String comment){ - - commentsList.add(comment); -} -public String getCreator(){ - return this.creatorName; -} -public void setVideoCategory(VideoCategory videoType){ - this.videoCategory = videoType; -} -public VideoCategory getVideoCategory (){ - return this.videoCategory; + } -} -} - + public void addComments(String comment) { + commentsList.add(comment); + } + public String getCreator() { + return this.creatorName; + } + public void setVideoCategory(VideoCategory videoType) { + this.videoCategory = videoType; + } + public VideoCategory getVideoCategory() { + return this.videoCategory; + } + public int getViewsCount() { + return this.viewsCount; + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java index 96bc4297e..db4795eea 100644 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java @@ -1,10 +1,49 @@ package com.codedifferently.lesson16.tiktokvideosystem; -import static com.codedifferently.lesson16.tiktokvideosystem.InvalidViewIncrementException; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.hamcrest.MatcherAssert.assertThat.assertEquals; +import org.hamcrest.Matchers.is; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TiktokVideoTest { - @Test - + + private TiktokVideo tiktokVideo; + + @BeforeEach + void setUp() { + tiktokVideo = + new TiktokVideo("enigivensunday", 1000000, 500000, TiktokVideo.VideoCategory.VLOG); + } + + @Test + void testConstructor() { + TiktokVideo video = new TiktokVideo("Jane", 3000, 1000, VideoCategory.DANCE); + } + + @Test + void getVideoCategory() { + assertEquals(TiktokVideo.VideoCategory.VLOG, tiktokVideo.getVideoCategory()); + } + + @Test + void testIncreaseViewsPositive() { + tiktokVideo.increaseViews(500); + // got the is matcher idea from chat gpt + assertThat(tiktokVideo.getViewsCount(), is(1500)); + } + + @Test + void testDecreaseViewsNegative() { + tiktokVideo.InvalidViewIncrementException(-78); + assertThrows(InvalidViewIncrementException.class, () -> tiktokVideo); + } + + @Test + String showCommennts() {} + + @Test + void getCreatorName() { + + assertEquals(TiktokVideo.String, tiktokVideo.getCreator()); + } } From f8a2c84c2d53804ca290a97afe72a5e4a7ee6195 Mon Sep 17 00:00:00 2001 From: kksaunders251 Date: Fri, 11 Apr 2025 16:02:38 +0000 Subject: [PATCH 3/5] feat: adds unit test fwhile correcting methods in main --- .../tiktokvideosystem/TiktokVideo.java | 4 + .../tiktokvideosystem/TiktokVideoTest.java | 82 +++++++++++++++++-- 2 files changed, 79 insertions(+), 7 deletions(-) diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java index e787e36b9..0215912b6 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideo.java @@ -69,6 +69,10 @@ public void addComments(String comment) { commentsList.add(comment); } + public ArrayList getCommentsList() { + return commentsList; + } + public String getCreator() { return this.creatorName; } diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java index db4795eea..43b83c4f6 100644 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java @@ -1,7 +1,12 @@ package com.codedifferently.lesson16.tiktokvideosystem; -import org.hamcrest.MatcherAssert.assertThat.assertEquals; -import org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import com.codedifferently.lesson16.tiktokvideosystem.TiktokVideo.VideoCategory; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -20,30 +25,93 @@ void testConstructor() { TiktokVideo video = new TiktokVideo("Jane", 3000, 1000, VideoCategory.DANCE); } + @Test + void testSetAndGetVideoCategory() { + tiktokVideo.setVideoCategory(VideoCategory.COMEDY); + assertEquals(VideoCategory.COMEDY, tiktokVideo.getVideoCategory()); + } + @Test void getVideoCategory() { assertEquals(TiktokVideo.VideoCategory.VLOG, tiktokVideo.getVideoCategory()); } + @Test + void testViewsCount() { + assertEquals(1000000, tiktokVideo.getViewsCount()); + } + @Test void testIncreaseViewsPositive() { tiktokVideo.increaseViews(500); // got the is matcher idea from chat gpt - assertThat(tiktokVideo.getViewsCount(), is(1500)); + assertEquals(1000500, tiktokVideo.getViewsCount()); } @Test void testDecreaseViewsNegative() { - tiktokVideo.InvalidViewIncrementException(-78); - assertThrows(InvalidViewIncrementException.class, () -> tiktokVideo); + // tiktokVideo.InvalidViewIncrementException(-78); + // assertThrows(InvalidViewIncrementException.class, () -> tiktokVideo); + InvalidViewIncrementException exception = + assertThrows( + InvalidViewIncrementException.class, + () -> { + tiktokVideo.increaseViews(-1); + }); + assertEquals("View increase amount must be positive.", exception.getMessage()); } @Test - String showCommennts() {} + void testDisplayComments() { + // used google & chat for this unit test solution + // Arrange + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + PrintStream printStream = new PrintStream(outputStream); + PrintStream originalOut = System.out; + System.setOut(printStream); + + ArrayList comments = new ArrayList<>(); + comments.add("Love this video!"); + comments.add("So funny"); + tiktokVideo.displayComments(comments); + System.setOut(originalOut); + String output = outputStream.toString().trim(); + String expectedOutput = "Love this video!\nSo funny"; + assertEquals(expectedOutput, output); + } + + @Test + void testDisplayCommentsWithNullList() { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + PrintStream printStream = new PrintStream(outputStream); + PrintStream originalOut = System.out; + System.setOut(printStream); + + tiktokVideo.displayComments(null); + + System.setOut(originalOut); + + String output = outputStream.toString().trim(); + assertEquals("No comments yet. Be the first to comment!", output); + } @Test void getCreatorName() { + assertEquals("enigivensunday", tiktokVideo.getCreator()); + } - assertEquals(TiktokVideo.String, tiktokVideo.getCreator()); + @Test + void testAddComments() { + tiktokVideo.addComments("This is awesome!"); + + assertEquals("This is awesome!", tiktokVideo.getCommentsList().get(0)); + } + + @Test + void testLikeToViewRatio() { + // Create the object using the constructor with views and likes + double result = tiktokVideo.likeToViewRatio(); + assertEquals( + 0.5, result, 0.0001); // got the idea to Use delta for comparing doubles from chatGpt } } From b72f48879d4747ca3093662ff0b1ff2147602677 Mon Sep 17 00:00:00 2001 From: kksaunders251 Date: Fri, 11 Apr 2025 21:52:51 +0000 Subject: [PATCH 4/5] Fix: removing commented out code --- .../lesson16/tiktokvideosystem/TiktokVideoTest.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java index 43b83c4f6..79f186091 100644 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java @@ -1,15 +1,16 @@ package com.codedifferently.lesson16.tiktokvideosystem; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import com.codedifferently.lesson16.tiktokvideosystem.TiktokVideo.VideoCategory; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.codedifferently.lesson16.tiktokvideosystem.TiktokVideo.VideoCategory; + public class TiktokVideoTest { private TiktokVideo tiktokVideo; @@ -50,8 +51,6 @@ void testIncreaseViewsPositive() { @Test void testDecreaseViewsNegative() { - // tiktokVideo.InvalidViewIncrementException(-78); - // assertThrows(InvalidViewIncrementException.class, () -> tiktokVideo); InvalidViewIncrementException exception = assertThrows( InvalidViewIncrementException.class, From f2b387b96b122422a1cb3e8b7947529255b04f52 Mon Sep 17 00:00:00 2001 From: kksaunders251 Date: Fri, 11 Apr 2025 21:55:45 +0000 Subject: [PATCH 5/5] Chore: formatting code --- .../lesson16/tiktokvideosystem/TiktokVideoTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java index 79f186091..9d89a2b48 100644 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/tiktokvideosystem/TiktokVideoTest.java @@ -1,16 +1,15 @@ package com.codedifferently.lesson16.tiktokvideosystem; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import com.codedifferently.lesson16.tiktokvideosystem.TiktokVideo.VideoCategory; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.ArrayList; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.codedifferently.lesson16.tiktokvideosystem.TiktokVideo.VideoCategory; - public class TiktokVideoTest { private TiktokVideo tiktokVideo;