Skip to content

Commit 565b70a

Browse files
authored
Increase code coverage (#24)
1 parent fb1829d commit 565b70a

11 files changed

Lines changed: 431 additions & 102 deletions

File tree

.github/workflows/sonar.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,4 @@ jobs:
4545
-Dsonar.projectKey=Mastercard_petstore-application-java
4646
-Dsonar.organization=mastercard -Dsonar.host.url=https://sonarcloud.io
4747
-Dsonar.login=$SONAR_TOKEN -Dsonar.cpd.exclusions=**/OkHttp*.java
48-
-Dsonar.exclusions=**/*.xml -Dgpg.signature.skip=true
48+
-Dsonar.exclusions=**/*.xml,**/configuration/**,**/PetstoreApplication.java,**/utils/** -Dgpg.signature.skip=true

src/main/java/com/mastercard/app/petstore/utils/MockDataBuilders.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public static NewEmployee buildNewEmployee(){
124124

125125
public static Employee buildEmployee(){
126126
String firstName = generateRandomName();
127-
Employee employee = new Employee();
127+
Employee employee = new Employee(UUID.randomUUID(), new Date(), new Date());
128128
employee.setFirstName(firstName);
129129
employee.setLastName(generateRandomName());
130130
employee.setPhoneNumber("+6573437115596");
@@ -133,6 +133,22 @@ public static Employee buildEmployee(){
133133
return employee;
134134
}
135135

136+
public static EmployeeWrapper buildEmployeeWrapper(){
137+
String firstName = generateRandomName();
138+
return new EmployeeWrapper()
139+
.firstName(generateRandomName())
140+
.lastName(generateRandomName())
141+
.phoneNumber("+6573437115596")
142+
.ssn(generateRandomSsn())
143+
.username(firstName + "123");
144+
}
145+
146+
public static EmployeeSearch buildEmployeeSearch(){
147+
EmployeeSearch employeeSearch = new EmployeeSearch();
148+
employeeSearch.setSsn(generateRandomSsn());
149+
return employeeSearch;
150+
}
151+
136152
public static Payment buildPayment(){
137153
Payment payment = new Payment();
138154
payment.setAmount(new BigDecimal(50));

src/test/java/com/mastercard/app/petstore/AdoptionsServiceTest.java

Lines changed: 0 additions & 71 deletions
This file was deleted.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.mastercard.app.petstore.examples;
2+
3+
import com.mastercard.app.petstore.services.AdoptionsService;
4+
import com.mastercard.app.petstore.services.CatService;
5+
import com.mastercard.app.petstore.utils.MockDataBuilders;
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
import org.mockito.InjectMocks;
9+
import org.mockito.Mock;
10+
import org.mockito.MockedStatic;
11+
import org.mockito.MockitoAnnotations;
12+
import org.openapitools.client.ApiException;
13+
import org.openapitools.client.model.Adoption;
14+
import org.openapitools.client.model.Cat;
15+
import org.openapitools.client.model.NewAdoption;
16+
import org.openapitools.client.model.NewCat;
17+
18+
import java.util.UUID;
19+
20+
import static org.mockito.Mockito.any;
21+
import static org.mockito.Mockito.mock;
22+
import static org.mockito.Mockito.mockStatic;
23+
import static org.mockito.Mockito.verify;
24+
import static org.mockito.Mockito.when;
25+
26+
class AdoptionFlowExampleTest {
27+
28+
@InjectMocks
29+
private AdoptionFlowExample adoptionFlowExample;
30+
31+
@Mock
32+
private AdoptionsService adoptionsService;
33+
34+
@Mock
35+
private CatService catService;
36+
37+
@BeforeEach
38+
void setup() {
39+
MockitoAnnotations.openMocks(this);
40+
}
41+
42+
@Test
43+
void testAdoptionUseCase() throws ApiException {
44+
UUID catId = UUID.randomUUID();
45+
UUID adoptionId = UUID.randomUUID();
46+
47+
NewCat newCat = mock(NewCat.class);
48+
Cat cat = mock(Cat.class);
49+
when(cat.getId()).thenReturn(catId);
50+
51+
NewAdoption newAdoption = mock(NewAdoption.class);
52+
Adoption adoption = mock(Adoption.class);
53+
when(adoption.getId()).thenReturn(adoptionId);
54+
55+
when(catService.addCat(any(NewCat.class))).thenReturn(cat);
56+
when(adoptionsService.adoptPet(any(NewAdoption.class))).thenReturn("/adoptions/" + adoptionId);
57+
when(adoptionsService.getAdoption(adoptionId.toString())).thenReturn(adoption);
58+
59+
try (MockedStatic<MockDataBuilders> mockBuilders = mockStatic(MockDataBuilders.class)) {
60+
mockBuilders.when(MockDataBuilders::buildNewCat).thenReturn(newCat);
61+
mockBuilders.when(() -> MockDataBuilders.buildNewAdoptionObject(catId)).thenReturn(newAdoption);
62+
63+
adoptionFlowExample.adoptionUseCase();
64+
65+
verify(catService).addCat(newCat);
66+
verify(adoptionsService).adoptPet(newAdoption);
67+
verify(adoptionsService).getAdoption(adoptionId.toString());
68+
verify(adoptionsService).updateAdoption("0", adoption);
69+
verify(adoptionsService).deleteAdoption(adoptionId.toString());
70+
}
71+
}
72+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.mastercard.app.petstore.examples;
2+
3+
import com.mastercard.app.petstore.services.EmployeeService;
4+
import com.mastercard.app.petstore.utils.MockDataBuilders;
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Test;
7+
import org.mockito.*;
8+
import org.openapitools.client.ApiException;
9+
import org.openapitools.client.model.*;
10+
11+
import static org.mockito.Mockito.*;
12+
13+
class EmployeeFlowExampleTest {
14+
15+
@InjectMocks
16+
private EmployeeFlowExample employeeFlowExample;
17+
18+
@Mock
19+
private EmployeeService employeeService;
20+
21+
@BeforeEach
22+
void setup() {
23+
MockitoAnnotations.openMocks(this);
24+
}
25+
26+
@Test
27+
void testEmployeeUseCase() throws ApiException {
28+
NewEmployee newEmployee = new NewEmployee().ssn("123-45-6789");
29+
Employee employee = new Employee().ssn("123-45-6789");
30+
EmployeeWrapper employeeWrapper = new EmployeeWrapper().username("jdoe");
31+
32+
NewEmployeeData newEmployeeData = new NewEmployeeData().addNewEmployeesItem(newEmployee);
33+
34+
EmployeeListData employeeData = new EmployeeListData().addEmployeesItem(employee);
35+
36+
when(employeeService.createEmployee(any(NewEmployeeData.class))).thenReturn(employeeData);
37+
when(employeeService.searchEmployee(any(EmployeeSearch.class))).thenReturn(employeeWrapper);
38+
39+
try (MockedStatic<MockDataBuilders> mockBuilders = mockStatic(MockDataBuilders.class)) {
40+
mockBuilders.when(MockDataBuilders::buildNewEmployee).thenReturn(newEmployee);
41+
42+
employeeFlowExample.employeeUseCase();
43+
44+
verify(employeeService).createEmployee(newEmployeeData);
45+
verify(employeeService).searchEmployee(argThat(search -> "123-45-6789".equals(search.getSsn())));
46+
verify(employeeService).deleteEmployee("jdoe");
47+
}
48+
}
49+
50+
@Test
51+
void testEmployeeUseCaseThrowsApiException() throws ApiException {
52+
NewEmployee newEmployee = new NewEmployee().ssn("123-45-6789");
53+
54+
when(employeeService.createEmployee(any(NewEmployeeData.class))).thenThrow(new ApiException("API error"));
55+
56+
try (MockedStatic<MockDataBuilders> mockBuilders = mockStatic(MockDataBuilders.class)) {
57+
mockBuilders.when(MockDataBuilders::buildNewEmployee).thenReturn(newEmployee);
58+
59+
org.junit.jupiter.api.Assertions.assertThrows(ApiException.class, () -> {
60+
employeeFlowExample.employeeUseCase();
61+
});
62+
}
63+
}
64+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.mastercard.app.petstore.examples;
2+
3+
import com.mastercard.app.petstore.services.CatService;
4+
import com.mastercard.app.petstore.services.PetService;
5+
import com.mastercard.app.petstore.utils.MockDataBuilders;
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
import org.mockito.InjectMocks;
9+
import org.mockito.Mock;
10+
import org.mockito.MockedStatic;
11+
import org.mockito.MockitoAnnotations;
12+
import org.openapitools.client.ApiException;
13+
import org.openapitools.client.model.Cat;
14+
import org.openapitools.client.model.NewCat;
15+
import org.openapitools.client.model.PetStatus;
16+
17+
import java.util.Date;
18+
import java.util.UUID;
19+
20+
import static org.mockito.Mockito.any;
21+
import static org.mockito.Mockito.argThat;
22+
import static org.mockito.Mockito.eq;
23+
import static org.mockito.Mockito.mockStatic;
24+
import static org.mockito.Mockito.verify;
25+
import static org.mockito.Mockito.when;
26+
27+
class PetFlowExampleTest {
28+
29+
@InjectMocks
30+
private PetFlowExample petFlowExample;
31+
32+
@Mock
33+
private CatService catService;
34+
35+
@Mock
36+
private PetService petService;
37+
38+
@BeforeEach
39+
void setup() {
40+
MockitoAnnotations.openMocks(this);
41+
}
42+
43+
@Test
44+
void testPetUseCaseFlow() throws ApiException {
45+
NewCat newCat = new NewCat();
46+
UUID catId = UUID.randomUUID();
47+
Cat cat = new Cat(catId, new Date(), new Date()).name("Whiskers");
48+
PetStatus status = new PetStatus().value("RESERVED");
49+
50+
when(catService.addCat(any(NewCat.class))).thenReturn(cat);
51+
when(catService.getCat(catId.toString())).thenReturn(cat);
52+
53+
try (MockedStatic<MockDataBuilders> mockBuilders = mockStatic(MockDataBuilders.class)) {
54+
mockBuilders.when(MockDataBuilders::buildNewCat).thenReturn(newCat);
55+
56+
petFlowExample.petUseCaseFlow();
57+
58+
verify(catService).addCat(newCat);
59+
verify(catService).getCat(catId.toString());
60+
verify(catService).updateCat(argThat(updatedCat -> "Catso".equals(updatedCat.getName())), eq("0"));
61+
verify(petService).updatePetStatus(eq(catId), eq(status), eq("1"));
62+
verify(petService).removePet(catId);
63+
}
64+
}
65+
66+
@Test
67+
void testPetUseCaseFlowThrowsApiException() throws ApiException {
68+
NewCat newCat = new NewCat();
69+
when(catService.addCat(any(NewCat.class))).thenThrow(new ApiException("API error"));
70+
71+
try (MockedStatic<MockDataBuilders> mockBuilders = mockStatic(MockDataBuilders.class)) {
72+
mockBuilders.when(MockDataBuilders::buildNewCat).thenReturn(newCat);
73+
74+
org.junit.jupiter.api.Assertions.assertThrows(ApiException.class, () -> petFlowExample.petUseCaseFlow());
75+
}
76+
}
77+
}

0 commit comments

Comments
 (0)