Headmaster
Headmaster

Reputation: 2332

Serializer.data not evaluating queryset in tests

I have such serializer

class ActResultSerializer(serializers.Serializer):
    actions = serializers.SerializerMethodField()

    def get_actions(self, obj):
        return Actions.objects.filter(type='solution').values_list('code', flat=True)

Here is my test case

def test_return_to_provider(self):
    response = self.client.get('/acts/')
    self.assertEqual(response.status_code, 200)
    queryset = Act.objects.filter(deleted=False)
    self.assertEqual(
        len(response.data),
        queryset.count()
    )
    self.assertEqual(response.data, ActResultSerializer(queryset, many=True).data)

The problem is, that last assertEqual fails, because serializer data returns ('actions', <QuerySet []>). How can I evaluate that QuerySet to compare response and serializer datas?

Upvotes: 1

Views: 187

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476614

Your get_actions returns an empty QuerySet, not a list, so it will convert it to a string. You can use list(…) to convert it to a list of strings:

def get_actions(self, obj):
    return list(
        Actions.objects.filter(type='solution').values_list('code', flat=True)
    )

Upvotes: 1

Related Questions