diff --git a/src/test/java/com/example/demo/DemoApplicationTests.java b/src/test/java/com/example/demo/DemoApplicationTests.java index 2778a6a..ffb91f1 100644 --- a/src/test/java/com/example/demo/DemoApplicationTests.java +++ b/src/test/java/com/example/demo/DemoApplicationTests.java @@ -1,13 +1,5 @@ -package com.example.demo; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class DemoApplicationTests { - - @Test - void contextLoads() { - } - -} +package com.example.demo; + +//@SpringBootTest +class DemoApplicationTests { +} diff --git a/src/test/java/com/example/demo/student/StudentRepositoryTest.java b/src/test/java/com/example/demo/student/StudentRepositoryTest.java new file mode 100644 index 0000000..c4c00cd --- /dev/null +++ b/src/test/java/com/example/demo/student/StudentRepositoryTest.java @@ -0,0 +1,53 @@ +package com.example.demo.student; + +import org.junit.jupiter.api.AfterEach; +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.orm.jpa.DataJpaTest; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +@DataJpaTest +class StudentRepositoryTest { + + @Autowired + private StudentRepository underTest; + + @AfterEach + void tearDown() { + underTest.deleteAll(); + } + + @Test + void itShouldCheckIfStudentEmailExists() { + // given + String email = "mike@gmail.com"; + Student student = new Student( + "Mike", + email, + Gender.MALE + ); + underTest.save(student); + + // when + Boolean expected = underTest.selectExistsEmail(email); + + // then + assertThat(expected).isTrue(); + } + + @Test + void itShouldCheckIfStudentEmailDoesNotExist() { + // given + String email = "mike@gmail.com"; + + // when + Boolean expected = underTest.selectExistsEmail(email); + + + // then + assertThat(expected).isFalse(); + } +} \ No newline at end of file diff --git a/src/test/java/com/example/demo/student/StudentServiceTest.java b/src/test/java/com/example/demo/student/StudentServiceTest.java new file mode 100644 index 0000000..0312ecb --- /dev/null +++ b/src/test/java/com/example/demo/student/StudentServiceTest.java @@ -0,0 +1,83 @@ +package com.example.demo.student; + +import com.example.demo.student.exception.BadRequestException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +@ExtendWith(MockitoExtension.class) +class StudentServiceTest { + + @Mock + private StudentRepository studentRepository; + private StudentService underTest; + + @BeforeEach + void setUp() { + underTest = new StudentService(studentRepository); + } + + @Test + void canGetAllStudents() { + // when + underTest.getAllStudents(); + // then + verify(studentRepository).findAll(); + } + + @Test + void canAddStudent() { + // given + Student student = new Student( + "Mike", + "mike@gmail.com", + Gender.MALE + ); + // when + underTest.addStudent(student); + // then + ArgumentCaptor studentArgumentCaptor = + ArgumentCaptor.forClass(Student.class); + verify(studentRepository) + .save(studentArgumentCaptor.capture()); + + Student capturedStudent = studentArgumentCaptor.getValue(); + assertThat(capturedStudent).isEqualTo(student); + } + + @Test + void willThrowWhenEmailIsTaken() { + // given + Student student = new Student( + "Mike", + "mike@gmail.com", + Gender.MALE + ); + given(studentRepository.selectExistsEmail(student.getEmail())) + .willReturn(true); + + // when + // then + assertThatThrownBy(() -> underTest.addStudent(student)) + .isInstanceOf(BadRequestException.class) + .hasMessageContaining("Email " + student.getEmail() + " taken"); + verify(studentRepository, never()).save(any()); + } + + @Test + @Disabled + void canDeleteStudent() { + + } +} \ No newline at end of file diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties new file mode 100644 index 0000000..e209f56 --- /dev/null +++ b/src/test/resources/application.properties @@ -0,0 +1,8 @@ +spring.datasource.url=jdbc:h2://mem:db;DB_CLOSE_DELAY=-1 +spring.datasource.username=sa +spring.datasource.password=sa +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgresSQLDialect +spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file