Skip to content
Merged
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
50 changes: 41 additions & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,49 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Test-->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
Expand Down Expand Up @@ -131,12 +163,12 @@
<version>3.3.0</version>
<executions>
<!-- Turned off for Front -->
<!-- <execution>-->
<!-- <phase>compile</phase>-->
<!-- <goals>-->
<!-- <goal>check</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- <execution>-->
<!-- <phase>compile</phase>-->
<!-- <goals>-->
<!-- <goal>check</goal>-->
<!-- </goals>-->
<!-- </execution>-->
</executions>
<configuration>
<configLocation>${maven.checkstyle.plugin.configLocation}</configLocation>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import back.activitymanager.dto.review.ReviewCreateRequestDto;
import back.activitymanager.dto.review.ReviewDto;
import back.activitymanager.service.ReviewService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
Expand All @@ -18,10 +20,13 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/review")
@Tag(name = "Review", description =
"User can see a reviews and add a new reviews")
public class ReviewController {

private final ReviewService reviewService;

@Operation(summary = "Create a review")
@PostMapping
@PreAuthorize("hasRole('USER')")
public ReviewDto createReview(Authentication authentication,
Expand All @@ -30,6 +35,7 @@ public ReviewDto createReview(Authentication authentication,
return reviewService.createReview(authentication, requestDto);
}

@Operation(summary = "Get all reviews")
@GetMapping
public Page<ReviewDto> getReviews(Pageable pageable) {
return reviewService.getReviews(pageable);
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/db/changelog/db.changelog-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@ databaseChangeLog:
file: db/changelog/changes/09-add-column-to-activities.yaml
- include:
file: db/changelog/changes/10-update-users-photo-path.yaml
- include:
file: db/changelog/changes/11-create-reviews-table.yaml
11 changes: 11 additions & 0 deletions src/test/java/back/activitymanager/TestApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package back.activitymanager;

import org.springframework.boot.SpringApplication;

public class TestApplication {

public static void main(String[] args) {
SpringApplication.from(ActivityManagerApplication::main).with(TestcontainersConfiguration.class).run(args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package back.activitymanager;

import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.context.annotation.Bean;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.utility.DockerImageName;

@TestConfiguration(proxyBeanMethods = false)
class TestcontainersConfiguration {

@Bean
@ServiceConnection
MySQLContainer<?> mysqlContainer() {
return new MySQLContainer<>(DockerImageName.parse("mysql:latest"));
}

}
24 changes: 24 additions & 0 deletions src/test/java/back/activitymanager/Util.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package back.activitymanager;

import back.activitymanager.dto.user.UserLoginDto;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;

public class Util {
public static String getToken() {
UserLoginDto loginDto = new UserLoginDto();
loginDto.setEmail("user@gmail.com");
loginDto.setPassword("securePassword123");

return RestAssured
.given()
.contentType(ContentType.JSON)
.body(loginDto)
.when()
.post("/auth/login")
.then()
.statusCode(200)
.extract()
.path("token");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
package back.activitymanager.activity;

import back.activitymanager.Util;
import back.activitymanager.dto.activity.ActivityCreateRequestDto;
import back.activitymanager.dto.activity.ActivityDto;
import back.activitymanager.dto.activity.ActivitySearchDto;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import org.junit.Assert;
import org.junit.jupiter.api.*;
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.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
import java.time.LocalDateTime;
import java.util.List;

import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.StringEndsWith.endsWith;
import static org.junit.jupiter.api.Assertions.assertEquals;

@AutoConfigureMockMvc
@ActiveProfiles("test")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ActivityControllerTest {
private static final String POST_ID = "01028";
@LocalServerPort
private int port;

@BeforeEach
void setUp() {
RestAssured.port = port;
}

@Test
@DisplayName("Should create activity successfully")
@Sql(scripts = "classpath:database/user/create-user.sql",
executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:database/activity/delete-activities.sql",
"classpath:database/user/delete-users.sql"},
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void createActivity_successCreation_ReturnsActivityDto() {
ActivityCreateRequestDto dto = new ActivityCreateRequestDto();
dto.setName("Yoga Session");
dto.setForWho("Adults");
dto.setNumberOfPeople(10);
dto.setCategory("Health");
dto.setFormat("Offline");
dto.setLat(50.4501);
dto.setLng(30.5234);
dto.setImgId(1);
dto.setLocalDateTime(LocalDateTime.of(2025, 8, 15, 10, 0));

RestAssured
.given()
.header("Authorization", "Bearer " + Util.getToken())
.contentType(ContentType.JSON)
.body(dto)
.when()
.post("/activity/create")
.then()
.statusCode(201)
.body("local", endsWith(POST_ID));
}

@Test
@DisplayName("Should get activity successfully")
@Sql(scripts = {"classpath:database/user/create-user.sql",
"classpath:database/activity/create-activity.sql"
}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:database/activity/delete-activities.sql",
"classpath:database/user/delete-users.sql"},
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void getActivities_successGetting_ReturnsPageActivityDto() {
RestAssured
.given()
.contentType(ContentType.JSON)
.when()
.post("/activity")
.then()
.statusCode(200)
.body("content[0].name",
equalTo("football"))
.body("content[0].local",
equalTo("Not found"));
}

@Test
@DisplayName("Should get activity by id successfully")
@Sql(scripts = {"classpath:database/user/create-user.sql",
"classpath:database/activity/create-activity.sql"
}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:database/activity/delete-activities.sql",
"classpath:database/user/delete-users.sql"},
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void getActivities_successGetting_ReturnsActivityDto() {
RestAssured
.given()
.header("Authorization", "Bearer " + Util.getToken())
.contentType(ContentType.JSON)
.when()
.get("/activity/123")
.then()
.statusCode(200)
.body("name", equalTo("football"))
.body("local", equalTo("Not found"));
}

@Test
@DisplayName("Should get activity a user created successfully")
@Sql(scripts = {"classpath:database/user/create-user.sql",
"classpath:database/activity/create-activity.sql"
}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:database/activity/delete-activities.sql",
"classpath:database/user/delete-users.sql"},
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void getMyActivities_successGetting_ReturnsPageActivityDto() {
RestAssured
.given()
.header("Authorization", "Bearer " + Util.getToken())
.contentType(ContentType.JSON)
.when()
.post("/activity/myActivities")
.then()
.statusCode(200)
.body("content[0].name", equalTo("football"))
.body("content[0].local", equalTo("Not found"));
}

@Test
@DisplayName("Should get activity user participating successfully")
@Sql(scripts = {"classpath:database/user/create-user.sql",
"classpath:database/activity/create-activity.sql",
"classpath:database/activity/create-activity-user.sql"
}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {
"classpath:database/activity/delete-activity-user.sql",
"classpath:database/activity/delete-activities.sql",
"classpath:database/user/delete-users.sql"},
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void getMeParticipating_successGetting_ReturnsPageActivityDto() {
RestAssured
.given()
.header("Authorization", "Bearer " + Util.getToken())
.contentType(ContentType.JSON)
.when()
.post("/activity/myActivities")
.then()
.statusCode(200)
.body("content[0].name", equalTo("football"))
.body("content[0].local", equalTo("Not found"));
}

@Test
@DisplayName("Should get activity user participating successfully")
@Sql(scripts = {"classpath:database/user/create-user.sql",
"classpath:database/activity/create-activity.sql"
}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {
"classpath:database/activity/delete-activities.sql",
"classpath:database/user/delete-users.sql"},
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void searchActivity_successGetting_ReturnsPageActivityDto() {
ActivitySearchDto activitySearchDto = new ActivitySearchDto();
activitySearchDto.setCategory("sport");
activitySearchDto.setFormat("format");
activitySearchDto.setForWho("men");

List<ActivityDto> activityDtos = RestAssured
.given()
.header("Authorization", "Bearer " + Util.getToken())
.contentType(ContentType.JSON)
.body(activitySearchDto)
.when()
.post("/activity/search")
.then()
.statusCode(200)
.extract()
.body()
.jsonPath()
.getList(".", ActivityDto.class);

assertEquals(activityDtos.size(), 1);
assertEquals(activityDtos.get(0).getId(), 123);
assertEquals(activityDtos.get(0).getImgId(), 1);
assertEquals(
activityDtos.get(0)
.getLocalDateTime()
.toString(),
"2025-08-15T10:00");
}
}
Loading