class ChangeRequestSerializer(serializers.Serializer): """ Validate change requests and convert it to the format expected by dnb-service. """ name = serializers.CharField(source='primary_name', required=False) trading_names = serializers.ListField(required=False) number_of_employees = serializers.IntegerField(source='employee_number', required=False) turnover = serializers.IntegerField(source='annual_sales', required=False) address = AddressRequestSerializer(required=False) website = RelaxedURLField(source='domain', required=False) def validate_website(self, website): """ Change website to domain. """ return urlparse(website).netloc
class DNBCompanyInvestigationSerializer(serializers.Serializer): """ Validate POST data for DNBCompanyInvestigationView and convert it to the format expected by dnb-service. """ company = NestedRelatedField(Company) name = serializers.CharField(source='primary_name') address = DNBAddressSerializer() website = RelaxedURLField( source='domain', required=False, allow_blank=True, ) telephone_number = serializers.CharField( required=False, allow_blank=True, ) def validate_website(self, website): """ Change website to domain. """ return urlparse(website).netloc def validate(self, data): """ Validate if either website or telephone_number is present. """ data = super().validate(data) if ( data.get('domain') in (None, '') and data.get('telephone_number') in (None, '') ): raise serializers.ValidationError( 'Either website or telephone_number must be provided.', ) address_data = data.pop('address', {}) return { **data, **address_data, }
def test_url_field_output(self, input_website, expected_website): """Tests that RelaxedURLField prepends http:// when one is not stored.""" assert RelaxedURLField().to_representation( input_website) == expected_website
def test_url_field_input(self, input_website, expected_website): """Tests that RelaxedURLField prepends http:// when one is not provided.""" assert RelaxedURLField().run_validation( input_website) == expected_website