Skip to content

Commit

Permalink
Implement parametrized tests for different invalid name scenarios
Browse files Browse the repository at this point in the history
  • Loading branch information
AhmetAksunger committed Feb 15, 2024
1 parent 894cc09 commit 7a67853
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
import com.ays.util.AysMockResultMatchersBuilders;
import com.ays.util.AysValidTestData;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Mockito;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -412,42 +414,18 @@ void givenPhoneNumberWithInvalidOperator_whenPhoneNumberIsNotValid_thenReturnVal
.completeRegistration(Mockito.anyString(), Mockito.any());
}

@Test
void givenNameWithNumber_whenNameIsNotValid_thenReturnValidationError() throws Exception {

// Given
String mockId = AysRandomUtil.generateUUID();
String invalidName = "John 1234";
AdminUserRegisterApplicationCompleteRequest mockRequest = new AdminUserRegisterApplicationCompleteRequestBuilder()
.withValidFields()
.withFirstName(invalidName)
.withLastName(invalidName)
.build();

// Then
String endpoint = BASE_PATH.concat("/registration-application/").concat(mockId).concat("/complete");
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders
.post(endpoint, mockRequest);

AysError mockErrorResponse = AysErrorBuilder.VALIDATION_ERROR;

aysMockMvc.perform(mockHttpServletRequestBuilder, mockErrorResponse)
.andExpect(AysMockResultMatchersBuilders.status()
.isBadRequest())
.andExpect(AysMockResultMatchersBuilders.subErrors()
.isNotEmpty());

// Verify
Mockito.verify(adminUserRegisterService, Mockito.never())
.completeRegistration(Mockito.anyString(), Mockito.any());
}

@Test
void givenNameWithForbiddenSpecialChars_whenNameIsNotValid_thenReturnValidationError() throws Exception {
@ParameterizedTest
@ValueSource(strings = {
"John 1234",
"John *^%$#",
" John",
"? John",
"J"
})
void givenInvalidAdminUserRegisterApplicationCompleteRequestWithParametrizedInvalidNames_whenNamesAreNotValid_thenReturnValidationError(String invalidName) throws Exception {

// Given
String mockId = AysRandomUtil.generateUUID();
String invalidName = "John *^%$#";
AdminUserRegisterApplicationCompleteRequest mockRequest = new AdminUserRegisterApplicationCompleteRequestBuilder()
.withValidFields()
.withFirstName(invalidName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
import com.ays.util.AysMockMvcRequestBuilders;
import com.ays.util.AysMockResultMatchersBuilders;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Mockito;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -104,38 +106,16 @@ void givenValidAssignmentSaveRequest_whenAssignmentSaved_thenReturnAssignmentSav
.saveAssignment(Mockito.any(AssignmentSaveRequest.class));
}

@Test
void givenInvalidAssignmentSaveRequestWithNameContainingNumber_whenNameIsNotValid_thenReturnValidationError() throws Exception {
@ParameterizedTest
@ValueSource(strings = {
"John 1234",
"John *^%$#",
" John",
"? John",
"J"
})
void givenInvalidAssignmentSaveRequestWithParametrizedInvalidNames_whenNamesAreNotValid_thenReturnValidationError(String invalidName) throws Exception {
// Given
String invalidName = "John 1234";
AssignmentSaveRequest mockRequest = new AssignmentSaveRequestBuilder()
.withValidFields()
.withFirstName(invalidName)
.withLastName(invalidName)
.build();

// Then
String endpoint = BASE_PATH.concat("/assignment");
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders
.post(endpoint, mockAdminUserToken.getAccessToken(), mockRequest);

AysError mockErrorResponse = AysErrorBuilder.VALIDATION_ERROR;

aysMockMvc.perform(mockHttpServletRequestBuilder, mockErrorResponse)
.andExpect(AysMockResultMatchersBuilders.status()
.isBadRequest())
.andExpect(AysMockResultMatchersBuilders.subErrors()
.isNotEmpty());

// Verify
Mockito.verify(assignmentSaveService, Mockito.never())
.saveAssignment(Mockito.any(AssignmentSaveRequest.class));
}

@Test
void givenInvalidAssignmentSaveRequestWithNameContainingForbiddenSpecialChars_whenNameIsNotValid_thenReturnValidationError() throws Exception {
// Given
String invalidName = "John *^%$#";
AssignmentSaveRequest mockRequest = new AssignmentSaveRequestBuilder()
.withValidFields()
.withFirstName(invalidName)
Expand Down
44 changes: 11 additions & 33 deletions src/test/java/com/ays/user/controller/UserControllerTest.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.ays.user.controller;

import com.ays.AbstractRestControllerTest;
import com.ays.assignment.model.dto.request.AssignmentUpdateRequest;
import com.ays.assignment.model.dto.request.AssignmentUpdateRequestBuilder;
import com.ays.common.model.AysPage;
import com.ays.common.model.AysSorting;
import com.ays.common.model.dto.request.AysPhoneNumberFilterRequest;
Expand Down Expand Up @@ -39,6 +37,8 @@
import com.ays.util.AysMockMvcRequestBuilders;
import com.ays.util.AysMockResultMatchersBuilders;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Mockito;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -106,10 +106,16 @@ void givenValidUserSaveRequest_whenUserSaved_thenReturnUserSavedResponse() throw
.saveUser(Mockito.any(UserSaveRequest.class));
}

@Test
void givenInvalidUserSaveRequestWithNameContainingNumber_whenNameIsNotValid_thenReturnValidationError() throws Exception {
@ParameterizedTest
@ValueSource(strings = {
"John 1234",
"John *^%$#",
" John",
"? John",
"J"
})
void givenInvalidUserSaveRequestWithParametrizedInvalidNames_whenNamesAreNotValid_thenReturnValidationError(String invalidName) throws Exception {
// Given
String invalidName = "John 1234";
UserSaveRequest mockRequest = new UserSaveRequestBuilder()
.withValidFields()
.withFirstName(invalidName)
Expand All @@ -134,34 +140,6 @@ void givenInvalidUserSaveRequestWithNameContainingNumber_whenNameIsNotValid_then
.saveUser(Mockito.any(UserSaveRequest.class));
}

@Test
void givenInvalidUserSaveRequestWithNameContainingForbiddenSpecialChars_whenNameIsNotValid_thenReturnValidationError() throws Exception {
// Given
String invalidName = "John *^%$#";
AssignmentUpdateRequest mockRequest = new AssignmentUpdateRequestBuilder()
.withValidFields()
.withFirstName(invalidName)
.withLastName(invalidName)
.build();

// Then
String endpoint = BASE_PATH.concat("/user");
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = AysMockMvcRequestBuilders
.post(endpoint, mockAdminUserToken.getAccessToken(), mockRequest);

AysError mockErrorResponse = AysErrorBuilder.VALIDATION_ERROR;

aysMockMvc.perform(mockHttpServletRequestBuilder, mockErrorResponse)
.andExpect(AysMockResultMatchersBuilders.status()
.isBadRequest())
.andExpect(AysMockResultMatchersBuilders.subErrors()
.isNotEmpty());

// Verify
Mockito.verify(userSaveService, Mockito.never())
.saveUser(Mockito.any(UserSaveRequest.class));
}

@Test
void givenValidUserSaveRequest_whenUserUnauthorizedForSaving_thenReturnAccessDeniedException() throws Exception {
// Given
Expand Down

0 comments on commit 7a67853

Please sign in to comment.