예제 #1
0
    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
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
    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,
        }
예제 #9
0
    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',
        }