package ca.uhn.fhir.rest.param;
import static org.junit.Assert.*;
import org.junit.AfterClass;
import org.junit.Test;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.dstu.valueset.QuantityCompararatorEnum;
import ca.uhn.fhir.util.TestUtil;
public class QuantityParamTest {
private static FhirContext ourCtx = FhirContext.forDstu1();
@Test
public void testFull() {
QuantityParam p = new QuantityParam();
p.setValueAsQueryToken(ourCtx, null, null, "<5.4|http://unitsofmeasure.org|mg");
assertEquals(QuantityCompararatorEnum.LESSTHAN,p.getComparator());
assertEquals("5.4", p.getValue().toPlainString());
assertEquals("http://unitsofmeasure.org", p.getSystem());
assertEquals("mg", p.getUnits());
assertEquals("<5.4|http://unitsofmeasure.org|mg", p.getValueAsQueryToken(ourCtx));
}
@Test
public void testApproximate() {
QuantityParam p = new QuantityParam();
p.setValueAsQueryToken(ourCtx, null, null, "~5.4|http://unitsofmeasure.org|mg");
assertEquals(null,p.getComparator());
assertEquals(true, p.isApproximate());
assertEquals("5.4", p.getValue().toPlainString());
assertEquals("http://unitsofmeasure.org", p.getSystem());
assertEquals("mg", p.getUnits());
assertEquals("~5.4|http://unitsofmeasure.org|mg", p.getValueAsQueryToken(ourCtx));
}
@Test
public void testNoQualifier() {
QuantityParam p = new QuantityParam();
p.setValueAsQueryToken(ourCtx, null, null, "5.4|http://unitsofmeasure.org|mg");
assertEquals(null, p.getComparator());
assertEquals("5.4", p.getValue().toPlainString());
assertEquals("http://unitsofmeasure.org", p.getSystem());
assertEquals("mg", p.getUnits());
assertEquals("5.4|http://unitsofmeasure.org|mg", p.getValueAsQueryToken(ourCtx));
}
@Test
public void testNoUnits() {
QuantityParam p = new QuantityParam();
p.setValueAsQueryToken(ourCtx, null, null, "5.4");
assertEquals(null, p.getComparator());
assertEquals("5.4", p.getValue().toPlainString());
assertEquals(null, p.getSystem());
assertEquals(null, p.getUnits());
assertEquals("5.4||", p.getValueAsQueryToken(ourCtx));
}
@Test
public void testNoSystem() {
// http://hl7.org/fhir/2017Jan/search.html#quantity
// sample url: [baseurl]/Observation?value-quantity=5.5||mg
String query = "5.5||mg";
QuantityParam param = new QuantityParam();
param.setValueAsQueryToken(null, "value-quantity", null, query);
// Check parts. The 'mg' part should be put in the units not the system
// System.out.println(param);
assertEquals(null, param.getPrefix());
assertEquals("5.5", param.getValue().toPlainString());
assertEquals(null, param.getSystem());
assertEquals("mg", param.getUnits());
// Make sure we don't break on this one...
query = "5.5| |mg";
param = new QuantityParam();
param.setValueAsQueryToken(null, "value-quantity", null, query);
// System.out.println(param);
assertEquals(null, param.getPrefix());
assertEquals("5.5", param.getValue().toPlainString());
assertEquals(null, param.getSystem());
assertEquals("mg", param.getUnits());
}
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
}