fixtures.md 2.1 KB

Title: Les fixtures Category: 3615 ma vie mon oeuvre Tags: 3615, meta Date: 2018/07/09 20:00 Modified: 2018/07/10 9:00 Summary: Hein, pour quoi ? Image: Lang: fr


class TestAccess:
    def _test_access(self, http_method, resource):
        http_method('/resources')
        assert resource.authorization_ctx.access == CollectionAccess.ALL

        http_method('/resources/1')
        assert resource.authorization_ctx.access == ItemAccess.SINGLE

        http_method('/self/resources')
        assert resource.authorization_ctx.access == CollectionAccess.SELF

        http_method('/others/2/resources')
        assert resource.authorization_ctx.access == CollectionAccess.RELATED

    def test_get(self, client, resource):
        self._test_access(client.simulate_get, resource)

    def test_post(self, client, resource):
        self._test_access(client.simulate_post, resource)

    def test_put(self, client, resource):
        self._test_access(client.simulate_put, resource)

    def test_patch(self, client, resource):
        self._test_access(client.simulate_patch, resource)

    def test_delete(self, client, resource):
        self._test_access(client.simulate_delete, resource)
@pytest.fixture(params=[
    {
        'endpoint': '/resources',
        'access': CollectionAccess.ALL,
    },
    {
        'endpoint': '/resources/1',
        'access': ItemAccess.SINGLE,
    },
    {
        'endpoint': '/self/resources',
        'access': CollectionAccess.SELF,
    },
    {
        'endpoint': '/others/2/resources',
        'access': CollectionAccess.RELATED,
    },
])
def scenario(request):
    return request.param

@pytest.fixture
def endpoint(scenario):
    return scenario['endpoint']

@pytest.fixture
def access(scenario):
    return scenario['access']

@pytest.fixture(params=['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
def http_method(client, request):
    method = getattr(client, 'simulate_{}'.format(request.param.lower()))
    return method

def test_access(resource, endpoint, access, http_method):
    http_method(endpoint)
    assert resource.authorization_ctx.access == access