예제 #1
0
파일: util.py 프로젝트: pombredanne/txyoga
class _BaseCollectionTest(object):
    """
    A base class for tests of a collection.
    """
    def setUp(self):
        self.collection = self.collectionClass()
        self.resource = IResource(self.collection)


    def addElements(self, elements=None):
        """
        Adds some element to the collection.

        If no elements are specified, create the default elements specified by
        the elementClass and elementArgs class attributes.
        """
        if elements is None:
            elements = [self.elementClass(*a) for a in self.elementArgs]

        for e in elements:
            self.collection.add(e)


    def _makeRequest(self, resource, request):
        """
        Makes a request to a particular resource.
        """
        self.request = request
        self.response = resource.render(request)


    def _decodeResponse(self):
        """
        Tries to decode the body of a response.
        """
        self.responseContent = json.loads(self.response)


    def _checkContentType(self, expectedContentType="application/json"):
        """
        Verifies the content type of a response.

        If the type is ``None``, verifies that the header is not passed. This
        is intended for cases where an empty response body is expected.
        """
        headers = self.request.responseHeaders.getRawHeaders("Content-Type")

        if expectedContentType is None:
            self.assertEqual(headers, None)
        else:
            self.assertEqual(headers, [expectedContentType])


    def _checkBadRequest(self, expectedCode):
        """
        Tests that a failed request has a particular response code, and that
        the response content has an error message and some details in it.
        """
        self.assertEqual(self.request.code, expectedCode)
        self.assertIn("errorMessage", self.responseContent)
        self.assertIn("errorDetails", self.responseContent)


    def _getResource(self, args=None, headers=None, path=()):
        """
        Generalized GET for a particular resource.
        """
        request = _FakeRequest(args=args, requestHeaders=headers)

        resource = self.resource
        for childName in path:
            resource = resource.getChildWithDefault(childName, request)

        self._makeRequest(resource, request)
        self._checkContentType()
        self._decodeResponse()


    def getElements(self, args=None, headers=None):
        """
        Gets a bunch of elements from a collection.
        """
        self._getResource(args, headers)


    def getElement(self, element, args=None, headers=None):
        """
        Gets a particular element from a collection.
        """
        self._getResource(args, headers, [element])


    def getElementChild(self, element, child, args=None, headers=None):
        """
        Gets a child of a particular element from a collection.
        """
        self._getResource(args, headers, [element, child])


    def updateElement(self, name, body, headers=None):
        """
        Update an element.

        For a successful update, the headers should contain a Content-Type.
        """
        request = _FakePUTRequest(body=body, requestHeaders=headers)
        elementResource = self.resource.getChild(name, request)
        self._makeRequest(elementResource, request)


    def deleteElement(self, name):
        """
        Delete an element.
        """
        request = _FakeDELETERequest()
        elementResource = self.resource.getChild(name, request)
        self._makeRequest(elementResource, request)


    def createElement(self, name, body, headers=None, method="PUT"):
        """
        Create a new element.
        """
        if method == "PUT":
            self.updateElement(name, body, headers)
        elif method == "POST":
            request = _FakePOSTRequest(body=body, requestHeaders=headers)
            self._makeRequest(self.resource, request)
예제 #2
0
class _BaseCollectionTest(object):
    """
    A base class for tests of a collection.
    """
    def setUp(self):
        self.collection = self.collectionClass()
        self.resource = IResource(self.collection)

    def addElements(self, elements=None):
        """
        Adds some element to the collection.

        If no elements are specified, create the default elements specified by
        the elementClass and elementArgs class attributes.
        """
        if elements is None:
            elements = [self.elementClass(*a) for a in self.elementArgs]

        for e in elements:
            self.collection.add(e)

    def _makeRequest(self, resource, request):
        """
        Makes a request to a particular resource.
        """
        self.request = request
        self.response = resource.render(request)

    def _decodeResponse(self):
        """
        Tries to decode the body of a response.
        """
        self.responseContent = json.loads(self.response)

    def _checkContentType(self, expectedContentType="application/json"):
        """
        Verifies the content type of a response.

        If the type is ``None``, verifies that the header is not passed. This
        is intended for cases where an empty response body is expected.
        """
        headers = self.request.responseHeaders.getRawHeaders("Content-Type")

        if expectedContentType is None:
            self.assertEqual(headers, None)
        else:
            self.assertEqual(headers, [expectedContentType])

    def _checkBadRequest(self, expectedCode):
        """
        Tests that a failed request has a particular response code, and that
        the response content has an error message and some details in it.
        """
        self.assertEqual(self.request.code, expectedCode)
        self.assertIn("errorMessage", self.responseContent)
        self.assertIn("errorDetails", self.responseContent)

    def _getResource(self, args=None, headers=None, path=()):
        """
        Generalized GET for a particular resource.
        """
        request = _FakeRequest(args=args, requestHeaders=headers)

        resource = self.resource
        for childName in path:
            resource = resource.getChildWithDefault(childName, request)

        self._makeRequest(resource, request)
        self._checkContentType()
        self._decodeResponse()

    def getElements(self, args=None, headers=None):
        """
        Gets a bunch of elements from a collection.
        """
        self._getResource(args, headers)

    def getElement(self, element, args=None, headers=None):
        """
        Gets a particular element from a collection.
        """
        self._getResource(args, headers, [element])

    def getElementChild(self, element, child, args=None, headers=None):
        """
        Gets a child of a particular element from a collection.
        """
        self._getResource(args, headers, [element, child])

    def updateElement(self, name, body, headers=None):
        """
        Update an element.

        For a successful update, the headers should contain a Content-Type.
        """
        request = _FakePUTRequest(body=body, requestHeaders=headers)
        elementResource = self.resource.getChild(name, request)
        self._makeRequest(elementResource, request)

    def deleteElement(self, name):
        """
        Delete an element.
        """
        request = _FakeDELETERequest()
        elementResource = self.resource.getChild(name, request)
        self._makeRequest(elementResource, request)

    def createElement(self, name, body, headers=None, method="PUT"):
        """
        Create a new element.
        """
        if method == "PUT":
            self.updateElement(name, body, headers)
        elif method == "POST":
            request = _FakePOSTRequest(body=body, requestHeaders=headers)
            self._makeRequest(self.resource, request)