def test_serialize_party_with_translations(self):
        proj = ProjectFactory.create()

        questionnaire = q_factories.QuestionnaireFactory.create(
            project=proj)
        question = q_factories.QuestionFactory.create(
            type='S1',
            name='party_type',
            questionnaire=questionnaire)
        q_factories.QuestionOptionFactory.create(
            question=question,
            name='IN',
            label={'en': 'Individual', 'de': 'Individuell'})
        q_factories.QuestionOptionFactory.create(
            question=question,
            name='GR',
            label={'en': 'Group', 'de': 'Gruppe'})

        party = PartyFactory.create(project=proj)
        serializer = serializers.PartySerializer(party, context={
            'project': proj
        })
        serialized = serializer.data

        assert serialized['id'] == party.id
        assert serialized['name'] == party.name
        assert serialized['type'] == party.type
        assert serialized['type_display'] == {'en': 'Individual',
                                              'de': 'Individuell'}
        assert 'attributes' in serialized
    def test_validate_unknown_attributes(self):
        project = ProjectFactory.create(name='Test Project')
        content_type = ContentType.objects.get(
            app_label='party', model='party')
        schema = Schema.objects.create(
            content_type=content_type,
            selectors=(project.organization.id, project.id, ))

        Attribute.objects.create(
            schema=schema,
            name='notes',
            long_name='Notes',
            attr_type=AttributeType.objects.get(name='text'),
            index=0
        )

        party_data = {
            'name': 'Tea Party',
            'type': 'IN',
            'attributes': {
                'notes': 'Blah',
                'age': 'Blah'
            }
        }
        serializer = serializers.PartySerializer(
            data=party_data,
            context={'project': project}
        )

        with pytest.raises(ValidationError) as e:
            serializer.validate_attributes(party_data['attributes'])
        assert 'Unknown attribute "age"' in e.value.detail
    def test_serialize_party(self):
        party = PartyFactory.create()
        serializer = serializers.PartySerializer(party)
        serialized = serializer.data

        assert serialized['id'] == party.id
        assert serialized['name'] == party.name
        assert serialized['type'] == party.type
        assert 'attributes' in serialized
    def test_create_party(self):
        project = ProjectFactory.create(name='Test Project')

        party_data = {'name': 'Tea Party'}
        serializer = serializers.PartySerializer(data=party_data,
                                                 context={'project': project})
        serializer.is_valid(raise_exception=True)
        serializer.save()
        party_instance = serializer.instance
        assert party_instance.name == 'Tea Party'
    def test_serialize_party(self):
        party = PartyFactory.create()
        proj = ProjectFactory.create()
        serializer = serializers.PartySerializer(party, context={
            'project': proj
        })
        serialized = serializer.data

        assert serialized['id'] == party.id
        assert serialized['name'] == party.name
        assert serialized['type'] == party.type
        assert serialized['type_display'] == party.get_type_display()
        assert 'attributes' in serialized
示例#6
0
    def test_serialize_party(self):
        party = PartyFactory.create()
        serializer = serializers.PartySerializer(party)
        serialized = serializer.data

        assert serialized['id'] == party.id
        assert serialized['name'] == party.name
        assert serialized['type'] == party.type
        assert 'attributes' in serialized
        assert 'contacts' in serialized

        assert serialized['project']['id'] == party.project.id
        assert (serialized['project']['organization']['id'] ==
                party.project.organization.id)
示例#7
0
class XFormSubmissionSerializer(FieldSelectorSerializer,
                                serializers.Serializer):
    """
    Saves the full xml response from GeoODK Collect as a json object.
    """

    json_submission = serializers.JSONField(required=False)
    user = serializers.PrimaryKeyRelatedField(allow_null=True,
                                              queryset=User.objects.all(),
                                              required=False)
    questionnaire = serializers.PrimaryKeyRelatedField(
        allow_null=True, queryset=Questionnaire.objects.all(), required=False)
    instanceID = serializers.UUIDField(format='hex_verbose')

    parties = party_serializer.PartySerializer(read_only=True, many=True)
    spatial_units = SpatialUnitSerializer(read_only=True, many=True)
    tenure_relationships = party_serializer.TenureRelationshipReadSerializer(
        read_only=True, many=True)

    def create(self, validated_data):
        return XFormSubmission.objects.create(**validated_data)
    def test_sanitize_strings(self):
        project = ProjectFactory.create(name='Test Project')
        content_type = ContentType.objects.get(app_label='party',
                                               model='party')
        schema = Schema.objects.create(content_type=content_type,
                                       selectors=(
                                           project.organization.id,
                                           project.id,
                                       ))

        Attribute.objects.create(
            schema=schema,
            name='notes',
            long_name='Notes',
            attr_type=AttributeType.objects.get(name='text'),
            index=0)
        Attribute.objects.create(
            schema=schema,
            name='age',
            long_name='Homeowner Age',
            attr_type=AttributeType.objects.get(name='integer'),
            index=1,
            required=True,
            default=0)

        party_data = {
            'name': '<Tea Party>',
            'type': 'IN',
            'attributes': {
                'notes': '<Blah>',
                'age': 2
            }
        }
        serializer = serializers.PartySerializer(data=party_data,
                                                 context={'project': project})

        with pytest.raises(ValidationError) as e:
            serializer.is_valid(raise_exception=True)
        assert e.value.detail['name']
        assert e.value.detail['attributes']
    def test_validate_valid_attributes(self):
        project = ProjectFactory.create(name='Test Project')
        content_type = ContentType.objects.get(app_label='party',
                                               model='party')
        schema = Schema.objects.create(content_type=content_type,
                                       selectors=(
                                           project.organization.id,
                                           project.id,
                                       ))

        Attribute.objects.create(
            schema=schema,
            name='notes',
            long_name='Notes',
            attr_type=AttributeType.objects.get(name='text'),
            index=0)
        Attribute.objects.create(
            schema=schema,
            name='age',
            long_name='Homeowner Age',
            attr_type=AttributeType.objects.get(name='integer'),
            index=1,
            required=True,
            default=0)

        party_data = {
            'name': 'Tea Party',
            'type': 'IN',
            'attributes': {
                'notes': 'Blah',
                'age': 2
            }
        }
        serializer = serializers.PartySerializer(data=party_data,
                                                 context={'project': project})

        cleaned = serializer.validate_attributes(party_data['attributes'])
        assert cleaned == party_data['attributes']