package de.pbauerochse.worklogviewer.util;
import com.fasterxml.jackson.core.type.TypeReference;
import de.pbauerochse.worklogviewer.youtrack.createreport.request.CreateReportRequestEntity;
import de.pbauerochse.worklogviewer.youtrack.createreport.response.ReportDetailsResponse;
import de.pbauerochse.worklogviewer.youtrack.domain.GroupByCategory;
import de.pbauerochse.worklogviewer.domain.ReportTimerange;
import de.pbauerochse.worklogviewer.domain.TimerangeProvider;
import de.pbauerochse.worklogviewer.domain.timerangeprovider.TimerangeProviderFactory;
import de.pbauerochse.worklogviewer.fx.tasks.FetchTimereportContext;
import org.hamcrest.core.Is;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import java.util.Optional;
/**
* @author Patrick Bauerochse
* @since 14.04.15
*/
public class JacksonSerializerTest {
public static final String EXPECTED_SERIALIZATION_RESULT = "{\"name\":\"Timetracker: THIS_WEEK\",\"type\":\"time\",\"own\":true,\"parameters\":{\"projects\":[],\"queryUrl\":null,\"range\":{\"type\":\"named\",\"name\":\"THIS_WEEK\"}}}";
public static final String DESERIALIZATION_TEST_DATA = "{\"id\":\"116-892\",\"name\":\"Timetracker: THIS_WEEK\",\"ownerLogin\":\"bauerochse\",\"type\":\"time\",\"own\":true,\"visibleTo\":null,\"invalidationInterval\":0,\"state\":\"CALCULATING\",\"lastCalculated\":\"—\",\"progress\":-1,\"parameters\":{\"projects\":[],\"queryUrl\":\"/issues\",\"range\":{\"type\":\"named\",\"name\":\"THIS_WEEK\"},\"perUserAvailable\":true,\"showTypesAvailable\":true}}";
public static final String GROUP_BY_DESERIALIZATION_TEST_DATA = "[{\"name\":\"Work author\",\"id\":\"WORK_AUTHOR\"},{\"name\":\"Work type\",\"id\":\"WORK_TYPE\"},{\"name\":\"Priorität\",\"id\":\"__CUSTOM_FIELD__Priority_1\"},{\"name\":\"Typ\",\"id\":\"__CUSTOM_FIELD__Type_0\"},{\"name\":\"Status\",\"id\":\"__CUSTOM_FIELD__State_2\"},{\"name\":\"Bearbeiter\",\"id\":\"__CUSTOM_FIELD__Assignee_5\"},{\"name\":\"Komponente\",\"id\":\"__CUSTOM_FIELD__components_9\"},{\"name\":\"Lösungsversion\",\"id\":\"__CUSTOM_FIELD__Fix versions_7\"},{\"name\":\"Sprint\",\"id\":\"__CUSTOM_FIELD__Sprint_21\"},{\"name\":\"Zeitschätzung\",\"id\":\"__CUSTOM_FIELD__Estimation_12\"},{\"name\":\"Zeitaufwand\",\"id\":\"__CUSTOM_FIELD__Spent time_17\"},{\"name\":\"Abrechnung\",\"id\":\"__CUSTOM_FIELD__Abrechnung_19\"},{\"name\":\"Abnahme\",\"id\":\"__CUSTOM_FIELD__Abnahme_20\"},{\"name\":\"Verlag\",\"id\":\"__CUSTOM_FIELD__Verlag_18\"},{\"name\":\"bis wann\",\"id\":\"__CUSTOM_FIELD__bis wann_23\"},{\"name\":\"Behoben in Build\",\"id\":\"__CUSTOM_FIELD__Fixed in build_4\"}]";
@Test
public void testCreateReportParameters() throws Exception {
TimerangeProvider timerangeProvider = TimerangeProviderFactory.getTimerangeProvider(ReportTimerange.THIS_WEEK, null, null);
CreateReportRequestEntity entity = new CreateReportRequestEntity(new FetchTimereportContext(timerangeProvider, Optional.empty()));
String asString = JacksonUtil.writeObject(entity);
Assert.assertEquals(EXPECTED_SERIALIZATION_RESULT, asString);
}
@Test
public void testDeserialization() throws IOException {
ReportDetailsResponse response = JacksonUtil.parseValue(new StringReader(DESERIALIZATION_TEST_DATA), ReportDetailsResponse.class);
Assert.assertEquals("id", "116-892", response.getId());
Assert.assertEquals("name", "Timetracker: THIS_WEEK", response.getName());
Assert.assertEquals("ownerLogin", "bauerochse", response.getOwnerLogin());
Assert.assertEquals("type", "time", response.getType());
Assert.assertEquals("own", true, response.isOwn());
Assert.assertEquals("invalidationInterval", 0, (long) response.getInvalidationInterval());
Assert.assertEquals("state", "CALCULATING", response.getState());
Assert.assertEquals("lastCalculated", "—", response.getLastCalculated());
Assert.assertEquals("progress", -1, (long) response.getProgress());
Assert.assertNotNull("parameters", response.getParameters());
Assert.assertNotNull("parameters.projects", response.getParameters().getProjects());
Assert.assertEquals("parameters.projects.size", 0, response.getParameters().getProjects().size());
Assert.assertEquals("parameters.queryUrl", "/issues", response.getParameters().getQueryUrl());
}
@Test
public void testGroupByCategories() throws IOException {
List<GroupByCategory> groupByCategories = JacksonUtil.parseValue(new StringReader(GROUP_BY_DESERIALIZATION_TEST_DATA), new TypeReference<List<GroupByCategory>>() {});
Assert.assertNotNull(groupByCategories);
Assert.assertThat(groupByCategories.size(), Is.is(16));
}
}