Skip to content

Commit

Permalink
added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Numan52 committed Mar 2, 2025
1 parent 826edcf commit ace7ad7
Show file tree
Hide file tree
Showing 13 changed files with 259 additions and 154 deletions.
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,12 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.example.app.Models.Entities.Ad;
import org.example.app.Services.Utils;

import java.util.List;

@Setter
@Getter

@ToString
public class AdSearchResponse {
private List<AdDto> ads;
private long totalAds;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/example/app/Models/Dtos/CreateAdDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,6 @@ public String toString() {
", images=" + images +
'}';
}


}
File renamed without changes.
77 changes: 77 additions & 0 deletions src/test/java/org/example/app/Controller/AdControllerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.example.app.Controller;

import org.example.app.Daos.AdDao;
import org.example.app.Models.Dtos.AdSearchResponse;
import org.example.app.Models.Entities.Ad;
import org.example.app.Models.Entities.User;
import org.example.app.Services.AdsFetching.AdFetchingFilter;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.web.servlet.MockMvc;

import java.util.List;
import java.util.UUID;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ExtendWith(MockitoExtension.class)
@AutoConfigureMockMvc
public class AdControllerTest {
@LocalServerPort
private int port;

@MockitoBean
private AdDao adDao;

@Autowired
private MockMvc mockMvc;


@Test
public void testGetsAllAdsByCategoryElectronics() throws Exception {
UUID categoryId = UUID.randomUUID();
String url = "http://localhost:" + port + "/ads/filtered-by-category?categoryId="+ categoryId + "&offset=0&limit=10";

User user = new User();
user.setFirstName("user1");
user.setId(UUID.randomUUID());

Ad ad1 = new Ad();
ad1.setTitle("Title 1");
ad1.setUser(user);
ad1.setImages(List.of());

Ad ad2 = new Ad();
ad2.setTitle("Title 2");
ad2.setUser(user);
ad2.setImages(List.of());

List<Ad> mockAds = List.of(ad1, ad2);

AdSearchResponse adSearchResponse = new AdSearchResponse(mockAds, 2);
System.out.println(adSearchResponse);
Mockito.when(adDao.getAdsByCategory(Mockito.any(AdFetchingFilter.class)))
.thenReturn(adSearchResponse);


mockMvc.perform(get(url))
.andExpect(status().isOk())
.andExpect(jsonPath("$.ads.length()").value(2))
.andExpect(jsonPath("$.ads[0].title").value("Title 1"))
.andExpect(jsonPath("$.ads[1].title").value("Title 2"));

}


}
36 changes: 36 additions & 0 deletions src/test/java/org/example/app/Controller/AuthControllerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.example.app.Controller;


import org.example.app.Daos.UserDao;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.web.servlet.MockMvc;
import org.testcontainers.containers.PostgreSQLContainer;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ExtendWith(MockitoExtension.class)
@AutoConfigureMockMvc
public class AuthControllerTest {
@LocalServerPort
private int port;

@MockitoBean
private UserDao userDao;

@Autowired
private MockMvc mockMvc;




}
129 changes: 20 additions & 109 deletions src/test/java/org/example/app/Daos/AdDaoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.example.app.Models.Entities.Chat;
import org.example.app.Models.Entities.User;
import org.example.app.Services.AdsFetching.AdFetchingFilter;
import org.example.app.TestContainerConfig;
import org.junit.ClassRule;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
Expand All @@ -25,39 +26,15 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import static org.assertj.core.api.Assertions.assertThat;

@Transactional
@Rollback

@DataJpaTest
@Import({UserDao.class, AdDao.class})
@Import({UserDao.class, AdDao.class, TestContainerConfig.class})
public class AdDaoTest {

static PostgreSQLContainer<?> postgres = new PostgreSQLContainer(
"postgres:16-alpine"
);


@BeforeAll
static void beforeAll() {
postgres.start();
}

@AfterAll
static void afterAll() {
postgres.stop();
}


@DynamicPropertySource
static void configureProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", postgres::getJdbcUrl);
registry.add("spring.datasource.username", postgres::getUsername);
registry.add("spring.datasource.password", postgres::getPassword);
}


@Autowired
private AdDao adDao;

Expand All @@ -67,96 +44,30 @@ static void configureProperties(DynamicPropertyRegistry registry) {
@Autowired
private TestEntityManager testEntityManager;

private Category electronicsCategory;


@BeforeEach
void setUp() {
User userOne = new User();
userOne.setFirstName("Martin");
userOne.setLastName("Smith");
userOne.setPassword("password");
userOne.setUsername("martin11");
userOne.setEmail("[email protected]");
testEntityManager.persist(userOne);

electronicsCategory = new Category(null, "Electronics");
testEntityManager.persist(electronicsCategory);

Category laptopsCategory = new Category(electronicsCategory, "Laptops");
testEntityManager.persist(laptopsCategory);

Category booksCategory = new Category(null, "Books");
testEntityManager.persist(booksCategory);

Ad ad1 = new Ad(
"Book1",
10,
"book description",
"new",
LocalDateTime.now(),
booksCategory,
LocalDateTime.now(),
userOne,
null,
false
);
testEntityManager.persist(ad1);

Ad ad2 = new Ad(
"Gaming laptop 1",
500,
"Gaming laptop description",
"new",
LocalDateTime.now(),
laptopsCategory,
LocalDateTime.now(),
userOne,
List.of(),
false
);
testEntityManager.persist(ad2);

Ad ad3= new Ad(
"Gaming laptop 2",
600,
"Gaming laptop description 2",
"new",
LocalDateTime.now(),
laptopsCategory,
LocalDateTime.now(),
userOne,
List.of(),
false
);
testEntityManager.persist(ad3);

Ad ad4= new Ad(
"Printer",
600,
"Printer description",
"new",
LocalDateTime.now(),
electronicsCategory,
LocalDateTime.now(),
userOne,
List.of(),
false
);
testEntityManager.persist(ad4);

}


@Test

void findsAllAdsInsideElectronicsCategory() {

AdFetchingFilter filter = new AdFetchingFilter.Builder()
.category(electronicsCategory.getId()).limit(10).offset(0).build();
System.out.println(electronicsCategory.toString());
.category(UUID.fromString("aefb83ad-4c9f-4c6a-b599-d8f67f4a1676")).limit(10).offset(0).build();

AdSearchResponse ads = adDao.getAdsByCategory(filter);

assertThat(ads.getAds()).extracting(adDto -> adDto.getTitle())
.containsExactlyInAnyOrder("Printer", "Gaming laptop 2", "Gaming laptop 1");
}



@Test
void findsLaptopsWhenSearchQueryIsLaptop() {
AdFetchingFilter filter = new AdFetchingFilter.Builder()
.query("Laptop").limit(10).offset(0).build();

AdSearchResponse ads = adDao.getSearchedAds(filter);

assertThat(ads.getAds()).extracting(adDto -> adDto.getTitle())
.containsExactlyInAnyOrder("Gaming laptop 2", "Gaming laptop 1");
}
}
14 changes: 0 additions & 14 deletions src/test/java/org/example/app/Daos/ChatDaoTest.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,16 @@
package org.example.app.Daos;

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.PersistenceContext;
import jakarta.transaction.Transactional;
import org.example.app.Models.Entities.Chat;
import org.example.app.Models.Entities.User;
import org.example.app.RoleType;
import org.example.app.TestConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;



@DataJpaTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ void setUp() {


@Test
void CreatesChatIfFirstMessage() {
void createsChatIfFirstMessage() {
UUID senderId = UUID.randomUUID();
UUID receiverId = UUID.randomUUID();
User sender = userOne;
Expand Down
26 changes: 0 additions & 26 deletions src/test/java/org/example/app/TestConfig.java

This file was deleted.

Loading

0 comments on commit ace7ad7

Please sign in to comment.