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'})
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' })
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'})
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' })
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': [], }, ], }})
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)