diff -r b5deb8e32219 -r fc5ed157ebfe src/cm/tests/test_api.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/tests/test_api.py Fri Jul 09 10:05:29 2010 +0200 @@ -0,0 +1,207 @@ +from django.test import TestCase +from django.test.client import Client +from django.core import management +from datetime import datetime +from cm.activity import * +from cm.models import * +from cm.security import * + +from django.http import HttpRequest, HttpResponse +from django.utils import simplejson + +from cm.api.handlers import * + +#from piston.test import TestCase +from piston.models import Consumer +from piston.handler import BaseHandler +from piston.utils import rc +from piston.resource import Resource + +class FalseRequest(object): + def __init__(self, user): + self.user = user + +class APITest(TestCase): + fixtures = ['roles_generic', 'test_content', ] + + def test_text_get(self): + """ + Anonymous api call + """ + + resource = Resource(AnonymousTextHandler) + request = HttpRequest() + setattr(request, 'user' , None) + request.method = 'GET' + + # get public text + response = resource(request, key='text_key_4', emitter_format='json') + self.assertEquals(200, response.status_code) # 401: forbidden + response_data = simplejson.loads(response.content) + self.assertEquals(response_data.get('created'), '2009-02-13 04:01:12') + + # error: private text + response = resource(request, key='text_key_3', emitter_format='json') + self.assertEquals(401, response.status_code) + + + def test_text_get_logged_in(self): + """ + Logged in as manager api call + """ + + resource = Resource(AnonymousTextHandler) + request = HttpRequest() + user = User.objects.get(pk=1) + setattr(request, 'user' , user) + request.method = 'GET' + + response = resource(request, key='text_key_3', emitter_format='json') + self.assertEquals(200, response.status_code) + + + def test_text_create(self): + request = FalseRequest(None) + nb_anon_texts = get_texts_with_perm(request, 'can_view_text').count() + nb_texts = Text.objects.count() + + resource = Resource(TextListHandler) + + # create one private text + request = HttpRequest() + user = User.objects.get(pk=1) + setattr(request, 'user' , user) + request.method = 'POST' + setattr(request, 'POST' , {'content':'test content', 'format':"markdown", 'title': 'my title'}) + response = resource(request,) + + self.assertEquals(200, response.status_code) + self.assertTrue('key' in simplejson.loads(response.content).keys()) + + request = FalseRequest(None) + self.assertEqual(get_texts_with_perm(request, 'can_view_text').count(), nb_anon_texts) # NO more anon text + + # create one text with anon observer + request = HttpRequest() + user = User.objects.get(pk=1) + setattr(request, 'user' , user) + request.method = 'POST' + setattr(request, 'POST' , {'content':'test content', 'format':"markdown", 'title': 'my title', 'anon_role' : 4}) + response = resource(request,) + + self.assertEquals(200, response.status_code) + self.assertTrue('key' in simplejson.loads(response.content).keys()) + + self.assertEquals(nb_texts + 2, Text.objects.count()) # 2 more texts should have been created + + request = FalseRequest(None) + self.assertEqual(get_texts_with_perm(request, 'can_view_text').count(), nb_anon_texts + 1) # one more anon accessible text available + + def test_list_text_get(self): + """ + List texts anon + """ + resource = Resource(AnonymousTextListHandler) + request = HttpRequest() + setattr(request, 'user' , None) + request.method = 'GET' + + response = resource(request, emitter_format='json') + self.assertEquals(200, response.status_code) + self.assertEquals(2, len(simplejson.loads(response.content))) + + def test_list_text_logged_in(self): + """ + List texts manager + """ + resource = Resource(AnonymousTextListHandler) + request = HttpRequest() + user = User.objects.get(pk=1) + setattr(request, 'user' , user) + request.method = 'GET' + + response = resource(request, emitter_format='json') + self.assertEquals(200, response.status_code) + self.assertEquals(5, len(simplejson.loads(response.content))) + + def test_delete_text_logged_in_works(self): + """ + Delete text + """ + nb_texts = Text.objects.count() + + resource = Resource(TextDeleteHandler) + request = HttpRequest() + user = User.objects.get(pk=1) + setattr(request, 'user' , user) + request.method = 'POST' + setattr(request, 'POST' , {'key':'text_key_3'}) + setattr(request, 'flash' , {}) + + response = resource(request, emitter_format='json') + self.assertEquals(204, response.status_code) + + # one text deleted + self.assertEquals(nb_texts - 1, Text.objects.count()) + + def test_delete_text_logged_in_fail(self): + """ + Delete text (and fail: insufficient rights) + """ + nb_texts = Text.objects.count() + + resource = Resource(TextDeleteHandler) + request = HttpRequest() + user = User.objects.get(pk=3) + setattr(request, 'user' , user) + request.method = 'POST' + setattr(request, 'POST' , {'key':'text_key_3'}) + setattr(request, 'flash' , {}) + + response = resource(request, emitter_format='json') + self.assertEquals(401, response.status_code) + + # no text deleted + self.assertEquals(nb_texts, Text.objects.count()) + + + def test_pre_edit(self): + """ + Pre edit text: should return number of comments to remove + """ + resource = Resource(TextPreEditHandler) + request = HttpRequest() + user = User.objects.get(pk=1) + setattr(request, 'user' , user) + request.method = 'POST' + setattr(request, 'POST' , {'new_format' : 'markdown', 'new_content' : u'ggg'}) + setattr(request, 'flash' , {}) + + response = resource(request, key='text_key_2', emitter_format='json') + self.assertEquals(response.content, '{"nb_removed": 3}') + + def xtest_edit(self): + """ + Edit text + """ + resource = Resource(TextEditHandler) + request = HttpRequest() + setattr(request,'session',None) + user = User.objects.get(pk=1) + setattr(request, 'user' , user) + request.method = 'POST' + setattr(request, 'POST' , {'new_format' : 'markdown', 'new_content' : u'ggg'}) + setattr(request, 'flash' , {}) + + response = resource(request, key='text_key_2', emitter_format='json') + + self.assertEquals(Text.objects.get(pk=2).last_text_version.content , u'ggg') + + + def test_setuser(self): + """ + Set username/email for commenting + """ + from django.test.client import Client + c = Client() + response = c.post('/setuser/', {'username': 'my_username', 'email': 'my_email'})