{"action":"created","comment":{"url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/comments/185579930","pull_request_review_id":116995101,"id":185579930,"diff_hunk":"@@ -31,43 +30,648 @@ void doNamesMatch_Yes_IgnoreSpaces() {\n     }\n \n     @Test\n-    void doNamesMatch_Yes_IgnoreSpacesAndCaseInsensitive() {\n+    void doNamesMatch_Yes_IgnoreSpaces_CaseInsensitive() {\n         assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" JoHn\", \"DOE\", \"JOHN \", \" Doe  \"));\n     }\n \n+    //------------------------------------------------------------------------- Punctuation First Names -------------------------------------------------------------------------\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInFirstName() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \"Doe\", \"An Denise\", \"Doe\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInFirstName_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-denIse\", \"dOe\", \"An Denise\", \"doe\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInFirstName_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-denIse \", \"Doe \", \" An Denise \", \"   doe \"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInFirstName() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-De-Denise\", \"Doe\", \"An De Denise\", \"Doe\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInFirstName_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-De-denIse\", \"dOe\", \"An dE Denise\", \"doe\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInFirstName_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-De-denIse \", \"dOe \", \" An dE Denise \", \"   doe \"));\n+    }\n+\n     @Test\n-    void doNamesMatch_Yes_IgnorePunctuation() {\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstName_DifferentLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"An-De-Denise\", \"Doe\", \"An De Denise\", \"Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstName_CaseInsensitive_DifferentLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"aN-De-denIse\", \"dOe\", \"An dE Denise\", \"adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstName_CaseInsensitive_IgnoreSpaces_DifferentLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" aN-De-denIse\", \" dOe\", \"   An dE Denise  \", \" adams  \"));\n+    }\n+\n+    //-------------------------------------------------------------------------- Punctuation Last Names -------------------------------------------------------------------------\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInLastName() {\n         assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Jane\", \"Doe-Adams\", \"Jane\", \"Doe Adams\"));\n     }\n \n     @Test\n-    void doNamesMatch_Maybe_HyphenatedNames() {\n-        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Jane\", \"Doe-Adams\", \"Jane\", \"Doe\"));\n-        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Jane\", \"Adams\", \"Jane\", \"Doe-Adams\"));\n+    void doNamesMatch_Yes_IgnorePunctuationInLastName_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"jaNe\", \"Doe-adams\", \"Jane\", \"doe Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInLastName_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Jane \", \"Doe-adams \", \"Jane\", \"  Doe Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInLastName() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"Sa La Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInLastName_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"arEb\", \"Sa-LA-Democh\", \"Areb\", \"sa la democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInLastName_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" arEb\", \" Sa-LA-Democh\", \"Areb\", \"sa la democh  \"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInLastName_DifferentFirstNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Hari\", \"Sa-la-Democh\", \"Areb\", \"Sa la Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInLastName_CaseInsensitive_DifferentFirstNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"haRi\", \"Sa-LA-Democh\", \"Areb\", \"sa la democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInLastName_CaseInsensitive_IgnoreSpaces_DifferentFirstNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" haRi\", \" Sa-LA-Democh\", \"Areb\", \"sa la democh  \"));\n+    }\n+\n+    //--------------------------------------------------------------------- Punctuation First And Last Names --------------------------------------------------------------------\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInFirstAndLastName() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \"Doe-Adams\", \"An Denise\", \"Doe Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInFirstAndLastName_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-denIse\", \"Doe-adams\", \"An Denise\", \"Doe Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnorePunctuationInFirstAndLastName_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-denIse \", \"Doe-adams \", \" An Denise \", \"   Doe Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInFirstAndLastName() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-De-Denise\", \"Sa-La-Democh\", \"An De Denise\", \"Sa La Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-De-denIse\", \"Sa-LA-Democh\", \"An dE Denise\", \"sa la democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_Yes_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aN-De-denIse \", \" Sa-LA-Democh \", \" An dE Denise \", \"sa la democh  \"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_DifferentFirstNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"An-Day-Denise\", \"Sa-la-Democh\", \"An De Denise\", \"Sa la Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive_DifferentFirstNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"aN-Day-denIse\", \"Sa-LA-Democh\", \"An dE Denise\", \"sa la democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive_IgnoreSpaces_DifferentFirstNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" aN-Day-denIse\", \" Sa-LA-Democh\", \"   An dE Denise  \", \"sa la democh  \"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_DifferentLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"An-De-Denise\", \"Sa-la-Democh\", \"An De Denise\", \"Sa le Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive_DifferentLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"aN-De-denIse\", \"Sa-LA-Democh\", \"An dE Denise\", \"sa le democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive_IgnoreSpaces_DifferentLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" aN-De-denIse\", \" Sa-LA-Democh\", \"   An dE Denise  \", \"sa le democh  \"));\n     }\n \n     @Test\n-    void doNamesMatch_Maybe_NamesContainMultiHyphens() {\n-        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-la-Democh\", \"Areb\", \"Democh\"));\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_DifferentFirstAndLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"An-Day-Denise\", \"Sa-la-Democh\", \"An De Denise\", \"Sa le Democh\"));\n     }\n \n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive_DifferentFirstAndLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"aN-Day-denIse\", \"Sa-LA-Democh\", \"An dE Denise\", \"sa le democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_IgnoreMultiPunctuationInFirstAndLastName_CaseInsensitive_IgnoreSpaces_DifferentFirstAndLastNames() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" aN-Day-denIse\", \" Sa-LA-Democh\", \"   An dE Denise  \", \"sa le democh  \"));\n+    }\n+\n+    //-------------------------------------------------------------------------- Hyphenated First Names -------------------------------------------------------------------------\n+    // If the name is less than 4 characters and is contained inside the match name, return maybe.\n+    // If the name is 4 or more characters and is contained inside the match name, return yes.\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedFirstNames() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"An-Denise\", \"Doe\", \"An\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \"Adams\", \"Denise\", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"An\", \"Doe\", \"An-Denise\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Denise\", \"Adams\", \"An-Denise\", \"Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedFirstNames_CaseInsensitive() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"An-Denise\", \"Doe\", \"aN\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \"Adams\", \"deNise\", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"an\", \"Doe\", \"An-Denise\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"dEniSe\", \"Adams\", \"An-Denise\", \"Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedFirstNames_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\" An-Denise  \", \" Doe\", \"  aN\", \"Doe \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \" Adams\", \"deNise  \", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"an \", \"Doe \", \"An-Denise \", \"Doe   \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" dEniSe\", \" Adams\", \" An-Denise\", \"Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_FirstNamesContainMultiHyphens() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Democh\", \"Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Democh\", \"Mc Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Democh\", \"Mc\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Democh\", \"Josephine Mc\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Democh\", \"Josephine\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Democh\", \"Josephine Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Vitty\", \"Democh\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Mc Vitty\", \"Democh\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Mc\", \"Democh\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine Mc\", \"Democh\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine\", \"Democh\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine Vitty\", \"Democh\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Joseph\", \"Democh\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Democh\", \"Joseph\", \"Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_FirstNamesContainMultiHyphens_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-mc-vitty\", \"Democh\", \"vittY\", \"dEmoch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"jOsephine-mc-vitty\", \"Democh\", \"mc vitTy\", \"deMoch\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"joSephine-mc-vitty\", \"Democh\", \"mC\", \"demOch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josEphine-mc-vitty\", \"Democh\", \"josephine Mc\", \"demoCh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josePhine-mc-vitty\", \"Democh\", \"josephinE\", \"democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josepHine-mc-vitty\", \"DEmoch\", \"josephiNe vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Vitty\", \"DEmoch\", \"josephine-Mc-vitty\", \"dEmoch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Mc vitty\", \"DEmoch\", \"josephinE-mc-vitty\", \"deMoch\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"mC\", \"DEmoch\", \"josephiNe-mc-vitty\", \"demOch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josephine MC\", \"DEmoch\", \"josephIne-mc-vitty\", \"demoCh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josephinE\", \"DEmoch\", \"josepHine-mc-vitty\", \"democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josephine ViTty\", \"DEMOCH\", \"josePhine-mc-vitty\", \"democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JosePh\", \"Democh\", \"JosEphine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JOsephine-Mc-Vitty\", \"Democh\", \"joSeph\", \"Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_FirstNamesContainMultiHyphens_CaseInsensitive_IgnoreSpaces() {\n+        // if all hyphen names are less than 4, assign maybe return, else return yes\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" Josephine-mc-vitty\", \"Democh \", \"vittY\", \"dEmoch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"jOsephine-mc-vitty \", \" Democh\", \"mc vitTy\", \"deMoch\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"  joSephine-mc-vitty\", \"Democh  \", \"mC\", \"demOch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josEphine-mc-vitty  \", \"  Democh\", \"josephine Mc\", \"demoCh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" josePhine-mc-vitty \", \" Democh \", \"josephinE\", \"democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"  josepHine-mc-vitty  \", \"  DEmoch  \", \"josephiNe vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Vitty\", \"DEmoch\", \" josephine-Mc-vitty\", \" dEmoch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Mc vitty\", \"DEmoch\", \"josephinE-mc-vitty \", \"deMoch \"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"mC\", \"DEmoch\", \"  josephiNe-mc-vitty  \", \"  demOch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josephine MC\", \"DEmoch\", \" josephIne-mc-vitty \", \"demoCh  \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josephinE\", \"DEmoch\", \"  josepHine-mc-vitty  \", \" democH \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" josephine ViTty\", \" DEMOCH  \", \" josePhine-mc-vitty \", \" democh \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JosePh\", \"DemOch\", \"JosEphine-Mc-Vitty\", \"DeMoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JOsephine-Mc-Vitty\", \"DemoCh\", \"joSeph\", \"DemocH\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_FirstNamesContainMultiHyphens_DifferentLastName() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Bedi\", \"Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Bedi\", \"Mc Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Bedi\", \"Mc\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Bedi\", \"Josephine Mc\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Bedi\", \"Josephine\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Bedi\", \"Josephine Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Vitty\", \"Bedi\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Mc Vitty\", \"Bedi\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Mc\", \"Bedi\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine Mc\", \"Bedi\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine\", \"Bedi\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine Vitty\", \"Bedi\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Joseph\", \"Demo\", \"Josephine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Demo\", \"Joseph\", \"Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_FirstNamesContainMultiHyphens_CaseInsensitive_DifferentLastName() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-mc-vitty\", \"Bedi\", \"vittY\", \"dEmoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"jOsephine-mc-vitty\", \"bEdi\", \"mc vitTy\", \"deMoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"joSephine-mc-vitty\", \"beDi\", \"mC\", \"demOch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josEphine-mc-vitty\", \"bedI\", \"josephine Mc\", \"demoCh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josePhine-mc-vitty\", \"BEdi\", \"josephinE\", \"democH\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josepHine-mc-vitty\", \"BeDi\", \"josephiNe vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Vitty\", \"BedI\", \"josephine-Mc-vitty\", \"dEmoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Mc vitty\", \"BEDi\", \"josephinE-mc-vitty\", \"deMoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"mC\", \"BEdI\", \"josephiNe-mc-vitty\", \"demOch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josephine MC\", \"BEDI\", \"josephIne-mc-vitty\", \"demoCh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josephinE\", \"BeDI\", \"josepHine-mc-vitty\", \"democH\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josephine ViTty\", \"bedi\", \"josePhine-mc-vitty\", \"democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JosePh\", \"Demo\", \"JosEphine-Mc-Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JOsephine-Mc-Vitty\", \"Demo\", \"joSeph\", \"Democh\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_FirstNamesContainMultiHyphens_CaseInsensitive_IgnoreSpaces_DifferentLastName() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" Josephine-mc-vitty\", \"Bedi \", \"vittY\", \"dEmoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"jOsephine-mc-vitty \", \" bEdi\", \"mc vitTy\", \"deMoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  joSephine-mc-vitty\", \"beDi  \", \"mC\", \"demOch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josEphine-mc-vitty  \", \"  bedI\", \"josephine Mc\", \"demoCh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" josePhine-mc-vitty \", \"  BEdi  \", \"josephinE\", \"democH\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  josepHine-mc-vitty  \", \" BeDi \", \"josephiNe vitty\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Vitty\", \"BedI\", \" josephine-Mc-vitty\", \"dEmoch \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Mc vitty\", \"BEDi\", \"josephinE-mc-vitty \", \" deMoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"mC\", \"BEdI\", \" josephiNe-mc-vitty \", \"demOch  \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josephine MC\", \"BEDI\", \"  josephIne-mc-vitty  \", \"  demoCh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"josephinE \", \"BeDI\", \" josepHine-mc-vitty  \", \"  democH  \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  josephine ViTty \", \"bedi\", \" josePhine-mc-vitty\", \" democh \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" JosePh  \", \"  Demo \", \"JosEphine-Mc-Vitty \", \" Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  JOsephine-Mc-Vitty \", \" Demo  \", \" joSeph\", \"Democh \"));\n+    }\n+\n+    //-------------------------------------------------------------------------- Hyphenated Last Names --------------------------------------------------------------------------\n+    // If the name is less than 4 characters and is contained inside the match name, return maybe.\n+    // If the name is 4 or more characters and is contained inside the match name, return yes.\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedLastNames() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Jane\", \"Doe-Adams\", \"Jane\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Jane\", \"Doe-Adams\", \"Jane\", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Jane\", \"Doe\", \"Jane\", \"Doe-Adams\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Jane\", \"Adams\", \"Jane\", \"Doe-Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedLastNames_CaseInsensitive() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"jAne\", \"dOe-adaMs\", \"janE\", \"DOE\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"jaNe\", \"doE-aDams\", \"jAne\", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"janE\", \"doe\", \"jaNe\", \"DOE-adams\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"JANE\", \"ADAMS\", \"jane\", \"DoE-adAmS\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedLastNames_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"jAne\", \"dOe-adaMs\", \"janE\", \"DOE\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"jaNe\", \"doE-aDams\", \"jAne\", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"janE\", \"doe\", \"jaNe\", \"DOE-adams\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"JANE\", \"ADAMS\", \"jane\", \"DoE-adAmS\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_LastNamesContainMultiHyphens() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"La Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"La\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"Sa La\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"Sa\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"Sa Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Democh\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"La Democh\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Areb\", \"La\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa La\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Areb\", \"Sa\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa Democh\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Areb\", \"Sa Dem\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-La-Democh\", \"Areb\", \"Sa Dem\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_LastNamesContainMultiHyphens_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Areb\", \"Sa-la-democh\", \"aREB\", \"democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aReb\", \"sA-La-democh\", \"ArEB\", \"la demoCh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"arEb\", \"sa-La-democh\", \"AReB\", \"lA\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"areB\", \"sa-lA-democh\", \"AREb\", \"sa La\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"AReb\", \"sa-la-Democh\", \"aREB\", \"sA\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"ArEb\", \"sa-la-dEmoch\", \"aReB\", \"Sa democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"AreB\", \"Democh\", \"aREb\", \"sa-la-democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"AReB\", \"lA democh\", \"arEb\", \"sa-la-demoCh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"AREb\", \"La\", \"areB\", \"sa-la-demOch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"ArEB\", \"Sa la\", \"aReb\", \"sa-la-deMoch\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"AREB\", \"sA\", \"areb\", \"sa-lA-democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"areb\", \"sa dEmoch\", \"AREB\", \"Sa-la-democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"arEB\", \"sa deM\", \"AReb\", \"sa-la-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"aREB\", \"sa-la-demOch\", \"Areb\", \"sa dEm\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_LastNamesContainMultiHyphens_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" Areb\", \"Sa-la-democh \", \"aREB \", \" democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"aReb \", \" sA-La-democh\", \" ArEB\", \"la demoCh \"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\" arEb \", \" sa-La-democh \", \"  AReB  \", \"  lA  \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" areB  \", \"  sa-lA-democh \", \"  AREb \", \" sa La  \"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"  AReb \", \" sa-la-Democh  \", \" aREB  \", \"  sA \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"  ArEb  \", \"  sa-la-dEmoch  \", \" aReB \", \" Sa democh \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"AreB \", \" Democh\", \" aREb\", \"sa-la-democH \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" AReB\", \"lA democh \", \"arEb \", \" sa-la-demoCh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"  AREb  \", \"  La  \", \" areB \", \" sa-la-demOch \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"  ArEB \", \" Sa la  \", \" aReb  \", \"  sa-la-deMoch \"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\" AREB  \", \"  sA \", \"  areb \", \" sa-lA-democh  \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" areb \", \" sa dEmoch \", \" AREB \", \"  Sa-la-democh  \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" arEB  \", \"  sa deM\", \" AReb\", \" sa-la-Democh \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  aREB \", \"sa-la-demOch  \", \"Areb \", \" sa dEm \"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_LastNamesContainMultiHyphens_DifferentFirstName() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-La-Democh\", \"Areb\", \"Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-La-Democh\", \"Areb\", \"La Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-La-Democh\", \"Areb\", \"La\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-La-Democh\", \"Areb\", \"Sa La\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-La-Democh\", \"Areb\", \"Sa\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-La-Democh\", \"Areb\", \"Sa Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Democh\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"La Democh\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"La\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa La\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa Democh\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa Dem\", \"Areb\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-La-Democh\", \"Areb\", \"Sa Dem\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_LastNamesContainMultiHyphens_CaseInsensitive_DifferentFirstName() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Satya\", \"Sa-la-democh\", \"aREB\", \"democH\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"sAtya\", \"sA-La-democh\", \"ArEB\", \"la demoCh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"saTya\", \"sa-La-democh\", \"AReB\", \"lA\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"satYa\", \"sa-lA-democh\", \"AREb\", \"sa La\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"satyA\", \"sa-la-Democh\", \"aREB\", \"sA\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"SAtya\", \"sa-la-dEmoch\", \"aReB\", \"Sa democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"SaTya\", \"Democh\", \"aREb\", \"sa-la-democH\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"SatYa\", \"lA democh\", \"arEb\", \"sa-la-demoCh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"SatyA\", \"La\", \"areB\", \"sa-la-demOch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"sATya\", \"Sa la\", \"aReb\", \"sa-la-deMoch\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"sAtYa\", \"sA\", \"areb\", \"sa-lA-democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"sAtyA\", \"sa dEmoch\", \"AREB\", \"Sa-la-democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"saTYa\", \"sa deM\", \"AReb\", \"sa-la-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"saTyA\", \"sa-la-demOch\", \"Areb\", \"sa dEm\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_No_LastNamesContainMultiHyphens_CaseInsensitive_IgnoreSpaces_DifferentFirstName() {\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" Satya\", \"Sa-la-democh \", \"aREB \", \" democH\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"sAtya \", \" sA-La-democh\", \" ArEB\", \"la demoCh \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" saTya \", \" sa-La-democh \", \"  AReB  \", \"  lA  \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" satYa  \", \"  sa-lA-democh \", \"  AREb \", \" sa La  \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  satyA \", \" sa-la-Democh  \", \" aREB  \", \"  sA \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  SAtya  \", \"  sa-la-dEmoch  \", \" aReB \", \" Sa democh \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"SaTya \", \" Democh\", \" aREb\", \"sa-la-democH \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" SatYa\", \"lA democh \", \"arEb \", \" sa-la-demoCh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  SatyA  \", \"  La  \", \" areB \", \" sa-la-demOch \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  sATya \", \" Sa la  \", \" aReb  \", \"  sa-la-deMoch \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" sAtYa  \", \"  sA \", \"  areb \", \" sa-lA-democh  \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" sAtyA \", \" sa dEmoch \", \" AREB \", \"  Sa-la-democh  \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\" saTYa  \", \"  sa deM\", \" AReb\", \" sa-la-Democh \"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"  saTyA \", \"sa-la-demOch  \", \"Areb \", \" sa dEm \"));\n+    }\n+\n+    //--------------------------------------------------------------------- Hyphenated First and Last Names ---------------------------------------------------------------------\n+    // If the name is less than 4 characters and is contained inside the match name, return maybe.\n+    // If the name is 4 or more characters and is contained inside the match name, return yes.\n+\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedFirstAndLastNames() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"An-Denise\", \"Doe\", \"An\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \"Adams\", \"Denise\", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"An\", \"Doe\", \"An-Denise\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Denise\", \"Adams\", \"An-Denise\", \"Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedFirstAndLastNames_CaseInsensitive() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"An-Denise\", \"Doe\", \"aN\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \"Adams\", \"deNise\", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"an\", \"Doe\", \"An-Denise\", \"Doe\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"dEniSe\", \"Adams\", \"An-Denise\", \"Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybe_HyphenatedFirstAndLastNames_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\" An-Denise  \", \" Doe\", \"  aN\", \"Doe \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"An-Denise\", \" Adams\", \"deNise  \", \"Adams\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"an \", \"Doe \", \"An-Denise \", \"Doe   \"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" dEniSe\", \" Adams\", \" An-Denise\", \"Adams\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_FirstAndLastNamesContainMultiHyphens() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Sa-La-Democh\", \"Vitty\", \"Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Sa-La-Democh\", \"Mc Vitty\", \"La Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Sa-La-Democh\", \"Mc\", \"La\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Sa-La-Democh\", \"Josephine Mc\", \"Sa La\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Sa-La-Democh\", \"Josephine\", \"Sa\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Sa-La-Democh\", \"Josephine Vitty\", \"Sa Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Vitty\", \"Democh\", \"Josephine-Mc-Vitty\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Mc Vitty\", \"La Democh\", \"Josephine-Mc-Vitty\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Mc\", \"La\", \"Josephine-Mc-Vitty\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine Mc\", \"Sa La\", \"Josephine-Mc-Vitty\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"Josephine\", \"Sa\", \"Josephine-Mc-Vitty\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine Vitty\", \"Sa Democh\", \"Josephine-Mc-Vitty\", \"Sa-La-Democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Joseph\", \"Lee\", \"Josephine-Mc-Vitty\", \"Sa-La-Cathleen\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"Josephine-Mc-Vitty\", \"Sa-La-Cathleen\", \"Joseph\", \"La Lee\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_FirstAndLastNamesContainMultiHyphens_CaseInsensitive() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Josephine-mc-vitty\", \"Sa-la-democh\", \"vittY\", \"democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"jOsephine-mc-vitty\", \"sA-La-democh\", \"mc vitTy\", \"la demoCh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"joSephine-mc-vitty\", \"sa-La-democh\", \"mC\", \"lA\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josEphine-mc-vitty\", \"sa-lA-democh\", \"josephine Mc\", \"sa La\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"josePhine-mc-vitty\", \"sa-la-Democh\", \"josephinE\", \"sA\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josepHine-mc-vitty\", \"sa-la-dEmoch\", \"josephiNe vitty\", \"Sa democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Vitty\", \"Democh\", \"josephine-Mc-vitty\", \"sa-la-democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"Mc vitty\", \"LA democh\", \"josephinE-mc-vitty\", \"sa-la-demoCh\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"mC\", \"La\", \"josephiNe-mc-vitty\", \"sa-la-demOch\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josephine MC\", \"Sa la\", \"josephIne-mc-vitty\", \"sa-la-deMoch\"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\"josephinE\", \"sA\", \"josepHine-mc-vitty\", \"sa-LA-democh\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"josephine viTty\", \"sa dEmoch\", \"josePhine-mc-vitty\", \"Sa-la-democh\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JosePh\", \"leE\", \"JosEphine-Mc-Vitty\", \"sa-la-Cathleen\"));\n+        assertEquals(AnswerType.no, CompareContactParts.doNamesMatch(\"JOsephine-Mc-Vitty\", \"sa-la-cathLeen\", \"joSeph\", \"la lEe\"));\n+    }\n+\n+    @Test\n+    void doNamesMatch_YesMaybeNo_FirstAndLastNamesContainMultiHyphens_CaseInsensitive_IgnoreSpaces() {\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\" Josephine-mc-vitty\", \"Sa-la-democh \", \"vittY \", \" democH\"));\n+        assertEquals(AnswerType.yes, CompareContactParts.doNamesMatch(\"jOsephine-mc-vitty \", \" sA-La-democh\", \" mc vitTy\", \"la demoCh \"));\n+        assertEquals(AnswerType.maybe, CompareContactParts.doNamesMatch(\" joSephine-mc-vitty \", \" sa-La-democh \", \"  mC  \", \"  lA  \"));","path":"src/com/cft/contactmerge/tests/CompareContactPartsTest.java","position":538,"original_position":538,"commit_id":"a9b92314cf881e60d67b0cfa130d653f20ec7b87","original_commit_id":"a9b92314cf881e60d67b0cfa130d653f20ec7b87","user":{"login":"mbilodeau6","id":15738037,"avatar_url":"https://avatars2.githubusercontent.com/u/15738037?v=4","gravatar_id":"","url":"https://api.github.com/users/mbilodeau6","html_url":"https://github.com/mbilodeau6","followers_url":"https://api.github.com/users/mbilodeau6/followers","following_url":"https://api.github.com/users/mbilodeau6/following{/other_user}","gists_url":"https://api.github.com/users/mbilodeau6/gists{/gist_id}","starred_url":"https://api.github.com/users/mbilodeau6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbilodeau6/subscriptions","organizations_url":"https://api.github.com/users/mbilodeau6/orgs","repos_url":"https://api.github.com/users/mbilodeau6/repos","events_url":"https://api.github.com/users/mbilodeau6/events{/privacy}","received_events_url":"https://api.github.com/users/mbilodeau6/received_events","type":"User","site_admin":false},"body":"You may already have it but this test reminds me that we should make sure that \"Adams, Kathleen\" does not match \"Adamson, Lee\" (i.e. that comparison should return \"no\").","created_at":"2018-05-02T17:42:34Z","updated_at":"2018-05-02T17:47:42Z","html_url":"https://github.com/CodeForTucson/ContactMerge/pull/6#discussion_r185579930","pull_request_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/comments/185579930"},"html":{"href":"https://github.com/CodeForTucson/ContactMerge/pull/6#discussion_r185579930"},"pull_request":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6"}}},"pull_request":{"url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6","id":185361743,"html_url":"https://github.com/CodeForTucson/ContactMerge/pull/6","diff_url":"https://github.com/CodeForTucson/ContactMerge/pull/6.diff","patch_url":"https://github.com/CodeForTucson/ContactMerge/pull/6.patch","issue_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/6","number":6,"state":"open","locked":false,"title":"First and Last Name Tests Added","user":{"login":"vardahoth","id":6811690,"avatar_url":"https://avatars3.githubusercontent.com/u/6811690?v=4","gravatar_id":"","url":"https://api.github.com/users/vardahoth","html_url":"https://github.com/vardahoth","followers_url":"https://api.github.com/users/vardahoth/followers","following_url":"https://api.github.com/users/vardahoth/following{/other_user}","gists_url":"https://api.github.com/users/vardahoth/gists{/gist_id}","starred_url":"https://api.github.com/users/vardahoth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vardahoth/subscriptions","organizations_url":"https://api.github.com/users/vardahoth/orgs","repos_url":"https://api.github.com/users/vardahoth/repos","events_url":"https://api.github.com/users/vardahoth/events{/privacy}","received_events_url":"https://api.github.com/users/vardahoth/received_events","type":"User","site_admin":false},"body":" Many of the new tests will break the code in FirstAndLastNamesMatchLogic.class. If you agree with the return types for these tests, please accept the changes, and I will start working on modifying the code in FirstAndLastNamesMatchLogic.class to get all these tests to pass.\r\n\r\nIf if there are any tests you don't agree with on the return type, feel free to leave comments on what to change, and if we disagree on any, lets have a discussion :)","created_at":"2018-05-02T07:59:02Z","updated_at":"2018-05-02T17:47:42Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cf7b72787f9ea58458cacd2aea840bb956b0898f","assignee":null,"assignees":[],"requested_reviewers":[{"login":"willkillson","id":26101774,"avatar_url":"https://avatars2.githubusercontent.com/u/26101774?v=4","gravatar_id":"","url":"https://api.github.com/users/willkillson","html_url":"https://github.com/willkillson","followers_url":"https://api.github.com/users/willkillson/followers","following_url":"https://api.github.com/users/willkillson/following{/other_user}","gists_url":"https://api.github.com/users/willkillson/gists{/gist_id}","starred_url":"https://api.github.com/users/willkillson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/willkillson/subscriptions","organizations_url":"https://api.github.com/users/willkillson/orgs","repos_url":"https://api.github.com/users/willkillson/repos","events_url":"https://api.github.com/users/willkillson/events{/privacy}","received_events_url":"https://api.github.com/users/willkillson/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6/commits","review_comments_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6/comments","review_comment_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/comments{/number}","comments_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/6/comments","statuses_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/statuses/a9b92314cf881e60d67b0cfa130d653f20ec7b87","head":{"label":"CodeForTucson:vardahoth/CompareContactParts","ref":"vardahoth/CompareContactParts","sha":"a9b92314cf881e60d67b0cfa130d653f20ec7b87","user":{"login":"CodeForTucson","id":5103176,"avatar_url":"https://avatars0.githubusercontent.com/u/5103176?v=4","gravatar_id":"","url":"https://api.github.com/users/CodeForTucson","html_url":"https://github.com/CodeForTucson","followers_url":"https://api.github.com/users/CodeForTucson/followers","following_url":"https://api.github.com/users/CodeForTucson/following{/other_user}","gists_url":"https://api.github.com/users/CodeForTucson/gists{/gist_id}","starred_url":"https://api.github.com/users/CodeForTucson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CodeForTucson/subscriptions","organizations_url":"https://api.github.com/users/CodeForTucson/orgs","repos_url":"https://api.github.com/users/CodeForTucson/repos","events_url":"https://api.github.com/users/CodeForTucson/events{/privacy}","received_events_url":"https://api.github.com/users/CodeForTucson/received_events","type":"Organization","site_admin":false},"repo":{"id":129995735,"name":"ContactMerge","full_name":"CodeForTucson/ContactMerge","owner":{"login":"CodeForTucson","id":5103176,"avatar_url":"https://avatars0.githubusercontent.com/u/5103176?v=4","gravatar_id":"","url":"https://api.github.com/users/CodeForTucson","html_url":"https://github.com/CodeForTucson","followers_url":"https://api.github.com/users/CodeForTucson/followers","following_url":"https://api.github.com/users/CodeForTucson/following{/other_user}","gists_url":"https://api.github.com/users/CodeForTucson/gists{/gist_id}","starred_url":"https://api.github.com/users/CodeForTucson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CodeForTucson/subscriptions","organizations_url":"https://api.github.com/users/CodeForTucson/orgs","repos_url":"https://api.github.com/users/CodeForTucson/repos","events_url":"https://api.github.com/users/CodeForTucson/events{/privacy}","received_events_url":"https://api.github.com/users/CodeForTucson/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/CodeForTucson/ContactMerge","description":"Programs to merge contact information (names, addresses, phone, etc) for non-profits who manage contacts in disparate systems.","fork":false,"url":"https://api.github.com/repos/CodeForTucson/ContactMerge","forks_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/forks","keys_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/teams","hooks_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/hooks","issue_events_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/events{/number}","events_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/events","assignees_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/assignees{/user}","branches_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/branches{/branch}","tags_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/tags","blobs_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/refs{/sha}","trees_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/statuses/{sha}","languages_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/languages","stargazers_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/stargazers","contributors_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/contributors","subscribers_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/subscribers","subscription_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/subscription","commits_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/commits{/sha}","git_commits_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/commits{/sha}","comments_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/comments{/number}","issue_comment_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/comments{/number}","contents_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/contents/{+path}","compare_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/merges","archive_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/downloads","issues_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues{/number}","pulls_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls{/number}","milestones_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/milestones{/number}","notifications_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/labels{/name}","releases_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/releases{/id}","deployments_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/deployments","created_at":"2018-04-18T03:01:37Z","updated_at":"2018-05-02T04:28:47Z","pushed_at":"2018-05-02T07:59:03Z","git_url":"git://github.com/CodeForTucson/ContactMerge.git","ssh_url":"git@github.com:CodeForTucson/ContactMerge.git","clone_url":"https://github.com/CodeForTucson/ContactMerge.git","svn_url":"https://github.com/CodeForTucson/ContactMerge","homepage":null,"size":336,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":2,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"CodeForTucson:master","ref":"master","sha":"89b3e6c6354f61c7b2c977527fb26e97301031d3","user":{"login":"CodeForTucson","id":5103176,"avatar_url":"https://avatars0.githubusercontent.com/u/5103176?v=4","gravatar_id":"","url":"https://api.github.com/users/CodeForTucson","html_url":"https://github.com/CodeForTucson","followers_url":"https://api.github.com/users/CodeForTucson/followers","following_url":"https://api.github.com/users/CodeForTucson/following{/other_user}","gists_url":"https://api.github.com/users/CodeForTucson/gists{/gist_id}","starred_url":"https://api.github.com/users/CodeForTucson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CodeForTucson/subscriptions","organizations_url":"https://api.github.com/users/CodeForTucson/orgs","repos_url":"https://api.github.com/users/CodeForTucson/repos","events_url":"https://api.github.com/users/CodeForTucson/events{/privacy}","received_events_url":"https://api.github.com/users/CodeForTucson/received_events","type":"Organization","site_admin":false},"repo":{"id":129995735,"name":"ContactMerge","full_name":"CodeForTucson/ContactMerge","owner":{"login":"CodeForTucson","id":5103176,"avatar_url":"https://avatars0.githubusercontent.com/u/5103176?v=4","gravatar_id":"","url":"https://api.github.com/users/CodeForTucson","html_url":"https://github.com/CodeForTucson","followers_url":"https://api.github.com/users/CodeForTucson/followers","following_url":"https://api.github.com/users/CodeForTucson/following{/other_user}","gists_url":"https://api.github.com/users/CodeForTucson/gists{/gist_id}","starred_url":"https://api.github.com/users/CodeForTucson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CodeForTucson/subscriptions","organizations_url":"https://api.github.com/users/CodeForTucson/orgs","repos_url":"https://api.github.com/users/CodeForTucson/repos","events_url":"https://api.github.com/users/CodeForTucson/events{/privacy}","received_events_url":"https://api.github.com/users/CodeForTucson/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/CodeForTucson/ContactMerge","description":"Programs to merge contact information (names, addresses, phone, etc) for non-profits who manage contacts in disparate systems.","fork":false,"url":"https://api.github.com/repos/CodeForTucson/ContactMerge","forks_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/forks","keys_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/teams","hooks_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/hooks","issue_events_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/events{/number}","events_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/events","assignees_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/assignees{/user}","branches_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/branches{/branch}","tags_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/tags","blobs_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/refs{/sha}","trees_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/statuses/{sha}","languages_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/languages","stargazers_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/stargazers","contributors_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/contributors","subscribers_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/subscribers","subscription_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/subscription","commits_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/commits{/sha}","git_commits_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/git/commits{/sha}","comments_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/comments{/number}","issue_comment_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/comments{/number}","contents_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/contents/{+path}","compare_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/merges","archive_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/downloads","issues_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues{/number}","pulls_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls{/number}","milestones_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/milestones{/number}","notifications_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/labels{/name}","releases_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/releases{/id}","deployments_url":"https://api.github.com/repos/CodeForTucson/ContactMerge/deployments","created_at":"2018-04-18T03:01:37Z","updated_at":"2018-05-02T04:28:47Z","pushed_at":"2018-05-02T07:59:03Z","git_url":"git://github.com/CodeForTucson/ContactMerge.git","ssh_url":"git@github.com:CodeForTucson/ContactMerge.git","clone_url":"https://github.com/CodeForTucson/ContactMerge.git","svn_url":"https://github.com/CodeForTucson/ContactMerge","homepage":null,"size":336,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":2,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6"},"html":{"href":"https://github.com/CodeForTucson/ContactMerge/pull/6"},"issue":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/6"},"comments":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/issues/6/comments"},"review_comments":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6/comments"},"review_comment":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/pulls/6/commits"},"statuses":{"href":"https://api.github.com/repos/CodeForTucson/ContactMerge/statuses/a9b92314cf881e60d67b0cfa130d653f20ec7b87"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"mbilodeau6"}}