diff --git a/pom.xml b/pom.xml
index a61614b..373d6df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,17 +91,49 @@
provided
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+
+ io.rest-assured
+ rest-assured
+ 5.4.0
+ test
+
+
+ io.rest-assured
+ json-path
+ 5.4.0
+ test
+
org.springframework.boot
spring-boot-starter-test
test
- org.springframework.security
- spring-security-test
+ org.springframework.boot
+ spring-boot-testcontainers
+ test
+
+
+ org.testcontainers
+ junit-jupiter
+ test
+
+
+ org.testcontainers
+ mysql
+ test
+
+
+ com.h2database
+ h2
test
-
org.mapstruct
mapstruct
@@ -131,12 +163,12 @@
3.3.0
-
-
-
-
-
-
+
+
+
+
+
+
${maven.checkstyle.plugin.configLocation}
diff --git a/src/main/java/back/activitymanager/controller/ReviewController.java b/src/main/java/back/activitymanager/controller/ReviewController.java
index d87b754..a3ad5dc 100644
--- a/src/main/java/back/activitymanager/controller/ReviewController.java
+++ b/src/main/java/back/activitymanager/controller/ReviewController.java
@@ -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;
@@ -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,
@@ -30,6 +35,7 @@ public ReviewDto createReview(Authentication authentication,
return reviewService.createReview(authentication, requestDto);
}
+ @Operation(summary = "Get all reviews")
@GetMapping
public Page getReviews(Pageable pageable) {
return reviewService.getReviews(pageable);
diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml
index 5236486..ab8454f 100644
--- a/src/main/resources/db/changelog/db.changelog-master.yaml
+++ b/src/main/resources/db/changelog/db.changelog-master.yaml
@@ -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
diff --git a/src/test/java/back/activitymanager/TestApplication.java b/src/test/java/back/activitymanager/TestApplication.java
new file mode 100644
index 0000000..b3f7cc4
--- /dev/null
+++ b/src/test/java/back/activitymanager/TestApplication.java
@@ -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);
+ }
+
+}
diff --git a/src/test/java/back/activitymanager/TestcontainersConfiguration.java b/src/test/java/back/activitymanager/TestcontainersConfiguration.java
new file mode 100644
index 0000000..a14a002
--- /dev/null
+++ b/src/test/java/back/activitymanager/TestcontainersConfiguration.java
@@ -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"));
+ }
+
+}
diff --git a/src/test/java/back/activitymanager/Util.java b/src/test/java/back/activitymanager/Util.java
new file mode 100644
index 0000000..759adba
--- /dev/null
+++ b/src/test/java/back/activitymanager/Util.java
@@ -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");
+ }
+}
diff --git a/src/test/java/back/activitymanager/activity/ActivityControllerTest.java b/src/test/java/back/activitymanager/activity/ActivityControllerTest.java
new file mode 100644
index 0000000..10292bf
--- /dev/null
+++ b/src/test/java/back/activitymanager/activity/ActivityControllerTest.java
@@ -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 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");
+ }
+}
diff --git a/src/test/java/back/activitymanager/review/ReviewControllerTest.java b/src/test/java/back/activitymanager/review/ReviewControllerTest.java
new file mode 100644
index 0000000..c9f90b4
--- /dev/null
+++ b/src/test/java/back/activitymanager/review/ReviewControllerTest.java
@@ -0,0 +1,100 @@
+package back.activitymanager.review;
+
+import back.activitymanager.Util;
+import back.activitymanager.dto.review.ReviewCreateRequestDto;
+import back.activitymanager.dto.review.ReviewDto;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+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.util.List;
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@AutoConfigureMockMvc
+@ActiveProfiles("test")
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class ReviewControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @BeforeEach
+ void setUp() {
+ RestAssured.port = port;
+ }
+
+ @Test
+ @DisplayName("Should return all reviews successfully")
+ @Sql(scripts = {"classpath:database/user/create-user.sql",
+ "classpath:database/review/create-review.sql"},
+ executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:database/review/delete-reviews.sql",
+ "classpath:database/user/delete-users.sql"},
+ executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ public void getReviews_successReturn_ReturnsReviewDto() {
+ List list = given()
+ .contentType(ContentType.JSON)
+ .when()
+ .get("/review")
+ .then()
+ .statusCode(200)
+ .extract()
+ .body()
+ .jsonPath()
+ .getList("content", ReviewDto.class);
+
+ assertEquals(list.size(), 1);
+ assertEquals(list.get(0).id(), 1);
+ assertEquals(list.get(0).rate(), 4);
+ assertEquals(list.get(0).title(), "football");
+ assertEquals(list.get(0)
+ .user()
+ .getEmail(),
+ "user@gmail.com");
+ assertEquals(list.get(0)
+ .dateTime()
+ .toString(),
+ "2025-08-15T10:00");
+ }
+
+ @Test
+ @DisplayName("Should create a new reviews successfully")
+ @Sql(scripts = {"classpath:database/user/create-user.sql"},
+ executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:database/review/delete-reviews.sql",
+ "classpath:database/user/delete-users.sql"},
+ executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ public void createReview_successCreate_ReturnsReviewDto() {
+
+ ReviewCreateRequestDto requestDto = new ReviewCreateRequestDto();
+ requestDto.setComment("good game");
+ requestDto.setRate(5);
+ requestDto.setTitle("football");
+
+ RestAssured
+ .given()
+ .header("Authorization", "Bearer " + Util.getToken())
+ .contentType(ContentType.JSON)
+ .body(requestDto)
+ .when()
+ .post("/review")
+ .then()
+ .statusCode(200)
+ .body("user.email", equalTo("user@gmail.com"))
+ .body("id", equalTo(1))
+ .body("rate", equalTo(5))
+ .body("title", equalTo("football"))
+ .body("comment", equalTo("good game"));
+
+ }
+}
diff --git a/src/test/java/back/activitymanager/user/AuthControllerTest.java b/src/test/java/back/activitymanager/user/AuthControllerTest.java
new file mode 100644
index 0000000..fa35dd8
--- /dev/null
+++ b/src/test/java/back/activitymanager/user/AuthControllerTest.java
@@ -0,0 +1,84 @@
+package back.activitymanager.user;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.StringStartsWith.startsWith;
+
+import back.activitymanager.dto.user.UserLoginDto;
+import back.activitymanager.security.AuthenticationService;
+import back.activitymanager.service.UserService;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInstance;
+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.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+@AutoConfigureMockMvc
+@ActiveProfiles("test")
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class AuthControllerTest {
+ @LocalServerPort
+ private int port;
+
+ @BeforeEach
+ void setUp() {
+ RestAssured.port = port;
+ }
+
+ @Test
+ @DisplayName("Should register user and return UserResponseDto")
+ @Sql(scripts = "classpath:database/user/delete-users.sql",
+ executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = "classpath:database/user/delete-user-with-id-1.sql",
+ executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ void register_validRequest_returnsUserResponseDto() {
+
+ RestAssured
+ .given()
+ .log().all()
+ .multiPart("email", "test@example.com")
+ .multiPart("phoneNumber", "+380968396281")
+ .multiPart("password", "securePassword123")
+ .multiPart("repeatPassword", "securePassword123")
+ .multiPart("firstName", "user")
+ .multiPart("lastName", "user")
+ .when()
+ .post("/auth/registration")
+ .then()
+ .log().all()
+ .statusCode(200)
+ .body("id", equalTo(1))
+ .body("email", equalTo("test@example.com"))
+ .body("photo_path", equalTo(null));
+ }
+
+ @Test
+ @DisplayName("Should login user and return JWT token")
+ @Sql(scripts = "classpath:database/user/create-user.sql",
+ executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = "classpath:database/user/delete-user-with-id-1.sql",
+ executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ void login_validCredentials_returnsJwtToken() {
+ UserLoginDto loginDto = new UserLoginDto();
+ loginDto.setEmail("user@gmail.com");
+ loginDto.setPassword("securePassword123");
+
+ RestAssured
+ .given()
+ .contentType(ContentType.JSON)
+ .body(loginDto)
+ .when()
+ .post("/auth/login")
+ .then()
+ .statusCode(200)
+ .body("token", startsWith("eyJ"));
+
+ }
+}
diff --git a/src/test/java/back/activitymanager/user/UserControllerTest.java b/src/test/java/back/activitymanager/user/UserControllerTest.java
new file mode 100644
index 0000000..c5ff899
--- /dev/null
+++ b/src/test/java/back/activitymanager/user/UserControllerTest.java
@@ -0,0 +1,60 @@
+package back.activitymanager.user;
+
+import back.activitymanager.Util;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+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 static org.hamcrest.core.IsEqual.equalTo;
+
+@AutoConfigureMockMvc
+@ActiveProfiles("test")
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class UserControllerTest {
+ @LocalServerPort
+ private int port;
+
+ @BeforeEach
+ void setUp() {
+ RestAssured.port = port;
+ }
+
+ @Test
+ @DisplayName("Should login user and return information about current user")
+ @Sql(scripts = "classpath:database/user/create-user.sql",
+ executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = "classpath:database/user/delete-user-with-id-1.sql",
+ executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ public void getMe_validRequest_returnsUserResponseDto() {
+
+ RestAssured
+ .given()
+ .header("Authorization", "Bearer " + Util.getToken())
+ .accept(ContentType.JSON)
+ .when()
+ .get("/users/me")
+ .then()
+ .statusCode(200)
+ .body("email", equalTo("user@gmail.com"));
+ }
+
+ @Test
+ @DisplayName("Should login user and return information about current user")
+ @Sql(scripts = "classpath:database/user/create-user.sql",
+ executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ public void deleteMe_validRequest_returnsStatusNoContent() {
+ RestAssured
+ .given()
+ .header("Authorization", "Bearer " + Util.getToken())
+ .accept(ContentType.JSON)
+ .when()
+ .delete("/users/deleteMe")
+ .then()
+ .statusCode(204);
+ }
+}
diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
new file mode 100644
index 0000000..553ee05
--- /dev/null
+++ b/src/test/resources/application.properties
@@ -0,0 +1,20 @@
+spring.datasource.url=jdbc:h2:mem:testdb
+spring.datasource.driverClassName=org.h2.Driver
+spring.datasource.username=root
+spring.datasource.password=password
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+
+jwt.expiration=300000
+jwt.secret=veryveryveryveryveryveryveryveryveryveryveryveryverysecret
+
+dropbox.token=sl.u.DropBoxToken
+
+spring.servlet.multipart.max-file-size=128KB
+spring.servlet.multipart.max-request-size=128KB
+
+spring.mail.host=smtp.gmail.com
+spring.mail.port=587
+spring.mail.username=example@gmail.com
+spring.mail.password=password
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.properties.mail.smtp.starttls.enable=true
diff --git a/src/test/resources/database/activity/create-activity-user.sql b/src/test/resources/database/activity/create-activity-user.sql
new file mode 100644
index 0000000..a5f7d20
--- /dev/null
+++ b/src/test/resources/database/activity/create-activity-user.sql
@@ -0,0 +1,2 @@
+INSERT INTO users_activities(activity_id, user_id)
+values (123, 1);
diff --git a/src/test/resources/database/activity/create-activity.sql b/src/test/resources/database/activity/create-activity.sql
new file mode 100644
index 0000000..63789a7
--- /dev/null
+++ b/src/test/resources/database/activity/create-activity.sql
@@ -0,0 +1,4 @@
+
+INSERT INTO activities(id, name, for_who, number_of_people, category, format, lat, lng, img_id, local_date_time, is_deleted, user_id)
+values (123, 'football', 'men', 11, 'sport', 'format', 0, 0, 1, '2025-08-15 10:00:00', false, 1);
+
diff --git a/src/test/resources/database/activity/delete-activities.sql b/src/test/resources/database/activity/delete-activities.sql
new file mode 100644
index 0000000..6387d9a
--- /dev/null
+++ b/src/test/resources/database/activity/delete-activities.sql
@@ -0,0 +1 @@
+DELETE FROM activities;
diff --git a/src/test/resources/database/activity/delete-activity-user.sql b/src/test/resources/database/activity/delete-activity-user.sql
new file mode 100644
index 0000000..9993429
--- /dev/null
+++ b/src/test/resources/database/activity/delete-activity-user.sql
@@ -0,0 +1 @@
+DELETE FROM users_activities;
diff --git a/src/test/resources/database/review/create-review.sql b/src/test/resources/database/review/create-review.sql
new file mode 100644
index 0000000..16d39e1
--- /dev/null
+++ b/src/test/resources/database/review/create-review.sql
@@ -0,0 +1,2 @@
+INSERT INTO reviews(id, title, rate, user_id, comment, date_time)
+VALUES (1, 'football', 4, 1, 'good game', '2025-08-15 10:00:00');
diff --git a/src/test/resources/database/review/delete-reviews.sql b/src/test/resources/database/review/delete-reviews.sql
new file mode 100644
index 0000000..5e74a44
--- /dev/null
+++ b/src/test/resources/database/review/delete-reviews.sql
@@ -0,0 +1 @@
+DELETE FROM reviews;
diff --git a/src/test/resources/database/user/create-user.sql b/src/test/resources/database/user/create-user.sql
new file mode 100644
index 0000000..52afa84
--- /dev/null
+++ b/src/test/resources/database/user/create-user.sql
@@ -0,0 +1,10 @@
+DELETE FROM users;
+DELETE FROM roles;
+
+ALTER TABLE activities ALTER COLUMN is_deleted BOOLEAN;
+
+INSERT INTO users(id, password, email, first_name, last_name, phone_number, photo_path)
+VALUES (1, '$2a$10$tsXTqLug0brd6r.1.K8T2uGvoNSOK5RzeA6Yq6lZi/32wTfA6YIwe', 'user@gmail.com', 'user', 'user', '+380968396281', 'default');
+
+INSERT INTO roles (id, name) VALUES (1, 'ROLE_USER'), (2, 'ROLE_ADMIN');
+INSERT INTO users_roles (user_id, role_id) VALUES (1, 1);
diff --git a/src/test/resources/database/user/delete-user-with-id-1.sql b/src/test/resources/database/user/delete-user-with-id-1.sql
new file mode 100644
index 0000000..840eed7
--- /dev/null
+++ b/src/test/resources/database/user/delete-user-with-id-1.sql
@@ -0,0 +1 @@
+DELETE FROM users WHERE id = 1;
diff --git a/src/test/resources/database/user/delete-users.sql b/src/test/resources/database/user/delete-users.sql
new file mode 100644
index 0000000..6f114a7
--- /dev/null
+++ b/src/test/resources/database/user/delete-users.sql
@@ -0,0 +1 @@
+DELETE FROM users;