Skip to content

Commit

Permalink
Correct get_project_list and add test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
dcramer committed Sep 9, 2012
1 parent e7c897a commit 1f953f2
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 5 deletions.
9 changes: 4 additions & 5 deletions src/sentry/web/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,16 @@ def get_project_list(user=None, access=None, hidden=False, key='id'):
# public projects
if access is None:
filters |= Q(public=True)
elif not (user and user.is_authenticated()):
return SortedDict()

# If the user is authenticated, include their memberships
elif user and user.is_authenticated():
if user and user.is_authenticated():
teams = Team.objects.get_for_user(user, access).values()
if not teams:
if not teams and access is not None:
return SortedDict()
filters |= Q(team__in=teams)

else:
return SortedDict()

return SortedDict((getattr(p, key), p)
for p in base_qs.filter(filters).order_by('name'))

Expand Down
Empty file.
47 changes: 47 additions & 0 deletions tests/sentry/web/helpers/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-

from __future__ import absolute_import

import mock

from django.contrib.auth.models import User
from sentry.constants import MEMBER_USER
from sentry.models import Project
from sentry.web.helpers import get_project_list
from tests.base import TestCase


class GetProjectListTEst(TestCase):
def setUp(self):
self.user = User.objects.create(username="admin", email="admin@localhost")
self.project = Project.objects.get()
assert self.project.public is True
self.project2 = Project.objects.create(name='Test', slug='test', owner=self.user, public=False)

@mock.patch('sentry.models.Team.objects.get_for_user', mock.Mock(return_value={}))
def test_includes_public_projects_without_access(self):
project_list = get_project_list(self.user)
self.assertEquals(len(project_list), 1)
self.assertIn(self.project.id, project_list)

@mock.patch('sentry.models.Team.objects.get_for_user', mock.Mock(return_value={}))
def test_does_exclude_public_projects_without_access(self):
project_list = get_project_list(self.user, MEMBER_USER)
self.assertEquals(len(project_list), 0)

@mock.patch('sentry.models.Team.objects.get_for_user')
def test_does_include_private_projects_without_access(self, get_for_user):
get_for_user.return_value = {self.project2.team.id: self.project2.team}
project_list = get_project_list(self.user)
get_for_user.assert_called_once_with(self.user, None)
self.assertEquals(len(project_list), 2)
self.assertIn(self.project.id, project_list)
self.assertIn(self.project2.id, project_list)

@mock.patch('sentry.models.Team.objects.get_for_user')
def test_does_exclude_public_projects_but_include_private_with_access(self, get_for_user):
get_for_user.return_value = {self.project2.team.id: self.project2.team}
project_list = get_project_list(self.user, MEMBER_USER)
get_for_user.assert_called_once_with(self.user, MEMBER_USER)
self.assertEquals(len(project_list), 1)
self.assertIn(self.project2.id, project_list)

0 comments on commit 1f953f2

Please sign in to comment.