3
from ivle.webapp.base.rest import JSONRESTView, named_operation
4
from ivle.webapp.errors import BadRequest, MethodNotAllowed
3
from ivle.webapp.base.rest import (JSONRESTView, named_operation,
5
from ivle.webapp.errors import BadRequest, MethodNotAllowed, Unauthorized
5
6
from ivle.webapp.testing import FakeUser, FakeRequest
7
8
class JSONRESTViewTestWithoutPUT(JSONRESTView):
8
9
'''A small JSON REST view for testing purposes, without a PUT method.'''
10
def get_permissions(self, user):
11
if user.login == u'fakeuser':
12
return set(['view', 'edit'])
13
if user.login == u'otheruser':
17
@require_permission('view')
10
19
return {'method': 'get'}
21
@require_permission('edit')
12
22
def PATCH(self, req, data):
13
23
return {'method': 'patch',
14
24
'result': data['result'], 'test': data['test']}
26
@named_operation('view')
17
27
def do_stuff(self, req, what):
18
28
return {'result': 'Did %s!' % what}
30
@named_operation('edit')
21
31
def say_something(self, req, thing='nothing'):
22
32
return {'result': 'Said %s!' % thing}
34
@named_operation('edit')
25
35
def do_say_something(self, req, what, thing='nothing'):
26
36
return {'result': 'Said %s and %s!' % (what, thing)}
38
@named_operation('view')
29
39
def get_req_method(self, req):
30
40
return {'method': req.method}
32
42
class JSONRESTViewTest(JSONRESTViewTestWithoutPUT):
33
43
'''A small JSON REST view for testing purposes.'''
44
@require_permission('edit')
34
45
def PUT(self, req, data):
35
46
return {'method': 'put',
36
47
'result': data['result'], 'test': data['test']}
258
269
assert e.message == 'Invalid JSON data'
260
271
raise AssertionError("did not raise BadRequest")
273
class TestJSONRESTSecurity:
274
def testGoodMethod(self):
276
req.user.login = u'otheruser'
278
view = JSONRESTViewTest(req)
280
assert req.content_type == 'application/json'
281
assert req.response_body == '{"method": "get"}\n'
283
def testBadMethod(self):
285
req.user.login = u'otheruser'
287
view = JSONRESTViewTest(req)
290
except Unauthorized, e:
293
raise AssertionError("did not raise Unauthorized")
295
def testGoodNamedOperation(self):
297
req.user.login = u'otheruser'
299
req.request_body = urllib.urlencode({'ivle.op': 'do_stuff',
301
view = JSONRESTViewTest(req)
303
assert req.content_type == 'application/json'
304
assert req.response_body == '{"result": "Did blah!"}\n'
306
def testBadNamedOperation(self):
308
req.user.login = u'otheruser'
310
req.request_body = urllib.urlencode({'ivle.op': 'say_something'})
311
view = JSONRESTViewTest(req)
314
except Unauthorized, e:
317
raise AssertionError("did not raise Unauthorized")