def test_unknown_attributes(self):
        project = ProjectFactory.create(name='Test Project')
        su = SpatialUnitFactory.create(project=project)
        party = PartyFactory.create(project=project)

        content_type = ContentType.objects.get(
            app_label='party', model='tenurerelationship')
        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
        )

        data = {
            'spatial_unit': su.id,
            'party': party.id,
            'tenure_type': 'WR',
            'attributes': {
                'notes': 'Blah',
                'age': 'Blah'
            }
        }
        serializer = serializers.TenureRelationshipSerializer(
            data=data,
            context={'project': project}
        )
        assert serializer.is_valid() is False
        assert 'Unknown attribute "age"' in serializer.errors['attributes']
    def test_invalid_custom_tenure_type(self):
        project = ProjectFactory.create()

        questionnaire = q_factories.QuestionnaireFactory.create(
            project=project)
        question = q_factories.QuestionFactory.create(
            type='S1',
            name='tenure_type',
            questionnaire=questionnaire)
        q_factories.QuestionOptionFactory.create(
            question=question,
            name='FU',
            label='FU Label')

        su = SpatialUnitFactory.create(project=project)
        party = PartyFactory.create(project=project)
        data = {
            'tenure_type': 'FH',
            'spatial_unit': su.id,
            'party': party.id
        }

        serializer = serializers.TenureRelationshipSerializer(
            data=data,
            context={'project': project})
        assert serializer.is_valid() is False
        assert ("'FH' is not a valid choice for field 'tenure_type'." in
                serializer.errors['tenure_type'])
    def test_valid_tenure_type(self):
        project = ProjectFactory.create()
        su = SpatialUnitFactory.create(project=project)
        party = PartyFactory.create(project=project)
        data = {'tenure_type': 'FH', 'spatial_unit': su.id, 'party': party.id}

        serializer = serializers.TenureRelationshipSerializer(
            data=data, context={'project': project})
        assert serializer.is_valid() is True
    def test_invalid_tenure_type(self):
        project = ProjectFactory.create()
        su = SpatialUnitFactory.create(project=project)
        party = PartyFactory.create(project=project)
        data = {'tenure_type': 'BOO', 'spatial_unit': su.id, 'party': party.id}

        serializer = serializers.TenureRelationshipSerializer(
            data=data, context={'project': project})
        assert serializer.is_valid() is False
        assert ("'BOO' is not a valid choice for field 'tenure_type'."
                in serializer.errors['tenure_type'])
    def test_sanitise_string(self):
        project = ProjectFactory.create(name='Test Project')
        su = SpatialUnitFactory.create(project=project)
        party = PartyFactory.create(project=project)

        content_type = ContentType.objects.get(app_label='party',
                                               model='tenurerelationship')
        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)

        data = {
            'spatial_unit': su.id,
            'party': party.id,
            'tenure_type': 'WR',
            'attributes': {
                'notes': '<Blah>',
                'age': 2
            }
        }
        serializer = serializers.TenureRelationshipSerializer(
            data=data, context={'project': project})
        assert serializer.is_valid() is False
        assert SANITIZE_ERROR in serializer.errors['attributes']