test for TeacherService

parent 0a62c47d
...@@ -2,20 +2,8 @@ ...@@ -2,20 +2,8 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="93915b5b-eeab-4656-8b9a-933619ebc5f0" name="Changes" comment=""> <list default="true" id="93915b5b-eeab-4656-8b9a-933619ebc5f0" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/constant/Constant.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/student-service/student-service/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/.idea/workspace.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/dto/ErrorDto.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/mapper/StudentMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/mapper/StudentMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/dto/StudentDto.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/.gitignore" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/controller/StudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/controller/StudentController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/controller/StudentTeacherResponseVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/responseobject/StudentTeacherResponseVO.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/dto/TeacherDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/dto/TeacherDto.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/feign/FeignFallBack.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/feign/FeignFallBack.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/feign/FeignService.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/feign/FeignService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/model/Student.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/model/Student.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/service/StudentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/student-service/student-service/src/main/java/com/example/student/service/StudentService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/teacher-service/.idea/.gitignore" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/teacher-service/teacher-service/.gitignore" beforeDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -30,13 +18,13 @@ ...@@ -30,13 +18,13 @@
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent"><![CDATA[{ <component name="PropertiesComponent">{
"keyToString": { &quot;keyToString&quot;: {
"RunOnceActivity.OpenProjectViewOnStart": "true", &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
"RunOnceActivity.ShowReadmeOnStart": "true", &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
"last_opened_file_path": "/Users/aqadeer/Desktop/java-training-project-complete" &quot;last_opened_file_path&quot;: &quot;/Users/aqadeer/Desktop/java-training-project-complete&quot;
} }
}]]></component> }</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager"> <component name="TaskManager">
<task active="true" id="Default" summary="Default task"> <task active="true" id="Default" summary="Default task">
......
...@@ -5,10 +5,19 @@ ...@@ -5,10 +5,19 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="bd185af2-024c-4245-af2c-5893b8b011d9" name="Changes" comment=""> <list default="true" id="bd185af2-024c-4245-af2c-5893b8b011d9" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/.idea/uiDesigner.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/exception/ControllerAdvisor.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/exception/ResourceNotFoundCustomException.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/controller/TeacherControllerTest.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/service/TeacherServiceTest.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/TeacherServiceApplication.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/TeacherServiceApplication.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/example/student/mapper/StudentMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/student/mapper/StudentMapper.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/controller/TeacherController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/main/java/com/example/teacher/service/TeacherService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/generated-sources/annotations/com/example/teacher/mapper/TeacherMapperImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/generated-sources/annotations/com/example/teacher/mapper/TeacherMapperImpl.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -26,6 +35,17 @@ ...@@ -26,6 +35,17 @@
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
</component> </component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/pom.xml" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/java/com/example/student/constant/Constant.java" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/java/com/example/student/controller/StudentController.java" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/java/com/example/student/dto/TeacherDto.java" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignFallBack.java" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/java/com/example/student/feign/FeignService.java" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/java/com/example/student/mapper/StudentMapper.java" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/java/com/example/student/service/StudentService.java" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/src/main/resources/application.properties" root0="FORCE_HIGHLIGHTING" />
</component>
<component name="MarkdownSettingsMigration"> <component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" /> <option name="stateVersion" value="1" />
</component> </component>
......
...@@ -14,8 +14,8 @@ import static com.example.student.constant.Constant.FEIGN_URL; ...@@ -14,8 +14,8 @@ import static com.example.student.constant.Constant.FEIGN_URL;
public interface FeignService { public interface FeignService {
@GetMapping("/name/{teacherName}") @GetMapping("/name/{teacherName}")
public ResponseEntity<TeacherDto> findTeacherByName(@PathVariable String teacherName); ResponseEntity<TeacherDto> findTeacherByName(@PathVariable String teacherName);
@GetMapping("/age/{age}") @GetMapping("/age/{age}")
public ResponseEntity<List<TeacherDto>> findTeacherByAge(@PathVariable int age); ResponseEntity<List<TeacherDto>> findTeacherByAge(@PathVariable int age);
} }
...@@ -5,7 +5,6 @@ import com.example.student.model.Student; ...@@ -5,7 +5,6 @@ import com.example.student.model.Student;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import java.util.List; import java.util.List;
import java.util.Optional;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface StudentMapper { public interface StudentMapper {
......
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
...@@ -55,6 +55,20 @@ ...@@ -55,6 +55,20 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.6.1</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -2,6 +2,7 @@ package com.example.teacher.controller; ...@@ -2,6 +2,7 @@ package com.example.teacher.controller;
import com.example.teacher.dto.TeacherDto; import com.example.teacher.dto.TeacherDto;
import com.example.teacher.exception.ResourceNotFoundCustomException;
import com.example.teacher.model.Teacher; import com.example.teacher.model.Teacher;
import com.example.teacher.service.TeacherService; import com.example.teacher.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -32,7 +33,7 @@ public class TeacherController { ...@@ -32,7 +33,7 @@ public class TeacherController {
// GET methods // GET methods
@GetMapping("/id-array") @GetMapping("/id-array")
public ResponseEntity<List<Teacher>> findTeacherById(@RequestParam int[] id) throws InterruptedException { public ResponseEntity<List<Teacher>> findTeacherById(@RequestParam int[] id) throws InterruptedException, ResourceNotFoundCustomException {
List<Teacher> teacherList = new ArrayList<>(); List<Teacher> teacherList = new ArrayList<>();
for (int x: id) { for (int x: id) {
Optional<Teacher> myTeacher = teacherService.findTeacherById(x); Optional<Teacher> myTeacher = teacherService.findTeacherById(x);
......
package com.example.teacher.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class ControllerAdvisor {
@ExceptionHandler(ResourceNotFoundCustomException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleResourceNotFoundCustomException() {
return "Teacher does not exist";
}
}
package com.example.teacher.exception;
public class ResourceNotFoundCustomException extends Exception{
public ResourceNotFoundCustomException(String message) {
super(message);
}
}
...@@ -2,6 +2,7 @@ package com.example.teacher.service; ...@@ -2,6 +2,7 @@ package com.example.teacher.service;
import com.example.teacher.dto.ErrorDto; import com.example.teacher.dto.ErrorDto;
import com.example.teacher.dto.TeacherDto; import com.example.teacher.dto.TeacherDto;
import com.example.teacher.exception.ResourceNotFoundCustomException;
import com.example.teacher.mapper.TeacherMapper; import com.example.teacher.mapper.TeacherMapper;
import com.example.teacher.model.Teacher; import com.example.teacher.model.Teacher;
import com.example.teacher.repository.TeacherRepository; import com.example.teacher.repository.TeacherRepository;
...@@ -42,14 +43,18 @@ public class TeacherService { ...@@ -42,14 +43,18 @@ public class TeacherService {
} }
// GET Teacher By ID Synchronously // GET Teacher By ID Synchronously
public Optional<Teacher> findTeacherById(int id) throws InterruptedException { public Optional<Teacher> findTeacherById(int id) throws InterruptedException, ResourceNotFoundCustomException {
Thread.sleep(500); Thread.sleep(500);
log.info("GET Teacher of id " + id + " by Thread " + Thread.currentThread().getName()); log.info("GET Teacher of id " + id + " by Thread " + Thread.currentThread().getName());
Optional<Teacher> myTeacher = teacherRepository.findById(id); Optional<Teacher> myTeacher = teacherRepository.findById(id);
// return Optional.of(myTeacher.filter(Teacher::isActive).orElseThrow(() -> new ResourceNotFoundCustomException("Teacher does not exist")));
if (myTeacher.isPresent() && myTeacher.get().isActive()){ if (myTeacher.isPresent() && myTeacher.get().isActive()){
return myTeacher; return myTeacher;
} }
return Optional.empty(); else {
throw new ResourceNotFoundCustomException("Teacher does not exist");
}
// return Optional.empty();
} }
// GET Teacher By ID Asynchronously // GET Teacher By ID Asynchronously
......
package com.example.teacher.controller;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@WebMvcTest(TeacherController.class)
public class TeacherControllerTest {
}
package com.example.teacher.service;
import com.example.teacher.dto.TeacherDto;
import com.example.teacher.exception.ResourceNotFoundCustomException;
import com.example.teacher.mapper.TeacherMapper;
import com.example.teacher.model.Teacher;
import com.example.teacher.repository.TeacherRepository;
import org.assertj.core.api.DateAssert;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
//@RunWith(MockitoJUnitRunner.class)
public class TeacherServiceTest {
@Mock
private TeacherRepository teacherRepository;
@Mock
private TeacherMapper teacherMapper;
@InjectMocks
private TeacherService teacherService;
private Teacher myTeacher;
private List<Teacher> teacherList;
private TeacherDto myTeacherDto;
private Date date;
AutoCloseable openMocks;
@Before
public void setup() {
// initializes a mock object for those fields that have @Mock on them.
openMocks = MockitoAnnotations.openMocks(this);
}
@Before
public void createTeacher() throws ParseException {
// create a dummy object
date = new SimpleDateFormat("yyyy:MM:dd").parse("11:11:2011");
myTeacher = new Teacher(0, "Teacher", 25, "maths", date, true);
myTeacherDto = new TeacherDto(0, "Teacher", 25, "maths", date, null);
teacherList = new ArrayList<>();
teacherList.add(myTeacher);
}
@Test
public void getAllTeachersTest() {
// run this instead of calling the actual repository method
Mockito.when(teacherRepository.findAll()).thenReturn(teacherList);
List<Teacher> mockTeacherList = teacherService.findAllTeachers();
// assert statements checks if the results are as we expected.
Assert.assertEquals(mockTeacherList.get(0), teacherList.get(0));
}
@Test
public void findTeacherByIdTest() throws InterruptedException, ResourceNotFoundCustomException {
Mockito.when(teacherRepository.findById(0)).thenReturn(Optional.of(myTeacher));
Optional<Teacher> returnedTeacher = teacherService.findTeacherById(0);
Assert.assertEquals(returnedTeacher.get(), myTeacher);
}
@Test
public void findTeacherByWrongIdTest() throws InterruptedException {
Mockito.when(teacherRepository.findById(0)).thenReturn(Optional.empty());
try {
Optional<Teacher> returnedTeacher = teacherService.findTeacherById(0);
}
catch (ResourceNotFoundCustomException e) {
Assert.assertEquals(e.getMessage(), "Teacher does not exist");
}
}
@Test
public void findTeacherByWrongIdTest1() throws InterruptedException {
Mockito.when(teacherRepository.findById(0)).thenReturn(Optional.empty());
Exception exception = Assert.assertThrows(ResourceNotFoundCustomException.class, () -> teacherService.findTeacherById(0));
Assert.assertEquals(exception.getMessage(), "Teacher does not exist");
}
@Test(expected = ResourceNotFoundCustomException.class)
public void findTeacherByWrongIdTest2() throws InterruptedException, ResourceNotFoundCustomException {
Mockito.when(teacherRepository.findById(0)).thenReturn(Optional.empty());
Optional<Teacher> returnedTeacher = teacherService.findTeacherById(0);
}
@Test
public void findTeacherByNameTest() throws ParseException {
Mockito.when(teacherRepository.findTeacherByName("Teacher")).thenReturn(myTeacher);
Mockito.when(teacherMapper.entityToDto(myTeacher)).thenReturn(myTeacherDto);
TeacherDto returnedTeacher = teacherService.findTeacherByName("Teacher");
Assert.assertEquals(returnedTeacher.getName(), myTeacherDto.getName());
Assert.assertEquals(returnedTeacher.getAge(), myTeacherDto.getAge());
// // assertEquals will check the reference of the object instead of its attributes.
// Assert.assertEquals(returnedTeacher, myTeacherDto);
Assert.assertEquals(returnedTeacher.getDateOfJoining(), date);
}
@Test
public void findTeacherByAgeTest() {
Mockito.when(teacherRepository.findTeacherByAge(25)).thenReturn(teacherList);
List<Teacher> returnedTeacherList = teacherService.findTeacherByAge(25);
Assert.assertEquals(returnedTeacherList, teacherList);
}
@Test
public void deleteTeacherByIdTest() {
Teacher myDeletedTeacher = new Teacher(0, "Teacher", 25, "maths", new Date(), false);
Mockito.when(teacherRepository.findTeacherById(0)).thenReturn(myTeacher);
boolean isDeleted = teacherService.deleteTeacherById(0);
Assert.assertTrue(isDeleted);
}
@Test
public void deleteTeacherByWrongIdTest() {
Teacher myDeletedTeacher = new Teacher(0, "Teacher", 25, "maths", new Date(), false);
Mockito.when(teacherRepository.findTeacherById(0)).thenReturn(null);
boolean isDeleted = teacherService.deleteTeacherById(0);
Assert.assertFalse(isDeleted);
}
@AfterEach
public void tearDown() throws Exception {
openMocks.close();
}
}
\ No newline at end of file
...@@ -7,7 +7,7 @@ import org.springframework.stereotype.Component; ...@@ -7,7 +7,7 @@ import org.springframework.stereotype.Component;
@Generated( @Generated(
value = "org.mapstruct.ap.MappingProcessor", value = "org.mapstruct.ap.MappingProcessor",
date = "2022-07-14T16:43:13+0500", date = "2022-08-03T10:51:27+0500",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 18.0.1.1 (Oracle Corporation)" comments = "version: 1.4.2.Final, compiler: javac, environment: Java 18.0.1.1 (Oracle Corporation)"
) )
@Component @Component
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment