package org.ovirt.engine.core.common.businessentities;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.ovirt.engine.core.compat.Guid;
public class BusinessEntityMapTest {
@Test
public void testDontFailWithNullValueEntitiesList() throws Exception {
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(null);
assertThat(map.get("anyString"), nullValue());
assertThat(map.get(Guid.newGuid()), nullValue());
}
@Test(expected = IllegalArgumentException.class)
public void testCreatingBusinessEntityMapWithDuplicatesAmongIds() throws Exception {
Guid itemId = Guid.newGuid();
TestItem first = new TestItem(itemId, "name");
TestItem second = new TestItem(itemId, "different name");
new BusinessEntityMap<>(Arrays.asList(first, second));
}
@Test(expected = IllegalArgumentException.class)
public void testCreatingBusinessEntityMapWithDuplicatesAmongName() throws Exception {
TestItem first = new TestItem(Guid.newGuid(), "name");
TestItem second = new TestItem(Guid.newGuid(), "name");
new BusinessEntityMap<>(Arrays.asList(first, second));
}
@Test
public void testCreatingBusinessEntityMapWithNullDuplicatesOnly() throws Exception {
TestItem first = new TestItem(null, null);
TestItem second = new TestItem(null, null);
new BusinessEntityMap<>(Arrays.asList(first, second));
}
@Test
public void testGetByNameReturnsItemOfThatName() throws Exception {
String itemName = "name";
TestItem item = new TestItem(Guid.newGuid(), itemName);
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(Collections.singletonList(item));
assertThat(map.get(itemName), is(item));
}
@Test
public void testGetByIdReturnsItemOfThatId() throws Exception {
Guid itemId = Guid.newGuid();
TestItem testItem = new TestItem(itemId, null);
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(Collections.singletonList(testItem));
assertThat(map.get(itemId), is(testItem));
}
@Test
public void testGetByNameReturnsNullIfNotExist() throws Exception {
TestItem testItem = new TestItem(Guid.newGuid(), "name");
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(Collections.singletonList(testItem));
assertThat(map.get("different name"), nullValue());
}
@Test
public void testGetByIdReturnsNullIfNotExist() throws Exception {
TestItem testItem = new TestItem(Guid.newGuid(), null);
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(Collections.singletonList(testItem));
assertThat(map.get(Guid.newGuid()), nullValue());
}
@Test
public void testContainsKeyReturnsTrueForExistingId() throws Exception {
Guid itemId = Guid.newGuid();
List<TestItem> testItems = Collections.singletonList(new TestItem(itemId, null));
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.containsKey(itemId), is(true));
}
@Test
public void testContainsKeyReturnsFalseForNotExistingId() throws Exception {
List<TestItem> testItems = Collections.singletonList(new TestItem(Guid.newGuid(), null));
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.containsKey(Guid.newGuid()), is(false));
}
@Test
public void testContainsKeyReturnsTrueForExistingName() throws Exception {
String name = "name";
List<TestItem> testItems = Collections.singletonList(new TestItem(null, name));
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.containsKey(name), is(true));
}
@Test
public void testContainsKeyReturnsFalseForNotExistingName() throws Exception {
List<TestItem> testItems = Collections.singletonList(new TestItem(null, "name"));
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.containsKey("different name"), is(false));
}
@Test
public void testGetByIdOrNameWhenIdIsSpecified() throws Exception {
Guid itemId = Guid.newGuid();
TestItem testItem = new TestItem(itemId, "name");
List<TestItem> testItems = Collections.singletonList(testItem);
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.get(itemId, "different name"), is(testItem));
}
@Test
public void testGetByIdOrNameWhenIdIsNotSpecified() throws Exception {
TestItem testItem = new TestItem(Guid.newGuid(), "name");
List<TestItem> testItems = Collections.singletonList(testItem);
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.get(null, "name"), is(testItem));
}
@Test
public void testGetByIdOrNameWhenItemIsNotIdentified() throws Exception {
TestItem testItem = new TestItem(Guid.newGuid(), "name");
List<TestItem> testItems = Collections.singletonList(testItem);
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.get(null, "different name"), nullValue());
}
@Test
public void testGetByIdOrNameWhenItemIsNotIdentified2() throws Exception {
TestItem testItem = new TestItem(Guid.newGuid(), "name");
List<TestItem> testItems = Collections.singletonList(testItem);
BusinessEntityMap<TestItem> map = new BusinessEntityMap<>(testItems);
assertThat(map.get(null, null), nullValue());
}
private static class TestItem implements BusinessEntity<Guid>, Nameable {
private Guid id;
private String name;
private TestItem(Guid id, String name) {
this.id = id;
this.name = name;
}
@Override
public Guid getId() {
return id;
}
@Override
public void setId(Guid id) {
this.id = id;
}
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}