package ca.uhn.fhir.model.api;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.stringContainsInOrder;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.junit.AfterClass;
import org.junit.Test;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.dstu.resource.Patient;
import ca.uhn.fhir.util.TestUtil;
public class TagListTest {
private FhirContext myCtx = FhirContext.forDstu1();
@Test
public void testEquals() {
TagList tagList1 = new TagList();
tagList1.addTag(null, "Dog", "Puppies");
tagList1.addTag("http://foo", "Cat", "Kittens");
TagList tagList2 = new TagList();
tagList2.addTag(null, "Dog", "Puppies");
tagList2.addTag("http://foo", "Cat", "Kittens");
assertEquals(tagList1,tagList2);
}
@Test
public void testEqualsIgnoresLabel() {
TagList tagList1 = new TagList();
tagList1.addTag(null, "Dog", "AAAA");
tagList1.addTag("http://foo", "Cat", "BBBB");
TagList tagList2 = new TagList();
tagList2.addTag(null, "Dog", "Puppies");
tagList2.addTag("http://foo", "Cat", "Kittens");
assertEquals(tagList1,tagList2);
}
@Test
public void testEqualsIgnoresOrder() {
TagList tagList1 = new TagList();
tagList1.addTag(null, "Dog", "Puppies");
tagList1.addTag("http://foo", "Cat", "Kittens");
TagList tagList2 = new TagList();
tagList2.addTag("http://foo", "Cat", "Kittens");
tagList2.addTag(null, "Dog", "Puppies");
assertEquals(tagList1,tagList2);
}
@Test
public void testPreventDuplication() {
Patient patient = new Patient();
patient.addIdentifier("urn:system", "testTagsWithCreateAndReadAndSearch");
patient.addName().addFamily("Tester").addGiven("Joe");
TagList tagList = new TagList();
tagList.addTag(null, "Dog", "Puppies");
// Add this twice
tagList.addTag("http://foo", "Cat", "Kittens");
tagList.addTag("http://foo", "Cat", "Kittens");
patient.getResourceMetadata().put(ResourceMetadataKeyEnum.TAG_LIST, tagList);
Bundle b = new Bundle();
b.addResource(patient, myCtx, "http://foo");
String encoded = myCtx.newXmlParser().encodeBundleToString(b);
assertThat(encoded, stringContainsInOrder(Arrays.asList("Cat", "Kittens")));
assertThat(encoded, not(stringContainsInOrder(Arrays.asList("Cat", "Kittens", "Cat", "Kittens"))));
}
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
}