예제 #1
0
    def post(self, request):
        """
        Given a minimal set of fields that may be necessary for DNB investigation,
        create a Company record in DataHub.
        """
        formatted_company_data = format_dnb_company_investigation(request.data)
        company_serializer = DNBCompanyInvestigationSerializer(
            data=formatted_company_data)

        try:
            company_serializer.is_valid(raise_exception=True)
        except serializers.ValidationError:
            message = 'Company investigation payload failed serializer validation'
            extra_data = {
                'formatted_dnb_company_data': formatted_company_data,
                'dh_company_serializer_errors': company_serializer.errors,
            }
            logger.error(message, extra=extra_data)
            raise

        datahub_company = company_serializer.save(
            created_by=request.user,
            modified_by=request.user,
            pending_dnb_investigation=True,
        )

        statsd.incr(f'dnb.create.investigation')
        return Response(
            company_serializer.to_representation(datahub_company), )
예제 #2
0
def test_investigation_serializer_no_investigation_data_valid(
    db,
    investigation_payload,
    investigation_data_override,
    override_function,
):
    """
    Test if DNBCompanyInvestigationSerializer is valid without dnb_investigation_data
    """
    data = override_function(
        format_dnb_company_investigation(investigation_payload, ),
        investigation_data_override,
    )
    serializer = DNBCompanyInvestigationSerializer(data=data)
    assert serializer.is_valid()
예제 #3
0
def test_investigation_serializer_invalid(
    db,
    investigation_payload,
    investigation_payload_override,
    expected_error,
):
    """
    Test if DNBCompanyInvestigationSerializer fails given an invalid payload.
    """
    serializer = DNBCompanyInvestigationSerializer(
        data=format_dnb_company_investigation(
            {
                **investigation_payload,
                **investigation_payload_override
            }, ), )
    assert not serializer.is_valid()
    assert serializer.errors == expected_error
예제 #4
0
def test_investigation_serializer_valid(
    db,
    investigation_payload,
    investigation_payload_override,
):
    """
    Test if DNBCompanyInvestigationSerializer saves a Company record given
    a valid payload.
    """
    data = format_dnb_company_investigation(
        {
            **investigation_payload,
            **investigation_payload_override,
        }, )
    serializer = DNBCompanyInvestigationSerializer(data=data)
    assert serializer.is_valid()

    company = serializer.save()
    company.refresh_from_db()
    assert_company_data(company, data)
예제 #5
0
def test_investigation_serializer_null_fields_invalid(
    db,
    investigation_payload,
    investigation_payload_override,
    override_function,
):
    """
    If website as well as telephone_number are not given, the serializer
    should return an error.
    """
    data = format_dnb_company_investigation(
        override_function(
            investigation_payload,
            investigation_payload_override,
        ), )
    serializer = DNBCompanyInvestigationSerializer(data=data)
    assert not serializer.is_valid()
    assert serializer.errors == {
        'non_field_errors': [
            'Either website or telephone_number must be provided.',
        ],
    }
예제 #6
0
def test_investigation_serializer_null_fields_valid(
    db,
    investigation_payload,
    investigation_payload_override,
    override_function,
):
    """
    Test if DNBCompanyInvestigationSerializer saves a Company record given
    a valid payload.

    A valid payload has wither a valid URL for website or valid telephone_number:
    country_code and number.
    """
    data = format_dnb_company_investigation(
        override_function(
            investigation_payload,
            investigation_payload_override,
        ), )
    serializer = DNBCompanyInvestigationSerializer(data=data)
    assert serializer.is_valid()

    company = serializer.save()
    company.refresh_from_db()
    assert_company_data(company, data)