def test_creates_an_interaction(self, extra_data): """Test that an interaction is created on success.""" referral = CompanyReferralFactory() url = _complete_url(referral.pk) contact = ContactFactory(company=referral.company) service = random_service() request_data = { 'kind': Interaction.Kind.INTERACTION, 'subject': 'test subject', 'date': '2020-02-03', 'dit_participants': [ { 'adviser': self.user }, ], 'contacts': [contact], 'service': service, 'was_policy_feedback_provided': False, **extra_data, } resolved_request_data = resolve_objects(request_data) with freeze_time(FROZEN_DATETIME): response = self.api_client.post(url, data=resolved_request_data) assert response.status_code == status.HTTP_201_CREATED referral.refresh_from_db() assert referral.interaction_id interaction_data = Interaction.objects.values().get( pk=referral.interaction_id) expected_interaction_data = { # Automatically set fields 'created_by_id': self.user.pk, 'created_on': FROZEN_DATETIME, 'id': referral.interaction_id, 'modified_by_id': self.user.pk, 'modified_on': FROZEN_DATETIME, # Fields specified in the request body 'communication_channel_id': resolved_request_data.get('communication_channel'), 'date': datetime(2020, 2, 3, tzinfo=utc), 'event_id': resolved_request_data.get('event'), 'grant_amount_offered': None, 'investment_project_id': None, 'kind': resolved_request_data['kind'], 'net_company_receipt': None, 'notes': '', 'policy_feedback_notes': '', 'service_answers': None, 'service_delivery_status_id': None, 'service_id': service.pk, 'source': None, 'status': Interaction.Status.COMPLETE, 'subject': resolved_request_data['subject'], 'theme': None, 'was_policy_feedback_provided': resolved_request_data['was_policy_feedback_provided'], 'were_countries_discussed': None, # Other fields 'archived': False, 'archived_by_id': None, 'archived_documents_url_path': '', 'archived_on': None, 'archived_reason': None, 'large_capital_opportunity_id': None, 'has_related_trade_agreements': None, # TODO: a legacy field, remove once interaction.company field is removed 'company_id': referral.company_id, } assert interaction_data == expected_interaction_data assert list(referral.interaction.contacts.all()) == [contact] assert list(referral.interaction.companies.all()) == [referral.company] participant = referral.interaction.dit_participants.get() assert participant.adviser == self.user assert participant.team == self.user.dit_team
def test_updates_referral_status(self): """Test that the status of the referral is updated on success.""" referral = CompanyReferralFactory() url = _complete_url(referral.pk) request_data = _sample_valid_request_data(referral) with freeze_time(FROZEN_DATETIME): response = self.api_client.post(url, data=request_data) assert response.status_code == status.HTTP_201_CREATED response_data = response.json() referral.refresh_from_db() interaction = referral.interaction assert response_data == { 'id': response_data['id'], 'kind': Interaction.Kind.INTERACTION.value, 'status': Interaction.Status.COMPLETE.value, 'theme': interaction.theme, 'is_event': None, 'service_delivery_status': None, 'grant_amount_offered': None, 'net_company_receipt': None, 'policy_areas': [], 'policy_feedback_notes': '', 'policy_issue_types': [], 'was_policy_feedback_provided': interaction.was_policy_feedback_provided, 'communication_channel': { 'id': str(interaction.communication_channel.pk), 'name': interaction.communication_channel.name, }, 'subject': interaction.subject, 'date': interaction.date.date().isoformat(), 'dit_participants': [{ 'adviser': { 'id': str(dit_participant.adviser.pk), 'first_name': dit_participant.adviser.first_name, 'last_name': dit_participant.adviser.last_name, 'name': dit_participant.adviser.name, }, 'team': { 'id': str(dit_participant.team.pk), 'name': dit_participant.team.name, }, } for dit_participant in interaction.dit_participants.order_by('pk') ], 'notes': interaction.notes, 'company': { 'id': str(interaction.company.pk), 'name': interaction.company.name, }, 'companies': [ { 'id': str(interaction.company.pk), 'name': interaction.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, } for contact in interaction.contacts.order_by('pk')], 'event': None, 'service': { 'id': str(interaction.service.pk), 'name': interaction.service.name, }, 'service_answers': None, 'investment_project': None, 'archived_documents_url_path': interaction.archived_documents_url_path, 'were_countries_discussed': interaction.were_countries_discussed, 'export_countries': [], 'created_by': { 'id': str(interaction.created_by.pk), 'first_name': interaction.created_by.first_name, 'last_name': interaction.created_by.last_name, 'name': interaction.created_by.name, }, 'modified_by': { 'id': str(interaction.modified_by.pk), 'first_name': interaction.modified_by.first_name, 'last_name': interaction.modified_by.last_name, 'name': interaction.modified_by.name, }, 'created_on': format_date_or_datetime(FROZEN_DATETIME), 'modified_on': format_date_or_datetime(FROZEN_DATETIME), 'archived': False, 'archived_by': None, 'archived_on': None, 'archived_reason': None, 'company_referral': { 'id': str(referral.pk), 'subject': referral.subject, 'created_by': format_expected_adviser(referral.created_by), 'created_on': format_date_or_datetime(referral.created_on), 'recipient': format_expected_adviser(referral.recipient), }, 'large_capital_opportunity': None, 'related_trade_agreements': [], } assert referral.status == CompanyReferral.Status.COMPLETE assert referral.completed_by == self.user assert referral.completed_on == FROZEN_DATETIME assert referral.modified_by == self.user assert referral.modified_on == FROZEN_DATETIME