package io.kaif.model.zone;
import static org.junit.Assert.*;
import org.junit.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ZoneTest {
static class FooPojo {
public Zone zone;
public FooPojo(Zone zone) {
this.zone = zone;
}
public FooPojo() {
}
}
@Test
public void json() throws Exception {
ObjectMapper mapper = new ObjectMapper();
assertEquals("\"abc\"", mapper.writeValueAsString(Zone.valueOf("abc")));
assertEquals(Zone.valueOf("foo"), mapper.readValue("\"foo\"", Zone.class));
assertNull(mapper.readValue("null", Zone.class));
assertEquals("{\"zone\":\"xyz\"}", mapper.writeValueAsString(new FooPojo(Zone.valueOf("xyz"))));
assertEquals(Zone.valueOf("xyz"), mapper.readValue("{\"zone\":\"xyz\"}", FooPojo.class).zone);
}
@Test
public void zoneFallback() throws Exception {
assertEquals("foo", Zone.tryFallback("foo").get().value());
assertEquals("foo", Zone.tryFallback("Foo").get().value());
//fallback do not handle space, because url may use %20
assertFalse(Zone.tryFallback(" foo ").isPresent());
assertFalse(Zone.tryFallback(" ").isPresent());
assertFalse(Zone.tryFallback(null).isPresent());
assertEquals("a-b-cd-e", Zone.tryFallback("a--b__cd-e").get().value());
}
@Test
public void valueValidation() throws Exception {
assertEquals("abc", Zone.valueOf("abc").value());
assertEquals("111111111", Zone.valueOf("111111111").value());
assertInvalidZone(null);
assertInvalidZone("null");
assertInvalidZone("NULL");
assertInvalidZone("");
assertInvalidZone(" ");
assertInvalidZone("a");
assertInvalidZone("ab");
assertInvalidZone("123456789012345678901");
assertInvalidZone("a__b");
assertInvalidZone("+++ab");
assertInvalidZone("-ab");
assertInvalidZone("ab-");
assertInvalidZone("a--b");
assertInvalidZone("a----b");
}
private void assertInvalidZone(String rawValue) {
try {
Zone.valueOf(rawValue);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException expected) {
}
}
}