class TestDatabase(unittest.TestCase): def setUp(self): self.db = Database() for phone in self.db.find(): self.db.delete_one(phone) def test_get_all_phones(self): phones = self.db.find() self.assertEqual(len(phones), 0) def test_insert_one_phone(self): random_phone = [{'phone_number': '12345'}] self.db.insert(random_phone) self.assertEqual(len(self.db.find()), len(random_phone)) def test_insert_many_phones(self): random_phones = [{ 'phone_number': str(number) } for number in range(1, 21)] self.db.insert(random_phones) self.assertEqual(len(self.db.find()), len(random_phones))
class Manager: def __init__(self): self.db = Database() def get_all_phones(self): return [{'phone_number': phone['phone_number']} for phone in self.db.find()] def block_phones(self, phones): valid_json = True for phone_doc in phones: if 'phone_number' not in phone_doc: valid_json = False break if valid_json: for phone_doc in phones: # aqui é possível fazer validações # validação de número if self.__format_phone_number(phone_doc['phone_number']) == "": phone_doc['block_status'] = 'invalid_phone_number' continue # validação de duplicidade de phone_number if self.db.find_one({'phone_number': self.__format_phone_number(phone_doc['phone_number'])}) is None: self.db.insert({'phone_number': self.__format_phone_number(phone_doc['phone_number'])}) phone_doc['block_status'] = 'blocked' else: phone_doc['block_status'] = 'duplicated' if len(phones) == 1: return phones[0] else: return phones else: raise KeyError def unblock_phones(self, phones): valid_json = True for phone_doc in phones: if 'phone_number' not in phone_doc: valid_json = False break if valid_json: for phone_doc in phones: # aqui é possível fazer validações # validação de existência de phone_number if self.db.find_one({'phone_number': self.__format_phone_number(phone_doc['phone_number'])}) is not None: self.db.delete_one({'phone_number': self.__format_phone_number(phone_doc['phone_number'])}) phone_doc['block_status'] = 'unblocked' else: phone_doc['block_status'] = 'not_found' if len(phones) == 1: return phones[0] else: return phones else: raise KeyError def verify_phones(self, phones): valid_json = True for phone_doc in phones: if 'phone_number' not in phone_doc: valid_json = False break if valid_json: for phone_doc in phones: # aqui é possível fazer validações # validação de existência de phone_number if self.db.find_one({'phone_number': self.__format_phone_number(phone_doc['phone_number'])}) is not None: phone_doc['block_status'] = 'blocked' else: phone_doc['block_status'] = 'not_blocked' if len(phones) == 1: return phones[0] else: return phones else: raise KeyError def count(self): return len([phone for phone in self.db.find()]) @staticmethod def __format_phone_number(phone_number): return ''.join([character for character in phone_number if character.isdigit()])