Automated testing

In rest api the functionality we often need to test is the request and response, the framework contains an automated test mixin

Generate a test

just add the PostRecordTestGenerator to your view and in the init function init the test

from easy_rest.test_framework.recorder.post_record_mixins import PostRecordTestGenerator
class ApiTest(PostRecordTestGenerator, RestApiView):

    def __init__(self, *args, **kwargs):
        super(ApiTest, self).__init__(*args, **kwargs)
        self.init_test(app_name='demo_app')

    def echo(self, data):
        return {"echo": data}

then run some requests for example:

let api = new RequestHandler("/some_url");

api.PostSync({});
api.PostSync({"action":"echo", "data":"hello"});

The framework will generate tests for you

Generated test example

from django.test import TestCase
from demo_app.views import ApiTest
from django.test import RequestFactory
from django.contrib.auth.models import AnonymousUser, User
from easy_rest.test_framework.resolvers.resolve import register_unittest
from django.test.utils import override_settings

register_unittest()


def resolve_user(pk):
    try:
        return User.objects.get(pk=pk)
    except Exception:
        return AnonymousUser()


class TestApiTest(TestCase):
    @override_settings(DEBUG=True)
    def test_echo(self):
        request = RequestFactory()
        request.data = {'action': 'echo', 'data': 'asdf'}
        request.user = resolve_user(None)
        result = {'debug': {'api-attributes': {'api-allowed-methods': ['__all__']},
                            'processed-data': {'action': 'echo', 'data': 'asdf'}},
                  'debug-mode': ['enabled', 'to disable go to settings.py and change DEBUG=True to false'],
                  'data': {'echo': 'asdf'}}
        if type(result) is dict:
            return self.assertDictEqual(result, self.test.post(request).data)
        return self.assertEqual(result, self.test.post(request).data)

    def __init__(self, *args, **kwargs):
        super(TestApiTest, self).__init__(*args, **kwargs)
        self.test = ApiTest()

    @override_settings(DEBUG=True)
    def test_easy_rest_2017_08_26_12_38_31_143966_test(self):
        request = RequestFactory()
        request.data = {}
        request.user = resolve_user(None)
        result = {'error': 'no action in data',
                  'debug': {'api-attributes': {'api-allowed-methods': ['__all__']}, 'processed-data': {}},
                  'debug-mode': ['enabled', 'to disable go to settings.py and change DEBUG=True to false']}
        if type(result) is dict:
            return self.assertDictEqual(result, self.test.post(request).data)
        return self.assertEqual(result, self.test.post(request).data)