Add test_chord for TestSubmissionVideo
[mediagoblin.git] / mediagoblin / tests / test_modelmethods.py
index a5739ed51532e1db9952197db534d1134d1ee67b..4c66e27b98dfdfb7aa53209123d44e6332fb501e 100644 (file)
 # Maybe not every model needs a test, but some models have special
 # methods, and so it makes sense to test them here.
 
-from nose.tools import assert_equal
+from __future__ import print_function
 
 from mediagoblin.db.base import Session
-from mediagoblin.db.models import MediaEntry
+from mediagoblin.db.models import MediaEntry, User, LocalUser, Privilege, \
+                                  Activity, Generator
 
-from mediagoblin.tests.tools import fixture_add_user
+from mediagoblin.tests import MGClientTestCase
+from mediagoblin.tests.tools import fixture_add_user, fixture_media_entry, \
+                                    fixture_add_activity
 
-import mock
+try:
+    import mock
+except ImportError:
+    import unittest.mock as mock
+import pytest
 
 
 class FakeUUID(object):
@@ -32,6 +39,8 @@ class FakeUUID(object):
 
 UUID_MOCK = mock.Mock(return_value=FakeUUID())
 
+REQUEST_CONTEXT = ['mediagoblin/root.html', 'request']
+
 
 class TestMediaEntrySlugs(object):
     def _setup(self):
@@ -47,9 +56,9 @@ class TestMediaEntrySlugs(object):
         entry.title = title or u"Some title"
         entry.slug = slug
         entry.id = this_id
-        entry.uploader = uploader or self.chris_user.id
+        entry.actor = uploader or self.chris_user.id
         entry.media_type = u'image'
-        
+
         if save:
             entry.save()
 
@@ -101,7 +110,7 @@ class TestMediaEntrySlugs(object):
                 u"Beware, I exist!!", this_id=9000, save=False)
             entry.generate_slug()
             assert entry.slug == u"beware-i-exist-test"
-            
+
         _real_test()
 
     def test_existing_slug_cant_use_id_extra_junk(self, test_app):
@@ -153,6 +162,41 @@ class TestMediaEntrySlugs(object):
         qbert_entry.generate_slug()
         assert qbert_entry.slug is None
 
+class TestUserHasPrivilege:
+    def _setup(self):
+        fixture_add_user(u'natalie',
+            privileges=[u'admin',u'moderator',u'active'])
+        fixture_add_user(u'aeva',
+            privileges=[u'moderator',u'active'])
+        self.natalie_user = LocalUser.query.filter(
+            LocalUser.username==u'natalie').first()
+        self.aeva_user = LocalUser.query.filter(
+            LocalUser.username==u'aeva').first()
+
+    def test_privilege_added_correctly(self, test_app):
+        self._setup()
+        admin = Privilege.query.filter(
+            Privilege.privilege_name == u'admin').one()
+        # first make sure the privileges were added successfully
+
+        assert admin in self.natalie_user.all_privileges
+        assert admin not in self.aeva_user.all_privileges
+
+    def test_user_has_privilege_one(self, test_app):
+        self._setup()
+
+        # then test out the user.has_privilege method for one privilege
+        assert not self.aeva_user.has_privilege(u'admin')
+        assert self.natalie_user.has_privilege(u'active')
+
+    def test_allow_admin(self, test_app):
+        self._setup()
+
+        # This should work because she is an admin.
+        assert self.natalie_user.has_privilege(u'commenter')
+
+        # Test that we can look this out ignoring that she's an admin
+        assert not self.natalie_user.has_privilege(u'commenter', allow_admin=False)
 
 def test_media_data_init(test_app):
     Session.rollback()
@@ -165,5 +209,26 @@ def test_media_data_init(test_app):
     obj_in_session = 0
     for obj in Session():
         obj_in_session += 1
-        print repr(obj)
-    assert_equal(obj_in_session, 0)
+        print(repr(obj))
+    assert obj_in_session == 0
+
+
+class TestUserUrlForSelf(MGClientTestCase):
+
+    usernames = [(u'lindsay', dict(privileges=[u'active']))]
+
+    def test_url_for_self(self):
+        _, request = self.do_get('/', *REQUEST_CONTEXT)
+
+        assert self.user(u'lindsay').url_for_self(request.urlgen) == '/u/lindsay/'
+
+    def test_url_for_self_not_callable(self):
+        _, request = self.do_get('/', *REQUEST_CONTEXT)
+
+        def fake_urlgen():
+            pass
+
+        with pytest.raises(TypeError) as excinfo:
+            self.user(u'lindsay').url_for_self(fake_urlgen())
+        assert excinfo.errisinstance(TypeError)
+        assert 'object is not callable' in str(excinfo)