package info.jtrac.domain;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
public class MetadataTest extends TestCase {
private Metadata getMetadata() {
Metadata metadata = new Metadata();
String xmlString = "<metadata><fields>"
+ "<field name='cusInt01' label='Test Label'/>"
+ "<field name='cusInt02' label='Test Label 2'/>"
+ "</fields></metadata>";
metadata.setXmlString(xmlString);
return metadata;
}
public void testGetFieldByName() {
Metadata m = getMetadata();
Field f = m.getField("cusInt01");
assertEquals("Test Label", f.getLabel());
}
public void testGetFieldsFromXml() {
Metadata m = getMetadata();
Map<Field.Name, Field> fields = m.getFields();
assertTrue(fields.size() == 2);
Field[] fa = fields.values().toArray(new Field[0]);
assertEquals("cusInt01", fa[0].getName() + "");
assertEquals("Test Label", fa[0].getLabel());
assertEquals("cusInt02", fa[1].getName() + "");
assertEquals("Test Label 2", fa[1].getLabel());
}
public void testMetadataInheritance() {
Metadata m1 = getMetadata();
Metadata m2 = new Metadata();
String xmlString = "<metadata><fields>"
+ "<field name='cusInt03' label='Test Label 3'/>"
+ "<field name='cusInt04' label='Test Label 4'/>"
+ "</fields></metadata>";
m2.setXmlString(xmlString);
m2.setParent(m1);
Map<Field.Name, Field> fields = m2.getFields();
assertEquals(fields.size(), 4);
Set<Field.Name> names = m2.getUnusedFieldNames();
assertEquals(names.contains(Field.Name.CUS_INT_01), false);
assertEquals(names.contains(Field.Name.CUS_INT_04), false);
assertEquals(names.size(), Field.Name.values().length - 4);
}
public void testInitRolesThenAddRolesAndStates() {
Metadata m = new Metadata();
m.initRoles();
assertEquals("New, Open and Closed available by default", 3, m.getStateCount());
assertEquals("DEFAULT available by default", 1, m.getRoleCount());
Field f = new Field(Field.Name.CUS_INT_01);
m.add(f);
assertEquals(1, m.getFieldCount());
assertEquals("New", m.getStatusValue(0));
assertEquals("Open", m.getStatusValue(1));
assertEquals("Closed", m.getStatusValue(99));
assertEquals("", m.getStatusValue(50));
}
public void testGetEditableFields() {
Metadata m = new Metadata();
m.initRoles();
Field f = new Field(Field.Name.CUS_STR_01);
m.add(f);
// query for editable fields across all roles
List<Field> fields = m.getEditableFields();
assertEquals(0, fields.size());
// query for editable fields for DEFAULT role and when status is OPEN
fields = m.getEditableFields("DEFAULT", State.OPEN);
assertEquals(0, fields.size());
// now make the field editable for given state and role
m.switchMask(State.OPEN, "DEFAULT", "cusStr01"); // should now be editable when status is open
fields = m.getEditableFields();
assertEquals(1, fields.size());
fields = m.getEditableFields("DEFAULT", State.OPEN);
assertEquals(1, fields.size());
}
}