functional tests added

parent 0bd99a4d
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<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/test/java/com/example/teacher/controller/TeacherControllerTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/controller/TeacherControllerTest.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/controller/TeacherControllerTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/controller/TeacherControllerTest.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/service/TeacherServiceTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/service/TeacherServiceTest.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/service/TeacherServiceTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/src/test/java/com/example/teacher/service/TeacherServiceTest.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" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/controller/TeacherControllerTest.class" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/controller/TeacherControllerTest.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/controller/TeacherControllerTest.class" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/controller/TeacherControllerTest.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/service/TeacherServiceTest.class" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/service/TeacherServiceTest.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/service/TeacherServiceTest.class" beforeDir="false" afterPath="$PROJECT_DIR$/../../teacher-service/teacher-service/target/test-classes/com/example/teacher/service/TeacherServiceTest.class" afterDir="false" />
</list> </list>
......
...@@ -74,6 +74,13 @@ ...@@ -74,6 +74,13 @@
<version>4.4.0</version> <version>4.4.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -25,7 +25,7 @@ public class TeacherController { ...@@ -25,7 +25,7 @@ public class TeacherController {
// POST methods // POST methods
@PostMapping @PostMapping
public ResponseEntity<Teacher> createStudent(@RequestBody Teacher teacher) { public ResponseEntity<Teacher> createTeacher(@RequestBody Teacher teacher) {
Teacher myStudent = teacherService.createAndUpdateTeacher(teacher); Teacher myStudent = teacherService.createAndUpdateTeacher(teacher);
return new ResponseEntity<Teacher>(myStudent, HttpStatus.CREATED); return new ResponseEntity<Teacher>(myStudent, HttpStatus.CREATED);
} }
...@@ -97,7 +97,7 @@ public class TeacherController { ...@@ -97,7 +97,7 @@ public class TeacherController {
} }
@GetMapping("/all") @GetMapping("/all")
public ResponseEntity<List<Teacher>> findAllStudents() { public ResponseEntity<List<Teacher>> findAllTeachers() {
List<Teacher> studentList = teacherService.findAllTeachers(); List<Teacher> studentList = teacherService.findAllTeachers();
return new ResponseEntity<List<Teacher>>(studentList, HttpStatus.OK); return new ResponseEntity<List<Teacher>>(studentList, HttpStatus.OK);
} }
...@@ -123,7 +123,7 @@ public class TeacherController { ...@@ -123,7 +123,7 @@ public class TeacherController {
// PUT methods // PUT methods
@PutMapping("/{id}") @PutMapping("/{id}")
public ResponseEntity<Teacher> updateStudent(@PathVariable int id, @RequestBody Teacher teacher) { public ResponseEntity<Teacher> updateTeacher(@PathVariable int id, @RequestBody Teacher teacher) {
teacher.setId(id); teacher.setId(id);
Teacher myTeacher = teacherService.createAndUpdateTeacher(teacher); Teacher myTeacher = teacherService.createAndUpdateTeacher(teacher);
return new ResponseEntity<Teacher>(myTeacher, HttpStatus.ACCEPTED); return new ResponseEntity<Teacher>(myTeacher, HttpStatus.ACCEPTED);
......
...@@ -3,12 +3,12 @@ package com.example.teacher.controller; ...@@ -3,12 +3,12 @@ package com.example.teacher.controller;
import com.example.teacher.model.Teacher; import com.example.teacher.model.Teacher;
import io.restassured.RestAssured; import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response; import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.hamcrest.Matcher;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.simple.JSONObject;
//import org.json.JSONObject;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
...@@ -18,7 +18,6 @@ import java.text.SimpleDateFormat; ...@@ -18,7 +18,6 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertEquals;
@Slf4j @Slf4j
@WebMvcTest @WebMvcTest
...@@ -66,21 +65,62 @@ public class TeacherControllerTest { ...@@ -66,21 +65,62 @@ public class TeacherControllerTest {
} }
@Test @Test
public void createTeacherTest() throws JSONException { public void createTeacherTest() throws JSONException, ParseException {
Date date = new Date(); Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:MM:yyyy");
String stringDate = simpleDateFormat.format(date); String stringDate = simpleDateFormat.format(date);
RestAssured.baseURI = "http://localhost:8081/teachers";
RequestSpecification request = RestAssured.given();
JSONObject requestParams = new JSONObject(); JSONObject requestParams = new JSONObject();
requestParams.put("name", "Qadeer"); requestParams.put("name", "QadeerTest");
requestParams.put("age", "57"); requestParams.put("age", "57");
requestParams.put("subject", "Math"); requestParams.put("subject", "Math");
requestParams.put("dateOfJoining", stringDate); requestParams.put("dateOfJoining", stringDate);
request.header("Content-Type", "application/json"); RestAssured
request.body(requestParams.toString()); .given()
Response response = request.post(); .contentType(ContentType.JSON)
System.out.println(response.statusCode()); .body(requestParams.toString())
assertEquals(response.statusCode(), 201); .when()
.post("http://localhost:8081/teachers")
.then()
.statusCode(201);
}
@Test
public void deleteTeacherByIdTest() {
RestAssured
.given()
.delete("http://localhost:8081/teachers/delete/36")
.then()
.statusCode(200);
}
@Test
public void deleteTeacherByWrongIdTest() {
RestAssured
.given()
.delete("http://localhost:8081/teachers/delete/36")
.then()
.statusCode(404);
}
@Test
public void updateTeacher() throws ParseException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:MM:yyyy");
String stringDate = simpleDateFormat.format(date);
JSONObject requestParams = new JSONObject();
requestParams.put("name", "QadeerUpdated");
requestParams.put("age", "57");
requestParams.put("subject", "UpdatedSubject");
requestParams.put("dateOfJoining", stringDate);
RestAssured
.given()
.body(requestParams.toJSONString())
.contentType(ContentType.JSON)
.put("http://localhost:8081/teachers/35")
.then()
.statusCode(202)
.log()
.all();
} }
} }
...@@ -5,18 +5,12 @@ import com.example.teacher.exception.ResourceNotFoundCustomException; ...@@ -5,18 +5,12 @@ 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;
import io.restassured.RestAssured;
import org.assertj.core.api.DateAssert;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.mockito.InjectMocks; import org.mockito.*;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -51,7 +45,7 @@ public class TeacherServiceTest { ...@@ -51,7 +45,7 @@ public class TeacherServiceTest {
} }
@Before @Before
public void createTeacher() throws ParseException { public void createTeacherMock() throws ParseException {
// create a dummy object // create a dummy object
date = new SimpleDateFormat("yyyy:MM:dd").parse("11:11:2011"); date = new SimpleDateFormat("yyyy:MM:dd").parse("11:11:2011");
myTeacher = new Teacher(0, "Teacher", 25, "maths", date, true); myTeacher = new Teacher(0, "Teacher", 25, "maths", date, true);
...@@ -78,7 +72,6 @@ public class TeacherServiceTest { ...@@ -78,7 +72,6 @@ public class TeacherServiceTest {
} }
@Test @Test
public void findTeacherByWrongIdTest() throws InterruptedException { public void findTeacherByWrongIdTest() throws InterruptedException {
Mockito.when(teacherRepository.findById(0)).thenReturn(Optional.empty()); Mockito.when(teacherRepository.findById(0)).thenReturn(Optional.empty());
try { try {
...@@ -104,8 +97,8 @@ public class TeacherServiceTest { ...@@ -104,8 +97,8 @@ public class TeacherServiceTest {
@Test @Test
public void findTeacherByNameTest() throws ParseException { public void findTeacherByNameTest() throws ParseException {
Mockito.when(teacherRepository.findTeacherByName("Teacher")).thenReturn(myTeacher); Mockito.when(teacherRepository.findTeacherByName(Mockito.any(String.class))).thenReturn(myTeacher);
Mockito.when(teacherMapper.entityToDto(myTeacher)).thenReturn(myTeacherDto); Mockito.when(teacherMapper.entityToDto(Mockito.any(Teacher.class))).thenReturn(myTeacherDto);
TeacherDto returnedTeacher = teacherService.findTeacherByName("Teacher"); TeacherDto returnedTeacher = teacherService.findTeacherByName("Teacher");
Assert.assertEquals(returnedTeacher.getName(), myTeacherDto.getName()); Assert.assertEquals(returnedTeacher.getName(), myTeacherDto.getName());
Assert.assertEquals(returnedTeacher.getAge(), myTeacherDto.getAge()); Assert.assertEquals(returnedTeacher.getAge(), myTeacherDto.getAge());
...@@ -116,9 +109,13 @@ public class TeacherServiceTest { ...@@ -116,9 +109,13 @@ public class TeacherServiceTest {
@Test @Test
public void findTeacherByAgeTest() { public void findTeacherByAgeTest() {
Mockito.when(teacherRepository.findTeacherByAge(25)).thenReturn(teacherList); Mockito.when(teacherRepository.findTeacherByAge(Mockito.any(Integer.class))).thenReturn(teacherList);
List<Teacher> returnedTeacherList = teacherService.findTeacherByAge(25); List<Teacher> returnedTeacherList = teacherService.findTeacherByAge(Mockito.any(Integer.class));
Assert.assertEquals(returnedTeacherList, teacherList); Assert.assertEquals(returnedTeacherList.get(0).getName(), teacherList.get(0).getName());
Assert.assertEquals(returnedTeacherList.get(0).getAge(), teacherList.get(0).getAge());
Assert.assertEquals(returnedTeacherList.get(0).getId(), teacherList.get(0).getId());
Assert.assertEquals(returnedTeacherList.get(0).getSubject(), teacherList.get(0).getSubject());
Assert.assertEquals(returnedTeacherList.get(0).getDateOfJoining(), teacherList.get(0).getDateOfJoining());
} }
@Test @Test
...@@ -127,6 +124,9 @@ public class TeacherServiceTest { ...@@ -127,6 +124,9 @@ public class TeacherServiceTest {
Mockito.when(teacherRepository.findTeacherById(0)).thenReturn(myTeacher); Mockito.when(teacherRepository.findTeacherById(0)).thenReturn(myTeacher);
boolean isDeleted = teacherService.deleteTeacherById(0); boolean isDeleted = teacherService.deleteTeacherById(0);
Assert.assertTrue(isDeleted); Assert.assertTrue(isDeleted);
// when a method doesn't have a return type it is difficult to verify if it is invoked.
// To verify, a certain method is invoked we use "Mockito.verify(class/interface Name).methodName()".
Mockito.verify(teacherRepository).save(myTeacher);
} }
@Test @Test
...@@ -139,14 +139,19 @@ public class TeacherServiceTest { ...@@ -139,14 +139,19 @@ public class TeacherServiceTest {
@Test @Test
public void createTeacherTest() throws JSONException { public void createTeacherTest() throws JSONException {
Date date = new Date(); Mockito.when(teacherRepository.save(ArgumentMatchers.any(Teacher.class))).thenReturn(myTeacher);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); Teacher teacher = teacherService.createAndUpdateTeacher(myTeacher);
String stringDate = simpleDateFormat.format(date); Assert.assertEquals(teacher.isActive(), myTeacher.isActive());
JSONObject requestParams = new JSONObject();
requestParams.put("name", "Testname"); }
requestParams.put("age", 25);
requestParams.put("subject", "maths"); @Test
requestParams.put("dateOfJoining", stringDate); public void updateTeacherTest() {
Mockito.when(teacherRepository.save(myTeacher)).thenReturn(myTeacher);
Teacher teacher = teacherService.createAndUpdateTeacher(myTeacher);
Assert.assertEquals(teacher.getName(), myTeacher.getName());
Assert.assertEquals(teacher.getSubject(), myTeacher.getSubject());
Assert.assertEquals(teacher.getAge(), myTeacher.getAge());
} }
@AfterEach @AfterEach
......
...@@ -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-08-03T10:51:27+0500", date = "2022-08-04T11:52:34+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