Skip to content

Commit

Permalink
Merge b710a4e into 701729b
Browse files Browse the repository at this point in the history
  • Loading branch information
Tevinthuku committed Jun 6, 2019
2 parents 701729b + b710a4e commit dceacd8
Show file tree
Hide file tree
Showing 7 changed files with 323 additions and 72 deletions.
Empty file added wger/gym/api/__init__.py
Empty file.
13 changes: 13 additions & 0 deletions wger/gym/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from rest_framework import serializers

from wger.core.models import User


class GymTrainerSerializer(serializers.ModelSerializer):

class Meta:
model = User
fields = ('username',
'first_name',
'is_active',
'id')
19 changes: 19 additions & 0 deletions wger/gym/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class GymManager(models.Manager):
'''
Custom query manager for Gyms
'''

def get_members(self, gym_pk):
'''
Returns all members for this gym (i.e non-admin ones)
Expand All @@ -50,3 +51,21 @@ def get_admins(self, gym_pk):
users = User.objects.filter(userprofile__gym_id=gym_pk)
return users.filter(Q(groups__permissions=perm_gym) | Q(groups__permissions=perm_gyms)
| Q(groups__permissions=perm_trainer)).distinct()

def get_trainers(self, gym_pk):
'''
Returns all trainers of a gym
'''
perm_trainer = Permission.objects.get(codename='gym_trainer')
perm_gyms = Permission.objects.get(codename='manage_gyms')
users = User.objects.filter(userprofile__gym_id=gym_pk)
exclude_admins = Q(groups__permissions=perm_gyms)
return users.filter(Q(groups__permissions=perm_trainer)).exclude(exclude_admins).distinct()

def get_managers(self, gym_pk):
'''
Returns all gym managers for a specific gym
'''
perm_mamagers = Permission.objects.get(codename='manage_gym')
users = User.objects.filter(userprofile__gym_id=gym_pk)
return users.filter(Q(groups__permissions=perm_mamagers)).distinct()
126 changes: 124 additions & 2 deletions wger/gym/tests/test_gym.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Workout Manager. If not, see <http://www.gnu.org/licenses/>.
from django.urls import reverse_lazy

from django.urls import (reverse_lazy, reverse)
from wger.core.models import UserProfile
from wger.core.tests.base_testcase import WorkoutManagerAccessTestCase
from wger.core.tests.base_testcase import WorkoutManagerAddTestCase
Expand All @@ -23,6 +22,8 @@
from wger.core.tests.base_testcase import delete_testcase_add_methods
from wger.gym.models import Gym

import json


class GymRepresentationTestCase(WorkoutManagerTestCase):
'''
Expand Down Expand Up @@ -147,3 +148,124 @@ def test_delete_gym(self):

gym.delete()
self.assertEqual(UserProfile.objects.filter(gym=gym).count(), 0)


class GymTrainersList(WorkoutManagerTestCase):
'''
Test list of trainers.
'''

def test_trainers_list_view(self):
response = self.client.get(reverse('gym:gym:list-trainers', kwargs={'pk': 1}))
self.assertEqual(len(json.loads(response.content)["data"]["active"]), 3)
self.assertEqual(response.status_code, 200)


class GymTrainerToggle(WorkoutManagerTestCase):
'''
Test toggling trainers of a gym.
'''

def test_toggling_trainer_status_as_a_trainer(self):
self.user_login('trainer1')
response = self.client.post(reverse('gym:gym:toggle-trainer',
kwargs={'pk': 1, 'trainerId': 4}))
self.assertEqual(response.status_code, 403)

def test_toggling_trainer_status_as_anonymous_user(self):
response = self.client.post(reverse('gym:gym:toggle-trainer',
kwargs={'pk': 1, 'trainerId': 4}))
self.assertEqual(json.loads(response.content)[
"error"], "You are not allowed to edit a gym trainer")

def test_toggling_trainer_as_a_manager(self):
self.user_login('manager1')
response = self.client.post(reverse('gym:gym:toggle-trainer',
kwargs={'pk': 1, 'trainerId': 4}))

self.assertEqual(response.status_code, 200)
self.assertEqual(json.loads(response.content)[
"data"], "Successfully toggled the trainer's active status to False")
trainers_list = self.client.get(reverse('gym:gym:list-trainers', kwargs={'pk': 1}))
self.assertEqual(len(json.loads(trainers_list.content)["data"]["active"]), 2)
self.assertEqual(len(json.loads(trainers_list.content)["data"]["inactive"]), 1)

def test_toggling_user_does_not_exist_as_an_admin(self):
self.user_login('admin')
response = self.client.post(reverse('gym:gym:toggle-trainer',
kwargs={'pk': 1, 'trainerId': 27}))

self.assertEqual(response.status_code, 404)
self.assertEqual(json.loads(response.content)[
"error"], "The trainer specified does not exist")

def test_toggling_trainer_who_belongs_to_different_gym(self):
self.user_login('manager1')
response = self.client.post(reverse('gym:gym:toggle-trainer',
kwargs={'pk': 1, 'trainerId': 7}))

self.assertEqual(response.status_code, 404)
self.assertEqual(json.loads(response.content)[
"error"], "The trainer specified does not belong to this gym")

def test_toggling_trainer_twice(self):
self.user_login('manager1')
self.client.post(reverse('gym:gym:toggle-trainer',
kwargs={'pk': 1, 'trainerId': 4}))
response = self.client.post(reverse('gym:gym:toggle-trainer',
kwargs={'pk': 1, 'trainerId': 4}))

self.assertEqual(json.loads(response.content)[
"data"], "Successfully toggled the trainer's active status to True")


class GymTrainerDelete(WorkoutManagerTestCase):
'''
Test deleting trainers of a gym.
'''

def test_deleting_trainer_status_as_a_trainer(self):
self.user_login('trainer1')
response = self.client.delete(reverse('gym:gym:delete-trainer',
kwargs={'pk': 1, 'trainerId': 4}))
self.assertEqual(response.status_code, 403)

def test_deleting_trainer_status_as_anonymous_user(self):
response = self.client.delete(reverse('gym:gym:delete-trainer',
kwargs={'pk': 1, 'trainerId': 4}))
self.assertEqual(json.loads(response.content)[
"error"], "You are not allowed to delete a gym trainer")

def test_deleting_trainer_as_a_manager(self):
self.user_login('manager1')
response = self.client.delete(reverse('gym:gym:delete-trainer',
kwargs={'pk': 1, 'trainerId': 4}))

self.assertEqual(response.status_code, 200)
self.assertEqual(json.loads(response.content)[
"data"], "Successfully deleted trainer")

def test_deleting_trainer_as_an_admin(self):
self.user_login('admin')
response = self.client.delete(reverse('gym:gym:delete-trainer',
kwargs={'pk': 1, 'trainerId': 4}))
self.assertEqual(json.loads(response.content)[
"data"], "Successfully deleted trainer")

def test_deleting_user_does_not_exist_as_an_admin(self):
self.user_login('admin')
response = self.client.delete(reverse('gym:gym:delete-trainer',
kwargs={'pk': 1, 'trainerId': 27}))

self.assertEqual(response.status_code, 404)
self.assertEqual(json.loads(response.content)[
"error"], "The trainer specified does not exist")

def test_delete_trainer_who_belongs_to_different_gym(self):
self.user_login('manager1')
response = self.client.delete(reverse('gym:gym:delete-trainer',
kwargs={'pk': 1, 'trainerId': 7}))

self.assertEqual(response.status_code, 404)
self.assertEqual(json.loads(response.content)[
"error"], "The trainer specified does not belong to this gym")
Loading

0 comments on commit dceacd8

Please sign in to comment.