def test_two_levels_namespace(self): user1 = UserFactory() user2 = UserFactory() ACLRuleFactory(slug='section/special', permissions=['change_page'], as_namespace=True, users=[user1]) self.assertTrue(check_perms('change_page', user1, 'section/special')) self.assertTrue(check_perms('change_page', user1, 'section/special/page')) self.assertTrue(check_perms('change_page', user2, 'section/no-special')) self.assertFalse(check_perms('change_page', user2, 'section/special/page'))
def test_simple_namespace(self): user1 = UserFactory() user2 = UserFactory() ACLRuleFactory(slug='user1-section', permissions=['change_page'], as_namespace=True, users=[user1]) self.assertTrue(check_perms('change_page', user1, 'user1-section')) self.assertTrue(check_perms('change_page', user1, 'user1-section/nested/page')) self.assertFalse(check_perms('change_page', user2, 'user1-section')) self.assertFalse(check_perms('change_page', user2, 'user1-section/nested/page'))
def test_a_section_for_staff(self): user = UserFactory() staff_member = UserFactory(is_staff=True) ACLRuleFactory(slug='staff-section', permissions=['view_page', 'add_page', 'change_page'], as_namespace=True, apply_to=ACLRule.TO_STAFF) for perm in ['view_page', 'add_page', 'change_page']: self.assertFalse(check_perms(perm, user, 'staff-section')) self.assertFalse(check_perms(perm, user, 'staff-section/a-page')) self.assertTrue(check_perms(perm, staff_member, 'staff-section')) self.assertTrue(check_perms(perm, staff_member, 'staff-section/a-page'))
def test_simple_namespace(self): user1 = UserFactory() user2 = UserFactory() ACLRuleFactory(slug='user1-section', permissions=['change_page'], as_namespace=True, users=[user1]) self.assertTrue(check_perms('change_page', user1, 'user1-section')) self.assertTrue( check_perms('change_page', user1, 'user1-section/nested/page')) self.assertFalse(check_perms('change_page', user2, 'user1-section')) self.assertFalse( check_perms('change_page', user2, 'user1-section/nested/page'))
def test_a_section_for_staff(self): user = UserFactory() staff_member = UserFactory(is_staff=True) ACLRuleFactory(slug='staff-section', permissions=['view_page', 'add_page', 'change_page'], as_namespace=True, apply_to=ACLRule.TO_STAFF) for perm in ['view_page', 'add_page', 'change_page']: self.assertFalse(check_perms(perm, user, 'staff-section')) self.assertFalse(check_perms(perm, user, 'staff-section/a-page')) self.assertTrue(check_perms(perm, staff_member, 'staff-section')) self.assertTrue( check_perms(perm, staff_member, 'staff-section/a-page'))
def test_two_levels_namespace(self): user1 = UserFactory() user2 = UserFactory() ACLRuleFactory(slug='section/special', permissions=['change_page'], as_namespace=True, users=[user1]) self.assertTrue(check_perms('change_page', user1, 'section/special')) self.assertTrue( check_perms('change_page', user1, 'section/special/page')) self.assertTrue(check_perms('change_page', user2, 'section/no-special')) self.assertFalse( check_perms('change_page', user2, 'section/special/page'))
def whatchanged(request, pag=1): now = timezone.now() changes = [] # The argument passed for pag might be a string, but we want to # do calculations on it. So we must cast just to be sure. pag = int(pag or 1) skip = (pag - 1) * settings.WALIKI_PAGINATE_BY max_count = settings.WALIKI_PAGINATE_BY # Git().total_commits() returns a unicode string # but we want to do calculations on the number it represents, # therefore, we cast total = int(Git().total_commits()) for version in Git().whatchanged(skip, max_count): for path in version[-1]: try: page = Page.objects.get(path=path) except Page.DoesNotExist: continue if not check_perms('view_page', request.user, page.slug): # Don't show changes on pages that user can't see continue changes.append({'page': page, 'author': version[0], 'version': version[2], 'message': version[3], 'date': datetime.fromtimestamp(int(version[4]))}) return render(request, 'waliki/whatchanged.html', {'changes': changes, 'now': now, 'prev': pag - 1 if pag > 1 else None, 'next': pag + 1 if skip + max_count < total else None})
def items(self): changes = [] for version, diff in Git().whatchanged_diff(): for path in version[-1]: try: page = Page.objects.get(path=path) except Page.DoesNotExist: continue if not check_perms('view_page', AnonymousUser(), page.slug): # Don't show changes on pages that anonymous user can't see continue changes.append({'page': page, 'author': version[0], 'version': version[2], 'message': version[3], 'date': datetime.fromtimestamp(int(version[4])), 'diff': diff[1:-1].strip()}) return changes