import static org.junit.Assert.*;
import org.cacert.gigi.dbObjects.Name;
+import org.cacert.gigi.dbObjects.NamePart;
+import org.cacert.gigi.dbObjects.NamePart.NamePartType;
+import org.cacert.gigi.testUtils.ClientBusinessTest;
import org.junit.Before;
import org.junit.Test;
-public class TestName {
-
- Name n = new Name("fn", "ln", "mn", "sf");
+public class TestName extends ClientBusinessTest {
@Before
public void setUp() throws Exception {}
@Test
- public void testHashCode() {
- assertEquals(new Name("fname", "lname", null, null).hashCode(), new Name("fname", "lname", null, null).hashCode());
- assertNotEquals(new Name("fname", "lname", null, null).hashCode(), new Name("fname", "lname", null, "b").hashCode());
- assertNotEquals(new Name("fname", "lname", null, null).hashCode(), new Name("fname", "lname", "b", null).hashCode());
- assertNotEquals(new Name("fname", "lname", null, null).hashCode(), new Name("fname", "name", null, null).hashCode());
- assertNotEquals(new Name("fname", "lname", null, null).hashCode(), new Name("name", "lname", null, null).hashCode());
+ public void testNamePartHash() {
+ assertEquals(new NamePart(NamePartType.FIRST_NAME, "f"), new NamePart(NamePartType.FIRST_NAME, "f"));
+ assertNotEquals(new NamePart(NamePartType.FIRST_NAME, "f"), new NamePart(NamePartType.FIRST_NAME, "f2"));
+ assertNotEquals(new NamePart(NamePartType.FIRST_NAME, "f"), new NamePart(NamePartType.LAST_NAME, "f"));
}
+ /**
+ * Tests fitness for {@link NamePart#equals(Object)}.
+ */
@Test
- public void testEqualsObject() {
- assertFalse(n.equals(null));
- assertFalse(n.equals("blargh"));
- Name nullname = new Name(null, null, null, null);
- assertFalse(n.equals(nullname));
- assertFalse(nullname.equals(n));
- assertTrue(nullname.equals(nullname));
- assertTrue(n.equals(n));
+ public void testNamePartEquals() {
+ NamePart name = new NamePart(NamePartType.FIRST_NAME, "fn");
+ assertFalse(name.equals(null));
+ assertFalse(name.equals("blargh"));
+
+ // namePart that differs in content
+ NamePart diffContent = new NamePart(NamePartType.FIRST_NAME, "f");
+ assertFalse(name.equals(diffContent));
+ assertFalse(diffContent.equals(name));
+ assertTrue(diffContent.equals(diffContent));
+ assertTrue(name.equals(name));
+
+ // name part that is equal
+ NamePart same = new NamePart(NamePartType.FIRST_NAME, "fn");
+ assertTrue(same.equals(name));
+ assertTrue(name.equals(same));
+ assertTrue(same.equals(same));
+
+ // name part that differs in type
+ NamePart diffType = new NamePart(NamePartType.LAST_NAME, "fn");
+ assertFalse(diffType.equals(name));
+ assertFalse(name.equals(diffType));
+ assertTrue(diffType.equals(diffType));
+
+ assertFalse(name.equals("BLA"));
}
@Test
- public void testMatches() {
- assertTrue(n.matches("fn ln"));
- assertTrue(n.matches("fn ln sf"));
- assertTrue(n.matches("fn mn ln sf"));
- assertFalse(n.matches("blargh"));
+ public void testNamePartConstructorCheck() {
+ try {
+ new NamePart(null, "a");
+ fail("Exception expected");
+ } catch (IllegalArgumentException e) {
+
+ }
+ try {
+ new NamePart(NamePartType.FIRST_NAME, null);
+ fail("Exception expected");
+ } catch (IllegalArgumentException e) {
+
+ }
+ try {
+ new NamePart(NamePartType.FIRST_NAME, "");
+ fail("Exception expected");
+ } catch (IllegalArgumentException e) {
+
+ }
}
+ /**
+ * Testing {@link Name#matches(String)}. For multiple first names.
+ */
+ @Test
+ public void testMatches() throws GigiApiException {
+ Name n0 = new Name(u, new NamePart(NamePartType.FIRST_NAME, "Fir"), new NamePart(NamePartType.FIRST_NAME, "Fir2"), new NamePart(NamePartType.LAST_NAME, "Last"));
+
+ // Having the name "Fir Fir2 Last".
+ // This name requires the Last name to be present and at least one of
+ // the first names.
+
+ // Simple tests...
+ assertTrue(n0.matches("Fir Last"));
+ assertFalse(n0.matches("Fir Last"));
+ assertFalse(n0.matches("Fir Last "));
+ assertFalse(n0.matches(" Fir Last"));
+
+ // full name
+ assertTrue(n0.matches("Fir Fir2 Last"));
+ // removing and changing parts
+ assertTrue(n0.matches("Fir2 Last"));
+ assertFalse(n0.matches("Fir Bast"));
+ assertFalse(n0.matches("Fir2 Bast"));
+ assertFalse(n0.matches("Fir Fir2 Bast"));
+ // only last-name fails
+ assertFalse(n0.matches("Last"));
+ // one-character first-name is not enough
+ assertFalse(n0.matches("F. Last"));
+ assertFalse(n0.matches("E. Last"));
+ assertFalse(n0.matches("E Last"));
+ assertFalse(n0.matches("F Last"));
+
+ assertFalse(n0.matches("Bast"));
+
+ // test the abbreviated name (for e.g in find-RA-Agent-system)
+ assertEquals("Fir L.", n0.toAbbreviatedString());
+ }
+
+ /**
+ * Testing {@link Name#matches(String)} for multiple last-names and a
+ * suffix.
+ */
+ @Test
+ public void testMatchesLNSuf() throws GigiApiException {
+ Name n0 = new Name(u, new NamePart(NamePartType.FIRST_NAME, "Fir"), new NamePart(NamePartType.LAST_NAME, "Last"), new NamePart(NamePartType.LAST_NAME, "Last2"), new NamePart(NamePartType.SUFFIX, "Suff"));
+
+ // leaving stuff out in order
+ assertTrue(n0.matches("Fir Last"));
+ assertTrue(n0.matches("Fir Last Last2"));
+ assertTrue(n0.matches("Fir Last Last2 Suff"));
+ assertTrue(n0.matches("Fir Last Suff"));
+
+ // omitting primary last name
+ assertFalse(n0.matches("Fir"));
+ assertFalse(n0.matches("Fir Last2"));
+ assertFalse(n0.matches("Fir Last2 Suff"));
+ assertFalse(n0.matches("Fir Suff"));
+
+ // bringing things out of order
+ assertFalse(n0.matches("Fir Last Suff Last2"));
+ assertFalse(n0.matches("Fir Suff Last Last2"));
+ assertFalse(n0.matches("Fir Suff Last"));
+ assertFalse(n0.matches("Fir Last2 Last"));
+ assertFalse(n0.matches("Fir Last2 Last Suff"));
+ }
+
+ /**
+ * Testing {@link Name#matches(String)} for multiple last-names and a
+ * suffix.
+ */
+ @Test
+ public void testMatchesDoubleNameParts() throws GigiApiException {
+ Name name = new Name(u, //
+ new NamePart(NamePartType.FIRST_NAME, "A"), new NamePart(NamePartType.FIRST_NAME, "Fir"), new NamePart(NamePartType.FIRST_NAME, "A"),//
+ new NamePart(NamePartType.LAST_NAME, "A"), new NamePart(NamePartType.LAST_NAME, "Last"), new NamePart(NamePartType.LAST_NAME, "A"));
+
+ assertTrue(name.matches("A A"));
+ assertTrue(name.matches("Fir A"));
+ assertTrue(name.matches("A A Last"));
+ assertTrue(name.matches("A A A"));
+ assertTrue(name.matches("Fir A A A"));
+ assertTrue(name.matches("Fir A A A A"));
+
+ assertFalse(name.matches("A Last"));
+ assertFalse(name.matches("Last A"));
+ assertFalse(name.matches("Last A Last"));
+ assertFalse(name.matches("Fir Last"));
+ assertFalse(name.matches("Fir A A A A A"));
+
+ }
}