package ru.hflabs.rcd.model;
import com.google.common.collect.Lists;
import org.testng.annotations.Test;
import ru.hflabs.rcd.model.document.Field;
import ru.hflabs.rcd.model.document.MetaField;
import ru.hflabs.rcd.model.document.Record;
import ru.hflabs.rcd.model.notification.Notification;
import ru.hflabs.util.core.date.DateInterval;
import ru.hflabs.util.core.date.DateUtil;
import java.util.List;
import java.util.UUID;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static ru.hflabs.rcd.accessor.Accessors.linkRelative;
@Test
public class ModelUtilsTest {
private static MetaField generateMetaField(String dictionaryId, int ordinal) {
MetaField metaField = new MetaField();
metaField.setId(UUID.randomUUID().toString());
metaField.setDictionaryId(dictionaryId);
metaField.setName(UUID.randomUUID().toString());
metaField.setOrdinal(ordinal);
return metaField;
}
private static Field generateField(String row, MetaField metaField) {
Field field = linkRelative(metaField, new Field());
field.setId(UUID.randomUUID().toString());
field.setValue(UUID.randomUUID().toString());
field.setName(row);
return field;
}
private static void assertRecord(Record record, String expectedId, Field... expectedFields) {
assertEquals(record.getId(), expectedId);
assertNotNull(record.getFields());
assertEquals(record.getFields().size(), expectedFields.length);
int index = 0;
for (Field field : record.getFields().values()) {
assertEquals(field, expectedFields[index++]);
}
}
public void createRecordsTest1() {
MetaField metaField1 = generateMetaField("1", 0);
MetaField metaField2 = generateMetaField("1", 1);
Field field1 = generateField("1", metaField1);
Field field2 = generateField("2", metaField1);
Field field3 = generateField("1", metaField2);
Field field4 = generateField("2", metaField2);
List<Record> records = ModelUtils.createRecords(
Lists.newArrayList(metaField2, metaField1),
Lists.newArrayList(field1, field2, field4, field3)
);
assertNotNull(records);
assertEquals(records.size(), 2);
assertRecord(records.get(0), "1", field1, field3);
assertRecord(records.get(1), "2", field2, field4);
}
public void createRecordsTest2() {
MetaField metaField1 = generateMetaField("1", 0);
MetaField metaField2 = generateMetaField("1", 1);
Field field1 = generateField("1", metaField1);
Field field2 = generateField("2", metaField2);
List<Record> records = ModelUtils.createRecords(
Lists.newArrayList(metaField2, metaField1),
Lists.newArrayList(field1, field2)
);
assertNotNull(records);
assertEquals(records.size(), 2);
assertRecord(records.get(0), "1", field1, null);
assertRecord(records.get(1), "2", null, field2);
}
public void createRecordsTest3() {
MetaField metaField1 = generateMetaField("1", 0);
MetaField metaField2 = generateMetaField("2", 1);
Field field1 = generateField("1", metaField1);
Field field2 = generateField("2", metaField2);
Field field3 = generateField("2", generateMetaField("3", 0));
List<Record> records = ModelUtils.createRecords(
Lists.newArrayList(metaField1, metaField2),
Lists.newArrayList(field1, field2, field3)
);
assertNotNull(records);
assertEquals(records.size(), 2);
assertRecord(records.get(0), "1", field1);
assertRecord(records.get(1), "2", field2);
}
public void createNotificationIntervalTest1() throws Exception {
Notification notification1 = new Notification();
{
notification1.setStartDate(DateUtil.parseDate("04.05.2013"));
notification1.setEndDate(DateUtil.parseDate("05.05.2013"));
}
Notification notification2 = new Notification();
{
notification2.setStartDate(DateUtil.parseDate("02.05.2013"));
notification2.setEndDate(DateUtil.parseDate("03.05.2013"));
}
DateInterval interval = ModelUtils.createNotificationInterval(Lists.newArrayList(notification1, notification2));
assertEquals(interval.first, notification2.getStartDate());
assertEquals(interval.second, notification1.getEndDate());
}
}