1+ package com .amigoscode .product ;
2+
3+ import com .amigoscode .SharedPostgresContainer ;
4+ import org .junit .jupiter .api .BeforeEach ;
5+ import org .junit .jupiter .api .Test ;
6+ import org .springframework .beans .factory .annotation .Autowired ;
7+ import org .springframework .boot .test .autoconfigure .jdbc .AutoConfigureTestDatabase ;
8+ import org .springframework .boot .test .autoconfigure .orm .jpa .DataJpaTest ;
9+ import org .springframework .boot .testcontainers .service .connection .ServiceConnection ;
10+ import org .testcontainers .junit .jupiter .Container ;
11+ import org .testcontainers .junit .jupiter .Testcontainers ;
12+
13+ import java .math .BigDecimal ;
14+ import java .util .List ;
15+ import java .util .UUID ;
16+
17+ import static org .assertj .core .api .Assertions .assertThat ;
18+
19+ @ DataJpaTest
20+ @ AutoConfigureTestDatabase (
21+ replace = AutoConfigureTestDatabase .Replace .NONE
22+ )
23+ @ Testcontainers
24+ class ProductRepositoryTest {
25+
26+ @ Container
27+ @ ServiceConnection
28+ private static final SharedPostgresContainer POSTGRES =
29+ SharedPostgresContainer .getInstance ();
30+
31+
32+ @ Autowired
33+ private ProductRepository underTest ;
34+
35+ @ BeforeEach
36+ void setUp () {
37+ underTest .deleteAll ();
38+ }
39+
40+ @ Test
41+ void canFindAvailablePublishedProducts () {
42+ // given
43+ Product product1 = new Product (
44+ UUID .randomUUID (),
45+ "iphone" ,
46+ "bardnjknjkndsjknkjnajkndjksandsajkndkjasnkdjank" ,
47+ new BigDecimal ("1000" ),
48+ "https://amigoscode.com/logo.png" ,
49+ 10
50+ );
51+
52+ Product product2 = new Product (
53+ UUID .randomUUID (),
54+ "samsung" ,
55+ "bardnjknjkndsjknkjnajkndjksandsajkndkjasnkdjank" ,
56+ new BigDecimal ("1200" ),
57+ "https://amigoscode.com/logo.png" ,
58+ 5
59+ );
60+ product2 .setPublished (false );
61+
62+ Product product3 = new Product (
63+ UUID .randomUUID (),
64+ "watch" ,
65+ "bardnjknjkndsjknkjnajkndjksandsajkndkjasnkdjank" ,
66+ new BigDecimal ("5000" ),
67+ "https://amigoscode.com/logo.png" ,
68+ 0
69+ );
70+
71+ Product product4 = new Product (
72+ UUID .randomUUID (),
73+ "PS5" ,
74+ "bardnjknjkndsjknkjnajkndjksandsajkndkjasnkdjank" ,
75+ new BigDecimal ("300" ),
76+ "https://amigoscode.com/logo.png" ,
77+ 90
78+ );
79+
80+ underTest .saveAll (
81+ List .of (product1 , product2 , product3 , product4 )
82+ );
83+ // when
84+ List <Product > availablePublishedProducts =
85+ underTest .findAvailablePublishedProducts ();
86+ // then
87+ assertThat (availablePublishedProducts )
88+ .usingRecursiveFieldByFieldElementComparatorIgnoringFields (
89+ "updatedAt" , "createdAt"
90+ )
91+ .containsExactly (
92+ product4 , product1
93+ );
94+ }
95+ }
0 commit comments