def test_not_valid_organizations_stream(self): """Check whether it parses invalid organizations files""" # empty domains stream_orgs = self.read_file(datadir('grimoirelab_orgs_invalid_empty_domains.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+List of elements expected for organization Bitergia$'): GrimoireLabParser(organizations=stream_orgs) # one of the domains is empty stream_orgs = self.read_file(datadir('grimoirelab_orgs_invalid_domains_list_with_empty_value.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Empty domain name for organization Bitergia$'): GrimoireLabParser(organizations=stream_orgs) # domains got a string instead of a list stream_orgs = self.read_file(datadir('grimoirelab_orgs_invalid_wrong_domains_type.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+List of elements expected for organization Bitergia$'): GrimoireLabParser(organizations=stream_orgs) # organization key missing stream_orgs = self.read_file(datadir('grimoirelab_orgs_invalid_missing_key.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Attribute organization not found$'): GrimoireLabParser(organizations=stream_orgs) # organization key with empty value stream_orgs = self.read_file(datadir('grimoirelab_orgs_invalid_key_with_no_value.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Empty organization name$'): GrimoireLabParser(organizations=stream_orgs)
def test_not_valid_identities_stream(self): """Check whether it parses invalid identities files""" stream_ids = self.read_file(datadir('grimoirelab_invalid_email.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Invalid email address: lcanas__at__bitergia.com$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file(datadir('grimoirelab_invalid_structure.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Attribute profile not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file(datadir('grimoirelab_invalid_missing_accounts.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Attribute name not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file(datadir('grimoirelab_invalid_missing_profile_name_isbot.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Attribute name not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file(datadir('grimoirelab_invalid_missing_profile.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Attribute profile not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file(datadir('grimoirelab_invalid_missing_organization_name.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Empty organization name$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file(datadir('grimoirelab_invalid_blacklist_no_list.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+List of elements expected for blacklist'): GrimoireLabParser(stream_ids) stream_ids = self.read_file(datadir('grimoirelab_invalid_blacklist_empty_entry.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Blacklist entries cannot be null or empty'): GrimoireLabParser(stream_ids)
def test_supress_enrollment_periods_validation(self): """Check whether it ignores invalid enrollment periods""" stream_ids = self.read_file(datadir('grimoirelab_invalid_enrollment_periods.yml')) parser = GrimoireLabParser(stream_ids, enrollment_periods_validation=False) uids = parser.identities self.assertEqual(len(uids), 2) uid = uids[1] self.assertIsInstance(uid, UniqueIdentity) self.assertEqual(uid.profile.name, 'Quan Zhou') # This identity has an invalid enrollment periods id1 = uid.identities[1] self.assertIsInstance(id1, Identity) self.assertEqual(id1.name, None) self.assertEqual(id1.email, '*****@*****.**') self.assertEqual(id1.username, None) self.assertEqual(id1.source, 'grimoirelab') self.assertEqual(id1.uuid, None) enroll0 = uid.enrollments[0] self.assertEqual(enroll0.organization.name, 'Bitergia') self.assertEqual(enroll0.start, datetime.datetime(2012, 1, 1, 0, 0)) self.assertEqual(enroll0.end, datetime.datetime(2100, 1, 1, 0, 0)) self.assertEqual(enroll0.uuid, None) enroll0 = uid.enrollments[1] self.assertEqual(enroll0.organization.name, 'GrimoireLab') self.assertEqual(enroll0.start, datetime.datetime(1900, 1, 1, 0, 0)) self.assertEqual(enroll0.end, datetime.datetime(2013, 1, 1, 0, 0)) self.assertEqual(enroll0.uuid, None)
def test_enrollment_periods_validation(self): """Check whether it raises an error on invalid enrollment periods""" stream_ids = self.read_file(datadir('grimoirelab_invalid_enrollment_periods.yml')) with self.assertRaisesRegex(InvalidFormatError, '^invalid GrimoireLab enrollment dates. Organization dates overlap.$'): GrimoireLabParser(stream_ids, enrollment_periods_validation=True)
def test_email_validation(self): """Check wheter it raises an error on invalid email addresses""" stream_ids = self.read_file(datadir('grimoirelab_invalid_email.yml')) with self.assertRaisesRegex(InvalidFormatError, '^.+Invalid email address: lcanas__at__bitergia.com$'): GrimoireLabParser(stream_ids, email_validation=True)
def test_not_valid_enrollments_parser(self): """Check whether data from both identites and organizations files is coherent""" stream_ids = self.read_file('data/grimoirelab_invalid_datetime.yml') stream_orgs = self.read_file('data/grimoirelab_orgs_valid.yml') with self.assertRaises(InvalidFormatError): GrimoireLabParser(stream_ids, stream_orgs)
def test_enrollments_parser(self): """Check whether enrollments are correctly parsed""" stream_ids = self.read_file(datadir('grimoirelab_valid.yml')) parser = GrimoireLabParser(stream_ids) # Parsed unique identities uids = parser.identities # J. Manrique Lopez de la Fuente uid = uids[0] rol = uid.enrollments[0] self.assertIsInstance(rol, Enrollment) self.assertEqual(rol.organization.name, 'Bitergia') self.assertEqual(rol.start, datetime.datetime(2013, 1, 1, 0, 0)) self.assertEqual(rol.end, datetime.datetime(2100, 1, 1, 0, 0)) # Luis Cañas-Díaz uid = uids[1] # Unknown organization is ignored during the parsing process self.assertEqual(len(uid.enrollments), 2) rol = uid.enrollments[0] self.assertIsInstance(rol, Enrollment) self.assertEqual(rol.organization.name, 'GSyC/LibreSoft') self.assertEqual(rol.start, datetime.datetime(2003, 1, 1, 0, 0)) self.assertEqual(rol.end, datetime.datetime(2011, 12, 31, 0, 0)) rol = uid.enrollments[1] self.assertIsInstance(rol, Enrollment) self.assertEqual(rol.organization.name, 'Bitergia') self.assertEqual(rol.start, datetime.datetime(2012, 1, 1, 0, 0)) self.assertEqual(rol.end, datetime.datetime(2100, 1, 1, 0, 0)) # Owl Bot uid = uids[2] # Unknown organization is ignored during the parsing process self.assertEqual(len(uid.enrollments), 0)
def test_valid_blacklist_stream(self): """Check whether it parsers blacklist section from a valid stream""" stream = self.read_file(datadir('grimoirelab_valid.yml')) parser = GrimoireLabParser(stream) bl = parser.blacklist # Check parsed blacklist self.assertEqual(len(bl), 3) b = bl[0] self.assertIsInstance(b, MatchingBlacklist) self.assertEqual(b.excluded, 'Generic Account') b = bl[1] self.assertIsInstance(b, MatchingBlacklist) self.assertEqual(b.excluded, '*****@*****.**') b = bl[2] self.assertIsInstance(b, MatchingBlacklist) self.assertEqual(b.excluded, 'root')
def test_supress_email_validation(self): """Check wheter it ignores invalid email addresses""" stream_ids = self.read_file(datadir('grimoirelab_invalid_email.yml')) parser = GrimoireLabParser(stream_ids, email_validation=False) uids = parser.identities self.assertEqual(len(uids), 3) uid = uids[1] self.assertIsInstance(uid, UniqueIdentity) self.assertFalse(uid.profile.is_bot) self.assertEqual(uid.profile.name, 'Luis Cañas-Díaz') # This identity has an invalid email address id1 = uid.identities[1] self.assertIsInstance(id1, Identity) self.assertEqual(id1.name, None) self.assertEqual(id1.email, 'lcanas__at__bitergia.com') self.assertEqual(id1.username, None) self.assertEqual(id1.source, 'grimoirelab') self.assertEqual(id1.uuid, None)
def test_not_valid_identities_stream(self): """Check whether it parses invalid identities files""" stream_ids = self.read_file('data/grimoirelab_invalid_email.yml') with self.assertRaisesRegexp( InvalidFormatError, '^.+Invalid email address: lcanas__at__bitergia.com$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file('data/grimoirelab_invalid_structure.yml') with self.assertRaisesRegexp(InvalidFormatError, '^.+Attribute profile not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file( 'data/grimoirelab_invalid_missing_accounts.yml') with self.assertRaisesRegexp(InvalidFormatError, '^.+Attribute name not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file( 'data/grimoirelab_invalid_missing_profile_name_isbot.yml') with self.assertRaisesRegexp(InvalidFormatError, '^.+Attribute name not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file( 'data/grimoirelab_invalid_missing_profile.yml') with self.assertRaisesRegexp(InvalidFormatError, '^.+Attribute profile not found$'): GrimoireLabParser(stream_ids) stream_ids = self.read_file( 'data/grimoirelab_invalid_missing_organization_name.yml') with self.assertRaisesRegexp(InvalidFormatError, '^.+Empty organization name$'): GrimoireLabParser(stream_ids)
def test_identities_parser(self): """Check whether it parses a valid identities file""" stream_ids = self.read_file(datadir('grimoirelab_valid.yml')) parser = GrimoireLabParser(stream_ids) # Parsed unique identities uids = parser.identities self.assertEqual(len(uids), 3) # J. Manrique Lopez de la Fuente uid = uids[0] self.assertIsInstance(uid, UniqueIdentity) self.assertFalse(uid.profile.is_bot) self.assertEqual(uid.profile.name, 'J. Manrique Lopez de la Fuente') ids = uid.identities self.assertEqual(len(ids), 4) id0 = ids[0] self.assertIsInstance(id0, Identity) self.assertEqual(id0.name, 'J. Manrique Lopez de la Fuente') self.assertEqual(id0.email, None) self.assertEqual(id0.username, None) self.assertEqual(id0.source, 'grimoirelab') self.assertEqual(id0.uuid, None) id1 = ids[1] self.assertIsInstance(id1, Identity) self.assertEqual(id1.name, None) self.assertEqual(id1.email, '*****@*****.**') self.assertEqual(id1.username, None) self.assertEqual(id1.source, 'grimoirelab') self.assertEqual(id1.uuid, None) id1 = ids[2] self.assertIsInstance(id1, Identity) self.assertEqual(id1.name, None) self.assertEqual(id1.email, None) self.assertEqual(id1.username, 'jsmanrique') self.assertEqual(id1.source, 'github') self.assertEqual(id1.uuid, None) id1 = ids[3] self.assertIsInstance(id1, Identity) self.assertEqual(id1.name, None) self.assertEqual(id1.email, None) self.assertEqual(id1.username, 'jsm') self.assertEqual(id1.source, 'jira') self.assertEqual(id1.uuid, None) # Luis Cañas-Díaz uid = uids[1] self.assertIsInstance(uid, UniqueIdentity) self.assertFalse(uid.profile.is_bot) self.assertEqual(uid.profile.name, 'Luis Cañas-Díaz') self.assertIsInstance(uid, UniqueIdentity) ids = uid.identities self.assertEqual(len(ids), 3) id0 = ids[0] self.assertIsInstance(id0, Identity) self.assertEqual(id0.name, 'Luis Cañas-Díaz') self.assertEqual(id0.email, None) self.assertEqual(id0.username, None) self.assertEqual(id0.source, 'grimoirelab') self.assertEqual(id0.uuid, None) id1 = ids[1] self.assertIsInstance(id1, Identity) self.assertEqual(id1.name, None) self.assertEqual(id1.email, '*****@*****.**') self.assertEqual(id1.username, None) self.assertEqual(id1.source, 'grimoirelab') self.assertEqual(id1.uuid, None) id1 = ids[2] self.assertIsInstance(id1, Identity) self.assertEqual(id1.name, None) self.assertEqual(id1.email, None) self.assertEqual(id1.username, 'sanacl') self.assertEqual(id1.source, 'github') self.assertEqual(id1.uuid, None) # owlbot uid = uids[2] self.assertIsInstance(uid, UniqueIdentity) self.assertTrue(uid.profile.is_bot) self.assertIsInstance(uid, UniqueIdentity) ids = uid.identities self.assertEqual(len(ids), 2) id0 = ids[0] self.assertIsInstance(id0, Identity) self.assertEqual(id0.name, 'Owl Bot') self.assertEqual(id0.email, None) self.assertEqual(id0.username, None) self.assertEqual(id0.source, 'grimoirelab') self.assertEqual(id0.uuid, None) id0 = ids[1] self.assertIsInstance(id0, Identity) self.assertEqual(id0.name, None) self.assertEqual(id0.email, '*****@*****.**') self.assertEqual(id0.username, None) self.assertEqual(id0.source, 'grimoirelab') self.assertEqual(id0.uuid, None)
def test_call_with_empty_parameters(self): """Check if library accepts a call with None parameters""" with self.assertRaises(ValueError): GrimoireLabParser(None, None)
def test_organizations_parser(self): """Check whether it parses a valid organizations file""" stream_orgs = self.read_file(datadir('grimoirelab_orgs_valid.yml')) parser = GrimoireLabParser(organizations=stream_orgs) # Parsed organizations orgs = parser.organizations self.assertEqual(len(orgs), 3) # Bitergia entries org = orgs[0] self.assertIsInstance(org, Organization) self.assertEqual(org.name, 'Bitergia') doms = org.domains self.assertEqual(len(doms), 2) dom = doms[0] self.assertIsInstance(dom, Domain) self.assertEqual(dom.domain, 'bitergia.com') self.assertEqual(dom.is_top_domain, False) dom = doms[1] self.assertIsInstance(dom, Domain) self.assertEqual(dom.domain, 'bitergia.net') self.assertEqual(dom.is_top_domain, False) # Example entries org = orgs[1] self.assertIsInstance(org, Organization) self.assertEqual(org.name, 'Example') doms = org.domains self.assertEqual(len(doms), 3) dom = doms[0] self.assertIsInstance(dom, Domain) self.assertEqual(dom.domain, 'example.com') self.assertEqual(dom.is_top_domain, False) dom = doms[1] self.assertIsInstance(dom, Domain) self.assertEqual(dom.domain, 'example.org') self.assertEqual(dom.is_top_domain, False) dom = doms[2] self.assertIsInstance(dom, Domain) self.assertEqual(dom.domain, 'example.net') self.assertEqual(dom.is_top_domain, False) # GSyC/Libresof entries org = orgs[2] self.assertIsInstance(org, Organization) self.assertEqual(org.name, 'GSyC/LibreSoft') doms = org.domains self.assertEqual(len(doms), 2) dom = doms[0] self.assertIsInstance(dom, Domain) self.assertEqual(dom.domain, 'libresoft.es') self.assertEqual(dom.is_top_domain, False) dom = doms[1] self.assertIsInstance(dom, Domain) self.assertEqual(dom.domain, 'gsyc.es') self.assertEqual(dom.is_top_domain, False)