Ejemplo n.º 1
0
    def test_handler_render(self):
        """
        Show that the handlers are also added into the data field, as
        the Collection+JSON has this undefined, and that at the protocol
        level (for both ``application/x-www-form-urlencoded`` and
        ``multipart/form-data`` encode "buttons" like any other field
        anyway.  We will have type to distinguish between the standard
        inputs and those that have attached handlers.
        """

        f = form.ItemForm(self.item, self.request)
        f.update()

        result = core.formfields_to_collection_template(f)

        answer = json.loads("""
        {
            "data": [
                {
                    "name": "form.widgets.item_id",
                    "value": "", "prompt": "Item ID",
                    "type": "TextLine", "required": true,
                    "options": null,
                    "description": "The unique identifier for this item."
                },
                {
                    "name": "form.widgets.name",
                    "value": "", "prompt": "Name",
                    "type": "TextLine", "required": true,
                    "options": null,
                    "description": "Name of this item."
                },
                {
                    "name": "form.widgets.description",
                    "value": "",
                    "prompt": "Description",
                    "type": "TextLine", "required": false,
                    "options": null,
                    "description": "The description of this item."
                },
                {
                    "name": "form.buttons.save",
                    "value": null,
                    "type": "Button", "required": false,
                    "prompt": "Save",
                    "description": null
                },
                {
                    "name": "form.buttons.save_notify",
                    "value": null,
                    "type": "Button", "required": false,
                    "prompt": "Save and Notify",
                    "description": null
                }
            ]
        }
        """)

        self.assertEqual(result, answer)
        self.assertEqual(result, f._jc_template)
Ejemplo n.º 2
0
    def test_base_render(self):
        f = form.ItemFormJsonBase(self.item, self.request)
        f.update()

        result = core.formfields_to_collection_template(f)

        answer = json.loads("""
        {
            "data": [
                {
                    "name": "form.widgets.item_id",
                    "value": "", "prompt": "Item ID",
                    "type": "TextLine", "required": true,
                    "options": null,
                    "description": "The unique identifier for this item."
                },
                {
                    "name": "form.widgets.name", "value": "", "prompt": "Name",
                    "type": "TextLine", "required": true,
                    "options": null,
                    "description": "Name of this item."
                },
                {
                    "name": "form.widgets.description", "value": "",
                    "prompt": "Description",
                    "type": "TextLine", "required": false,
                    "options": null,
                    "description": "The description of this item."
                }
            ]
        }
        """)

        self.assertEqual(result, answer)
        self.assertEqual(result, f._jc_template)
Ejemplo n.º 3
0
    def update(self):
        """
        Convert JSON input into standard request.
        """

        _disable_csrf_for_webservices(self)
        update_json_collection_form(self)
        super(JsonCollectionFormMixin, self).update()
        self._jc_template = formfields_to_collection_template(self)

        return None
Ejemplo n.º 4
0
    def test_choice_render(self):
        """
        Choice rendering
        """

        f = form.OptionForm(self.option, self.request)
        f.update()

        result = core.formfields_to_collection_template(f)

        # XXX the --NOVALUE-- token really needs rethinking.  Plone
        # does not seem to let mapping of these things to be done nicely
        answer = json.loads("""
        {
            "data": [
                {
                    "name": "form.widgets.item_id",
                    "value": "", "prompt": "Item ID",
                    "type": "TextLine", "required": true,
                    "options": null,
                    "description":
                        "The item id that this option is attached to."
                },
                {
                    "name": "form.widgets.option",
                    "value": [], "prompt": "Option",
                    "type": "Choice", "required": false,
                    "options": [
                        {"value": "--NOVALUE--", "text": "No value"},
                        {"value": "small", "text": "small"},
                        {"value": "medium", "text": "medium"},
                        {"value": "large",  "text": "large"}
                    ],
                    "description": "The desired option."
                },
                {
                    "name": "form.buttons.submit",
                    "value": null,
                    "type": "Button", "required": false,
                    "prompt": "Submit",
                    "description": null
                }
            ]
        }
        """)

        self.assertEqual(result, answer)
        self.assertEqual(result, f._jc_template)
Ejemplo n.º 5
0
    def update(self):
        """
        Convert JSON input into standard request.
        """

        # XXX at some point we need to consider the security and how
        # this might be vulnerable to XSS (for browsers that do not have
        # origin policy support).
        self.disableAuthenticator = True

        update_json_collection_form(self)

        super(JsonCollectionFormMixin, self).update()

        self._jc_template = formfields_to_collection_template(self)

        return None
Ejemplo n.º 6
0
    def test_submit_error(self):
        request = TestRequest(stdin=StringIO('''{ "template": {
            "data": [
                {
                    "name": "form.widgets.item_id",
                    "value": "TestItem\\nID"
                },
                {
                    "name": "form.widgets.name",
                    "value": "A Test Item Name"
                },
                {
                    "name": "form.widgets.description",
                    "value": "This describes the item."
                },
                {
                    "name": "form.buttons.save",
                    "value": 1
                }
            ]
        }}'''), method='POST')

        f = form.ItemForm(self.item, request)
        f.update()
        result = core.formfields_to_collection_template(f)

        answer = json.loads("""
        {
            "data": [
                {
                    "name": "form.widgets.item_id",
                    "value": "TestItem\\nID",
                    "prompt": "Item ID",
                    "type": "TextLine", "required": true,
                    "options": null,
                    "description": "The unique identifier for this item."
                },
                {
                    "name": "form.widgets.name",
                    "value": "A Test Item Name",
                    "prompt": "Name",
                    "type": "TextLine", "required": true,
                    "options": null,
                    "description": "Name of this item."
                },
                {
                    "name": "form.widgets.description",
                    "value": "This describes the item.",
                    "type": "TextLine", "required": false,
                    "prompt": "Description",
                    "options": null,
                    "description": "The description of this item."
                },
                {
                    "name": "form.buttons.save",
                    "value": null,
                    "type": "Button", "required": false,
                    "prompt": "Save",
                    "description": null
                },
                {
                    "name": "form.buttons.save_notify",
                    "value": null,
                    "type": "Button", "required": false,
                    "prompt": "Save and Notify",
                    "description": null
                }
            ]
        }
        """)

        self.assertEqual(result, answer)
        self.assertEqual(result, f._jc_template)

        error_answer = json.loads("""
        {
            "title": "Error",
            "code": "error",
            "message": "There were some errors.",
            "errors": [
                {
                    "message": "Constraint not satisfied",
                    "name": "form.widgets.item_id"
                }
            ]
        }
        """)

        self.assertEqual(error_answer, f._jc_error)

        # that item is still unchanged.
        self.assertIsNone(self.item.description)