package gohigher.application;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
import java.time.LocalDateTime;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.TestConstructor;
import gohigher.application.entity.ApplicationJpaEntity;
import gohigher.application.entity.ApplicationProcessRepository;
import gohigher.application.entity.ApplicationRepository;
import gohigher.common.EmploymentType;
import gohigher.common.Process;
import gohigher.common.ProcessType;
import lombok.RequiredArgsConstructor;
@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
@RequiredArgsConstructor
@DataJpaTest
class ApplicationPersistenceAdapterTest {
private final ApplicationPersistenceAdapter applicationPersistenceAdapter;
private final ApplicationRepository applicationRepository;
private final ApplicationProcessRepository applicationProcessRepository;
@DisplayName("개인 지원서를 저장한다")
@Test
void saveApplication() {
Application application = generateApplication();
long userId = 1L;
Long applicationId = applicationPersistenceAdapter.save(userId, application);
ApplicationJpaEntity applicationJpaEntity = applicationRepository.findById(applicationId).orElseThrow();
assertAll(
() -> assertThat(applicationJpaEntity.getUserId()).isEqualTo(userId),
() -> assertThat(applicationJpaEntity.getProcesses()).hasSize(4)
);
}
private Application generateApplication() {
List<Process> processes = generateProcesses();
Process currentProcess = processes.get(0);
return new Application("고하이어 컴퍼니", "서울특별시 강남구", "010-0000-0000", "백엔드 개발", "JD", "재택 근무",
EmploymentType.PERMANENT, "careerRequirement", "requiredCapability", "preferredQualification",
LocalDateTime.now().plusDays(7), processes, "url", currentProcess);
}
private List<Process> generateProcesses() {
return List.of(new Process(ProcessType.TO_APPLY, null, LocalDateTime.now().plusDays(10)),
new Process(ProcessType.TEST, null, null),
new Process(ProcessType.INTERVIEW, null, null),
new Process(ProcessType.COMPLETE, null, null)
);
}
}