Browse Source

[beeswax] Fix share queries tests

Test requests were not using the correct users
Make grant_access idempotent
make_logged_in_client takes an optional groupname
Romain Rigaux 13 years ago
parent
commit
830f507

+ 30 - 26
apps/beeswax/src/beeswax/tests.py

@@ -47,6 +47,7 @@ from beeswax.test_base import make_query, wait_for_query_to_finish, verify_histo
 from beeswax.test_base import BeeswaxSampleProvider
 from beeswaxd import BeeswaxService
 from beeswaxd import ttypes
+from desktop.lib.test_utils import grant_access
 
 LOG = logging.getLogger(__name__)
 CSV_LINK_PAT = re.compile('/beeswax/download/\d+/csv')
@@ -537,52 +538,53 @@ for x in sys.stdin:
     assert_true('rubbish' in resp.content)
 
     # Test personal saved queries permissions
-    client = make_logged_in_client(username='its_me', is_superuser=False)
-    _make_query(self.client, "select one", name='client query 1', submission_type='Save')
-    _make_query(self.client, "select two", name='client query 2', submission_type='Save')
+    client_me = make_logged_in_client(username='its_me', is_superuser=False, groupname='test')
+    grant_access("its_me", "test", "beeswax")
+    _make_query(client_me, "select one", name='client query 1', submission_type='Save')
+    _make_query(client_me, "select two", name='client query 2', submission_type='Save')
 
     finish = conf.SHARE_SAVED_QUERIES.set_for_testing(True)
     try:
-      resp = self.client.get('/beeswax/list_designs')
-      assert_true('client query 1' in resp.content)
-      assert_true('client query 2' in resp.content)
+      resp = client_me.get('/beeswax/list_designs')
+      assert_true('client query 1' in resp.content, resp.content)
+      assert_true('client query 2' in resp.content, resp.content)
     finally:
       finish()
 
     finish = conf.SHARE_SAVED_QUERIES.set_for_testing(False)
     try:
-      resp = self.client.get('/beeswax/list_designs')
+      resp = client_me.get('/beeswax/list_designs')
       assert_true('client query 1' in resp.content)
       assert_true('client query 2' in resp.content)
     finally:
       finish()
-      client.logout()
+      client_me.logout()
 
     # Login as someone else
-    client2 = make_logged_in_client(username='not_me', is_superuser=False)
-    # Failing for now as the user does not have access to the Beeswax app.
-#    finish = conf.SHARE_SAVED_QUERIES.set_for_testing(True)
-#    try:
-#      resp = client2.get('/beeswax/list_designs')
-#      assert_true('client query 1' in resp.content)
-#      assert_true('client query 2' in resp.content)
-#    finally:
-#      finish()
+    client_not_me = make_logged_in_client(username='not_me', is_superuser=False, groupname='test')
+    grant_access("not_me", "test", "beeswax")
+    finish = conf.SHARE_SAVED_QUERIES.set_for_testing(True)
+    try:
+      resp = client_not_me.get('/beeswax/list_designs')
+      assert_true('client query 1' in resp.content)
+      assert_true('client query 2' in resp.content)
+    finally:
+      finish()
 
     finish = conf.SHARE_SAVED_QUERIES.set_for_testing(False)
     try:
-      resp = client2.get('/beeswax/list_designs')
+      resp = client_not_me.get('/beeswax/list_designs')
       assert_true('client query 1' not in resp.content)
       assert_true('client query 2' not in resp.content)
     finally:
       finish()
-      client2.logout()
+      client_not_me.logout()
 
     # Login as super user
-    client3 = make_logged_in_client('admin', is_superuser=True)
+    client_admin = make_logged_in_client('admin', is_superuser=True)
     finish = conf.SHARE_SAVED_QUERIES.set_for_testing(True)
     try:
-      resp = client3.get('/beeswax/list_designs')
+      resp = client_admin.get('/beeswax/list_designs')
       assert_true('client query 1' in resp.content)
       assert_true('client query 2' in resp.content)
     finally:
@@ -590,12 +592,12 @@ for x in sys.stdin:
 
     finish = conf.SHARE_SAVED_QUERIES.set_for_testing(False)
     try:
-      resp = client3.get('/beeswax/list_designs')
+      resp = client_admin.get('/beeswax/list_designs')
       assert_true('client query 1' in resp.content)
       assert_true('client query 2' in resp.content)
     finally:
       finish()
-      client3.logout()
+      client_admin.logout()
 
 
   def test_my_queries(self):
@@ -609,11 +611,13 @@ for x in sys.stdin:
     assert_true('Even More Bogus Junk' in resp.content)
 
     # Login as someone else
-    client2 = make_logged_in_client('not_me')
-    resp = client2.get('/beeswax/my_queries')
+    client_not_me = make_logged_in_client('not_me', groupname='test')
+    grant_access("not_me", "test", "beeswax")
+
+    resp = client_not_me.get('/beeswax/my_queries')
     assert_true('my rubbish kuery' not in resp.content)
     assert_true('Even More Bogus Junk' not in resp.content)
-    client2.logout()
+    client_not_me.logout()
 
 
   def test_load_data(self):

+ 8 - 2
desktop/core/src/desktop/lib/django_test_util.py

@@ -23,7 +23,7 @@ import re
 import simplejson
 
 import django.test.client
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Group
 
 import nose.tools
 
@@ -44,7 +44,7 @@ def assert_ok_response(response):
   nose.tools.assert_true(200, response.status_code)
   return response
 
-def make_logged_in_client(username="test", password="test", is_superuser=True, recreate=False):
+def make_logged_in_client(username="test", password="test", is_superuser=True, recreate=False, groupname=None):
   """
   Create a client with a user already logged in.
 
@@ -61,6 +61,12 @@ def make_logged_in_client(username="test", password="test", is_superuser=True, r
     user.is_superuser = is_superuser
     user.save()
 
+  if groupname is not None:
+    group, created = Group.objects.get_or_create(name=groupname)
+    if not user.groups.filter(name=group.name).exists():
+      user.groups.add(group)
+      user.save()
+
   c = Client()
   ret = c.login(username=username, password=password)
 

+ 6 - 5
desktop/core/src/desktop/lib/test_utils.py

@@ -19,9 +19,10 @@ from django.contrib.auth.models import Group, User
 from useradmin.models import HuePermission, GroupPermission
 
 def grant_access(username, groupname, appname):
-    grp = Group.objects.create(name=groupname)
-    perm = HuePermission.objects.get(app=appname,action='access')
-    GroupPermission.objects.create(group=grp, hue_permission=perm)
+    group, created = Group.objects.get_or_create(name=groupname)
+    perm = HuePermission.objects.get(app=appname, action='access')
+    GroupPermission.objects.get_or_create(group=group, hue_permission=perm)
     user = User.objects.get(username=username)
-    user.groups.add(grp)
-    user.save()
+    if not user.groups.filter(name=group.name).exists():
+        user.groups.add(group)
+        user.save()