@Test
public void testMerge() throws Exception {

      MetadataSharing mds = Mockito.mock(MetadataSharing.class);

      PowerMockito.mockStatic(MetadataSharing.class);
      when(MetadataSharing.getInstance()).thenReturn(mds);

    PowerMockito.mockStatic(Handler.class, new Answer() {
        @Override
        public Object answer(InvocationOnMock invocation) throws Throwable {
            return null;
        }
    });

    Privilege p1 = buildPrivilege("Privilege 1", "A privilege");
    Privilege p2 = buildPrivilege("Privilege 2", "A privilege");
    Privilege p3 = buildPrivilege("Privilege 3", "A privilege");
    Privilege p4 = buildPrivilege("Privilege 4", "A privilege");

    Role existing = new Role();
    existing.addPrivilege(p2);
    existing.addPrivilege(p3);

    Role incoming = new Role();
    incoming.addPrivilege(p1);
    incoming.addPrivilege(p2);
    incoming.addPrivilege(p3);
    incoming.addPrivilege(p4);

    Map<Object, Object> incomingToExisting = new HashMap<Object, Object>();
    incomingToExisting.put(p1, p1);
    incomingToExisting.put(p2, p2);
    incomingToExisting.put(p3, p3);
    incomingToExisting.put(p4, p4);

    ObjectHandler objectHandler = new ObjectHandler(new OpenmrsObjectVisitor(), new ComparisonEngine());
    objectHandler.merge(existing, incoming, ImportType.OVERWRITE_MINE, incomingToExisting);

    assertThat(existing.getPrivileges().size(), is(4));
    assertThat(existing.getPrivileges(), containsInAnyOrder(p1, p2, p3, p4));
}