def add_contact(self, contact_info: dict): """Add a business contact to this entity.""" # check for existing contact (we only want one contact per user) contact_link = ContactLinkModel.find_by_entity_id(self._model.id) if contact_link is not None: raise BusinessException(Error.DATA_ALREADY_EXISTS, None) contact = ContactModel(**camelback2snake(contact_info)) contact.commit() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.entity = self._model contact_link.commit() return self
def add_contact(self, contact_info): """Create a new contact for this org.""" # check for existing contact (only one contact per org for now) current_app.logger.debug('>add_contact ') contact_link = ContactLinkModel.find_by_org_id(self._model.id) if contact_link is not None: raise BusinessException(Error.DATA_ALREADY_EXISTS, None) contact = ContactModel(**camelback2snake(contact_info)) contact.commit() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.org = self._model contact_link.commit() current_app.logger.debug('>add_contact ') return self
def test_delete_user(session, auth_mock): # pylint:disable=unused-argument """Assert that a user can be deleted.""" user_model = factory_user_model(user_info=TestUserInfo.user_test) contact = factory_contact_model() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.user = user_model contact_link.commit() org = OrgService.create_org(TestOrgInfo.org1, user_id=user_model.id) UserService.delete_user(TestJwtClaims.user_test) updated_user = UserModel.find_by_jwt_token(TestJwtClaims.user_test) assert len(updated_user.contacts) == 0 user_orgs = MembershipModel.find_orgs_for_user(updated_user.id) for org in user_orgs: assert org.status_code == 'INACTIVE'
def test_get_user_settings(client, jwt, session, keycloak_mock): # pylint:disable=unused-argument """Assert that get works and adhere to schema.""" user_model = factory_user_model(user_info=TestUserInfo.user_test) contact = factory_contact_model() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.user = user_model contact_link.commit() kc_id = user_model.keycloak_guid OrgService.create_org(TestOrgInfo.org1, user_id=user_model.id) claims = copy.deepcopy(TestJwtClaims.updated_test.value) claims['sub'] = str(kc_id) # post token with updated claims headers = factory_auth_header(jwt=jwt, claims=claims) rv = client.get(f'/api/v1/users/{kc_id}/settings', headers=headers, content_type='application/json') assert rv.status_code == http_status.HTTP_200_OK assert schema_utils.validate(rv.json, 'user_settings_response')
def test_delete_entity(app, session): # pylint:disable=unused-argument """Assert that an entity can be deleted.""" entity_model = factory_entity_model() entity = EntityService(entity_model) org = factory_org_service() contact = factory_contact_model() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.entity = entity._model # pylint:disable=protected-access contact_link.org = org._model # pylint:disable=protected-access contact_link.commit() entity.delete() entity = EntityService.find_by_entity_id(entity.identifier) assert entity is None
def factory_user_model_with_contact(user_info: dict = TestUserInfo.user1): """Produce a user model.""" user = UserModel(username=user_info['username'], firstname=user_info['firstname'], lastname=user_info['lastname'], roles=user_info['roles'], keycloak_guid=user_info.get('keycloak_guid', None), type=user_info.get('access_type', None), email='*****@*****.**') user.save() contact = factory_contact_model() contact.save() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.user = user contact_link.save() return user
def add_contact(token, contact_info: dict): """Add or update contact information for an existing user.""" user = UserModel.find_by_jwt_token(token) if user is None: raise BusinessException(Error.DATA_NOT_FOUND, None) # check for existing contact (we only want one contact per user) contact_link = ContactLinkModel.find_by_user_id(user.id) if contact_link is not None: raise BusinessException(Error.DATA_ALREADY_EXISTS, None) contact = ContactModel(**camelback2snake(contact_info)) contact.commit() contact_link = ContactLinkModel() contact_link.user = user contact_link.contact = contact contact_link.commit() return User(user)
def add_contact(token, contact_info: dict): """Add contact information for an existing user.""" current_app.logger.debug('add_contact') user = UserModel.find_by_jwt_token(token) if user is None: raise BusinessException(Error.DATA_NOT_FOUND, None) # check for existing contact (we only want one contact per user) contact_link = ContactLinkModel.find_by_user_id(user.id) if contact_link is not None: raise BusinessException(Error.DATA_ALREADY_EXISTS, None) contact = ContactModel(**camelback2snake(contact_info)) contact = contact.flush() contact_link = ContactLinkModel() contact_link.user = user contact_link.contact = contact contact_link.save() return ContactService(contact)
def factory_user_model_with_contact(user_info: dict = TestUserInfo.user1): """Produce a user model.""" user_type = Role.ANONYMOUS_USER.name if user_info.get( 'access_type', None) == AccessType.ANONYMOUS.value else None user = UserModel(username=user_info['username'], firstname=user_info['firstname'], lastname=user_info['lastname'], keycloak_guid=user_info.get('keycloak_guid', None), type=user_type, email='*****@*****.**') user.save() contact = factory_contact_model() contact.save() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.user = user contact_link.save() return user
def add_contact(org_id, contact_info): """Create a new contact for this org.""" # check for existing contact (only one contact per org for now) current_app.logger.debug('>add_contact') org = OrgModel.find_by_org_id(org_id) if org is None: raise BusinessException(Error.DATA_NOT_FOUND, None) contact_link = ContactLinkModel.find_by_org_id(org_id) if contact_link is not None: raise BusinessException(Error.DATA_ALREADY_EXISTS, None) contact = ContactModel(**camelback2snake(contact_info)) contact = contact.flush() contact_link = ContactLinkModel() contact_link.contact = contact contact_link.org = org contact_link.save() current_app.logger.debug('<add_contact') return ContactService(contact)
def create_affidavit(affidavit_info: Dict): """Create a new affidavit record.""" current_app.logger.debug('<create_affidavit ') user = UserService.find_by_jwt_token() # If the user already have a pending affidavit, raise error existing_affidavit: AffidavitModel = AffidavitModel.find_pending_by_user_id( user_id=user.identifier) trigger_task_update = False if existing_affidavit is not None: # inactivate the current affidavit existing_affidavit.status_code = AffidavitStatus.INACTIVE.value existing_affidavit.flush() trigger_task_update = True contact = affidavit_info.pop('contact') affidavit_model = AffidavitModel( issuer=affidavit_info.get('issuer'), document_id=affidavit_info.get('documentId'), status_code=AffidavitStatus.PENDING.value, user_id=user.identifier) affidavit_model.add_to_session() # Save contact for the affidavit if contact: contact = ContactModel(**camelback2snake(contact)) contact.add_to_session() contact_link = ContactLinkModel() contact_link.affidavit = affidavit_model contact_link.contact = contact contact_link.add_to_session() affidavit_model.save() if trigger_task_update: Affidavit._modify_task(user) return Affidavit(affidavit_model)
def create_affidavit(token_info: Dict, affidavit_info: Dict): """Create a new affidavit record.""" current_app.logger.debug('<create_affidavit ') user = UserService.find_by_jwt_token(token=token_info) # If the user already have a pending affidavit, raise error existing_affidavit: AffidavitModel = AffidavitModel.find_pending_by_user_id( user_id=user.identifier) if existing_affidavit is not None: # approved affidavit cant be changed if existing_affidavit.status_code == AffidavitStatus.APPROVED.value: raise BusinessException(Error.ACTIVE_AFFIDAVIT_EXISTS, None) # inactivate the current affidavit existing_affidavit.status_code = AffidavitStatus.INACTIVE.value existing_affidavit.flush() contact = affidavit_info.pop('contact') affidavit_model = AffidavitModel( issuer=affidavit_info.get('issuer'), document_id=affidavit_info.get('documentId'), status_code=AffidavitStatus.PENDING.value, user_id=user.identifier) affidavit_model.add_to_session() # Save contact for the affidavit if contact: contact = ContactModel(**camelback2snake(contact)) contact.add_to_session() contact_link = ContactLinkModel() contact_link.affidavit = affidavit_model contact_link.contact = contact contact_link.add_to_session() affidavit_model.save() return Affidavit(affidavit_model)