def test_cannot_add(self, service, extra_data, expected_response, permissions): """Test that interaction with incorrect answers cannot be added.""" adviser = create_test_user(permission_codenames=permissions) contact = ContactFactory() communication_channel = random_obj_for_model(CommunicationChannel) url = reverse('api-v3:interaction:collection') request_data = { 'kind': Interaction.KINDS.interaction, 'communication_channel': communication_channel.pk, 'subject': 'whatever', 'date': date.today().isoformat(), 'dit_participants': [{ 'adviser': adviser.pk, }], 'company': contact.company.pk, 'contacts': [contact.pk], 'was_policy_feedback_provided': False, 'service': service, **resolve_data(extra_data), } api_client = self.create_api_client(user=adviser) response = api_client.post(url, request_data) assert response.status_code == status.HTTP_400_BAD_REQUEST response_data = response.json() assert response_data == expected_response
def test_validation(self, data, errors): """Test validation errors.""" data = resolve_data(data) url = reverse('api-v3:interaction:collection') response = self.api_client.post(url, data) assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.json() == errors
def test_validation(self, data, errors): """Test validation errors.""" data = resolve_data(data) url = reverse('api-v3:interaction:collection') user = create_add_policy_feedback_user() api_client = self.create_api_client(user=user) response = api_client.post(url, data) assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.json() == errors
def test_validation(self, data, errors): """Test validation errors.""" company = CompanyFactory() resolved_data = { 'company': company.pk, 'contacts': [ContactFactory(company=company).pk], **resolve_data(data), } url = reverse('api-v3:interaction:collection') response = self.api_client.post(url, resolved_data) assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.json() == errors
def test_error_returned_if_contacts_dont_belong_to_company(self, request_data): """ Test that an error is returned if an update makes the contacts and company fields inconsistent. """ interaction = CompanyInteractionFactory() url = reverse('api-v3:interaction:item', kwargs={'pk': interaction.pk}) resolved_data = resolve_data(request_data) response = self.api_client.patch(url, data=resolved_data) assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.json() == { 'non_field_errors': ['The interaction contacts must belong to the specified company.'], }
def test_draft_update_enforces_required_fields(self, permissions, data, error_response): """ Test that changing a draft to completed will enforce service and communication_channel to be set. """ requester = create_test_user(permission_codenames=permissions) draft_interaction = CompanyInteractionFactory( kind=Interaction.KINDS.interaction, status=Interaction.STATUSES.draft, service_id=None, communication_channel=None, ) api_client = self.create_api_client(user=requester) url = reverse('api-v3:interaction:item', kwargs={'pk': draft_interaction.pk}) data = resolve_data(data) response = api_client.patch(url, data=data) assert(response.status_code == status.HTTP_400_BAD_REQUEST) assert response.data == error_response
def test_add(self, extra_data, permissions): """Test add a new interaction.""" adviser = create_test_user(permission_codenames=permissions) company = CompanyFactory() contact = ContactFactory(company=company) communication_channel = random_obj_for_model(CommunicationChannel) url = reverse('api-v3:interaction:collection') request_data = { 'kind': Interaction.KINDS.interaction, 'communication_channel': communication_channel.pk, 'subject': 'whatever', 'date': date.today().isoformat(), 'dit_adviser': adviser.pk, 'company': company.pk, 'contacts': [contact.pk], 'service': Service.trade_enquiry.value.id, 'dit_team': Team.healthcare_uk.value.id, 'was_policy_feedback_provided': False, **resolve_data(extra_data), } api_client = self.create_api_client(user=adviser) response = api_client.post(url, request_data) assert response.status_code == status.HTTP_201_CREATED response_data = response.json() assert response_data == { 'id': response_data['id'], 'kind': Interaction.KINDS.interaction, 'status': request_data.get('status', Interaction.STATUSES.complete), 'theme': request_data.get('theme', None), 'is_event': None, 'service_delivery_status': None, 'grant_amount_offered': None, 'net_company_receipt': None, 'policy_areas': request_data.get('policy_areas', []), 'policy_feedback_notes': request_data.get('policy_feedback_notes', ''), 'policy_issue_types': request_data.get('policy_issue_types', []), 'was_policy_feedback_provided': request_data.get('was_policy_feedback_provided', False), 'communication_channel': { 'id': str(communication_channel.pk), 'name': communication_channel.name, }, 'subject': 'whatever', 'date': '2017-04-18', 'dit_adviser': { 'id': str(adviser.pk), 'first_name': adviser.first_name, 'last_name': adviser.last_name, 'name': adviser.name, }, 'dit_participants': [ { 'adviser': { 'id': str(adviser.pk), 'first_name': adviser.first_name, 'last_name': adviser.last_name, 'name': adviser.name, }, 'team': { 'id': str(Team.healthcare_uk.value.id), 'name': Team.healthcare_uk.value.name, }, }, ], 'dit_team': { 'id': str(Team.healthcare_uk.value.id), 'name': Team.healthcare_uk.value.name, }, 'notes': request_data.get('notes', ''), 'company': { 'id': str(company.pk), 'name': company.name, }, 'contacts': [{ 'id': str(contact.pk), 'name': contact.name, 'first_name': contact.first_name, 'last_name': contact.last_name, 'job_title': contact.job_title, }], 'event': None, 'service': { 'id': str(Service.trade_enquiry.value.id), 'name': Service.trade_enquiry.value.name, }, 'investment_project': request_data.get('investment_project'), 'archived_documents_url_path': '', 'created_by': { 'id': str(adviser.pk), 'first_name': adviser.first_name, 'last_name': adviser.last_name, 'name': adviser.name, }, 'modified_by': { 'id': str(adviser.pk), 'first_name': adviser.first_name, 'last_name': adviser.last_name, 'name': adviser.name, }, 'created_on': '2017-04-18T13:25:30.986208Z', 'modified_on': '2017-04-18T13:25:30.986208Z', 'location': request_data.get('location', ''), 'archived': False, 'archived_by': None, 'archived_on': None, 'archived_reason': None, }
def test_add(self, extra_data): """Test add a new service delivery.""" adviser = AdviserFactory() company = CompanyFactory() contact = ContactFactory(company=company) url = reverse('api-v3:interaction:collection') request_data = { 'kind': Interaction.Kind.SERVICE_DELIVERY, 'subject': 'whatever', 'date': date.today().isoformat(), 'dit_participants': [ {'adviser': adviser.pk}, ], 'company': company.pk, 'contacts': [contact.pk], 'service': Service.inbound_referral.value.id, 'was_policy_feedback_provided': False, **resolve_data(extra_data), } response = self.api_client.post(url, request_data) assert response.status_code == status.HTTP_201_CREATED response_data = response.json() assert response_data == { 'id': response_data['id'], 'kind': Interaction.Kind.SERVICE_DELIVERY, 'status': request_data.get('status', Interaction.Status.COMPLETE), 'theme': request_data.get('theme', None), 'is_event': request_data['is_event'], 'service_delivery_status': request_data.get('service_delivery_status'), 'grant_amount_offered': request_data.get('grant_amount_offered'), 'net_company_receipt': request_data.get('net_company_receipt'), 'communication_channel': None, 'policy_areas': request_data.get('policy_areas', []), 'policy_feedback_notes': request_data.get('policy_feedback_notes', ''), 'policy_issue_types': request_data.get('policy_issue_types', []), 'was_policy_feedback_provided': request_data.get('was_policy_feedback_provided', False), 'subject': 'whatever', 'date': '2017-04-18', 'dit_participants': [ { 'adviser': { 'id': str(adviser.pk), 'first_name': adviser.first_name, 'last_name': adviser.last_name, 'name': adviser.name, }, 'team': { 'id': str(adviser.dit_team.pk), 'name': adviser.dit_team.name, }, }, ], 'notes': request_data.get('notes', ''), 'company': { 'id': str(company.pk), 'name': company.name, }, 'contacts': [{ 'id': str(contact.pk), 'name': contact.name, 'first_name': contact.first_name, 'last_name': contact.last_name, 'job_title': contact.job_title, }], 'event': request_data.get('event'), 'service': { 'id': str(Service.inbound_referral.value.id), 'name': Service.inbound_referral.value.name, }, 'service_answers': None, 'investment_project': None, 'archived_documents_url_path': '', 'were_countries_discussed': request_data.get('were_countries_discussed'), 'export_countries': request_data.get('export_countries', []), 'created_by': { 'id': str(self.user.pk), 'first_name': self.user.first_name, 'last_name': self.user.last_name, 'name': self.user.name, }, 'modified_by': { 'id': str(self.user.pk), 'first_name': self.user.first_name, 'last_name': self.user.last_name, 'name': self.user.name, }, 'created_on': '2017-04-18T13:25:30.986208Z', 'modified_on': '2017-04-18T13:25:30.986208Z', 'archived': False, 'archived_by': None, 'archived_on': None, 'archived_reason': None, 'company_referral': None, }
def test_add(self, extra_data): """Test add a new service delivery.""" adviser = AdviserFactory() company = CompanyFactory() contact = ContactFactory() url = reverse('api-v3:interaction:collection') request_data = { 'kind': Interaction.KINDS.service_delivery, 'subject': 'whatever', 'date': date.today().isoformat(), 'dit_adviser': adviser.pk, 'company': company.pk, 'contact': contact.pk, 'service': Service.trade_enquiry.value.id, 'dit_team': Team.healthcare_uk.value.id, **resolve_data(extra_data), } response = self.api_client.post(url, request_data) assert response.status_code == status.HTTP_201_CREATED response_data = response.json() assert response_data == { 'id': response_data['id'], 'kind': Interaction.KINDS.service_delivery, 'is_event': request_data['is_event'], 'service_delivery_status': request_data.get('service_delivery_status'), 'grant_amount_offered': request_data.get('grant_amount_offered'), 'net_company_receipt': request_data.get('net_company_receipt'), 'communication_channel': None, 'policy_areas': [], 'policy_issue_type': None, 'subject': 'whatever', 'date': '2017-04-18', 'dit_adviser': { 'id': str(adviser.pk), 'first_name': adviser.first_name, 'last_name': adviser.last_name, 'name': adviser.name, }, 'notes': request_data.get('notes', ''), 'company': { 'id': str(company.pk), 'name': company.name, }, 'contact': { 'id': str(contact.pk), 'name': contact.name, 'first_name': contact.first_name, 'last_name': contact.last_name, 'job_title': contact.job_title, }, 'event': request_data.get('event'), 'service': { 'id': str(Service.trade_enquiry.value.id), 'name': Service.trade_enquiry.value.name, }, 'dit_team': { 'id': str(Team.healthcare_uk.value.id), 'name': Team.healthcare_uk.value.name, }, 'investment_project': None, 'archived_documents_url_path': '', 'created_by': { 'id': str(self.user.pk), 'first_name': self.user.first_name, 'last_name': self.user.last_name, 'name': self.user.name, }, 'modified_by': { 'id': str(self.user.pk), 'first_name': self.user.first_name, 'last_name': self.user.last_name, 'name': self.user.name, }, 'created_on': '2017-04-18T13:25:30.986208Z', 'modified_on': '2017-04-18T13:25:30.986208Z', }