package com.belladati.sdk.dataset.impl; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.GregorianCalendar; import org.testng.annotations.Test; import com.belladati.sdk.dataset.data.OverwritePolicy; import com.belladati.sdk.exception.dataset.data.NoColumnsException; import com.belladati.sdk.exception.interval.InvalidAbsoluteIntervalException; import com.belladati.sdk.test.SDKTest; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @Test public class OverwritePolicyTest extends SDKTest { private final String attribute = "attribute"; /** never overwrite */ public void noOverwrite() { assertEquals(OverwritePolicy.deleteNone().toJson(), new ObjectMapper().createObjectNode()); } /** delete all */ public void deleteAll() { JsonNode json = OverwritePolicy.deleteAll().toJson(); assertEquals(json, new ObjectMapper().createObjectNode().put("policy", "DELETE_ALL")); } /** overwrite when all attributes match */ public void allAttributes() { JsonNode json = OverwritePolicy.byAllAttributes().toJson(); assertEquals(json.get("policy").asText(), "DELETE_BY_MEMBERS"); assertTrue(Boolean.parseBoolean(json.get("attributesAll").asText())); } /** no attributes set */ @Test(expectedExceptions = NoColumnsException.class) public void attributesNone() { OverwritePolicy.byAttributes(Collections.<String> emptyList()); } /** attributes set as strings */ public void attributesStrings() { String a2 = "a2"; JsonNode json = OverwritePolicy.byAttributes(attribute, a2).toJson(); assertEquals(json.get("policy").asText(), "DELETE_BY_MEMBERS"); assertFalse(json.hasNonNull("attributesAll")); assertEquals(json.get("attributes"), new ObjectMapper().createArrayNode().add(attribute).add(a2)); } /** attributes set as list */ public void attributesList() { String a2 = "a2"; assertEquals(OverwritePolicy.byAttributes(Arrays.asList(attribute, a2)).toJson(), OverwritePolicy.byAttributes(attribute, a2).toJson()); } /** date range */ public void dateFromTo() { Calendar start = new GregorianCalendar(2012, 3, 18); Calendar end = new GregorianCalendar(2013, 11, 12); JsonNode json = OverwritePolicy.byDateFromTo(attribute, start, end).toJson(); assertEquals(json.get("policy").asText(), "DELETE_ALL"); assertEquals(json.get("dateAttribute").asText(), attribute); assertEquals(json.get("dateFrom").asText(), "2012-04-18"); assertEquals(json.get("dateTo").asText(), "2013-12-12"); } /** date range with end before start */ @Test(expectedExceptions = InvalidAbsoluteIntervalException.class) public void dateFromBeforeTo() { Calendar start = new GregorianCalendar(2012, 3, 18); Calendar end = new GregorianCalendar(2012, 3, 17); OverwritePolicy.byDateFromTo(attribute, start, end); } /** changing the calendar objects doesn't change the interval */ public void dateImmutable() { Calendar start = new GregorianCalendar(2012, 3, 18); Calendar end = new GregorianCalendar(2013, 11, 12); OverwritePolicy policy = OverwritePolicy.byDateFromTo(attribute, start, end); start.set(Calendar.MONTH, 0); end.set(Calendar.MONTH, 0); JsonNode json = policy.toJson(); assertEquals(json.get("dateFrom").asText(), "2012-04-18"); assertEquals(json.get("dateTo").asText(), "2013-12-12"); } /** all entries from a date */ public void dateFrom() { Calendar start = new GregorianCalendar(2012, 3, 18); JsonNode json = OverwritePolicy.byDateFrom(attribute, start).toJson(); assertEquals(json.get("policy").asText(), "DELETE_ALL"); assertEquals(json.get("dateAttribute").asText(), attribute); assertEquals(json.get("dateFrom").asText(), "2012-04-18"); assertFalse(json.hasNonNull("dateTo")); } /** all entries before a date */ public void dateTo() { Calendar end = new GregorianCalendar(2012, 3, 18); JsonNode json = OverwritePolicy.byDateTo(attribute, end).toJson(); assertEquals(json.get("policy").asText(), "DELETE_ALL"); assertEquals(json.get("dateAttribute").asText(), attribute); assertEquals(json.get("dateTo").asText(), "2012-04-18"); assertFalse(json.hasNonNull("dateFrom")); } }