class US14_32Test(unittest.TestCase): families = None individuals = None famMap = None indMap = None logger = None spousecheck = None def setUp(self): self.families = [] self.individuals = [] self.famMap = {} self.indMap = {} self.logger = Logger() self.seed_data() self.spousecheck = None def tearDown(self): self.families = None self.individuals = None self.famMap = None self.indMap = None self.logger = None self.spousecheck = None def seed_data(self): # seed initial testing data self.families.append({ "HUSB": ["I1"], "WIFE": ["I2"], "CHIL": ["I10"], "MARR": [1, 1, 2009], "NOTE": "JAY/GLORIA FAMILY", "FAM": "F1" }) self.families.append({ "HUSB": ["I1"], "WIFE": ["I3"], "CHIL": ["I4", "I6"], "MARR": [1, 2, 1968], "DIV": [1, 2, 2003], "NOTE": "JAY/DEEDEE", "FAM": "F2" }) self.families.append({ "HUSB": ["I8"], "WIFE": ["I2"], "CHIL": ["I9"], "MARR": [1, 1, 1995], "DIV": [1, 1, 2006], "NOTE": "JAVIER/GLORIA", "FAM": "F3" }) self.families.append({ "HUSB": ["I4", "I5"], "CHIL": ["I14", "I28", "I29", "I30"], "MARR": [1, 1, 2014], "NOTE": "PRITCHETT/TUCKER FAMILY", "FAM": "F4", "WIFE": "-" }) self.families.append({ "HUSB": ["I16"], "WIFE": ["I17"], "CHIL": ["I5", "I14"], "MARR": [1, 1, 1963], "NOTE": "MERLE/BARB FAMILY", "FAM": "F5" }) self.families.append({ "HUSB": ["I7"], "WIFE": ["I6"], "CHIL": ["I20", "I24", "I25"], "MARR": [1, 4, 1993], "NOTE": "PHIL/CLAIRE FAMILY", "FAM": "F6" }) self.families.append({ "HUSB": ["I11"], "WIFE": ["I13"], "CHIL": ["I7"], "MARR": [1, 1, 1965], "NOTE": "FRANK/GRACE FAMILY", "FAM": "F7" }) self.families.append({ "HUSB": ["I11"], "WIFE": ["I12"], "MARR": [5, 4, 2017], "NOTE": "FRANK/LORRAINE FAMILY ", "FAM": "F8" }) self.families.append({ "WIFE": ["I14"], "CHIL": ["I19"], "NOTE": "PAMERON TUCKER FAMILY", "FAM": "F9", "MARR": "-", "HUSB": "-" }) self.families.append({ "HUSB": ["I21"], "WIFE": ["I20"], "CHIL": ["I22", "I23"], "MARR": [8, 3, 2019], "FAM": "F10", "NOTE": "MARSHALL/DUNPHY FAMILY" }) self.families.append({ "HUSB": ["I26"], "WIFE": ["I27"], "CHIL": ["I26"], "MARR": [16, 1, 2014], "NOTE": "MarryToChildFAMILY", "FAM": "F11" }) self.individuals.append({ "NAME": "Jay/Pritchett/", "SEX": "M", "BIRT": [28, 12, 2021], "FAMS": ["F1", "F2"], "AGE": -1, "INDI": "I1" }) self.individuals.append({ "NAME": "Gloria/Unknown/", "SEX": "F", "BIRT": [10, 5, 1971], "FAMS": ["F1", "F3"], "AGE": 49, "INDI": "I2" }) self.individuals.append({ "NAME": "DeDe/Pritchett/", "SEX": "F", "BIRT": [23, 1, 1947], "DEAT": [1, 10, 2100], "FAMS": ["F2"], "AGE": 143, "INDI": "I3" }) self.individuals.append({ "NAME": "Mitchell/Pritchett/", "SEX": "M", "BIRT": [1, 6, 1975], "FAMS": ["F4"], "FAMC": ["F2"], "AGE": 45, "INDI": "I4" }) self.individuals.append({ "NAME": "Cameron/Tucker/", "SEX": "M", "BIRT": [29, 2, 1972], "FAMS": ["F4"], "FAMC": ["F5"], "AGE": 48, "INDI": "I5" }) self.individuals.append({ "NAME": "Claire/Pritchett/", "SEX": "F", "BIRT": [3, 3, 1970], "FAMS": ["F6"], "FAMC": ["F2"], "AGE": 50, "INDI": "I6" }) self.individuals.append({ "NAME": "Phil/Dunphy/", "SEX": "M", "BIRT": [3, 4, 1967], "FAMS": ["F6"], "FAMC": ["F7"], "AGE": 53, "INDI": "I7" }) self.individuals.append({ "NAME": "Javier/Delgado/", "SEX": "M", "BIRT": [1, 1, 1969], "FAMS": ["F3"], "AGE": 51, "INDI": "I8" }) self.individuals.append({ "NAME": "Manny/Delgado/", "SEX": "M", "BIRT": [4, 1, 1999], "FAMC": ["F3"], "AGE": 21, "INDI": "I9" }) self.individuals.append({ "NAME": "Joe/Pritchett/", "SEX": "M", "BIRT": [4, 1, 2013], "FAMC": ["F1"], "NOTE": "Duplicatenameandbirthdayindividual", "AGE": 7, "INDI": "I10" }) self.individuals.append({ "NAME": "Jay/Pritchett/", "SEX": "M", "BIRT": [28, 12, 2021], "AGE": -1, "INDI": "I89" }) self.individuals.append({ "NAME": "Frank/Dunphy/", "SEX": "M", "BIRT": [1, 1, 1945], "DEAT": [14, 1, 2020], "FAMS": ["F7", "F8"], "AGE": 75, "INDI": "I11" }) self.individuals.append({ "NAME": "Lorraine/Dunphy/", "SEX": "F", "BIRT": [1, 1, 1965], "FAMS": ["F8"], "AGE": 55, "INDI": "I12" }) self.individuals.append({ "NAME": "Grace/Dunphy/", "SEX": "F", "BIRT": [1, 1, 1945], "DEAT": [1, 1, 2009], "FAMS": ["F7"], "AGE": 64, "INDI": "I13" }) self.individuals.append({ "NAME": "Lily/Tucker-Pritchett/", "SEX": "F", "BIRT": [19, 2, 2008], "FAMC": ["F4"], "AGE": 12, "INDI": "I14" }) self.individuals.append({ "NAME": "Rexford/Tucker-Pritchett/", "SEX": "M", "BIRT": [1, 4, 2020], "FAMC": ["F4"], "AGE": 0, "INDI": "I14" }) self.individuals.append({ "NAME": "Merle/Tucker/", "SEX": "M", "BIRT": [1, 1, 1943], "FAMS": ["F5"], "AGE": 77, "INDI": "I16" }) self.individuals.append({ "NAME": "Barb/Tucker/", "SEX": "F", "BIRT": [1, 1, 1943], "FAMS": ["F5"], "AGE": 77, "INDI": "I17" }) self.individuals.append({ "NAME": "Pameron/Tucker/", "SEX": "F", "BIRT": [1, 1, 1970], "FAMS": ["F9"], "FAMC": ["F5"], "AGE": 50, "INDI": "I14" }) self.individuals.append({ "NAME": "Calhoun/Tucker/", "SEX": "M", "BIRT": [5, 4, 2017], "FAMC": ["F9"], "AGE": 3, "INDI": "I19" }) self.individuals.append({ "NAME": "Haley/Dunphy/", "SEX": "F", "BIRT": [10, 12, 1993], "FAMS": ["F10"], "FAMC": ["F6"], "AGE": 27, "INDI": "I20" }) self.individuals.append({ "NAME": "Dylan/Marshall/", "SEX": "M", "BIRT": [3, 4, 1991], "FAMS": ["F10"], "AGE": 29, "INDI": "I21" }) self.individuals.append({ "NAME": "Poppy/Marshall/", "SEX": "F", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I22" }) self.individuals.append({ "NAME": "George/Hastings/", "SEX": "M", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I23" }) self.individuals.append({ "NAME": "Alex/Dunphy/", "SEX": "F", "BIRT": [14, 1, 1997], "FAMC": ["F6"], "AGE": 23, "INDI": "I24" }) self.individuals.append({ "NAME": "Luke/Dunphy/", "SEX": "M", "BIRT": [28, 11, 1998], "FAMC": ["F6"], "NOTE": "JAY/GLORIAFAMILY", "AGE": 22, "INDI": "I25" }) self.individuals.append({ "NAME": "Luke/Hastings/", "SEX": "M", "BIRT": [28, 11, 1998], "FAMS": ["F11"], "FAMC": ["F11"], "NOTE": "MarryToChildFAMILY", "AGE": 22, "INDI": "I26" }) self.individuals.append({ "NAME": "Mary/Hastings/", "SEX": "F", "BIRT": [28, 11, 1970], "FAMS": ["F11"], "NOTE": "MarryToChildFAMILY", "AGE": 50, "INDI": "I27" }) self.individuals.append({ "NAME": "Sammy/Tucker-Pritchett/", "SEX": "M", "BIRT": [1, 4, 2020], "FAMC": ["F4"], "AGE": 0, "INDI": "I28" }) self.individuals.append({ "NAME": "Beatrice/Tucker-Pritchett/", "SEX": "M", "BIRT": [1, 4, 2020], "FAMC": ["F4"], "AGE": 0, "INDI": "I29" }) self.individuals.append({ "NAME": "John/Tucker-Pritchett/", "SEX": "M", "BIRT": [1, 4, 2020], "FAMC": ["F4"], "AGE": 0, "INDI": "I30" }) for ind in self.individuals: self.indMap[ind["INDI"]] = ind for fam in self.families: self.famMap[fam["FAM"]] = normalize_family_entry(fam) def test_US32_DefaultCount(self): # should return F4 & F10 family with twins self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._mult_births(32, 2) ret = self.logger.get_logs() self.assertEqual(len(ret), 2, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 32, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' ), ('Warning', 'Family', 32, 'F10 has 2 children with the same birthday (5/8/2019): I22, I23') ] self.assertListEqual(expected_ret, ret, "Expected Return does not match") self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us32_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 2, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 32, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' ), ('Warning', 'Family', 32, 'F10 has 2 children with the same birthday (5/8/2019): I22, I23') ] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_ThreeOrMore(self): # should get the following families with multiple births of 3 or more self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._mult_births(14, 3) ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") def test_ThreeOrMoreText(self): # should get the following families with multiple births of 3 or more self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._mult_births(14, 3) ret = self.logger.get_logs() expected_ret = [( 'Warning', 'Family', 14, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' )] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_TwoorMoreMultBirthsinOneFamiy(self): # add in a set of sixtuplets to family 4 - so they have triplets and twins for i in range(31, 37): self.indMap["I" + str(i)] = { "NAME": "I" + str(i) + "/Tucker-Pritchett/", "SEX": "F", "BIRT": [1, 5, 2019], "FAMC": ["F4"], "NOTE": "Adding Multiple Birth Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) # private routine self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._mult_births(33, 2) ret = self.logger.get_logs() self.assertEqual(len(ret), 3, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 33, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' ), ('Warning', 'Family', 33, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' ), ('Warning', 'Family', 33, 'F10 has 2 children with the same birthday (5/8/2019): I22, I23') ] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # user story 32 self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us32_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 3, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 32, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' ), ('Warning', 'Family', 32, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' ), ('Warning', 'Family', 32, 'F10 has 2 children with the same birthday (5/8/2019): I22, I23') ] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # user story 14 self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us14_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") expected_ret = [( 'Warning', 'Family', 14, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' )] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_FiveorMoreMultBirthsinOneFamiy(self): # add in a set of sixtuplets to family 4 - so they have triplets and twins for i in range(31, 36): self.indMap["I" + str(i)] = { "NAME": "I" + str(i) + "/Tucker-Pritchett/", "SEX": "F", "BIRT": [1, 5, 2019], "FAMC": ["F4"], "NOTE": "Adding Multiple Birth Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) # user story 14 self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us14_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 0, "Did not get the expected results") expected_ret = [] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # user story 32 self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us32_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 3, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 32, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' ), ('Warning', 'Family', 32, 'F4 has 5 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35' ), ('Warning', 'Family', 32, 'F10 has 2 children with the same birthday (5/8/2019): I22, I23') ] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_SixorMoreMultBirthsinOneFamiy(self): # add in a set of sixtuplets to family 4 - so they have triplets and twins for i in range(31, 37): self.indMap["I" + str(i)] = { "NAME": "I" + str(i) + "/Tucker-Pritchett/", "SEX": "F", "BIRT": [1, 5, 2019], "FAMC": ["F4"], "NOTE": "Adding Multiple Birth Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._mult_births(14, 6) ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") expected_ret = [( 'Warning', 'Family', 14, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' )] self.assertListEqual(expected_ret, ret, "Expected Return does not match") self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us14_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") expected_ret = [( 'Warning', 'Family', 14, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' )] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # user story 32 self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us32_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 3, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 32, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' ), ('Warning', 'Family', 32, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' ), ('Warning', 'Family', 32, 'F10 has 2 children with the same birthday (5/8/2019): I22, I23') ] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_SevenorMoreMultBirthsinOneFamiy(self): # add in a set of sixtuplets to family 4 - so they have triplets and twins # won't find a match on 7 for i in range(31, 37): self.indMap["I" + str(i)] = { "NAME": "I" + str(i) + "/Tucker-Pritchett/", "SEX": "F", "BIRT": [1, 5, 2019], "FAMC": ["F4"], "NOTE": "Adding Multiple Birth Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._mult_births(14, 7) ret = self.logger.get_logs() self.assertEqual(len(ret), 0, "Did not get the expected results") expected_ret = [] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # user story 14 self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us14_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 14, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' ), ] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # user story 32 self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us32_mult_births() ret = self.logger.get_logs() self.assertEqual(len(ret), 3, "Did not get the expected results") expected_ret = [ ('Warning', 'Family', 32, 'F4 has 3 children with the same birthday (4/1/2020): I28, I29, I30' ), ('Warning', 'Family', 32, 'F4 has 6 children with the same birthday (5/1/2019): I31, I32, I33, I34, I35, I36' ), ('Warning', 'Family', 32, 'F10 has 2 children with the same birthday (5/8/2019): I22, I23') ] self.assertListEqual(expected_ret, ret, "Expected Return does not match")
class US15Test(unittest.TestCase): families = None individuals = None famMap = None indMap = None logger = None spousecheck = None parentId2Children = None def setUp(self): self.families = [] self.individuals = [] self.famMap = {} self.indMap = {} self.logger = Logger() self.seed_data() self.spousecheck = None self.parentId2Children = None def tearDown(self): self.families = None self.individuals = None self.famMap = None self.indMap = None self.logger = None self.spousecheck = None self.parentId2Children = None def seed_data(self): # seed initial testing data self.families.append({ "HUSB": ["I1"], "WIFE": ["I2"], "CHIL": ["I10"], "MARR": [1, 1, 2009], "NOTE": "JAY/GLORIA FAMILY", "FAM": "F1" }) self.families.append({ "HUSB": ["I1"], "WIFE": ["I3"], "CHIL": ["I4", "I6"], "MARR": [1, 2, 1968], "DIV": [1, 2, 2003], "NOTE": "JAY/DEEDEE", "FAM": "F2" }) self.families.append({ "HUSB": ["I8"], "WIFE": ["I2"], "CHIL": ["I9"], "MARR": [1, 1, 1995], "DIV": [1, 1, 2006], "NOTE": "JAVIER/GLORIA", "FAM": "F3" }) self.families.append({ "HUSB": ["I4", "I5"], "CHIL": ["I14", "I15", "I4", "I5"], "MARR": [1, 1, 2014], "NOTE": "PRITCHETT/TUCKER FAMILY", "FAM": "F4", "WIFE": "-" }) self.families.append({ "HUSB": ["I16"], "WIFE": ["I17"], "CHIL": ["I5", "I15"], "MARR": [1, 1, 1963], "NOTE": "MERLE/BARB FAMILY", "FAM": "F5" }) self.families.append({ "HUSB": ["I7"], "WIFE": ["I6"], "CHIL": ["I20", "I24", "I25"], "MARR": [1, 4, 1993], "NOTE": "PHIL/CLAIRE FAMILY", "FAM": "F6" }) self.families.append({ "HUSB": ["I11"], "WIFE": ["I13"], "CHIL": ["I7"], "MARR": [1, 1, 1965], "NOTE": "FRANK/GRACE FAMILY", "FAM": "F7" }) self.families.append({ "HUSB": ["I11"], "WIFE": ["I12"], "MARR": [5, 4, 2017], "NOTE": "FRANK/LORRAINE FAMILY ", "FAM": "F8" }) self.families.append({ "WIFE": ["I15"], "CHIL": ["I19"], "NOTE": "PAMERON TUCKER FAMILY", "FAM": "F9", "MARR": "-", "HUSB": "-" }) self.families.append({ "HUSB": ["I21"], "WIFE": ["I20"], "CHIL": ["I22", "I23"], "MARR": [8, 3, 2019], "FAM": "F10", "NOTE": "MARSHALL/DUNPHY FAMILY" }) self.families.append({ "HUSB": ["I26"], "WIFE": ["I27"], "CHIL": ["I26"], "MARR": [16, 1, 2015], "NOTE": "MarryToChildFAMILY", "FAM": "F11" }) self.individuals.append({ "NAME": "Jay/Pritchett/", "SEX": "M", "BIRT": [28, 12, 2021], "FAMS": ["F1", "F2"], "AGE": -1, "INDI": "I1" }) self.individuals.append({ "NAME": "Gloria/Unknown/", "SEX": "F", "BIRT": [10, 5, 1971], "FAMS": ["F1", "F3"], "AGE": 49, "INDI": "I2" }) self.individuals.append({ "NAME": "DeDe/Pritchett/", "SEX": "F", "BIRT": [23, 1, 1947], "DEAT": [1, 10, 2100], "FAMS": ["F2"], "AGE": 153, "INDI": "I3" }) self.individuals.append({ "NAME": "Mitchell/Pritchett/", "SEX": "M", "BIRT": [1, 6, 1975], "FAMS": ["F4"], "FAMC": ["F2"], "AGE": 45, "INDI": "I4" }) self.individuals.append({ "NAME": "Cameron/Tucker/", "SEX": "M", "BIRT": [29, 2, 1972], "FAMS": ["F4"], "FAMC": ["F5"], "AGE": 48, "INDI": "I5" }) self.individuals.append({ "NAME": "Claire/Pritchett/", "SEX": "F", "BIRT": [3, 3, 1970], "FAMS": ["F6"], "FAMC": ["F2"], "AGE": 50, "INDI": "I6" }) self.individuals.append({ "NAME": "Phil/Dunphy/", "SEX": "M", "BIRT": [3, 4, 1967], "FAMS": ["F6"], "FAMC": ["F7"], "AGE": 53, "INDI": "I7" }) self.individuals.append({ "NAME": "Javier/Delgado/", "SEX": "M", "BIRT": [1, 1, 1969], "FAMS": ["F3"], "AGE": 51, "INDI": "I8" }) self.individuals.append({ "NAME": "Manny/Delgado/", "SEX": "M", "BIRT": [4, 1, 1999], "FAMC": ["F3"], "AGE": 21, "INDI": "I9" }) self.individuals.append({ "NAME": "Joe/Pritchett/", "SEX": "M", "BIRT": [4, 1, 2013], "FAMC": ["F1"], "NOTE": "Duplicatenameandbirthdayindividual", "AGE": 7, "INDI": "I10" }) self.individuals.append({ "NAME": "Jay/Pritchett/", "SEX": "M", "BIRT": [28, 12, 2021], "AGE": -1, "INDI": "I89" }) self.individuals.append({ "NAME": "Frank/Dunphy/", "SEX": "M", "BIRT": [1, 1, 1945], "DEAT": [15, 1, 2020], "FAMS": ["F7", "F8"], "AGE": 75, "INDI": "I11" }) self.individuals.append({ "NAME": "Lorraine/Dunphy/", "SEX": "F", "BIRT": [1, 1, 1965], "FAMS": ["F8"], "AGE": 55, "INDI": "I12" }) self.individuals.append({ "NAME": "Grace/Dunphy/", "SEX": "F", "BIRT": [1, 1, 1945], "DEAT": [1, 1, 2009], "FAMS": ["F7"], "AGE": 64, "INDI": "I13" }) self.individuals.append({ "NAME": "Lily/Tucker-Pritchett/", "SEX": "F", "BIRT": [19, 2, 2008], "FAMC": ["F4"], "AGE": 12, "INDI": "I14" }) self.individuals.append({ "NAME": "Rexford/Tucker-Pritchett/", "SEX": "M", "BIRT": [1, 4, 2020], "FAMC": ["F4"], "AGE": 0, "INDI": "I15" }) self.individuals.append({ "NAME": "Merle/Tucker/", "SEX": "M", "BIRT": [1, 1, 1943], "FAMS": ["F5"], "AGE": 77, "INDI": "I16" }) self.individuals.append({ "NAME": "Barb/Tucker/", "SEX": "F", "BIRT": [1, 1, 1943], "FAMS": ["F5"], "AGE": 77, "INDI": "I17" }) self.individuals.append({ "NAME": "Pameron/Tucker/", "SEX": "F", "BIRT": [1, 1, 1970], "FAMS": ["F9"], "FAMC": ["F5"], "AGE": 50, "INDI": "I15" }) self.individuals.append({ "NAME": "Calhoun/Tucker/", "SEX": "M", "BIRT": [5, 4, 2017], "FAMC": ["F9"], "AGE": 3, "INDI": "I19" }) self.individuals.append({ "NAME": "Haley/Dunphy/", "SEX": "F", "BIRT": [10, 12, 1993], "FAMS": ["F10"], "FAMC": ["F6"], "AGE": 27, "INDI": "I20" }) self.individuals.append({ "NAME": "Dylan/Marshall/", "SEX": "M", "BIRT": [3, 4, 1991], "FAMS": ["F10"], "AGE": 29, "INDI": "I21" }) self.individuals.append({ "NAME": "Poppy/Marshall/", "SEX": "F", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I22" }) self.individuals.append({ "NAME": "George/Hastings/", "SEX": "M", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I23" }) self.individuals.append({ "NAME": "Alex/Dunphy/", "SEX": "F", "BIRT": [14, 1, 1997], "FAMC": ["F6"], "AGE": 23, "INDI": "I24" }) self.individuals.append({ "NAME": "Luke/Dunphy/", "SEX": "M", "BIRT": [28, 11, 1998], "FAMC": ["F6"], "NOTE": "JAY/GLORIAFAMILY", "AGE": 22, "INDI": "I25" }) self.individuals.append({ "NAME": "Luke/Hastings/", "SEX": "M", "BIRT": [28, 11, 1998], "FAMS": ["F11"], "FAMC": ["F11"], "NOTE": "MarryToChildFAMILY", "AGE": 22, "INDI": "I26" }) self.individuals.append({ "NAME": "Mary/Hastings/", "SEX": "F", "BIRT": [28, 11, 1970], "FAMS": ["F11"], "NOTE": "MarryToChildFAMILY", "AGE": 50, "INDI": "I27" }) for ind in self.individuals: self.indMap[ind["INDI"]] = ind for fam in self.families: self.famMap[fam["FAM"]] = normalize_family_entry(fam) def test_US15_DefaultCount(self): # should return 10 families with siblings self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count() ret = self.logger.get_logs() self.assertEqual(len(ret), 10, "Did not get the expected results") def test_US15_DefaultOneText(self): # should get the following families with siblings self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count() expected_ret = [ ('Warning', 'Family', 15, 'Family F1 has 1 or more children (1)'), ('Warning', 'Family', 15, 'Family F2 has 1 or more children (2)'), ('Warning', 'Family', 15, 'Family F3 has 1 or more children (1)'), ('Warning', 'Family', 15, 'Family F4 has 1 or more children (4)'), ('Warning', 'Family', 15, 'Family F5 has 1 or more children (2)'), ('Warning', 'Family', 15, 'Family F6 has 1 or more children (3)'), ('Warning', 'Family', 15, 'Family F7 has 1 or more children (1)'), ('Warning', 'Family', 15, 'Family F9 has 1 or more children (1)'), ('Warning', 'Family', 15, 'Family F10 has 1 or more children (2)'), ('Warning', 'Family', 15, 'Family F11 has 1 or more children (1)') ] ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US15_TwoOrMore(self): # should get 5 families with 2 or more siblings self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(2) ret = self.logger.get_logs() self.assertEqual(len(ret), 5, "Did not get the expected results") def test_US15_TwoOrMoreText(self): # should get 5 families with 2 or more siblings expected_ret = [ ('Warning', 'Family', 15, 'Family F2 has 2 or more children (2)'), ('Warning', 'Family', 15, 'Family F4 has 2 or more children (4)'), ('Warning', 'Family', 15, 'Family F5 has 2 or more children (2)'), ('Warning', 'Family', 15, 'Family F6 has 2 or more children (3)'), ('Warning', 'Family', 15, 'Family F10 has 2 or more children (2)') ] self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(2) ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US15_ThreeOrMore(self): # should get 2 families with 3 or more siblings self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(3) ret = self.logger.get_logs() self.assertEqual(len(ret), 2, "Did not get the expected results") def test_US15_ThreeOrMoreText(self): # should get 2 families with 3 or more siblings expected_ret = [ ('Warning', 'Family', 15, 'Family F4 has 3 or more children (4)'), ('Warning', 'Family', 15, 'Family F6 has 3 or more children (3)') ] self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(3) ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US15_FourOrMore(self): # should get 1 family with 4 or more siblings self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(4) ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") def test_US15_FourOrMoreText(self): # should get 1 family with 4 or more siblings expected_ret = [('Warning', 'Family', 15, 'Family F4 has 4 or more children (4)')] self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(4) ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US15_FiveOrMore(self): # should get zero family with 5 or more siblings self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(5) ret = self.logger.get_logs() self.assertEqual(len(ret), 0, "Did not get the expected results") def test_US15_FiveOrMoreText(self): # should get zero family with 5 or more siblings expected_ret = [] self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck._sibling_count(5) ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US15_FifteenorMore(self): # add in siblings to family 4 to make 15 - should get one family to match for i in range(28, 39): self.indMap["I"+str(i)] = { "NAME": "I" + str(i) + "/Hastings/", "SEX": "F", "BIRT": [28, 11, 1970], "FAMC": ["F4"], "NOTE": "Adding Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us15_sibling_count() ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") def test_US15_FifteenorMoreText(self): # add in siblings to family 4 to make 15 - should get one family to match for i in range(28, 39): self.indMap["I"+str(i)] = { "NAME": "I" + str(i) + "/Hastings/", "SEX": "F", "BIRT": [28, 11, 1970], "FAMC": ["F4"], "NOTE": "Adding Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) expected_ret = [('Warning', 'Family', 15, 'Family F4 has 15 or more children (15)')] self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us15_sibling_count() ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US15_SixteenorMore(self): # add in siblings to family 4 to make 15 - should get one family to match 15 or greater for i in range(28, 40): self.indMap["I"+str(i)] = { "NAME": "I" + str(i) + "/Hastings/", "SEX": "F", "BIRT": [28, 11, 1970], "FAMC": ["F4"], "NOTE": "Adding Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us15_sibling_count() expected_ret = [('Warning', 'Family', 15, 'Family F4 has 15 or more children (16)')] ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US15_FourteenorMore(self): # add in siblings to family 4 to make 14 - should get zero family to match 15 or greater for i in range(28, 38): self.indMap["I"+str(i)] = { "NAME": "I" + str(i) + "/Hastings/", "SEX": "F", "BIRT": [28, 11, 1970], "FAMC": ["F4"], "NOTE": "Adding Child to Family F4", "INDI": "I" + str(i) } self.famMap["F4"]["CHIL"].append("I" + str(i)) expected_ret = [] self.logger.clear_logs() for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us15_sibling_count() ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match")
class US18Test(unittest.TestCase): families = None individuals = None famMap = None indMap = None logger = None spousecheck = None parentId2Children = None def setUp(self): self.families = [] self.individuals = [] self.famMap = {} self.indMap = {} self.logger = Logger() self.seed_data() self.spousecheck = None self.parentId2Chidren = None def tearDown(self): self.families = None self.individuals = None self.famMap = None self.indMap = None self.logger = None self.spousecheck = None self.parentId2Chidren = None def seed_data(self): # seed initial test data self.families.append({ "HUSB": ["I1"], "WIFE": ["I2"], "CHIL": ["I10"], "MARR": [1, 1, 2009], "NOTE": "JAY/GLORIA FAMILY", "FAM": "F1" }) self.families.append({ "HUSB": ["I1"], "WIFE": ["I3"], "CHIL": ["I4", "I6"], "MARR": [1, 1, 2025], "DIV": [28, 6, 2020], "NOTE": "JAY/DEEDEE", "FAM": "F2" }) self.families.append({ "HUSB": ["I8"], "WIFE": ["I2"], "CHIL": ["I9"], "MARR": [1, 1, 1995], "DIV": [1, 1, 2006], "NOTE": "JAVIER/GLORIA", "FAM": "F3" }) self.families.append({ "HUSB": ["I4", "I5"], "CHIL": ["I14", "I15", "I4", "I5"], "MARR": [1, 1, 2014], "NOTE": "PRITCHETT/TUCKER FAMILY", "FAM": "F4", "WIFE": "-" }) self.families.append({ "HUSB": ["I16"], "WIFE": ["I17"], "CHIL": ["I5", "I18"], "MARR": [1, 1, 1963], "NOTE": "MERLE/BARB FAMILY", "FAM": "F5" }) self.families.append({ "HUSB": ["I7"], "WIFE": ["I6"], "CHIL": ["I20", "I24", "I25"], "MARR": [1, 4, 1993], "NOTE": "PHIL/CLAIRE FAMILY", "FAM": "F6" }) self.families.append({ "HUSB": ["I11"], "WIFE": ["I13"], "CHIL": ["I7"], "MARR": [1, 1, 1965], "NOTE": "FRANK/GRACE FAMILY", "FAM": "F7" }) self.families.append({ "HUSB": ["I11"], "WIFE": ["I12"], "MARR": [5, 4, 2017], "NOTE": "FRANK/LORRAINE FAMILY ", "FAM": "F8" }) self.families.append({ "WIFE": ["I18"], "CHIL": ["I19"], "NOTE": "PAMERON TUCKER FAMILY", "FAM": "F9", "MARR": "-", "HUSB": "-" }) self.families.append({ "HUSB": ["I21"], "WIFE": ["I20"], "CHIL": ["I22", "I23"], "MARR": [8, 3, 2019], "FAM": "F10", "NOTE": "MARSHALL/DUNPHY FAMILY" }) self.families.append({ "HUSB": ["I26"], "WIFE": ["I27"], "CHIL": ["I26"], "MARR": [16, 1, 2018], "NOTE": "MarryToChildFAMILY", "FAM": "F11" }) self.individuals.append({ "NAME": "Jay/Pritchett/", "SEX": "M", "BIRT": [28, 12, 2021], "FAMS": ["F1", "F2"], "AGE": -1, "INDI": "I1" }) self.individuals.append({ "NAME": "Gloria/Unknown/", "SEX": "F", "BIRT": [10, 5, 1971], "FAMS": ["F1", "F3"], "AGE": 49, "INDI": "I2" }) self.individuals.append({ "NAME": "DeDe/Pritchett/", "SEX": "F", "BIRT": [23, 1, 1947], "DEAT": [1, 10, 2100], "FAMS": ["F2"], "AGE": 153, "INDI": "I3" }) self.individuals.append({ "NAME": "Mitchell/Pritchett/", "SEX": "M", "BIRT": [1, 6, 1975], "FAMS": ["F4"], "FAMC": ["F2"], "AGE": 45, "INDI": "I4" }) self.individuals.append({ "NAME": "Cameron/Tucker/", "SEX": "M", "BIRT": [29, 2, 1972], "FAMS": ["F4"], "FAMC": ["F5"], "AGE": 48, "INDI": "I5" }) self.individuals.append({ "NAME": "Claire/Pritchett/", "SEX": "F", "BIRT": [3, 3, 1970], "FAMS": ["F6"], "FAMC": ["F2"], "AGE": 50, "INDI": "I6" }) self.individuals.append({ "NAME": "Phil/Dunphy/", "SEX": "M", "BIRT": [3, 4, 1967], "FAMS": ["F6"], "FAMC": ["F7"], "AGE": 53, "INDI": "I7" }) self.individuals.append({ "NAME": "Javier/Delgado/", "SEX": "M", "BIRT": [1, 1, 1969], "FAMS": ["F3"], "AGE": 51, "INDI": "I8" }) self.individuals.append({ "NAME": "Manny/Delgado/", "SEX": "M", "BIRT": [4, 1, 1999], "FAMC": ["F3"], "AGE": 21, "INDI": "I9" }) self.individuals.append({ "NAME": "Joe/Pritchett/", "SEX": "M", "BIRT": [4, 1, 2013], "FAMC": ["F1"], "NOTE": "Duplicatenameandbirthdayindividual", "AGE": 7, "INDI": "I10" }) self.individuals.append({ "NAME": "Jay/Pritchett/", "SEX": "M", "BIRT": [28, 12, 2021], "AGE": -1, "INDI": "I89" }) self.individuals.append({ "NAME": "Frank/Dunphy/", "SEX": "M", "BIRT": [1, 1, 1945], "DEAT": [15, 1, 2020], "FAMS": ["F7", "F8"], "AGE": 75, "INDI": "I11" }) self.individuals.append({ "NAME": "Lorraine/Dunphy/", "SEX": "F", "BIRT": [1, 1, 1965], "FAMS": ["F8"], "AGE": 55, "INDI": "I12" }) self.individuals.append({ "NAME": "Grace/Dunphy/", "SEX": "F", "BIRT": [1, 1, 1945], "DEAT": [1, 1, 2009], "FAMS": ["F7"], "AGE": 64, "INDI": "I13" }) self.individuals.append({ "NAME": "Lily/Tucker-Pritchett/", "SEX": "F", "BIRT": [19, 2, 2008], "FAMC": ["F4"], "AGE": 12, "INDI": "I14" }) self.individuals.append({ "NAME": "Rexford/Tucker-Pritchett/", "SEX": "M", "BIRT": [1, 4, 2020], "FAMC": ["F4"], "AGE": 0, "INDI": "I15" }) self.individuals.append({ "NAME": "Merle/Tucker/", "SEX": "M", "BIRT": [1, 1, 1943], "FAMS": ["F5"], "AGE": 77, "INDI": "I16" }) self.individuals.append({ "NAME": "Barb/Tucker/", "SEX": "F", "BIRT": [1, 1, 1943], "FAMS": ["F5"], "AGE": 77, "INDI": "I17" }) self.individuals.append({ "NAME": "Pameron/Tucker/", "SEX": "F", "BIRT": [1, 1, 1970], "FAMS": ["F9"], "FAMC": ["F5"], "AGE": 50, "INDI": "I18" }) self.individuals.append({ "NAME": "Calhoun/Tucker/", "SEX": "M", "BIRT": [5, 4, 2017], "FAMC": ["F9"], "AGE": 3, "INDI": "I19" }) self.individuals.append({ "NAME": "Haley/Dunphy/", "SEX": "F", "BIRT": [10, 12, 1993], "FAMS": ["F10"], "FAMC": ["F6"], "AGE": 27, "INDI": "I20" }) self.individuals.append({ "NAME": "Dylan/Marshall/", "SEX": "M", "BIRT": [3, 4, 1991], "FAMS": ["F10"], "AGE": 29, "INDI": "I21" }) self.individuals.append({ "NAME": "Poppy/Marshall/", "SEX": "F", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I22" }) self.individuals.append({ "NAME": "George/Hastings/", "SEX": "M", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I23" }) self.individuals.append({ "NAME": "Alex/Dunphy/", "SEX": "F", "BIRT": [14, 1, 1997], "FAMC": ["F6"], "AGE": 23, "INDI": "I24" }) self.individuals.append({ "NAME": "Luke/Dunphy/", "SEX": "M", "BIRT": [28, 11, 1998], "FAMC": ["F6"], "NOTE": "JAY/GLORIAFAMILY", "AGE": 22, "INDI": "I25" }) self.individuals.append({ "NAME": "Luke/Hastings/", "SEX": "M", "BIRT": [28, 11, 1998], "FAMS": ["F11"], "FAMC": ["F11"], "NOTE": "MarryToChildFAMILY", "AGE": 22, "INDI": "I26" }) self.individuals.append({ "NAME": "Mary/Hastings/", "SEX": "F", "BIRT": [28, 11, 1970], "FAMS": ["F11"], "NOTE": "MarryToChildFAMILY", "AGE": 50, "INDI": "I27" }) for ind in self.individuals: self.indMap[ind["INDI"]] = ind for fam in self.families: self.famMap[fam["FAM"]] = normalize_family_entry(fam) def test_US18_1family(self): # should to get 1 match self.logger.clear_logs() self.parentId2Children = getParent2ChildrenMap(self.famMap) for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us18_no_siblingmarriages(self.parentId2Children) ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") def test_US18_1family_text(self): # should find 1 match and the following expected result self.logger.clear_logs() self.parentId2Children = getParent2ChildrenMap(self.famMap) for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us18_no_siblingmarriages(self.parentId2Children) ret = self.logger.get_logs() str1 = "F4 has siblings as parents: ['I4', 'I5']" expected_ret = [('Error', 'Family', 18, str1)] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US18_half_sibling(self): # should get 2 matches # testing half sibling self.famMap["F1"] = { "HUSB": ["I1"], "WIFE": ["I2"], "CHIL": ["I10", "I1"], "MARR": [1, 1, 2009], "NOTE": "JAY/GLORIA FAMILY", "FAM": "F1" } self.famMap["F3"] = { "HUSB": ["I8"], "WIFE": ["I2"], "CHIL": ["I9", "I2"], "MARR": [1, 1, 1995], "DIV": [1, 1, 2006], "NOTE": "JAVIER/GLORIA", "FAM": "F3" } self.logger.clear_logs() self.parentId2Children = getParent2ChildrenMap(self.famMap) for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us18_no_siblingmarriages(self.parentId2Children) ret = self.logger.get_logs() self.assertEqual(len(ret), 2, "Did not get the expected results") def test_US18_half_sibling_text(self): # testing half sibling self.famMap["F1"] = { "HUSB": ["I1"], "WIFE": ["I2"], "CHIL": ["I10", "I1"], "MARR": [1, 1, 2009], "NOTE": "JAY/GLORIA FAMILY", "FAM": "F1" } self.famMap["F3"] = { "HUSB": ["I8"], "WIFE": ["I2"], "CHIL": ["I9", "I2"], "MARR": [1, 1, 1995], "DIV": [1, 1, 2006], "NOTE": "JAVIER/GLORIA", "FAM": "F3" } self.logger.clear_logs() self.parentId2Children = getParent2ChildrenMap(self.famMap) for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us18_no_siblingmarriages(self.parentId2Children) ret = self.logger.get_logs() str1 = "F1 has siblings as parents: ['I1', 'I2']" str2 = "F4 has siblings as parents: ['I4', 'I5']" expected_ret = [('Error', 'Family', 18, str1), ('Error', 'Family', 18, str2)] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # def test_US18_nomatches_text(self): # Remove the family where parent is married to a child self.famMap["F4"] = { "HUSB": ["I4", "I5"], "CHIL": ["I14", "I15"], "MARR": [1, 1, 2014], "NOTE": "PRITCHETT/TUCKER FAMILY", "FAM": "F4", "WIFE": [] } self.logger.clear_logs() self.parentId2Children = getParent2ChildrenMap(self.famMap) for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us18_no_siblingmarriages(self.parentId2Children) ret = self.logger.get_logs() expected_ret = [] self.assertListEqual(expected_ret, ret, "Expected Return does not match") # def test_US18_nomatches(self): self.famMap["F4"] = { "HUSB": ["I4", "I5"], "CHIL": ["I14", "I15"], "MARR": [1, 1, 2014], "NOTE": "PRITCHETT/TUCKER FAMILY", "FAM": "F4", "WIFE": [] } # Remove the family where parent is married to a child self.logger.clear_logs() self.parentId2Children = getParent2ChildrenMap(self.famMap) for id, fam in self.famMap.items(): spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us18_no_siblingmarriages(self.parentId2Children) ret = self.logger.get_logs() self.assertEqual(len(ret), 0, "Did not get the expected results")
class US39Test(unittest.TestCase): families = None individuals = None famMap = None indMap = None logger = None spousecheck = None def setUp(self): self.families = [] self.individuals = [] self.famMap = {} self.indMap = {} self.logger = Logger() self.seed_data() self.spousecheck = None def tearDown(self): self.families = None self.individuals = None self.famMap = None self.indMap = None self.logger = None self.spousecheck = None def seed_data(self): # seed initial testing data self.families.append({ "HUSB": ["I4", "I5"], "CHIL": ["I14", "I15"], "MARR": [1, 1, 2014], "NOTE": "PRITCHETT/TUCKER FAMILY", "FAM": "F4", "WIFE": "-" }) self.families.append({ "HUSB": ["I11"], "WIFE": ["I12"], "MARR": [5, 4, 2039], "NOTE": "FRANK/LORRAINE FAMILY ", "FAM": "F8" }) self.families.append({ "HUSB": ["I21"], "WIFE": ["I20"], "CHIL": ["I22", "I23"], "MARR": [8, 3, 2019], "FAM": "F10", "NOTE": "MARSHALL/DUNPHY FAMILY" }) self.individuals.append({ "NAME": "Frank/Dunphy/", "SEX": "M", "BIRT": [1, 1, 1945], "DEAT": [15, 1, 2020], "FAMS": ["F7", "F8"], "AGE": 75, "INDI": "I11" }) self.individuals.append({ "NAME": "Mitchell/Pritchett/", "SEX": "M", "BIRT": [1, 6, 1975], "FAMS": ["F4"], "FAMC": ["F2"], "AGE": 45, "INDI": "I4" }) self.individuals.append({ "NAME": "Cameron/Tucker/", "SEX": "M", "BIRT": [29, 2, 1972], "FAMS": ["F4"], "FAMC": ["F5"], "AGE": 48, "INDI": "I5" }) self.individuals.append({ "NAME": "Lorraine/Dunphy/", "SEX": "F", "BIRT": [1, 1, 1965], "FAMS": ["F8"], "AGE": 55, "INDI": "I12" }) self.individuals.append({ "NAME": "Lily/Tucker-Pritchett/", "SEX": "F", "BIRT": [19, 2, 2008], "FAMC": ["F4"], "AGE": 12, "INDI": "I14" }) self.individuals.append({ "NAME": "Rexford/Tucker-Pritchett/", "SEX": "M", "BIRT": [1, 4, 2020], "FAMC": ["F4"], "AGE": 0, "INDI": "I15" }) self.individuals.append({ "NAME": "Haley/Dunphy/", "SEX": "F", "BIRT": [10, 12, 1993], "FAMS": ["F10"], "FAMC": ["F6"], "AGE": 27, "INDI": "I20" }) self.individuals.append({ "NAME": "Dylan/Marshall/", "SEX": "M", "BIRT": [3, 4, 1991], "FAMS": ["F10"], "AGE": 29, "INDI": "I21" }) self.individuals.append({ "NAME": "Poppy/Marshall/", "SEX": "F", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I22" }) self.individuals.append({ "NAME": "George/Hastings/", "SEX": "M", "BIRT": [8, 5, 2019], "FAMC": ["F10"], "AGE": 1, "INDI": "I23" }) for ind in self.individuals: self.indMap[ind["INDI"]] = ind for fam in self.families: self.famMap[fam["FAM"]] = fam def test_US39_noMatches(self): # should no matches self.logger.clear_logs() for id, fam in self.famMap.items(): # overwrite all Marriages as one day ago dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() ret = self.logger.get_logs() self.assertEqual(len(ret), 0, "Did not get the expected results") def test_US39_1dayLaterLen(self): # should no matches self.logger.clear_logs() for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=1) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") def test_US39_1dayLater(self): # should no matches self.logger.clear_logs() for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=1) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() # should find 1 match and the following expected result ret = self.logger.get_logs() dtstr = 'FAMILY (F10) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret = [('Info', 'Family', 39, dtstr)] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US39_30daysLaterLen(self): # should no matches self.logger.clear_logs() for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=30) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") def test_US39_30daysLater(self): # should no matches self.logger.clear_logs() for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=30) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() # should find 1 match and the following expected result ret = self.logger.get_logs() dtstr = 'FAMILY (F10) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret = [('Info', 'Family', 39, dtstr)] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US39_31daysLaterLen(self): # should no matches self.logger.clear_logs() for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=31) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() ret = self.logger.get_logs() self.assertEqual(len(ret), 0, "Did not get the expected results") def test_US39_31daysLater(self): # should no matches self.logger.clear_logs() for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=31) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() # should find 1 match and the following expected result ret = self.logger.get_logs() expected_ret = [] self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US39_2DatesUpcomingLen(self): # should get 2 matches self.logger.clear_logs() expected_ret = [] for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=30) dtstr = 'FAMILY (F10) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret.append(('Info', 'Family', 39, dtstr)) elif id == "F4": dt = datetime.date.today() + datetime.timedelta(days=1) dtstr = 'FAMILY (F4) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret.append(('Info', 'Family', 39, dtstr)) else: # overwrite all Marriages as one day ago dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() ret = self.logger.get_logs() self.assertEqual(len(ret), 2, "Did not get the expected results") def test_US39_2DatesUpcoming(self): # should get 2 matches self.logger.clear_logs() expected_ret = [] for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=30) dtstr = 'FAMILY (F10) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret.append(('Info', 'Family', 39, dtstr)) elif id == "F4": dt = datetime.date.today() + datetime.timedelta(days=1) dtstr = 'FAMILY (F4) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret.append(('Info', 'Family', 39, dtstr)) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() # should find 1 match and the following expected result ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match") def test_US39_2DatesUpcoming1WidowerLen(self): # should no matches self.logger.clear_logs() expected_ret = [] for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=30) dtstr = 'FAMILY (F10) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret.append(('Info', 'Family', 39, dtstr)) elif id == "F8": dt = datetime.date.today() + datetime.timedelta(days=1) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() ret = self.logger.get_logs() self.assertEqual(len(ret), 1, "Did not get the expected results") def test_US39_2DatesUpcoming1Widower(self): self.logger.clear_logs() expected_ret = [] for id, fam in self.famMap.items(): if id == "F10": dt = datetime.date.today() + datetime.timedelta(days=30) dtstr = 'FAMILY (F10) has an upcoming anniversary: ' + str( dt.month) + '/' + str(dt.day) + '/' + str(dt.year) expected_ret.append(('Info', 'Family', 39, dtstr)) elif id == "F8": dt = datetime.date.today() + datetime.timedelta(days=1) else: dt = datetime.date.today() - datetime.timedelta(days=1) fam["MARR"] = [dt.day, dt.month, dt.year] spousecheck = spouseCrossChecker(self.logger, fam, self.indMap) spousecheck.us39_upcoming_anniversaries() ret = self.logger.get_logs() self.assertListEqual(expected_ret, ret, "Expected Return does not match")
class SpouseTest(unittest.TestCase): def setUp(self) -> None: self.individuals = {} self.seed_data() self.record = Logger() def tearDown(self) -> None: self.individuals = None self.record = None def seed_data(self): # seed initial testing data self.individuals["I1"] = { "NAME": "Spencer Hastings", "FAMS": ["F1"], "DEAT": [1, 1, 2009], "INDI": "I1" } self.individuals["I2"] = { "NAME": "Blake Hastings", "FAMS": ["F1"], "BIRT": [1, 1, 1976], "INDI": "I2" } def test_divBeforeDeat(self): fam1 = { "FAM": "F1", "HUSB": ["I1", "I2"], "WIFE": [], "DIV": [1, 1, 2020] } fam2 = { "FAM": "F1", "HUSB": [], "WIFE": ["I1", "I2"], "DIV": [1, 1, 2020] } fam3 = { "FAM": "F1", "HUSB": ["I1"], "WIFE": ["I2"], "DIV": [1, 1, 2020] } fam4 = { "FAM": "F1", "HUSB": ["I1"], "WIFE": ["I2"], "DIV": [1, 1, 2008] } self.record.clear_logs() checker1 = spouseCrossChecker(self.record, fam1, self.individuals) checker1.us06_divBeforeDeat() self.assertEqual(len(self.record.get_logs()), 1) checker2 = spouseCrossChecker(self.record, fam2, self.individuals) checker2.us06_divBeforeDeat() self.assertEqual(len(self.record.get_logs()), 2) checker3 = spouseCrossChecker(self.record, fam3, self.individuals) checker3.us06_divBeforeDeat() self.assertEqual(len(self.record.get_logs()), 3) checker4 = spouseCrossChecker(self.record, fam4, self.individuals) checker4.us06_divBeforeDeat() self.assertEqual(len(self.record.get_logs()), 3) def test_marr14(self): fam1 = { "FAM": "F1", "HUSB": ["I1", "I2"], "WIFE": [], "MARR": [1, 1, 1988] } fam2 = { "FAM": "F1", "HUSB": [], "WIFE": ["I1", "I2"], "MARR": [1, 1, 1988] } fam3 = { "FAM": "F1", "HUSB": ["I1"], "WIFE": ["I2"], "MARR": [1, 1, 1988] } fam4 = { "FAM": "F1", "HUSB": ["I1"], "WIFE": ["I2"], "MARR": [1, 1, 2008] } self.record.clear_logs() checker1 = spouseCrossChecker(self.record, fam1, self.individuals) checker1.us10_marrAfter14() self.assertEqual(len(self.record.get_logs()), 1) checker2 = spouseCrossChecker(self.record, fam2, self.individuals) checker2.us10_marrAfter14() self.assertEqual(len(self.record.get_logs()), 2) checker3 = spouseCrossChecker(self.record, fam3, self.individuals) checker3.us10_marrAfter14() self.assertEqual(len(self.record.get_logs()), 3) checker4 = spouseCrossChecker(self.record, fam4, self.individuals) checker4.us10_marrAfter14() self.assertEqual(len(self.record.get_logs()), 3)