Skip to content

Commit 65d3f34

Browse files
committed
feat: return conflict when trying to create duplicate manager
1 parent 39fa2dc commit 65d3f34

File tree

5 files changed

+58
-8
lines changed

5 files changed

+58
-8
lines changed

src/main/java/br/ufpr/tads/msbantadsmanager/manager/ManagerRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@
1010
public interface ManagerRepository extends JpaRepository<Manager, Long> {
1111
Optional<Manager> findManagerByEmail(@NonNull String email);
1212
Optional<Manager> findManagerByCpf(@NonNull String cpf);
13+
int countAllByEmailOrCpf(String email, String cpf);
1314
}

src/main/java/br/ufpr/tads/msbantadsmanager/manager/ManagerService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ public ManagerResponse findManagerById(@Valid @NonNull @Positive Long id) {
7171
public Long create(@Valid @NonNull CreateManager createManager) {
7272
log.debug("[creating] {}", createManager);
7373

74+
boolean managerAlreadyExists = this.repository.countAllByEmailOrCpf(createManager.email(), createManager.cpf()) > 0;
75+
if (managerAlreadyExists) {
76+
throw new ResponseStatusException(HttpStatus.CONFLICT);
77+
}
78+
79+
7480
var entity = new Manager(createManager);
7581
return this.repository.save(entity).getId();
7682
}

src/main/java/br/ufpr/tads/msbantadsmanager/manager/inbound/CreateManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
public record CreateManager(@NotEmpty String firstName,
99
@NotEmpty String lastName,
10+
@NotEmpty @Email String email,
1011
@NotEmpty
1112
@Length(min = 11, max = 11)
1213
@Pattern(regexp = "^\\d{11}$", message = "field must be made of numbers")
1314
String cpf,
14-
@NotEmpty @Email String email,
1515
@NotEmpty
1616
@Length(min = 11, max = 11)
1717
@Pattern(regexp = "^\\d{11}$", message = "field must be made of numbers")

src/test/java/br/ufpr/tads/msbantadsmanager/manager/ManagerControllerIntegrationTest.java

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.junit.jupiter.api.DisplayName;
77
import org.junit.jupiter.api.Test;
88
import org.junit.jupiter.params.ParameterizedTest;
9+
import org.junit.jupiter.params.provider.CsvSource;
910
import org.junit.jupiter.params.provider.NullAndEmptySource;
1011
import org.junit.jupiter.params.provider.ValueSource;
1112
import org.springframework.beans.factory.annotation.Autowired;
@@ -43,8 +44,8 @@ void return400_createWithoutFirstName(String emptyFirstName) throws Exception {
4344
var request = new CreateManager(
4445
emptyFirstName,
4546
"lastName",
46-
"12312312311",
4747
"manager@email.com",
48+
"12312312311",
4849
"11999999999",
4950
"admin@email.com"
5051
);
@@ -68,8 +69,8 @@ void return400_createWithoutLastName(String emptyLastName) throws Exception {
6869
var request = new CreateManager(
6970
"firstName",
7071
emptyLastName,
71-
"12312312311",
7272
"manager@email.com",
73+
"12312312311",
7374
"11999999999",
7475
"admin@email.com"
7576
);
@@ -94,8 +95,8 @@ void return400_createWithInvalidCpf(String invalidCpf) throws Exception {
9495
var request = new CreateManager(
9596
"firstName",
9697
"lastName",
97-
invalidCpf,
9898
"manager@email.com",
99+
invalidCpf,
99100
"11999999999",
100101
"admin@email.com"
101102
);
@@ -120,8 +121,8 @@ void return400_createWithInvalidEmail(String invalidEmail) throws Exception {
120121
var request = new CreateManager(
121122
"firstName",
122123
"lastName",
123-
"12345678901",
124124
invalidEmail,
125+
"12345678901",
125126
"11999999999",
126127
"admin@email.com"
127128
);
@@ -146,8 +147,8 @@ void return400_createWithInvalidPhone(String invalidPhone) throws Exception {
146147
var request = new CreateManager(
147148
"firstName",
148149
"lastName",
149-
"12345678901",
150150
"manager@email.com",
151+
"12345678901",
151152
invalidPhone,
152153
"admin@email.com"
153154
);
@@ -164,14 +165,56 @@ void return400_createWithInvalidPhone(String invalidPhone) throws Exception {
164165
assertEquals(0, this.repository.count());
165166
}
166167

168+
@ParameterizedTest
169+
@CsvSource(value = {
170+
"manager@email.com,12312312311,manager@email.com,12312312311",
171+
"manager@email.com,12312312311,manager@email.com,99999999999",
172+
"manager@email.com,12312312311,different@email.com,12312312311",
173+
})
174+
@DisplayName("should not create a duplicate manager")
175+
void return409_createDuplicate(String createEmail,
176+
String createCpf,
177+
String email,
178+
String cpf) throws Exception {
179+
var request = new CreateManager(
180+
"firstName",
181+
"lastName",
182+
createEmail,
183+
createCpf,
184+
"12345678901",
185+
"admin@email.com"
186+
);
187+
var json = objectMapper.writeValueAsString(request);
188+
189+
var saved = new CreateManager(
190+
"anotherName",
191+
"anotherLast",
192+
email,
193+
cpf,
194+
"12345678901",
195+
"admin@email.com"
196+
);
197+
this.repository.save(new Manager(saved));
198+
199+
this.mockMvc
200+
.perform(post(URL)
201+
.content(json)
202+
.contentType(MediaType.APPLICATION_JSON)
203+
)
204+
.andDo(print())
205+
.andExpect(status().isConflict());
206+
207+
assertEquals(1, this.repository.count());
208+
}
209+
167210
@Test
168211
@DisplayName("should create a new manager successfully")
169212
void return201_createSuccessfully() throws Exception {
170213
var request = new CreateManager(
171214
"firstName",
172215
"lastName",
173-
"12312312311",
174216
"manager@email.com",
217+
"12312312311",
175218
"12345678901",
176219
"admin@email.com"
177220
);

src/test/java/br/ufpr/tads/msbantadsmanager/manager/ManagerRepositoryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ static void beforeAll() {
2929
var createManager = new CreateManager(
3030
"firstName",
3131
"lastName",
32-
"12312312300",
3332
"email@email.com",
33+
"12312312300",
3434
"1112341234",
3535
"admin@admin.com");
3636
validEntity = new Manager(createManager);

0 commit comments

Comments
 (0)