package com.gisgraphy.helper;
import java.util.ArrayList;
import org.junit.Assert;
import org.junit.Test;
public class AdmStateLevelInfoTest {
@Test
public void getLowLevel() {
Assert.assertEquals(3,AdmStateLevelInfo.getLowLevel("BR"));
Assert.assertEquals(4,AdmStateLevelInfo.getLowLevel("FR"));
Assert.assertEquals(4,AdmStateLevelInfo.getLowLevel("ZZ"));
Assert.assertEquals(4,AdmStateLevelInfo.getLowLevel(null));
}
@Test
public void getHighLevel() {
Assert.assertEquals(6,AdmStateLevelInfo.getHighLevel("NO"));
Assert.assertEquals(7,AdmStateLevelInfo.getHighLevel("FR"));
Assert.assertEquals(7,AdmStateLevelInfo.getHighLevel("ZZ"));
Assert.assertEquals(7,AdmStateLevelInfo.getHighLevel(null));
}
@Test
public void AllcountryShouldHaveCoherentValues(){
for (String countryCode :CountriesStaticData.getCountryCodes()){
if (AdmStateLevelInfo.getLowLevel(countryCode)>AdmStateLevelInfo.getHighLevel(countryCode)){
Assert.fail("wrong level set for country "+countryCode +" : low="+AdmStateLevelInfo.getLowLevel(countryCode)+" and high="+AdmStateLevelInfo.getHighLevel(countryCode));
}
if (AdmStateLevelInfo.getHighLevel(countryCode) - AdmStateLevelInfo.getLowLevel(countryCode)>5){
Assert.fail("too much difference ("+(AdmStateLevelInfo.getHighLevel(countryCode) - AdmStateLevelInfo.getLowLevel(countryCode))+") for country "+countryCode +" : low="+AdmStateLevelInfo.getLowLevel(countryCode)+" and high="+AdmStateLevelInfo.getHighLevel(countryCode));
}
}
}
@Test
public void shouldBeImportedAsAdm(){
Assert.assertFalse(AdmStateLevelInfo.shouldBeImportedAsAdm(null,0));
Assert.assertFalse(AdmStateLevelInfo.shouldBeImportedAsAdm(null,3));
Assert.assertFalse(AdmStateLevelInfo.shouldBeImportedAsAdm("FR",-1));
Assert.assertFalse(AdmStateLevelInfo.shouldBeImportedAsAdm("FR",3));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("FR",4));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("FR",5));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("FR",6));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("FR",7));
Assert.assertFalse(AdmStateLevelInfo.shouldBeImportedAsAdm("FR",8));
//specfic country
Assert.assertFalse(AdmStateLevelInfo.shouldBeImportedAsAdm("NO",3));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("NO",4));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("NO",5));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("NO",6));
Assert.assertFalse(AdmStateLevelInfo.shouldBeImportedAsAdm("NO",7));
//TN, LY has only one level
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("TN",4));
Assert.assertTrue(AdmStateLevelInfo.shouldBeImportedAsAdm("LY",4));
}
@Test
public void testIsCityLevelString(){
Assert.assertTrue(AdmStateLevelInfo.isCityLevel("", "8"));
Assert.assertTrue(AdmStateLevelInfo.isCityLevel(null, "8"));
Assert.assertFalse(AdmStateLevelInfo.isCityLevel(null, ""));
Assert.assertFalse(AdmStateLevelInfo.isCityLevel(null, null));
Assert.assertFalse(AdmStateLevelInfo.isCityLevel("US", ""));
}
@Test
public void testIsCityLevel(){
Assert.assertTrue(AdmStateLevelInfo.isCityLevel("", 8));
Assert.assertTrue(AdmStateLevelInfo.isCityLevel("ZZ", 8));
Assert.assertTrue(AdmStateLevelInfo.isCityLevel(null, 8));
Assert.assertTrue(AdmStateLevelInfo.isCityLevel("FR", 8));
Assert.assertFalse(AdmStateLevelInfo.isCityLevel("LV", 6));
Assert.assertTrue(AdmStateLevelInfo.isCityLevel("LV", 7));
Assert.assertTrue(AdmStateLevelInfo.isCityLevel("LV", 8));
Assert.assertTrue(AdmStateLevelInfo.isCityLevel("LV", 9));
Assert.assertFalse(AdmStateLevelInfo.isCityLevel("LV", 10));
}
@Test
public void testIsCitySubdivisionLevelString(){
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("", "8"));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel(null, "8"));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel(null, ""));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel(null, null));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("US", ""));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("US", null));
}
@Test
public void testIsCitySubdivisionLevel(){
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("", 8));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("ZZ", 8));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel(null, 8));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("FR", 8));
Assert.assertTrue(AdmStateLevelInfo.isCitySubdivisionLevel("", 9));
Assert.assertTrue(AdmStateLevelInfo.isCitySubdivisionLevel("ZZ", 9));
Assert.assertTrue(AdmStateLevelInfo.isCitySubdivisionLevel(null, 9));
Assert.assertTrue(AdmStateLevelInfo.isCitySubdivisionLevel("FR", 9));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("LV", 6));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("LV", 7));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("LV", 8));
Assert.assertFalse(AdmStateLevelInfo.isCitySubdivisionLevel("LV", 9));
Assert.assertTrue(AdmStateLevelInfo.isCitySubdivisionLevel("LV", 10));
}
@Test
public void testIsCityLevelDoesnTOverlapADM(){
for (String country: countryInfo.countryLookupMap.keySet()){
int[] levels = new int[]{1,2,3,4,5,6,7,8,9,11};
for (int level: levels){
if (AdmStateLevelInfo.isCityLevel(country, level) && AdmStateLevelInfo.shouldBeImportedAsAdm(country, level)){
Assert.fail(level+" for country "+country+ " is acity and an adm level");
}
}
}
}
}