Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 138 additions & 0 deletions src/test/java/io/spring/application/CursorPagerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package io.spring.application;

import static org.junit.jupiter.api.Assertions.*;

import io.spring.application.CursorPager.Direction;
import io.spring.application.data.ArticleData;
import io.spring.application.data.ProfileData;
import java.util.Arrays;
import java.util.Collections;
import org.joda.time.DateTime;
import org.junit.jupiter.api.Test;

public class CursorPagerTest {

private ArticleData buildArticle(String slug) {
return new ArticleData(
"id",
slug,
"title",
"desc",
"body",
false,
0,
new DateTime(),
new DateTime(),
null,
new ProfileData("uid", "user", "", "", false));
}

@Test
void should_have_next_when_direction_is_next_and_has_extra() {
CursorPager<ArticleData> pager =
new CursorPager<>(Arrays.asList(buildArticle("s1")), Direction.NEXT, true);

assertTrue(pager.hasNext());
assertFalse(pager.hasPrevious());
assertEquals(1, pager.getData().size());
}

@Test
void should_not_have_next_when_direction_is_next_and_no_extra() {
CursorPager<ArticleData> pager =
new CursorPager<>(Arrays.asList(buildArticle("s1")), Direction.NEXT, false);

assertFalse(pager.hasNext());
assertFalse(pager.hasPrevious());
}

@Test
void should_have_previous_when_direction_is_prev_and_has_extra() {
CursorPager<ArticleData> pager =
new CursorPager<>(Arrays.asList(buildArticle("s1")), Direction.PREV, true);

assertFalse(pager.hasNext());
assertTrue(pager.hasPrevious());
}

@Test
void should_not_have_previous_when_direction_is_prev_and_no_extra() {
CursorPager<ArticleData> pager =
new CursorPager<>(Arrays.asList(buildArticle("s1")), Direction.PREV, false);

assertFalse(pager.hasNext());
assertFalse(pager.hasPrevious());
}

@Test
void should_return_null_cursors_for_empty_data() {
CursorPager<ArticleData> pager =
new CursorPager<>(Collections.emptyList(), Direction.NEXT, false);

assertNull(pager.getStartCursor());
assertNull(pager.getEndCursor());
}

@Test
void should_return_correct_start_and_end_cursors() {
ArticleData a1 = buildArticle("s1");
ArticleData a2 = buildArticle("s2");
CursorPager<ArticleData> pager =
new CursorPager<>(Arrays.asList(a1, a2), Direction.NEXT, false);

assertNotNull(pager.getStartCursor());
assertNotNull(pager.getEndCursor());
assertEquals(a1.getCursor().toString(), pager.getStartCursor().toString());
assertEquals(a2.getCursor().toString(), pager.getEndCursor().toString());
}

@Test
void should_create_cursor_page_parameter() {
DateTime cursor = new DateTime();
CursorPageParameter<DateTime> param = new CursorPageParameter<>(cursor, 10, Direction.NEXT);

assertEquals(cursor, param.getCursor());
assertEquals(10, param.getLimit());
assertEquals(11, param.getQueryLimit());
assertEquals(Direction.NEXT, param.getDirection());
assertTrue(param.isNext());
}

@Test
void should_cap_limit_at_max() {
CursorPageParameter<DateTime> param = new CursorPageParameter<>(null, 2000, Direction.NEXT);
assertEquals(1000, param.getLimit());
}

@Test
void should_use_default_limit_for_zero_or_negative() {
CursorPageParameter<DateTime> param = new CursorPageParameter<>(null, 0, Direction.PREV);
assertEquals(20, param.getLimit());
assertFalse(param.isNext());
}

@Test
void should_create_default_cursor_page_parameter() {
CursorPageParameter<DateTime> param = new CursorPageParameter<>();
assertEquals(20, param.getLimit());
assertNull(param.getCursor());
}

@Test
void should_parse_date_time_cursor() {
DateTime now = new DateTime();
DateTimeCursor cursor = new DateTimeCursor(now);

String str = cursor.toString();
assertNotNull(str);

DateTime parsed = DateTimeCursor.parse(str);
assertNotNull(parsed);
assertEquals(now.getMillis(), parsed.getMillis());
}

@Test
void should_return_null_for_null_cursor_parse() {
assertNull(DateTimeCursor.parse(null));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package io.spring.application.article;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

import io.spring.core.article.Article;
import io.spring.core.article.ArticleRepository;
import io.spring.core.user.User;
import java.util.Arrays;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class ArticleCommandServiceTest {

private ArticleRepository articleRepository;
private ArticleCommandService articleCommandService;
private User user;

@BeforeEach
void setUp() {
articleRepository = mock(ArticleRepository.class);
articleCommandService = new ArticleCommandService(articleRepository);
user = new User("test@test.com", "testuser", "password", "bio", "image");
}

@Test
void should_create_article() {
NewArticleParam param =
NewArticleParam.builder()
.title("Test Title")
.description("A description")
.body("Article body")
.tagList(Arrays.asList("java", "spring"))
.build();

Article result = articleCommandService.createArticle(param, user);

assertNotNull(result);
assertEquals("test-title", result.getSlug());
assertEquals("Test Title", result.getTitle());
assertEquals("A description", result.getDescription());
assertEquals("Article body", result.getBody());
assertEquals(user.getId(), result.getUserId());
verify(articleRepository).save(result);
}

@Test
void should_update_article() {
Article article = new Article("Original Title", "desc", "body", Arrays.asList(), user.getId());
UpdateArticleParam param = new UpdateArticleParam("New Title", "new body", "new desc");

Article result = articleCommandService.updateArticle(article, param);

assertEquals("New Title", result.getTitle());
assertEquals("new-title", result.getSlug());
assertEquals("new body", result.getBody());
assertEquals("new desc", result.getDescription());
verify(articleRepository).save(article);
}

@Test
void should_update_article_with_partial_params() {
Article article = new Article("Original Title", "desc", "body", Arrays.asList(), user.getId());
UpdateArticleParam param = new UpdateArticleParam("New Title", "", "");

Article result = articleCommandService.updateArticle(article, param);

assertEquals("New Title", result.getTitle());
assertEquals("body", result.getBody());
assertEquals("desc", result.getDescription());
verify(articleRepository).save(article);
}
}
Loading
Loading