Skip to content
Closed
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
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@
public interface InterviewEventRepository extends JpaRepository<InterviewEvent, UUID> {

long countByUser_Id(UUID userId);

void deleteByApplication_Id(UUID applicationId);
}
5 changes: 5 additions & 0 deletions src/main/java/com/jobtracker/service/ApplicationService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.jobtracker.exception.ResourceNotFoundException;
import com.jobtracker.mapper.ApplicationMapper;
import com.jobtracker.repository.ApplicationRepository;
import com.jobtracker.repository.InterviewEventRepository;
import com.jobtracker.util.SecurityUtils;
import io.micrometer.tracing.Span;
import io.micrometer.tracing.Tracer;
Expand Down Expand Up @@ -38,19 +39,22 @@ public class ApplicationService {
);

private final ApplicationRepository applicationRepository;
private final InterviewEventRepository interviewEventRepository;
private final ApplicationMapper applicationMapper;
private final GamificationService gamificationService;
private final InterviewMetricsService interviewMetricsService;
private final SecurityUtils securityUtils;
private final Tracer tracer;

public ApplicationService(ApplicationRepository applicationRepository,
InterviewEventRepository interviewEventRepository,
ApplicationMapper applicationMapper,
GamificationService gamificationService,
InterviewMetricsService interviewMetricsService,
SecurityUtils securityUtils,
Tracer tracer) {
this.applicationRepository = applicationRepository;
this.interviewEventRepository = interviewEventRepository;
this.applicationMapper = applicationMapper;
this.gamificationService = gamificationService;
this.interviewMetricsService = interviewMetricsService;
Expand Down Expand Up @@ -141,6 +145,7 @@ public void delete(UUID id) {
UUID userId = securityUtils.getCurrentUserId();
JobApplication app = applicationRepository.findByIdAndUserId(id, userId)
.orElseThrow(() -> new ResourceNotFoundException("Application not found with id: " + id));
interviewEventRepository.deleteByApplication_Id(app.getId());
applicationRepository.delete(app);
}

Expand Down
6 changes: 6 additions & 0 deletions src/test/java/com/jobtracker/e2e/ApplicationE2ETest.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.jobtracker.e2e;

import com.jobtracker.repository.ApplicationRepository;
import com.jobtracker.repository.InterviewEventRepository;
import com.jobtracker.repository.RefreshTokenRepository;
import com.jobtracker.repository.UserAchievementRepository;
import com.jobtracker.repository.UserGamificationRepository;
import com.jobtracker.repository.UserInterviewMetricsRepository;
import com.jobtracker.repository.UserRepository;
import io.restassured.response.Response;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -21,17 +23,21 @@ class ApplicationE2ETest extends AbstractE2ETest {
@Autowired private UserRepository userRepository;
@Autowired private RefreshTokenRepository refreshTokenRepository;
@Autowired private ApplicationRepository applicationRepository;
@Autowired private InterviewEventRepository interviewEventRepository;
@Autowired private UserGamificationRepository userGamificationRepository;
@Autowired private UserAchievementRepository userAchievementRepository;
@Autowired private UserInterviewMetricsRepository userInterviewMetricsRepository;

private String accessToken;

@BeforeEach
void setUp() {
userAchievementRepository.deleteAll();
userGamificationRepository.deleteAll();
interviewEventRepository.deleteAll();
applicationRepository.deleteAll();
refreshTokenRepository.deleteAll();
userInterviewMetricsRepository.deleteAll();
userRepository.deleteAll();

Response register = given()
Expand Down
6 changes: 6 additions & 0 deletions src/test/java/com/jobtracker/e2e/AuthE2ETest.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.jobtracker.e2e;

import com.jobtracker.repository.ApplicationRepository;
import com.jobtracker.repository.InterviewEventRepository;
import com.jobtracker.repository.PasswordResetTokenRepository;
import com.jobtracker.repository.RefreshTokenRepository;
import com.jobtracker.repository.UserAchievementRepository;
import com.jobtracker.repository.UserGamificationRepository;
import com.jobtracker.repository.UserInterviewMetricsRepository;
import com.jobtracker.repository.UserRepository;
import io.restassured.http.Cookie;
import io.restassured.response.Response;
Expand All @@ -24,16 +26,20 @@ class AuthE2ETest extends AbstractE2ETest {
@Autowired private RefreshTokenRepository refreshTokenRepository;
@Autowired private PasswordResetTokenRepository passwordResetTokenRepository;
@Autowired private ApplicationRepository applicationRepository;
@Autowired private InterviewEventRepository interviewEventRepository;
@Autowired private UserGamificationRepository userGamificationRepository;
@Autowired private UserAchievementRepository userAchievementRepository;
@Autowired private UserInterviewMetricsRepository userInterviewMetricsRepository;

@BeforeEach
void cleanDb() {
userAchievementRepository.deleteAll();
userGamificationRepository.deleteAll();
interviewEventRepository.deleteAll();
applicationRepository.deleteAll();
passwordResetTokenRepository.deleteAll();
refreshTokenRepository.deleteAll();
userInterviewMetricsRepository.deleteAll();
userRepository.deleteAll();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
import com.jobtracker.dto.auth.RegisterRequest;
import com.jobtracker.repository.ApplicationRepository;
import com.jobtracker.repository.GoogleDriveConnectionRepository;
import com.jobtracker.repository.InterviewEventRepository;
import com.jobtracker.repository.PasswordResetTokenRepository;
import com.jobtracker.repository.RefreshTokenRepository;
import com.jobtracker.repository.UserAchievementRepository;
import com.jobtracker.repository.UserGamificationRepository;
import com.jobtracker.repository.UserInterviewMetricsRepository;
import com.jobtracker.repository.UserRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -40,17 +42,21 @@ class AuthControllerIT extends AbstractIntegrationTest {
@Autowired private RefreshTokenRepository refreshTokenRepository;
@Autowired private PasswordResetTokenRepository passwordResetTokenRepository;
@Autowired private ApplicationRepository applicationRepository;
@Autowired private InterviewEventRepository interviewEventRepository;
@Autowired private UserGamificationRepository userGamificationRepository;
@Autowired private UserAchievementRepository userAchievementRepository;
@Autowired private UserInterviewMetricsRepository userInterviewMetricsRepository;

@BeforeEach
void cleanDb() {
googleDriveConnectionRepository.deleteAll();
userAchievementRepository.deleteAll();
userGamificationRepository.deleteAll();
interviewEventRepository.deleteAll();
applicationRepository.deleteAll();
passwordResetTokenRepository.deleteAll();
refreshTokenRepository.deleteAll();
userInterviewMetricsRepository.deleteAll();
userRepository.deleteAll();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import com.jobtracker.dto.gamification.GamificationEventRequest;
import com.jobtracker.entity.enums.GamificationEventType;
import com.jobtracker.repository.ApplicationRepository;
import com.jobtracker.repository.InterviewEventRepository;
import com.jobtracker.repository.PasswordResetTokenRepository;
import com.jobtracker.repository.RefreshTokenRepository;
import com.jobtracker.repository.UserAchievementRepository;
import com.jobtracker.repository.UserGamificationRepository;
import com.jobtracker.repository.UserInterviewMetricsRepository;
import com.jobtracker.repository.UserRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -43,19 +45,27 @@ class GamificationControllerIT extends AbstractIntegrationTest {
@Autowired
private ApplicationRepository applicationRepository;

@Autowired
private InterviewEventRepository interviewEventRepository;

@Autowired
private UserGamificationRepository userGamificationRepository;

@Autowired
private UserAchievementRepository userAchievementRepository;

@Autowired
private UserInterviewMetricsRepository userInterviewMetricsRepository;

@BeforeEach
void cleanDb() {
userAchievementRepository.deleteAll();
userGamificationRepository.deleteAll();
interviewEventRepository.deleteAll();
applicationRepository.deleteAll();
passwordResetTokenRepository.deleteAll();
refreshTokenRepository.deleteAll();
userInterviewMetricsRepository.deleteAll();
userRepository.deleteAll();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@
import com.jobtracker.repository.GoogleDriveBaseResumeRepository;
import com.jobtracker.repository.GoogleDriveConnectionRepository;
import com.jobtracker.repository.GoogleDriveOAuthStateRepository;
import com.jobtracker.repository.InterviewEventRepository;
import com.jobtracker.repository.PasswordResetTokenRepository;
import com.jobtracker.repository.RefreshTokenRepository;
import com.jobtracker.repository.RoleRepository;
import com.jobtracker.repository.UserAchievementRepository;
import com.jobtracker.repository.UserGamificationRepository;
import com.jobtracker.repository.UserInterviewMetricsRepository;
import com.jobtracker.repository.UserRepository;
import com.jobtracker.service.GoogleDriveApiClient;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -58,6 +60,8 @@ class GoogleDriveControllerIT extends AbstractIntegrationTest {
@Autowired private ApplicationRepository applicationRepository;
@Autowired private UserGamificationRepository userGamificationRepository;
@Autowired private UserAchievementRepository userAchievementRepository;
@Autowired private InterviewEventRepository interviewEventRepository;
@Autowired private UserInterviewMetricsRepository userInterviewMetricsRepository;
@Autowired private GoogleDriveConnectionRepository googleDriveConnectionRepository;
@Autowired private GoogleDriveBaseResumeRepository googleDriveBaseResumeRepository;
@Autowired private GoogleDriveOAuthStateRepository googleDriveOAuthStateRepository;
Expand All @@ -74,9 +78,11 @@ void setUp() throws Exception {
googleDriveConnectionRepository.deleteAll();
userAchievementRepository.deleteAll();
userGamificationRepository.deleteAll();
interviewEventRepository.deleteAll();
applicationRepository.deleteAll();
passwordResetTokenRepository.deleteAll();
refreshTokenRepository.deleteAll();
userInterviewMetricsRepository.deleteAll();
userRepository.deleteAll();

RegisterRequest reg = new RegisterRequest("Drive User", "driveuser@example.com", "pass1234", "pass1234");
Expand Down
24 changes: 24 additions & 0 deletions src/test/java/com/jobtracker/unit/ApplicationServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.jobtracker.exception.ResourceNotFoundException;
import com.jobtracker.mapper.ApplicationMapper;
import com.jobtracker.repository.ApplicationRepository;
import com.jobtracker.repository.InterviewEventRepository;
import com.jobtracker.service.ApplicationService;
import com.jobtracker.service.GamificationService;
import com.jobtracker.service.InterviewMetricsService;
Expand Down Expand Up @@ -45,6 +46,7 @@ class ApplicationServiceTest {
private static final UUID OTHER_UUID = UUID.fromString("00000000-0000-0000-0000-000000000099");

@Mock private ApplicationRepository applicationRepository;
@Mock private InterviewEventRepository interviewEventRepository;
@Mock private ApplicationMapper applicationMapper;
@Mock private GamificationService gamificationService;
@Mock private InterviewMetricsService interviewMetricsService;
Expand Down Expand Up @@ -236,6 +238,28 @@ void archive_shouldThrow_whenNotFound() {
.isInstanceOf(ResourceNotFoundException.class);
}

@Test
void delete_shouldRemoveInterviewEventsBeforeDeletingApplication() {
when(securityUtils.getCurrentUserId()).thenReturn(USER_UUID);
when(applicationRepository.findByIdAndUserId(APP_UUID, USER_UUID)).thenReturn(Optional.of(app));

applicationService.delete(APP_UUID);

var inOrder = inOrder(interviewEventRepository, applicationRepository);
inOrder.verify(interviewEventRepository).deleteByApplication_Id(APP_UUID);
inOrder.verify(applicationRepository).delete(app);
}

@Test
void delete_shouldThrow_whenApplicationNotFound() {
when(securityUtils.getCurrentUserId()).thenReturn(USER_UUID);
when(applicationRepository.findByIdAndUserId(OTHER_UUID, USER_UUID)).thenReturn(Optional.empty());

assertThatThrownBy(() -> applicationService.delete(OTHER_UUID))
.isInstanceOf(ResourceNotFoundException.class);
verifyNoInteractions(interviewEventRepository);
}

@SuppressWarnings("unchecked")
@Test
void getAll_shouldReturnPagedResponse() {
Expand Down
Loading