articles-backend-app
168 строк · 6.9 Кб
1package by.andd3dfx.persistence.dao;
2
3import static org.hamcrest.CoreMatchers.is;
4import static org.hamcrest.MatcherAssert.assertThat;
5import static org.junit.jupiter.api.Assertions.*;
6
7import by.andd3dfx.dto.ArticleSearchCriteria;
8import by.andd3dfx.dto.DeleteArticleSearchCriteria;
9import by.andd3dfx.persistence.entities.Article;
10import by.andd3dfx.persistence.entities.Author;
11import java.time.LocalDateTime;
12import java.util.Arrays;
13import java.util.List;
14import org.junit.jupiter.api.AfterEach;
15import org.junit.jupiter.api.BeforeEach;
16import org.junit.jupiter.api.Test;
17import org.junit.jupiter.api.extension.ExtendWith;
18import org.mockito.junit.jupiter.MockitoExtension;
19import org.springframework.beans.factory.annotation.Autowired;
20import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
21import org.springframework.data.domain.Pageable;
22
23@ExtendWith(MockitoExtension.class)
24@DataJpaTest
25class ArticleRepositoryCustomImplTest {
26
27@Autowired
28private ArticleRepository repository;
29
30private Article entity;
31private Article entity2;
32private Article entity3;
33
34@BeforeEach
35public void setup() {
36repository.deleteAll();
37entity = buildArticle("Ivan", "HD", LocalDateTime.parse("2010-12-03T10:15:30"));
38entity2 = buildArticle("Vasily", "HD", LocalDateTime.parse("2011-12-03T10:15:30"));
39entity3 = buildArticle("Ivan", "4K", LocalDateTime.parse("2012-12-03T10:15:30"));
40repository.saveAll(Arrays.asList(entity, entity2, entity3));
41}
42
43@AfterEach
44public void tearDown() {
45repository.deleteAll();
46}
47
48@Test
49public void existsByCriteriaWithoutParams() {
50assertThat(repository.existsByCriteria(new ArticleSearchCriteria()), is(true));
51}
52
53@Test
54public void existsByCriteriaWithUserId() {
55assertThat("Wrong result for Ivan", repository.existsByCriteria(
56new ArticleSearchCriteria("Ivan", null, null)), is(true));
57assertThat("Wrong result for Vasily", repository.existsByCriteria(
58new ArticleSearchCriteria("Vasily", null, null)), is(true));
59assertThat("Wrong result for unknown", repository.existsByCriteria(
60new ArticleSearchCriteria("unknown", null, null)), is(false));
61}
62
63@Test
64public void existsByCriteriaWithResolution() {
65assertThat("Wrong result for HD", repository.existsByCriteria(
66new ArticleSearchCriteria(null, null, "HD")), is(true));
67assertThat("Wrong result for 4K", repository.existsByCriteria(
68new ArticleSearchCriteria(null, null, "4K")), is(true));
69assertThat("Wrong result for unknown", repository.existsByCriteria(
70new ArticleSearchCriteria(null, null, "unknown")), is(false));
71}
72
73@Test
74public void existsByCriteriaWithTimestamp() {
75assertThat("Wrong result for e1-e2 date", repository.existsByCriteria(
76new ArticleSearchCriteria(null, "2011-11-03T10:15:30", null)), is(true));
77assertThat("Wrong result for e2-e3 date", repository.existsByCriteria(
78new ArticleSearchCriteria(null, "2012-11-03T10:15:30", null)), is(true));
79assertThat("Wrong result for future date", repository.existsByCriteria(
80new ArticleSearchCriteria(null, "2013-11-03T10:15:30", null)), is(false));
81}
82
83@Test
84public void existsByCriteriaWithAllParams() {
85assertThat("Wrong result for valid Ivan subscription", repository.existsByCriteria(
86new ArticleSearchCriteria("Ivan", "2012-11-03T10:15:30", "4K")), is(true));
87assertThat("Wrong result for expired Ivan subscription", repository.existsByCriteria(
88new ArticleSearchCriteria("Ivan", "2012-11-03T10:15:30", "HD")), is(false));
89}
90
91@Test
92public void findByCriteriaWithoutParams() {
93List<Article> result = repository.findByCriteria(new ArticleSearchCriteria());
94
95assertThat("Wrong records amount", result.size(), is(3));
96assertThat("Not found some entity", result.containsAll(Arrays.asList(entity, entity2, entity3)), is(true));
97}
98
99@Test
100public void findByCriteriaWithUserId() {
101List<Article> result = repository.findByCriteria(new ArticleSearchCriteria("Ivan", null, null));
102
103assertThat("Wrong records amount", result.size(), is(2));
104assertThat("Not found some entity", result.containsAll(Arrays.asList(entity, entity3)), is(true));
105}
106
107@Test
108public void findByCriteriaWithResolution() {
109List<Article> result = repository.findByCriteria(new ArticleSearchCriteria(null, null, "HD"));
110
111assertThat("Wrong records amount", result.size(), is(2));
112assertThat("Not found some entity", result.containsAll(Arrays.asList(entity, entity2)), is(true));
113}
114
115@Test
116public void findByCriteriaWithTimestamp() {
117List<Article> result = repository.findByCriteria(new ArticleSearchCriteria(null, "2011-11-03T10:15:30", null));
118
119assertThat("Wrong records amount", result.size(), is(2));
120assertThat("Not found some entity", result.containsAll(Arrays.asList(entity2, entity3)), is(true));
121}
122
123@Test
124public void findByCriteriaWithAllParams() {
125List<Article> result = repository.findByCriteria(
126new ArticleSearchCriteria("Ivan", "2012-11-03T10:15:30", "4K"));
127
128assertThat("Wrong records amount", result.size(), is(1));
129assertThat("Not found some entity", result.containsAll(Arrays.asList(entity3)), is(true));
130
131List<Article> result2 = repository.findByCriteria(
132new ArticleSearchCriteria("Ivan", "2012-11-03T10:15:30", "HD"));
133
134assertThat("Wrong records amount", result2.size(), is(0));
135}
136
137@Test
138public void deleteByCriteria() {
139final String userId = entity2.getTitle();
140final DeleteArticleSearchCriteria deleteCriteria = new DeleteArticleSearchCriteria(userId);
141final ArticleSearchCriteria searchCriteria = new ArticleSearchCriteria();
142searchCriteria.setTitle(userId);
143
144repository.deleteByCriteria(deleteCriteria);
145
146assertTrue(repository.findByCriteria(searchCriteria).isEmpty());
147assertEquals(repository.findByCriteria(new ArticleSearchCriteria()).size(), 2);
148}
149
150@Test
151public void deleteByCriteriaForEmptyCriteria() {
152repository.deleteByCriteria(new DeleteArticleSearchCriteria());
153
154assertTrue(repository.findByCriteria(new ArticleSearchCriteria()).isEmpty());
155}
156
157public static Article buildArticle(String title, String summary, LocalDateTime timestamp) {
158Article article = new Article();
159article.setTitle(title);
160article.setSummary(summary);
161article.setText("any text");
162article.setTimestamp(timestamp);
163article.setAuthor(new Author() {{
164setId(1L);
165}});
166return article;
167}
168}