Beispiel #1
0
    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
Beispiel #2
0
    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