From 10c6a0607a79ff0b939e992259b62e9b021f8cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A2?= =?UTF-8?q?=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sat, 17 Dec 2022 15:09:58 +0300 Subject: [PATCH 1/4] DepartmentServiceImpl --- department-service.http | 9 ++++ .../controller/DepartmentController.java | 40 ++++++++++++++++ .../weblibrary/service/DepartmentService.java | 17 +++++++ .../service/DepartmentServiceImpl.java | 47 +++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 department-service.http create mode 100644 src/main/java/ru/skypro/weblibrary/controller/DepartmentController.java create mode 100644 src/main/java/ru/skypro/weblibrary/service/DepartmentService.java create mode 100644 src/main/java/ru/skypro/weblibrary/service/DepartmentServiceImpl.java diff --git a/department-service.http b/department-service.http new file mode 100644 index 0000000..4b0c8d5 --- /dev/null +++ b/department-service.http @@ -0,0 +1,9 @@ +###– возвращает список сотрудников по департаменту +GET http://localhost:8080/department/employees +### – возвращает сумму зарплат по департаменту +GET http://localhost:8080/department/2/salary/sum + +### – возвращает максимальную зарплату по департаменту +GET http://localhost:8080/department/2/salary/max +### – возвращает минимальную зарплату по департаменту +GET http://localhost:8080/department/2/salary/min \ No newline at end of file diff --git a/src/main/java/ru/skypro/weblibrary/controller/DepartmentController.java b/src/main/java/ru/skypro/weblibrary/controller/DepartmentController.java new file mode 100644 index 0000000..94ecfe6 --- /dev/null +++ b/src/main/java/ru/skypro/weblibrary/controller/DepartmentController.java @@ -0,0 +1,40 @@ +package ru.skypro.weblibrary.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import ru.skypro.weblibrary.entity.Employee; +import ru.skypro.weblibrary.service.DepartmentService; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("department") +public class DepartmentController { + private final DepartmentService departmentService; + + public DepartmentController(DepartmentService departmentService) { + this.departmentService = departmentService; + } + + @GetMapping("/employees") + public Map> getEmployees(){ + return departmentService.getEmployees(); + } + + @GetMapping("/{id}/salary/sum") + public Integer getSalarySum(@PathVariable Integer id){ + return departmentService.getSalarySum(id); + } + @GetMapping("/{id}/salary/min") + public Integer getSalaryMin(@PathVariable Integer id){ + return departmentService.getSalaryMin(id); + } + @GetMapping("/{id}/salary/max") + public Integer getSalaryMax(@PathVariable Integer id){ + return departmentService.getSalaryMax(id); + } +} diff --git a/src/main/java/ru/skypro/weblibrary/service/DepartmentService.java b/src/main/java/ru/skypro/weblibrary/service/DepartmentService.java new file mode 100644 index 0000000..3344298 --- /dev/null +++ b/src/main/java/ru/skypro/weblibrary/service/DepartmentService.java @@ -0,0 +1,17 @@ +package ru.skypro.weblibrary.service; + +import ru.skypro.weblibrary.entity.Employee; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public interface DepartmentService { + Map> getEmployees(); + + Integer getSalarySum(Integer id); + + Integer getSalaryMin(Integer id); + + Integer getSalaryMax(Integer id); +} diff --git a/src/main/java/ru/skypro/weblibrary/service/DepartmentServiceImpl.java b/src/main/java/ru/skypro/weblibrary/service/DepartmentServiceImpl.java new file mode 100644 index 0000000..dde5603 --- /dev/null +++ b/src/main/java/ru/skypro/weblibrary/service/DepartmentServiceImpl.java @@ -0,0 +1,47 @@ +package ru.skypro.weblibrary.service; + +import org.springframework.stereotype.Service; +import ru.skypro.weblibrary.entity.Employee; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DepartmentServiceImpl implements DepartmentService { + + final EmployeeService employeeService; + + public DepartmentServiceImpl(EmployeeService employeeService) { + this.employeeService = employeeService; + } + + @Override + public Map> getEmployees() { + return employeeService.getListEmployee().stream().collect(Collectors.groupingBy(Employee::getDepartment)); + } + + @Override + public Integer getSalarySum(Integer id) { + return employeeService.getListEmployee().stream() + .filter(e-> e.getDepartment().equals(id)) + .mapToInt(Employee::getSalary) + .sum(); + } + + @Override + public Integer getSalaryMin(Integer id) { + return employeeService.getListEmployee().stream() + .filter(e-> e.getDepartment().equals(id)) + .mapToInt(Employee::getSalary) + .min().orElseThrow(); + } + + @Override + public Integer getSalaryMax(Integer id) { + return employeeService.getListEmployee().stream() + .filter(e-> e.getDepartment().equals(id)) + .mapToInt(Employee::getSalary) + .max().orElseThrow(); + } +} From 20b7af68294c14c6933df1a17927cbc5a4e1ae80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A2?= =?UTF-8?q?=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sat, 17 Dec 2022 16:12:26 +0300 Subject: [PATCH 2/4] fix typo, Some tests writing --- pom.xml | 6 ++ .../controller/EmployeeController.java | 6 +- .../ru/skypro/weblibrary/entity/Employee.java | 14 ++++ .../weblibrary/service/EmployeeService.java | 6 +- .../service/EmployeeServiceImpl.java | 6 +- .../service/DepartmentServiceTest.java | 33 ++++++++ .../service/EmployeeServiceTest.java | 77 +++++++++++++++++++ 7 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java create mode 100644 src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java diff --git a/pom.xml b/pom.xml index 34eb14c..8742f55 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,12 @@ org.apache.commons commons-lang3 + + org.jetbrains + annotations + RELEASE + test + diff --git a/src/main/java/ru/skypro/weblibrary/controller/EmployeeController.java b/src/main/java/ru/skypro/weblibrary/controller/EmployeeController.java index df1ff7f..2fcb77c 100644 --- a/src/main/java/ru/skypro/weblibrary/controller/EmployeeController.java +++ b/src/main/java/ru/skypro/weblibrary/controller/EmployeeController.java @@ -29,15 +29,15 @@ public Employee addEmployee(@RequestBody EmployeeRequest employee){ @GetMapping("employee/salary/sum") public Integer getSumAlary(){ - return employeeService.getSumAlary(); + return employeeService.getSumSalary(); } @GetMapping("employee/salary/min") public Employee getMinAlary(){ - return employeeService.getMinAlary(); + return employeeService.getMinSalary(); } @GetMapping("employee/salary/max") public Employee getMaxAlary(){ - return employeeService.getMaxAlary(); + return employeeService.getMaxSalary(); } @GetMapping("employee/high-salary") public List getHighSalary(@RequestParam Integer salary){ diff --git a/src/main/java/ru/skypro/weblibrary/entity/Employee.java b/src/main/java/ru/skypro/weblibrary/entity/Employee.java index d52ed83..c02c14e 100644 --- a/src/main/java/ru/skypro/weblibrary/entity/Employee.java +++ b/src/main/java/ru/skypro/weblibrary/entity/Employee.java @@ -1,5 +1,7 @@ package ru.skypro.weblibrary.entity; +import java.util.Objects; + public class Employee { private static int counter; private final Integer id; @@ -41,4 +43,16 @@ public Integer getDepartment() { public Integer getSalary() { return salary; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Employee employee)) return false; + return getId().equals(employee.getId()) && getFirstName().equals(employee.getFirstName()) && getLastName().equals(employee.getLastName()) && getSecondName().equals(employee.getSecondName()) && getDepartment().equals(employee.getDepartment()) && getSalary().equals(employee.getSalary()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getFirstName(), getLastName(), getSecondName(), getDepartment(), getSalary()); + } } diff --git a/src/main/java/ru/skypro/weblibrary/service/EmployeeService.java b/src/main/java/ru/skypro/weblibrary/service/EmployeeService.java index 81f360b..0463c13 100644 --- a/src/main/java/ru/skypro/weblibrary/service/EmployeeService.java +++ b/src/main/java/ru/skypro/weblibrary/service/EmployeeService.java @@ -12,11 +12,11 @@ public interface EmployeeService { Employee addEmployee(EmployeeRequest employeeRequest); - Integer getSumAlary(); + Integer getSumSalary(); - Employee getMinAlary(); + Employee getMinSalary(); - Employee getMaxAlary(); + Employee getMaxSalary(); List getHighSalary(Integer salary); } diff --git a/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java b/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java index 55990db..d187feb 100644 --- a/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java +++ b/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java @@ -40,17 +40,17 @@ public Employee addEmployee(EmployeeRequest employeeRequest) { } @Override - public Integer getSumAlary() { + public Integer getSumSalary() { return employees.values().stream().mapToInt(Employee::getSalary).sum(); } @Override - public Employee getMinAlary() { + public Employee getMinSalary() { return employees.values().stream().reduce((e1, e2) -> e1.getSalary() < e2.getSalary() ? e1 : e2).orElseThrow(); } @Override - public Employee getMaxAlary() { + public Employee getMaxSalary() { return employees.values().stream().reduce((e1, e2) -> e1.getSalary() > e2.getSalary() ? e1 : e2).orElseThrow(); } diff --git a/src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java b/src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java new file mode 100644 index 0000000..e5a43c5 --- /dev/null +++ b/src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java @@ -0,0 +1,33 @@ +package ru.skypro.weblibrary.service; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class DepartmentServiceTest { + + + @InjectMocks + EmployeeService employeeService; + final DepartmentService departmentService = new DepartmentServiceImpl(employeeService); + + @Test + void getEmployees() { + } + + @Test + void getSalarySum() { + } + + @Test + void getSalaryMin() { + } + + @Test + void getSalaryMax() { + } +} \ No newline at end of file diff --git a/src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java b/src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java new file mode 100644 index 0000000..f7993e8 --- /dev/null +++ b/src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java @@ -0,0 +1,77 @@ +package ru.skypro.weblibrary.service; + +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import ru.skypro.weblibrary.dto.EmployeeRequest; +import ru.skypro.weblibrary.entity.Employee; + + +import java.util.HashMap; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; + +class EmployeeServiceTest { + + @NotNull + private static Stream provideParamsForTest(){ + return Stream.of( + Arguments.of("FirstNameA","LastNameA","SecondNameA",1,1000), + Arguments.of("FirstNameB","LastNameB","SecondNameB",1,6000), + Arguments.of("FirstNameC","LastNameC","SecondNameC",1,2000), + Arguments.of("FirstNameD","LastNameD","SecondNameD",2,5000), + Arguments.of("FirstNameE","LastNameE","SecondNameE",2,1000), + Arguments.of("FirstNameF","LastNameF","SecondNameF",2,3000), + Arguments.of("FirstNameG","LastNameG","SecondNameG",1,5000) + ); + } + private final EmployeeService employeeService = new EmployeeServiceImpl(); + + @Test + void getListEmployee() { + var expected = new HashMap().values(); + var actual = employeeService.getListEmployee(); + assertIterableEquals(expected,actual); + } + + @ParameterizedTest + @MethodSource("provideParamsForTest") + void addEmployee(String paramFirstName,String paramLastName,String paramSecondName,Integer paramDepartment,Integer paramSalary) { + EmployeeRequest employee = new EmployeeRequest(); + employee.setFirstName(paramFirstName); + employee.setLastName(paramLastName); + employee.setSecondName(paramSecondName); + employee.setDepartment(paramDepartment); + employee.setSalary(paramSalary); + employeeService.addEmployee(employee); + Employee actual = (Employee) employeeService.getListEmployee().toArray()[0]; + assertEquals(paramFirstName,actual.getFirstName()); + assertEquals(paramLastName,actual.getLastName()); + assertEquals(paramSecondName,actual.getSecondName()); + assertEquals(paramDepartment,actual.getDepartment()); + assertEquals(paramSalary,actual.getSalary()); + } + + @ParameterizedTest + @MethodSource("provideParamsForTest") + void getSumSalary(String paramFirstName, String paramLastName, String paramSecondName, Integer paramDepartment, Integer paramSalary) { + addEmployee(paramFirstName,paramLastName,paramSecondName,paramDepartment,paramSalary); + addEmployee(paramFirstName,paramLastName,paramSecondName,paramDepartment,paramSalary); + assertEquals(paramSalary*2,employeeService.getSumSalary()); + } + + @Test + void getMinSalary() { + } + + @Test + void getMaxSalary() { + } + + @Test + void getHighSalary() { + } +} \ No newline at end of file From fcd83177433c7845792cad1869c7c16e26759669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A2?= =?UTF-8?q?=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sat, 17 Dec 2022 16:50:33 +0300 Subject: [PATCH 3/4] EmplyeeTest --- .../service/EmployeeServiceImpl.java | 3 + .../service/EmployeeServiceTest.java | 77 ++++++++++++++----- 2 files changed, 62 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java b/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java index d187feb..ebb0067 100644 --- a/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java +++ b/src/main/java/ru/skypro/weblibrary/service/EmployeeServiceImpl.java @@ -24,6 +24,9 @@ public Employee addEmployee(EmployeeRequest employeeRequest) { if (employeeRequest.getFirstName() == null || employeeRequest.getLastName() == null) { throw new IllegalArgumentException("Employee name should be set"); } + if (employeeRequest.getSalary() == null || employeeRequest.getDepartment() == null){ + throw new IllegalArgumentException("Department or Salary is not defined"); + } if (!StringUtils.isAlpha(employeeRequest.getFirstName()) || !StringUtils.isAlpha(employeeRequest.getLastName()) || !StringUtils.isAlpha(employeeRequest.getSecondName()) diff --git a/src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java b/src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java index f7993e8..fd649c6 100644 --- a/src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java +++ b/src/test/java/ru/skypro/weblibrary/service/EmployeeServiceTest.java @@ -1,15 +1,19 @@ package ru.skypro.weblibrary.service; +import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.web.server.ResponseStatusException; import ru.skypro.weblibrary.dto.EmployeeRequest; import ru.skypro.weblibrary.entity.Employee; import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.*; @@ -21,15 +25,34 @@ private static Stream provideParamsForTest(){ return Stream.of( Arguments.of("FirstNameA","LastNameA","SecondNameA",1,1000), Arguments.of("FirstNameB","LastNameB","SecondNameB",1,6000), - Arguments.of("FirstNameC","LastNameC","SecondNameC",1,2000), - Arguments.of("FirstNameD","LastNameD","SecondNameD",2,5000), - Arguments.of("FirstNameE","LastNameE","SecondNameE",2,1000), - Arguments.of("FirstNameF","LastNameF","SecondNameF",2,3000), - Arguments.of("FirstNameG","LastNameG","SecondNameG",1,5000) + Arguments.of("FirstNameC","LastNameC","SecondNameC",1,null), + Arguments.of("FirstNameD",null,"SecondNameD",2,5000), + Arguments.of(null,"LastNameE","SecondNameE",2,1000), + Arguments.of("FirstNameF","LastNameF",null,2,3000), + Arguments.of("FirstNameG","LastNameG","SecondNameG",null,5000) ); } private final EmployeeService employeeService = new EmployeeServiceImpl(); + private final Map testDb= new HashMap<>(); + + void initSomeEntites(){ + EmployeeRequest employee; + var letArr = new String[]{"A", "B", "C", "D","E"}; + var i = 0; + for (String let:letArr + ) { + i++; + employee = new EmployeeRequest(); + employee.setFirstName("FirstName"+let); + employee.setLastName("LastName"+let); + employee.setSecondName("SecondName"+let); + employee.setDepartment(i%2+1); + employee.setSalary((i%3+1)*1000); + employeeService.addEmployee(employee); + } + } + @Test void getListEmployee() { var expected = new HashMap().values(); @@ -46,32 +69,50 @@ void addEmployee(String paramFirstName,String paramLastName,String paramSecondNa employee.setSecondName(paramSecondName); employee.setDepartment(paramDepartment); employee.setSalary(paramSalary); - employeeService.addEmployee(employee); - Employee actual = (Employee) employeeService.getListEmployee().toArray()[0]; - assertEquals(paramFirstName,actual.getFirstName()); - assertEquals(paramLastName,actual.getLastName()); - assertEquals(paramSecondName,actual.getSecondName()); - assertEquals(paramDepartment,actual.getDepartment()); - assertEquals(paramSalary,actual.getSalary()); + if (!StringUtils.isAlpha(paramFirstName) + && !StringUtils.isAlpha(paramSecondName) + && !StringUtils.isAlpha(paramLastName) || paramSecondName == null){ + assertThrows(ResponseStatusException.class,()->employeeService.addEmployee(employee)); + } else + if (paramFirstName == null || paramLastName == null) { + assertThrows(IllegalArgumentException.class,()->employeeService.addEmployee(employee)); + } else + if (paramSalary == null || paramDepartment == null){ + assertThrows(IllegalArgumentException.class,()->employeeService.addEmployee(employee)); + } else { + employeeService.addEmployee(employee); + Employee actual = (Employee) employeeService.getListEmployee().toArray()[0]; + assertEquals(paramFirstName, actual.getFirstName()); + assertEquals(paramLastName, actual.getLastName()); + assertEquals(paramSecondName, actual.getSecondName()); + assertEquals(paramDepartment, actual.getDepartment()); + assertEquals(paramSalary, actual.getSalary()); + } } - @ParameterizedTest - @MethodSource("provideParamsForTest") - void getSumSalary(String paramFirstName, String paramLastName, String paramSecondName, Integer paramDepartment, Integer paramSalary) { - addEmployee(paramFirstName,paramLastName,paramSecondName,paramDepartment,paramSalary); - addEmployee(paramFirstName,paramLastName,paramSecondName,paramDepartment,paramSalary); - assertEquals(paramSalary*2,employeeService.getSumSalary()); + @Test + void getSumSalary() { + initSomeEntites(); + assertEquals(2*2000+2*3000+1000,employeeService.getSumSalary()); } @Test void getMinSalary() { + initSomeEntites(); + assertEquals(employeeService.getListEmployee().toArray()[2],employeeService.getMinSalary()); } @Test void getMaxSalary() { + initSomeEntites(); + assertEquals(employeeService.getListEmployee().toArray()[4],employeeService.getMaxSalary()); } @Test void getHighSalary() { + initSomeEntites(); + assertEquals(employeeService.getListEmployee().stream() + .filter(e->e.getSalary()>=2001).collect(Collectors.toList()), + employeeService.getHighSalary(2001)); } } \ No newline at end of file From 21e8cf4695f46dbebe4d739220c1cd4cd172dbb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A2?= =?UTF-8?q?=D0=B8=D1=85=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sat, 17 Dec 2022 17:13:32 +0300 Subject: [PATCH 4/4] DepartmentTest --- .../service/DepartmentServiceTest.java | 79 ++++++++++++++++--- 1 file changed, 69 insertions(+), 10 deletions(-) diff --git a/src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java b/src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java index e5a43c5..6d8cfe9 100644 --- a/src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java +++ b/src/test/java/ru/skypro/weblibrary/service/DepartmentServiceTest.java @@ -1,33 +1,92 @@ package ru.skypro.weblibrary.service; +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import ru.skypro.weblibrary.dto.EmployeeRequest; +import ru.skypro.weblibrary.entity.Employee; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.*; @ExtendWith(MockitoExtension.class) class DepartmentServiceTest { - - - @InjectMocks + static List ret = new ArrayList(); + @Mock EmployeeService employeeService; - final DepartmentService departmentService = new DepartmentServiceImpl(employeeService); + @InjectMocks + DepartmentServiceImpl departmentService; + + @BeforeAll + static void init(){ + Employee employee; + var letArr = new String[]{"A", "B", "C", "D","E"}; + var i = 0; + for (String let:letArr + ) { + i++; + employee = new Employee( + "FirstName"+let, + "LastName"+let, + "SecondName"+let, + i%2+1, + (i%3+1)*1000 + ); + ret.add(employee); + } + } @Test void getEmployees() { + Mockito.when(employeeService.getListEmployee()).thenReturn(ret); + var expected = ret.stream().collect(Collectors.groupingBy(Employee::getDepartment)); + var actual = departmentService.getEmployees(); + assertEquals(expected,actual); } - @Test - void getSalarySum() { + @ParameterizedTest + @ValueSource(ints = {1, 2}) + void getSalarySum(Integer id) { + Mockito.when(employeeService.getListEmployee()).thenReturn(ret); + var expected = ret.stream().filter(e-> e.getDepartment().equals(id)) + .mapToInt(Employee::getSalary) + .sum(); + var actual = departmentService.getSalarySum(id); + assertEquals(expected,actual); } - @Test - void getSalaryMin() { + @ParameterizedTest + @ValueSource(ints = {1, 2}) + void getSalaryMin(Integer id) { + Mockito.when(employeeService.getListEmployee()).thenReturn(ret); + var expected = ret.stream().filter(e-> e.getDepartment().equals(id)) + .mapToInt(Employee::getSalary) + .min().orElseThrow(); + var actual = departmentService.getSalaryMin(id); + assertEquals(expected,actual); } - @Test - void getSalaryMax() { + @ParameterizedTest + @ValueSource(ints = {1, 2}) + void getSalaryMax(Integer id) { + Mockito.when(employeeService.getListEmployee()).thenReturn(ret); + var expected = ret.stream().filter(e-> e.getDepartment().equals(id)) + .mapToInt(Employee::getSalary) + .max().orElseThrow(); + var actual = departmentService.getSalaryMax(id); + assertEquals(expected,actual); } } \ No newline at end of file