package ru.hflabs.rcd.history;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.testng.annotations.Test;
import ru.hflabs.rcd.ServiceTest;
import ru.hflabs.rcd.model.Identifying;
import ru.hflabs.rcd.model.change.Diff;
import ru.hflabs.rcd.model.document.Group;
import ru.hflabs.rcd.model.task.TaskDescriptor;
import ru.hflabs.rcd.service.IDifferenceService;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.Map;
import static org.testng.Assert.*;
@Test
public class DifferenceServiceTest extends ServiceTest {
@Resource(name = "differenceService")
private IDifferenceService<Identifying> differenceService;
public void testGroup1() {
Group group1 = new Group();
{
group1.setId("ID1");
group1.setHistoryId("HID1");
group1.setName("group1");
group1.setDescription("group1 test");
}
Group group2 = new Group();
{
group2.setId("ID2");
group2.setHistoryId("HID2");
group2.setName("group2");
group2.setDescription("group2 test");
}
assertNotEquals(
differenceService.createHashCode(group1),
differenceService.createHashCode(group2)
);
Collection<Diff> diffs = differenceService.createDiff(group1, group2);
assertNotNull(diffs);
assertEquals(diffs.size(), 2);
Map<String, Diff> name2diff = Maps.newLinkedHashMap(Maps.uniqueIndex(diffs, new Function<Diff, String>() {
@Override
public String apply(Diff input) {
return input.getField();
}
}));
assertNotNull(name2diff.remove(Group.NAME));
assertNotNull(name2diff.remove(Group.DESCRIPTION));
}
public void testGroup2() {
Group group1 = new Group();
group1.setId("ID1");
group1.setHistoryId("HID1");
group1.setName("group1");
group1.setDescription("group1 test");
Group group2 = group1.copy();
group2.setId(null);
group2.setHistoryId(null);
assertEquals(
differenceService.createHashCode(group1),
differenceService.createHashCode(group2)
);
Collection<Diff> diffs = differenceService.createDiff(group1, group2);
assertNull(diffs);
}
public void testTaskDescriptor() {
TaskDescriptor taskDescriptor1 = new TaskDescriptor();
taskDescriptor1.setParameters(
ImmutableMap.<String, Object>builder()
.put("string", "1")
.put("integer", 1)
.build()
);
TaskDescriptor taskDescriptor2 = new TaskDescriptor();
taskDescriptor2.setParameters(
ImmutableMap.<String, Object>builder()
.put("string", "2")
.put("integer", 2)
.build()
);
assertNotEquals(
differenceService.createHashCode(taskDescriptor1),
differenceService.createHashCode(taskDescriptor2)
);
Collection<Diff> diffs = differenceService.createDiff(taskDescriptor1, taskDescriptor2);
assertNotNull(diffs);
assertEquals(diffs.size(), 1);
Map<String, Diff> name2diff = Maps.newLinkedHashMap(Maps.uniqueIndex(diffs, new Function<Diff, String>() {
@Override
public String apply(Diff input) {
return input.getField();
}
}));
assertNotNull(name2diff.remove(TaskDescriptor.PARAMETERS));
}
}