1
0

JSON serialiezr/deserializer for CustomerDTO - manually

This commit is contained in:
Michael Hoennig
2019-04-18 14:48:58 +02:00
parent 35565e1b43
commit bc87739d6f
2 changed files with 276 additions and 8 deletions

View File

@@ -0,0 +1,113 @@
package org.hostsharing.hsadminng.service.dto;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.hostsharing.hsadminng.security.SecurityUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.json.JsonTest;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
@JsonTest
@RunWith(SpringRunner.class)
public class CustomerDTOUnitTest {
@Autowired
private ObjectMapper objectMapper;
@Test
public void testSerializationAsCustomer() throws JsonProcessingException {
// given
CustomerDTO given = createSomeCustomerDTO();
givenLoginUser("customer");
// when
String actual = objectMapper.writeValueAsString(given);
// then
given.setContractualAddress(null);
//given.setContractualSalutation(null);
assertEquals(createExpectedJSon(given), actual);
}
@Test
public void testDeserializeAsCustomer() throws IOException {
// given
String json = "{\"id\":1234,\"number\":10001,\"prefix\":\"abc\",\"name\":\"Mein Name\",\"contractualAddress\":\"Eine Adresse\",\"contractualSalutation\":\"Hallo\",\"billingAddress\":\"Noch eine Adresse\",\"billingSalutation\":\"Moin\"}";
givenLoginUser("customer");
// when
CustomerDTO actual = objectMapper.readValue(json, CustomerDTO.class);
// then
CustomerDTO expected = new CustomerDTO();
expected.setId(1234L);
expected.setNumber(10001);
expected.setPrefix("abc");
expected.setName("Mein Name");
expected.setContractualAddress(null); // not allowed
expected.setContractualSalutation("Hallo");
expected.setBillingAddress("Noch eine Adresse");
expected.setBillingSalutation("Moin");
assertEquals(actual, expected);
}
private String createExpectedJSon(CustomerDTO dto) {
String json = // the fields in alphanumeric order:
toJSonFieldDefinitionIfPresent("billingAddress", dto.getBillingAddress()) +
toJSonFieldDefinitionIfPresent("billingSalutation", dto.getBillingSalutation()) +
toJSonFieldDefinitionIfPresent("contractualAddress", dto.getContractualAddress()) +
toJSonFieldDefinitionIfPresent("contractualSalutation", dto.getContractualSalutation()) +
toJSonFieldDefinitionIfPresent("id", dto.getId()) +
toJSonFieldDefinitionIfPresent("name", dto.getName()) +
toJSonFieldDefinitionIfPresent("number", dto.getNumber()) +
toJSonFieldDefinitionIfPresent("prefix", dto.getPrefix());
return "{" + json.substring(0, json.length() - 1) + "}";
}
private String toJSonFieldDefinitionIfPresent(String name, String value) {
return value != null ? inQuotes(name) + ":" + inQuotes(value) + "," : "";
}
private String toJSonFieldDefinitionIfPresent(String name, Number value) {
return value != null ? inQuotes(name) + ":" + value + "," : "";
}
private String inQuotes(Object value) {
return "\"" + value.toString() + "\"";
}
private CustomerDTO createSomeCustomerDTO() {
CustomerDTO given = new CustomerDTO();
given.setId(1234L);
given.setNumber(10001);
given.setPrefix("abc");
given.setName("Mein Name");
given.setContractualAddress("Eine Adresse");
given.setContractualSalutation("Hallo");
given.setBillingAddress("Noch eine Adresse");
given.setBillingSalutation("Moin");
givenLoginUser("admin");
return given;
}
private void givenLoginUser(String userName) {
SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
securityContext.setAuthentication(new UsernamePasswordAuthenticationToken(userName, userName));
SecurityContextHolder.setContext(securityContext);
Optional<String> login = SecurityUtils.getCurrentUserLogin();
assertThat(login).describedAs("precondition failed").contains(userName);
}
}