예제 #1
0
 def test_invalid_input(self):
     import json
     import StringIO
     from zope.publisher.browser import TestRequest
     request = TestRequest()
     request.stdin = StringIO.StringIO('invalid json')
     view = self.JsonView(None, request)
     response = view()
     self.assertEqual(
             json.loads(response),
             {'type': 'error',
              'message': 'Invalid JSON input'})
예제 #2
0
 def test_invalid_input(self):
     import json
     import StringIO
     from zope.publisher.browser import TestRequest
     request = TestRequest()
     request.stdin = StringIO.StringIO('invalid json')
     view = self.JsonView(None, request)
     response = view()
     self.assertEqual(json.loads(response), {
         'type': 'error',
         'message': 'Invalid JSON input'
     })
예제 #3
0
 def test_bad_method(self):
     import json
     import StringIO
     import mock
     from zope.publisher.browser import TestRequest
     request = TestRequest()
     request.stdin = StringIO.StringIO()
     context = mock.Mock()
     context.getPhysicalPath.return_value = ['', 'Plone', 'client', 'api']
     view = self.JsonView(context, request)
     response = view()
     self.assertEqual(request.response.getStatus(), 405)
     self.assertEqual(
             json.loads(response),
             {'type': 'error',
              'message': 'HTTP method not allowed'})
예제 #4
0
 def test_bad_method(self):
     import json
     import StringIO
     import mock
     from zope.publisher.browser import TestRequest
     request = TestRequest()
     request.stdin = StringIO.StringIO()
     context = mock.Mock()
     context.getPhysicalPath.return_value = ['', 'Plone', 'client', 'api']
     view = self.JsonView(context, request)
     response = view()
     self.assertEqual(request.response.getStatus(), 405)
     self.assertEqual(json.loads(response), {
         'type': 'error',
         'message': 'HTTP method not allowed'
     })
예제 #5
0
 def test_input_error(self):
     request = TestRequest()
     request.stdin = StringIO(json.dumps({'template': {
         'data': [
             {
                 'name': 'SearchableText',
                 'value': None,
             }
         ]
     }}))
     f = search.JsonSearchPage(self.portal, request)
     results = json.loads(f())
     self.assertEqual(results,  {'collection': {
         'version': '1.0',
         'error': 'input error',
         'template': [
             {
                 u'name': u'SearchableText',
                 u'prompt': u'SearchableText',
                 u'value': u'',
             },
             {
                 u'name': u'Title',
                 u'prompt': u'Title',
                 u'value': u'',
             },
             {
                 u'name': u'Description',
                 u'prompt': u'Description',
                 u'value': u'',
             },
             {
                 u'name': u'Subject',
                 u'prompt': u'Subject',
                 u'value': u'',
                 u'options': [],
             },
             {
                 u'name': u'portal_type',
                 u'prompt': u'portal_type',
                 u'value': u'',
                 u'options': [],
             },
         ],
     }})
예제 #6
0
    def test_query(self):
        portal = self.portal

        setRoles(portal, TEST_USER_ID, ['Manager'])
        login(portal, TEST_USER_NAME)
        portal.invokeFactory('News Item', 'testnews', title=u'Test News',
            subject=['Portal News'])
        portal.invokeFactory('Document', 'testpage', title=u'Test Page',
            text='This is a simple page')
        workflowTool = getToolByName(portal, 'portal_workflow')
        workflowTool.setDefaultChain("simple_publication_workflow")
        workflowTool.doActionFor(portal.testpage, 'publish')

        setRoles(portal, TEST_USER_ID, ['Member'])

        answer = {'collection': {
            'version': '1.0',
            'template': [
                {
                    u'name': u'SearchableText',
                    u'prompt': u'SearchableText',
                    u'value': u'',
                },
                {
                    u'name': u'Title',
                    u'prompt': u'Title',
                    u'value': u'',
                },
                {
                    u'name': u'Description',
                    u'prompt': u'Description',
                    u'value': u'',
                },
                {
                    u'name': u'Subject',
                    u'prompt': u'Subject',
                    u'value': u'',
                    u'options': [{u'value': u'Portal News'}],
                },
                {
                    u'name': u'portal_type',
                    u'prompt': u'portal_type',
                    u'value': u'',
                    u'options': [
                        {u'value': u'Document'},
                        {u'value': u'News Item'}
                    ],
                },
            ],
        }}

        f = search.JsonSearchPage(self.portal, self.request)
        results = json.loads(f())
        self.assertEqual(results, answer)

        import transaction
        transaction.commit()

        answer['collection']['href'] = 'http://nohost/plone/search'

        self.testbrowser.addHeader('Accept',
            'application/vnd.physiome.pmr2.json.1')
        self.testbrowser.open('http://nohost/plone/search')
        self.assertEqual(json.loads(self.testbrowser.contents), answer)

        request = TestRequest()
        request.stdin = StringIO(json.dumps({'template': {
            'data': [
                {
                    'name': 'SearchableText',
                    'value': 'simple',
                }
            ]
        }}))
        f = search.JsonSearchPage(self.portal, request)
        results = json.loads(f())
        links = [{
            'href': u'http://nohost/plone/testpage',
            'prompt': u'Test Page',
            'rel': u'bookmark'
        }]
        self.assertEqual(results['collection']['links'], links)

        self.testbrowser.open('http://nohost/plone/search',
            data=request.stdin.getvalue())
        self.assertEqual(
            json.loads(self.testbrowser.contents)['collection']['links'],
            links)