Skip to content

Commit

Permalink
Merge pull request #94 from Sprokof/add-updateUser-api-test
Browse files Browse the repository at this point in the history
add api test for update user
  • Loading branch information
devondragon committed Jun 5, 2024
2 parents 75f0c8d + 6026751 commit a80ea5b
Show file tree
Hide file tree
Showing 10 changed files with 135 additions and 36 deletions.
2 changes: 1 addition & 1 deletion .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

64 changes: 46 additions & 18 deletions src/test/java/com/digitalsanctuary/spring/user/api/UserApiTest.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
package com.digitalsanctuary.spring.user.api;

import com.digitalsanctuary.spring.user.api.data.ApiTestData;
import com.digitalsanctuary.spring.user.api.data.DataStatus;
import com.digitalsanctuary.spring.user.api.data.Response;
import com.digitalsanctuary.spring.user.api.provider.ApiTestRegistrationArgumentsHolder;
import com.digitalsanctuary.spring.user.api.helper.AssertionsHelper;
import com.digitalsanctuary.spring.user.api.provider.ApiTestUpdateUserArgumentsProvider;
import com.digitalsanctuary.spring.user.api.provider.holder.ApiTestArgumentsHolder;
import com.digitalsanctuary.spring.user.api.provider.ApiTestRegistrationArgumentsProvider;
import com.digitalsanctuary.spring.user.dto.UserDto;
import com.digitalsanctuary.spring.user.json.JsonUtil;
import com.digitalsanctuary.spring.user.persistence.model.User;
import com.digitalsanctuary.spring.user.service.UserService;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import com.digitalsanctuary.spring.user.jdbc.Jdbc;
Expand All @@ -22,53 +28,75 @@
public class UserApiTest extends BaseApiTest {
private static final String URL = "/user";

private static final UserDto testUser = ApiTestData.getUserDto();
@Autowired
private UserService userService;

private static final UserDto baseTestUser = ApiTestData.getUserDto();

@AfterAll
public static void deleteTestUser() {
Jdbc.deleteTestUser(testUser);
Jdbc.deleteTestUser(baseTestUser);
}

/**
*
* @param argumentsHolder
* @throws Exception
* testing with three param: new user data, exist user data and invalid user data
* testing with three params: new user data, exist user data and invalid user data
*/
@ParameterizedTest
@ArgumentsSource(ApiTestRegistrationArgumentsProvider.class)
public void registerUserAccount(ApiTestRegistrationArgumentsHolder argumentsHolder) throws Exception {
@Order(1)
public void registerUserAccount(ApiTestArgumentsHolder argumentsHolder) throws Exception {
ResultActions action = perform(MockMvcRequestBuilders.post(URL + "/registration")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.content(buildUrlEncodedFormEntity(argumentsHolder.getUserDto())));

if (argumentsHolder.getStatus() == ApiTestRegistrationArgumentsHolder.DataStatus.NEW) {
if (argumentsHolder.getStatus() == DataStatus.NEW) {
action.andExpect(status().isOk());
}
if (argumentsHolder.getStatus() == ApiTestRegistrationArgumentsHolder.DataStatus.EXIST) {
if (argumentsHolder.getStatus() == DataStatus.EXIST) {
action.andExpect(status().isConflict());
}
if (argumentsHolder.getStatus() == ApiTestRegistrationArgumentsHolder.DataStatus.INVALID) {
if (argumentsHolder.getStatus() == DataStatus.INVALID) {
action.andExpect(status().is5xxServerError());
}

Response actual = JsonUtil.readValue(action.andReturn()
.getResponse().getContentAsString(), Response.class);
MockHttpServletResponse actual = action.andReturn().getResponse();
Response excepted = argumentsHolder.getResponse();
Assertions.assertEquals(excepted, actual);
AssertionsHelper.compareResponses(actual, excepted);
}

@Test
@Order(2)
public void resetPassword() throws Exception {
ResultActions action = perform(MockMvcRequestBuilders.post(URL + "/resetPassword")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.content(buildUrlEncodedFormEntity(testUser)))
.content(buildUrlEncodedFormEntity(baseTestUser)))
.andExpect(status().isOk());

MockHttpServletResponse actual = action.andReturn().getResponse();
Response excepted = ApiTestData.resetPassword();
AssertionsHelper.compareResponses(actual, excepted);
}

@ParameterizedTest
@ArgumentsSource(ApiTestUpdateUserArgumentsProvider.class)
@Order(3)
public void updateUser(ApiTestArgumentsHolder argumentsHolder) throws Exception {
if(argumentsHolder.getStatus() == DataStatus.LOGGED) {
User user = userService.registerNewUserAccount(argumentsHolder.getUserDto());
userService.authWithoutPassword(user);
}

ResultActions action = perform(MockMvcRequestBuilders.post(URL + "/updateUser")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.content(buildUrlEncodedFormEntity(argumentsHolder.getUserDto())))
.andExpect(status().isOk());

Response actual = JsonUtil.readValue(action.andReturn().getResponse()
.getContentAsString(), Response.class);
Response expected = ApiTestData.resetPassword();
Assertions.assertEquals(actual, expected);
MockHttpServletResponse actual = action.andReturn().getResponse();
Response expected = argumentsHolder.getResponse();
AssertionsHelper.compareResponses(actual, expected);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,21 @@ public static Response systemError() {

public static Response resetPassword() {
return new Response(true, null, "/user/forgot-password-pending-verification.html",
new String[]{"If account exists, password reset email has been sent!"}, null);
new String[]{"If account exists, password reset email has been sent!"}, null
);
}

public static Response userNotLogged() {
return new Response(false, null, null,
new String[]{"User Not Logged In!"}, null
);

}

public static Response userUpdateSuccess() {
return new Response(true, null, null,
new String[]{"Your Profile Was Successfully Updated.<br /><br />"}, null
);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.digitalsanctuary.spring.user.api.data;

public enum DataStatus {
NEW,
EXIST,
INVALID,
LOGGED,
NOT_LOGGED
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public boolean equals(Object obj) {

@Override
public String toString() {
return "RegistrationResponse{" +
return "ApiResponse{" +
"success=" + success +
", redirectUrl='" + redirectUrl + '\'' +
", code=" + code +
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.digitalsanctuary.spring.user.api.helper;

import com.digitalsanctuary.spring.user.dto.UserDto;
import com.digitalsanctuary.spring.user.persistence.model.User;

import java.lang.reflect.Field;
import java.net.URLEncoder;
Expand Down Expand Up @@ -44,4 +45,11 @@ private static List<String> buildParams(Object dto) {
}
return params;
}

public static User toUser(UserDto userDto) {
User user = new User();
user.setEmail(userDto.getEmail());
user.setPassword(userDto.getPassword());
return user;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.digitalsanctuary.spring.user.api.helper;

import com.digitalsanctuary.spring.user.api.data.Response;
import com.digitalsanctuary.spring.user.json.JsonUtil;
import org.junit.jupiter.api.Assertions;
import org.springframework.mock.web.MockHttpServletResponse;


public class AssertionsHelper {

public static void compareResponses(MockHttpServletResponse servletResponse, Response excepted) throws Exception{
Response actual = JsonUtil.readValue(servletResponse.getContentAsString(), Response.class);
Assertions.assertEquals(actual, excepted);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.digitalsanctuary.spring.user.api.provider;

import com.digitalsanctuary.spring.user.api.data.ApiTestData;
import com.digitalsanctuary.spring.user.api.data.DataStatus;
import com.digitalsanctuary.spring.user.api.provider.holder.ApiTestArgumentsHolder;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
Expand All @@ -12,21 +14,21 @@ public class ApiTestRegistrationArgumentsProvider implements ArgumentsProvider {
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) throws Exception {
return Stream.of(
new ApiTestRegistrationArgumentsHolder(
new ApiTestArgumentsHolder(
ApiTestData.getEmptyUserDto(),
ApiTestRegistrationArgumentsHolder.DataStatus.INVALID,
DataStatus.INVALID,
ApiTestData.systemError()
),

new ApiTestRegistrationArgumentsHolder(
new ApiTestArgumentsHolder(
ApiTestData.getUserDto(),
ApiTestRegistrationArgumentsHolder.DataStatus.NEW,
DataStatus.NEW,
ApiTestData.successRegistration()
),

new ApiTestRegistrationArgumentsHolder(
new ApiTestArgumentsHolder(
ApiTestData.getUserDto(),
ApiTestRegistrationArgumentsHolder.DataStatus.EXIST,
DataStatus.EXIST,
ApiTestData.userAlreadyExist()
)
).map(Arguments::of);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.digitalsanctuary.spring.user.api.provider;

import com.digitalsanctuary.spring.user.api.data.ApiTestData;
import com.digitalsanctuary.spring.user.api.data.DataStatus;
import com.digitalsanctuary.spring.user.api.provider.holder.ApiTestArgumentsHolder;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;

import java.util.stream.Stream;

public class ApiTestUpdateUserArgumentsProvider implements ArgumentsProvider
{
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) throws Exception {
return Stream.of(
new ApiTestArgumentsHolder(
ApiTestData.getUserDto(),
DataStatus.LOGGED,
ApiTestData.userUpdateSuccess()
),
new ApiTestArgumentsHolder(
ApiTestData.getUserDto(),
DataStatus.NOT_LOGGED,
ApiTestData.userNotLogged()
)
).map(Arguments::of);
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package com.digitalsanctuary.spring.user.api.provider;
package com.digitalsanctuary.spring.user.api.provider.holder;

import com.digitalsanctuary.spring.user.api.data.DataStatus;
import com.digitalsanctuary.spring.user.api.data.Response;
import com.digitalsanctuary.spring.user.dto.UserDto;

public class ApiTestRegistrationArgumentsHolder {

public enum DataStatus {
NEW,
EXIST,
INVALID
}
public class ApiTestArgumentsHolder {

private final UserDto userDto;
private final DataStatus status;
private final Response response;


public ApiTestRegistrationArgumentsHolder(UserDto userDto, DataStatus status, Response response) {
public ApiTestArgumentsHolder(UserDto userDto, DataStatus status, Response response) {
this.userDto = userDto;
this.status = status;
this.response = response;
Expand Down

0 comments on commit a80ea5b

Please sign in to comment.