Ejemplo n.º 1
0
class TestViewsetBindedSchemas(unittest.TestCase):
    def setUp(self):
        self.viewset = ViewSet()
        self.viewset.responses = mock.MagicMock()
        self.resource = mock.MagicMock()

    def test_request_schemas_have_header_and_querystring(self):
        self.viewset = ViewSet(
            default_get_arguments={}, default_object_arguments={}, object_get_arguments={}
        )
        arguments = self.viewset.object_arguments(self.resource, "GET")
        schema = arguments["schema"]
        self.assertIn("querystring", schema)
        self.assertIn("header", schema)

    def test_payload_request_schemas_have_a_body(self):
        arguments = self.viewset.object_arguments(self.resource, "PUT")
        schema = arguments["schema"]
        self.assertIn("body", schema)

    def test_plural_deserialize_sort(self):
        arguments = self.viewset.plural_arguments(self.resource, "DELETE")
        schema = arguments["schema"]
        value = {"querystring": {"_sort": "foo,-bar"}}
        deserialized = schema.deserialize(value)
        expected = {"querystring": {"_sort": ["foo", "-bar"]}}
        self.assertEqual(deserialized, expected)

    def test_plural_get_deserialize_fields(self):
        arguments = self.viewset.plural_arguments(self.resource, "GET")
        schema = arguments["schema"]
        value = {"querystring": {"_fields": "foo,bar"}}
        deserialized = schema.deserialize(value)
        expected = {"querystring": {"_fields": ["foo", "bar"]}}
        self.assertEqual(deserialized, expected)

    def test_get_object_deserialize_fields(self):
        arguments = self.viewset.object_arguments(self.resource, "GET")
        schema = arguments["schema"]
        value = {"querystring": {"_fields": "foo,bar"}}
        deserialized = schema.deserialize(value)
        expected = {"querystring": {"_fields": ["foo", "bar"]}}
        self.assertEqual(deserialized, expected)

    def test_patch_object_validate_response_behavior(self):
        arguments = self.viewset.plural_arguments(self.resource, "PATCH")
        schema = arguments["schema"]
        invalid = {"header": {"Response-Behavior": "impolite"}}
        self.assertRaises(colander.Invalid, schema.deserialize, invalid)
Ejemplo n.º 2
0
    def test_class_parameters_are_used_for_plural_arguments(self, mocked):
        default_arguments = {"cors_headers": mock.sentinel.cors_headers}

        default_get_arguments = {"accept": mock.sentinel.accept}

        default_plural_arguments = {"cors_origins": mock.sentinel.cors_origins}

        plural_get_arguments = {"error_handler": mock.sentinel.error_handler}

        viewset = ViewSet(
            default_arguments=default_arguments,
            default_get_arguments=default_get_arguments,
            default_plural_arguments=default_plural_arguments,
            plural_get_arguments=plural_get_arguments,
        )

        viewset.responses = mock.MagicMock()
        arguments = viewset.plural_arguments(mock.MagicMock(), "get")

        self.assertDictEqual(
            arguments,
            {
                "schema": mocked().bind(),
                "accept": mock.sentinel.accept,
                "cors_headers": mock.sentinel.cors_headers,
                "cors_origins": mock.sentinel.cors_origins,
                "error_handler": mock.sentinel.error_handler,
                "validators": [colander_validator],
                "response_schemas": viewset.responses.get_and_bind(),
            },
        )
Ejemplo n.º 3
0
 def test_default_arguments_are_copied_before_being_returned(self):
     original_arguments = {}
     viewset = ViewSet(plural_get_arguments=original_arguments)
     viewset.responses = mock.MagicMock()
     arguments = viewset.plural_arguments(mock.MagicMock(), "GET")
     self.assertEqual(original_arguments, {})
     self.assertNotEquals(original_arguments, arguments)
Ejemplo n.º 4
0
    def test_a_default_schema_is_added_when_method_doesnt_match(self, mocked):
        viewset = ViewSet()
        resource = mock.MagicMock()
        viewset.responses = mock.MagicMock()
        mocked.Mapping.return_value = mock.sentinel.default_schema

        arguments = viewset.plural_arguments(resource, "GET")
        self.assertNotEqual(arguments["schema"], resource.schema)

        mocked.assert_called_with()
Ejemplo n.º 5
0
 def test_schema_is_added_when_uppercase_method_matches(self):
     viewset = ViewSet(plural_methods=("GET", "DELETE"))
     viewset.responses = mock.MagicMock()
     arguments = viewset.plural_arguments(mock.MagicMock(), "get")
     self.assertIn("schema", arguments)
Ejemplo n.º 6
0
 def test_schema_is_added_when_method_matches(self):
     viewset = ViewSet()
     viewset.responses = mock.MagicMock()
     resource = mock.MagicMock()
     arguments = viewset.plural_arguments(resource, "GET")
     self.assertIn("schema", arguments)
Ejemplo n.º 7
0
 def test_permission_private_is_set_by_default(self):
     viewset = ViewSet()
     viewset.responses = mock.MagicMock()
     args = viewset.plural_arguments(mock.MagicMock(), "GET")
     self.assertEqual(args["permission"], "private")
Ejemplo n.º 8
0
 def test_permission_dynamic_is_set_by_default(self):
     viewset = ViewSet()
     viewset.responses = mock.MagicMock()
     resource = mock.MagicMock()
     args = viewset.plural_arguments(resource, "GET")
     self.assertEqual(args["permission"], "dynamic")