def delete_person(id): session = models.get_session() person = session.query(models.Person).get(id) if not person: raise PersonNotFoundException('Invalid ID, person not found') session.delete(person) session.commit() return _serialize_person(person)
def update_person(id, name): session = models.get_session() person = session.query(models.Person).get(id) if not person: raise PersonNotFoundException('Invalid ID, person not found') person.name = name session.commit() return _serialize_person(person)
def same_people(init_db): result = [] person = person_controller.add_person('Greg') session = models.get_session() result.append(session.query(models.Person).get(person['id'])) person = person_controller.add_person('Greg') result.append(session.query(models.Person).get(person['id'])) return result
def test_delete_contact_success(contact): contact_person_id = contact.person.id deleted_contact = contact_controller.delete_contact(contact.id) assert deleted_contact with pytest.raises(contact_controller.ContactException): contact_controller.get_contact(deleted_contact['id']) assert len(contact_controller.get_contact(person_id=contact_person_id)) == 0 session = models.get_session() assert not session.query(models.Contact).get(contact.id)
def delete_contact(id): session = models.get_session() contact = session.query(models.Contact).get(id) if not contact: raise ContactException('Invalid ID, contact not found') result = _serialize_contact(contact) session.delete(contact) session.commit() return result
def test_delete_person_success(person): deleted_person = person_controller.delete_person(person.id) assert deleted_person assert deleted_person['id'] == person.id assert deleted_person['name'] == person.name with pytest.raises(person_controller.PersonException): person_controller.get_person(id=person.id) assert len(person_controller.get_person(name=person.name)) == 0 session = models.get_session() assert not session.query(models.Person).get(person.id)
def test_add_person_success(): test_name = 'Greg' added_person = person_controller.add_person(test_name) assert added_person['id'] assert added_person['name'] == test_name session = models.get_session() db_person = session.query(models.Person).get(added_person['id']) assert db_person assert db_person.id == added_person['id'] assert db_person.name == added_person['name']
def test_update_person_success(person): test_name = 'Todd' updated_person = person_controller.update_person(person.id, test_name) assert updated_person['id'] == person.id assert updated_person['name'] == test_name session = models.get_session() db_person = session.query(models.Person).get(updated_person['id']) assert db_person assert db_person.id == updated_person['id'] assert db_person.name == updated_person['name']
def test_update_contact_type_only_success(contact): test_type = 'whatsapp' updated_contact = contact_controller.update_contact(contact.id, contact_type=test_type) assert updated_contact['id'] == contact.id assert updated_contact['value'] == contact.value assert updated_contact['type'] == test_type session = models.get_session() db_contact = session.query(models.Contact).get(updated_contact['id']) assert db_contact assert db_contact.id == updated_contact['id'] assert db_contact.value == updated_contact['value'] assert db_contact.type.type_name == updated_contact['type']
def add_contact(person_id, contact_value, contact_type): session = models.get_session() try: type = session.query(models.ContactType).filter(models.ContactType.type_name == contact_type).one() except: raise ContactException('Invalid contact type') if not session.query(models.Person).get(person_id): raise ContactException('Invalid Person ID, person not found') contact = models.Contact(person_id=person_id, type_id=type.id, value=contact_value) session.add(contact) session.commit() return _serialize_contact(contact)
def crowd(): p = person_controller.add_person('Greg') contact_controller.add_contact(p['id'], '*****@*****.**', 'email') p = person_controller.add_person('Gregory') contact_controller.add_contact(p['id'], '*****@*****.**', 'email') contact_controller.add_contact(p['id'], '5511999888777', 'whatsapp') p = person_controller.add_person('McGregor') contact_controller.add_contact(p['id'], '*****@*****.**', 'email') contact_controller.add_contact(p['id'], '5511999888777', 'whatsapp') contact_controller.add_contact(p['id'], '554133332222', 'phone') session = models.get_session() return session.query(models.Person)
def test_add_single_contact_success(person): test_value = '*****@*****.**' test_type = 'email' added_contact = contact_controller.add_contact(person.id, test_value, test_type) assert added_contact['id'] assert added_contact['value'] == test_value assert added_contact['type'] == test_type session = models.get_session() db_contact = session.query(models.Contact).get(added_contact['id']) assert db_contact assert db_contact.id == added_contact['id'] assert db_contact.value == added_contact['value'] assert db_contact.type.type_name == added_contact['type']
def test_update_contact_by_id_both_fields_success(contact): test_value = '5511999888777' test_type = 'whatsapp' updated_contact = contact_controller.update_contact(contact.id, test_value, test_type) assert updated_contact['id'] == contact.id assert updated_contact['value'] == test_value assert updated_contact['type'] == test_type session = models.get_session() db_contact = session.query(models.Contact).get(updated_contact['id']) assert db_contact assert db_contact.id == updated_contact['id'] assert db_contact.value == updated_contact['value'] assert db_contact.type.type_name == updated_contact['type']
def test_update_contact_value_only_success(contact): contact_type_type_name = contact.type.type_name test_value = '5511999888777' updated_contact = contact_controller.update_contact(contact.id, test_value) assert updated_contact['id'] == contact.id assert updated_contact['value'] == test_value assert updated_contact['type'] == contact_type_type_name session = models.get_session() db_contact = session.query(models.Contact).get(updated_contact['id']) assert db_contact assert db_contact.id == updated_contact['id'] assert db_contact.value == updated_contact['value'] assert db_contact.type.type_name == updated_contact['type']
def test_add_multiple_contact_success(contact): test_value = '5511999888777' test_type = 'whatsapp' added_contact = contact_controller.add_contact(contact.person.id, test_value, test_type) assert added_contact['id'] assert added_contact['value'] == test_value assert added_contact['type'] == test_type session = models.get_session() db_person = session.query(models.Person).get(contact.person.id) assert db_person assert db_person.contacts assert len(db_person.contacts) == 2 assert test_type in [c.type.type_name for c in db_person.contacts] assert test_value in [c.value for c in db_person.contacts]
def update_contact(contact_id, contact_value=None, contact_type=None): session = models.get_session() contact = session.query(models.Contact).get(contact_id) if not contact: raise ContactException('Invalid ID, contact not found') if not contact_type and not contact_value: raise ContactException('At least one updatable parameter must be specified') if contact_value: contact.value = contact_value if contact_type: try: type = session.query(models.ContactType).filter(models.ContactType.type_name == contact_type).one() except: raise ContactException('Invalid contact type') contact.type_id = type.id session.commit() return _serialize_contact(contact)
def get_person(name=None, id=None): session = models.get_session() if name and id: raise PersonBadParameterException('Only one parameter must be defined') elif id: person = session.query(models.Person).get(id) if not person: raise PersonNotFoundException('Invalid ID, person not found') result = _serialize_person(person) elif name: people = session.query(models.Person).filter( models.Person.name.like('%{}%'.format(name))) result = [_serialize_person(person) for person in people] else: people = session.query(models.Person) result = [_serialize_person(person) for person in people] return result
def get_contact(contact_id=None, person_id=None, person_name=None, contact_type=None): session = models.get_session() if (contact_id and (person_id or person_name) or (person_id and person_name)): raise ContactException('Too many parameters, specify either contact_id, person_id or person_name') if not contact_id and not person_id and not person_name: contacts = session.query(models.Contact) result = [_serialize_contact(contact) for contact in contacts] if contact_id: contact = session.query(models.Contact).get(contact_id) if not contact: raise ContactException('Invalid ID, contact not found') result = _serialize_contact(contact) elif person_id or person_name: contacts = session.query(models.Contact) if contact_type: contacts = contacts.join(models.ContactType).filter(models.ContactType.type_name==contact_type) if person_id: contacts = contacts.filter(models.Contact.person_id == person_id) elif person_name: contacts = contacts.join(models.Person).filter(models.Person.name.like('%{}%'.format(person_name))) result = [_serialize_contact(contact) for contact in contacts] return result
def person_with_contacts(person): contact_controller.add_contact(person.id, '*****@*****.**', 'email') contact_controller.add_contact(person.id, '5511999888777', 'whatsapp') contact_controller.add_contact(person.id, '554133332222', 'phone') session = models.get_session() return session.query(models.Person).get(person.id)
def contact(person): contact = contact_controller.add_contact(person.id, '*****@*****.**', 'email') session = models.get_session() return session.query(models.Contact).get(contact['id'])
def person(init_db): person = person_controller.add_person('Greg') session = models.get_session() return session.query(models.Person).get(person['id'])
def add_person(name): session = models.get_session() person = models.Person(name=name) session.add(person) session.commit() return _serialize_person(person)