wbcore 2.2.3__py2.py3-none-any.whl → 2.2.5__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. wbcore/contrib/color/admin.py +28 -0
  2. wbcore/contrib/color/apps.py +5 -0
  3. wbcore/contrib/color/enums.py +17 -0
  4. wbcore/contrib/color/factories.py +10 -0
  5. wbcore/contrib/color/fields.py +29 -0
  6. wbcore/contrib/color/forms.py +13 -0
  7. wbcore/contrib/color/models.py +62 -0
  8. wbcore/contrib/color/tests/conftest.py +10 -0
  9. wbcore/contrib/color/tests/test_color_models.py +61 -0
  10. wbcore/contrib/color/tests/test_fields.py +25 -0
  11. wbcore/contrib/documents/tests/conftest.py +30 -0
  12. wbcore/contrib/documents/tests/test_models.py +144 -0
  13. wbcore/contrib/example_app/tests/test_models/test_event.py +87 -0
  14. wbcore/contrib/example_app/tests/test_models/test_match.py +210 -0
  15. wbcore/contrib/example_app/tests/test_models/test_others.py +159 -0
  16. wbcore/contrib/example_app/tests/test_serializers/test_league_serializer.py +34 -0
  17. wbcore/contrib/example_app/tests/test_serializers/test_match_serializer.py +134 -0
  18. wbcore/contrib/example_app/tests/test_serializers/test_role_serializer.py +13 -0
  19. wbcore/contrib/example_app/tests/test_serializers/test_sport_serializer.py +14 -0
  20. wbcore/contrib/example_app/tests/test_serializers/test_stadium_serializer.py +14 -0
  21. wbcore/contrib/example_app/tests/test_serializers/test_team_result_serializer.py +30 -0
  22. wbcore/contrib/example_app/tests/test_serializers/test_team_serializer.py +70 -0
  23. wbcore/contrib/example_app/tests/test_viewsets/test_event_viewset.py +162 -0
  24. wbcore/contrib/example_app/tests/test_viewsets/test_league_viewset.py +84 -0
  25. wbcore/contrib/example_app/tests/test_viewsets/test_match_viewset.py +65 -0
  26. wbcore/contrib/example_app/tests/test_viewsets/test_person_viewset.py +166 -0
  27. wbcore/contrib/example_app/tests/test_viewsets/test_role_viewset.py +75 -0
  28. wbcore/contrib/example_app/tests/test_viewsets/test_sport_viewset.py +75 -0
  29. wbcore/contrib/example_app/tests/test_viewsets/test_stadium_viewset.py +75 -0
  30. wbcore/contrib/example_app/tests/test_viewsets/test_team_viewset.py +92 -0
  31. wbcore/contrib/example_app/tests/test_viewsets/test_teamresult_viewset.py +58 -0
  32. wbcore/contrib/example_app/tests/test_viewsets/test_utils_viewsets.py +124 -0
  33. wbcore/contrib/guardian/apps.py +6 -0
  34. wbcore/contrib/guardian/configurations.py +3 -0
  35. wbcore/contrib/guardian/filters.py +21 -0
  36. wbcore/contrib/guardian/tasks.py +10 -0
  37. wbcore/contrib/guardian/urls.py +12 -0
  38. wbcore/contrib/guardian/utils.py +124 -0
  39. wbcore/contrib/notifications/viewsets/configs/notification_types.py +27 -0
  40. wbcore/contrib/notifications/viewsets/configs/notifications.py +85 -0
  41. wbcore/contrib/workflow/tests/test_models/step/test_decision_step.py +79 -0
  42. wbcore/contrib/workflow/tests/test_models/step/test_email_step.py +45 -0
  43. wbcore/contrib/workflow/tests/test_models/step/test_finish_step.py +105 -0
  44. wbcore/contrib/workflow/tests/test_models/step/test_join_step.py +127 -0
  45. wbcore/contrib/workflow/tests/test_models/step/test_script_step.py +24 -0
  46. wbcore/contrib/workflow/tests/test_models/step/test_split_step.py +49 -0
  47. wbcore/contrib/workflow/tests/test_models/step/test_step.py +621 -0
  48. wbcore/contrib/workflow/tests/test_models/step/test_user_step.py +225 -0
  49. wbcore/contrib/workflow/tests/test_models/test_condition.py +103 -0
  50. wbcore/contrib/workflow/tests/test_models/test_data.py +134 -0
  51. wbcore/contrib/workflow/tests/test_models/test_process.py +98 -0
  52. wbcore/contrib/workflow/tests/test_models/test_transition.py +128 -0
  53. wbcore/contrib/workflow/tests/test_models/test_workflow.py +358 -0
  54. wbcore/templates/forms.py +0 -0
  55. wbcore/test/e2e_helpers_methods/e2e_checks.py +121 -0
  56. wbcore/test/e2e_helpers_methods/e2e_helper_methods.py +395 -0
  57. wbcore/tests/test_permissions/test_backend.py +29 -0
  58. {wbcore-2.2.3.dist-info → wbcore-2.2.5.dist-info}/METADATA +1 -1
  59. {wbcore-2.2.3.dist-info → wbcore-2.2.5.dist-info}/RECORD +60 -16
  60. wbcore/contrib/agenda/release_notes/1_0_0.md +0 -13
  61. wbcore/contrib/authentication/release_notes/1_0_0.md +0 -13
  62. wbcore/contrib/currency/release_notes/1_0_0.md +0 -13
  63. wbcore/contrib/directory/release_notes/1_0_0.md +0 -13
  64. wbcore/contrib/directory/release_notes/1_0_1.md +0 -13
  65. wbcore/contrib/documents/release_notes/1_0_0.md +0 -13
  66. wbcore/contrib/geography/release_notes/1_0_0.md +0 -13
  67. wbcore/contrib/io/release_notes/1_0_0.md +0 -13
  68. wbcore/contrib/notifications/release_notes/1_0_0.md +0 -13
  69. wbcore/contrib/tags/release_notes/1_0_0.md +0 -13
  70. wbcore/docs/orderable.md +0 -29
  71. wbcore/docs/reparent.md +0 -13
  72. wbcore/templates/reversion/compare_detail.html +0 -19
  73. {wbcore-2.2.3.dist-info → wbcore-2.2.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1,162 @@
1
+ import pytest
2
+ from django.test import Client, TestCase
3
+ from django.urls import reverse
4
+ from wbcore.contrib.authentication.factories import UserFactory
5
+ from wbcore.contrib.example_app.factories import EventFactory, EventTypeFactory
6
+ from wbcore.contrib.example_app.models import Event, EventType
7
+ from wbcore.contrib.example_app.serializers import (
8
+ EventModelSerializer,
9
+ EventTypeModelSerializer,
10
+ )
11
+ from wbcore.contrib.example_app.tests.test_viewsets.test_utils_viewsets import (
12
+ find_instances_in_response,
13
+ get_create_view,
14
+ get_delete_view,
15
+ get_detail_view,
16
+ get_partial_view,
17
+ get_update_view,
18
+ )
19
+ from wbcore.contrib.example_app.viewsets import EventModelViewSet, EventTypeModelViewSet
20
+
21
+
22
+ @pytest.mark.django_db
23
+ class TestEventModelViewSet(TestCase):
24
+ def setUp(self) -> None:
25
+ self.user = UserFactory(is_active=True, is_superuser=True)
26
+ self.client = Client()
27
+ self.client.force_login(user=self.user)
28
+ self.list_url = reverse("example_app:event-list")
29
+ self.detail_url_str = "example_app:event-detail"
30
+
31
+ def test_list_view(self):
32
+ response = self.client.get(self.list_url)
33
+ self.assertEqual(response.status_code, 200)
34
+
35
+ def test_create_view(self):
36
+ event = EventFactory()
37
+ response = get_create_view(self.client, event, self.user, self.list_url, EventModelViewSet)
38
+ self.assertEqual(response.status_code, 201)
39
+ self.assertTrue(
40
+ Event.objects.filter(event_type=event.event_type, match=event.match, minute=event.minute).exists()
41
+ )
42
+
43
+ def test_detail_view(self):
44
+ instance = EventFactory()
45
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
46
+ self.assertEqual(response.status_code, 200)
47
+ self.assertEqual(response.data["instance"]["id"], instance.id)
48
+
49
+ def test_update_view(self):
50
+ instance = EventFactory()
51
+ max_match_duration = instance.match.sport.match_duration
52
+ instance.minute = max_match_duration - instance.minute
53
+ response = get_update_view(self.client, instance, EventModelSerializer, self.detail_url_str)
54
+ instance.refresh_from_db()
55
+ self.assertEqual(response.status_code, 200)
56
+ self.assertEqual(response.data["instance"]["minute"], instance.minute)
57
+
58
+ def test_partial_update_view(self):
59
+ instance = EventFactory()
60
+ max_match_duration = instance.match.sport.match_duration
61
+ response = get_partial_view(
62
+ self.client, instance.id, {"minute": max_match_duration - instance.minute}, self.detail_url_str
63
+ )
64
+ instance.refresh_from_db()
65
+ self.assertEqual(response.status_code, 200)
66
+ self.assertEqual(response.data["instance"]["minute"], instance.minute)
67
+
68
+ def test_delete_view(self):
69
+ instance = EventFactory()
70
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
71
+ # It is not possible to delete an event, since the get_endpoint_url returns None. I suppose that is expected behavior.
72
+ self.assertEqual(response.status_code, 405)
73
+ self.assertTrue(Event.objects.filter(pk=instance.pk).exists())
74
+
75
+ def test_ordering_fields(self):
76
+ event1 = EventFactory(minute=30)
77
+ EventFactory(person=event1.person, minute=20, event_type=event1.event_type, match=event1.match)
78
+ EventFactory(person=event1.person, minute=40, event_type=event1.event_type, match=event1.match)
79
+
80
+ response = self.client.get(self.list_url)
81
+ self.assertEqual(response.status_code, 200)
82
+ self.assertEqual(response.data["count"], Event.objects.count())
83
+ self.assertEqual(response.data["results"][0]["minute"], 20)
84
+ self.assertEqual(response.data["results"][1]["minute"], 30)
85
+ self.assertEqual(response.data["results"][2]["minute"], 40)
86
+
87
+
88
+ @pytest.mark.django_db
89
+ class TestEventTypeModelViewSet(TestCase):
90
+ def setUp(self) -> None:
91
+ self.user = UserFactory(is_active=True, is_superuser=True)
92
+ self.client = Client()
93
+ self.client.force_login(user=self.user)
94
+ self.list_url = reverse("example_app:eventtype-list")
95
+ self.detail_url_str = "example_app:eventtype-detail"
96
+
97
+ def test_list_view(self):
98
+ response = self.client.get(self.list_url)
99
+ self.assertEqual(response.status_code, 200)
100
+
101
+ def test_create_view(self):
102
+ event_type = EventTypeFactory()
103
+ response = get_create_view(self.client, event_type, self.user, self.list_url, EventTypeModelViewSet)
104
+ self.assertEqual(response.status_code, 201)
105
+ self.assertTrue(EventType.objects.filter(name=event_type.name).exists())
106
+
107
+ def test_detail_view(self):
108
+ instance = EventTypeFactory()
109
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
110
+ self.assertEqual(response.status_code, 200)
111
+ self.assertEqual(response.data["instance"]["id"], instance.id)
112
+
113
+ def test_update_view(self):
114
+ instance = EventTypeFactory()
115
+ instance.name = "Updated Instance"
116
+ response = get_update_view(self.client, instance, EventTypeModelSerializer, self.detail_url_str)
117
+ instance.refresh_from_db()
118
+ self.assertEqual(response.status_code, 200)
119
+ self.assertEqual(response.data["instance"]["name"], instance.name)
120
+
121
+ def test_partial_update_view(self):
122
+ instance = EventTypeFactory()
123
+ response = get_partial_view(self.client, instance.id, {"name": "Updated Instance"}, self.detail_url_str)
124
+ instance.refresh_from_db()
125
+ self.assertEqual(response.status_code, 200)
126
+ self.assertEqual(response.data["instance"]["name"], instance.name)
127
+
128
+ def test_delete_view(self):
129
+ instance = EventTypeFactory()
130
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
131
+ self.assertEqual(response.status_code, 204)
132
+ self.assertFalse(Event.objects.filter(pk=instance.pk).exists())
133
+
134
+ def test_ordering_fields(self):
135
+ event_a = EventTypeFactory(name="BBB")
136
+ event_b = EventTypeFactory(name="AAA", sport=event_a.sport)
137
+ event_c = EventTypeFactory(name="CCC", sport=event_a.sport)
138
+
139
+ response = self.client.get(self.list_url)
140
+ self.assertEqual(response.status_code, 200)
141
+ self.assertEqual(response.data["count"], EventType.objects.count())
142
+ self.assertEqual(response.data["results"][0]["id"], event_b.id)
143
+ self.assertEqual(response.data["results"][1]["id"], event_a.id)
144
+ self.assertEqual(response.data["results"][2]["id"], event_c.id)
145
+
146
+ def test_event_type_sport(self):
147
+ type_a = EventTypeFactory()
148
+ type_b = EventTypeFactory(sport=type_a.sport)
149
+ type_c = EventTypeFactory()
150
+ expected_number_of_types = EventType.objects.filter(sport=type_a.sport).count()
151
+ event_type_url = reverse("example_app:eventtype-sport-list", args=[type_a.sport.id])
152
+ response = self.client.get(event_type_url)
153
+ type_a_found, type_b_found, type_c_found = find_instances_in_response([type_a, type_b, type_c], response)
154
+ self.assertEqual(response.status_code, 200)
155
+ self.assertEqual(
156
+ response.data["count"],
157
+ expected_number_of_types,
158
+ f"The answer should contain {expected_number_of_types} types",
159
+ )
160
+ self.assertTrue(type_a_found, "Type A was not found in Response")
161
+ self.assertTrue(type_b_found, "Type B was not found in Response")
162
+ self.assertFalse(type_c_found, "type C was found in Response, but should not be found")
@@ -0,0 +1,84 @@
1
+ import pytest
2
+ from django.test import Client, TestCase
3
+ from django.urls import reverse
4
+ from wbcore.contrib.authentication.factories import SuperUserFactory
5
+ from wbcore.contrib.example_app.factories import LeagueFactory
6
+ from wbcore.contrib.example_app.models import League
7
+ from wbcore.contrib.example_app.serializers import LeagueModelSerializer
8
+ from wbcore.contrib.example_app.tests.test_viewsets.test_utils_viewsets import (
9
+ find_instances_in_response,
10
+ get_create_view,
11
+ get_delete_view,
12
+ get_detail_view,
13
+ get_partial_view,
14
+ get_update_view,
15
+ )
16
+ from wbcore.contrib.example_app.viewsets import LeagueModelViewSet
17
+
18
+
19
+ @pytest.mark.django_db
20
+ class TestLeagueModelViewSet(TestCase):
21
+ def setUp(self):
22
+ self.user = SuperUserFactory()
23
+ self.client = Client()
24
+ self.client.force_login(user=self.user)
25
+ self.list_url = reverse("example_app:league-list")
26
+ self.detail_url_str = "example_app:league-detail"
27
+
28
+ def test_list_view(self):
29
+ response = self.client.get(self.list_url)
30
+ self.assertEqual(response.status_code, 200)
31
+
32
+ def test_create_view(self):
33
+ league = LeagueFactory()
34
+ response = get_create_view(self.client, league, self.user, self.list_url, LeagueModelViewSet)
35
+ self.assertEqual(response.status_code, 201)
36
+ self.assertTrue(League.objects.filter(name=league.name).exists())
37
+
38
+ def test_detail_view(self):
39
+ instance = LeagueFactory()
40
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
41
+ self.assertEqual(response.status_code, 200)
42
+ self.assertEqual(response.data["instance"]["name"], instance.name)
43
+
44
+ def test_update_view(self):
45
+ instance = LeagueFactory()
46
+ instance.name = "Updated Instance"
47
+ response = get_update_view(self.client, instance, LeagueModelSerializer, self.detail_url_str)
48
+ instance.refresh_from_db()
49
+ self.assertEqual(response.status_code, 200)
50
+ self.assertEqual(response.data["instance"]["name"], instance.name)
51
+
52
+ def test_partial_update_view(self):
53
+ instance = LeagueFactory()
54
+ response = get_partial_view(self.client, instance.id, {"name": "Updated Instance"}, self.detail_url_str)
55
+ instance.refresh_from_db()
56
+ self.assertEqual(response.status_code, 200)
57
+ self.assertEqual(response.data["instance"]["name"], instance.name)
58
+
59
+ def test_delete_view(self):
60
+ instance = LeagueFactory()
61
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
62
+ self.assertEqual(response.status_code, 204)
63
+ self.assertFalse(League.objects.filter(pk=instance.pk).exists())
64
+
65
+ def test_league_sport(self):
66
+ league_a = LeagueFactory()
67
+ league_b = LeagueFactory(sport=league_a.sport)
68
+ league_c = LeagueFactory()
69
+ expected_number_of_league = League.objects.filter(sport=league_a.sport).count()
70
+ league_sport_url = reverse("example_app:league-sport-list", args=[league_a.sport.id])
71
+ response = self.client.get(league_sport_url)
72
+ league_a_found, league_b_found, league_c_found = find_instances_in_response(
73
+ [league_a, league_b, league_c], response
74
+ )
75
+
76
+ self.assertEqual(response.status_code, 200)
77
+ self.assertEqual(
78
+ response.data["count"],
79
+ expected_number_of_league,
80
+ f"The answer should contain {expected_number_of_league} leagues",
81
+ )
82
+ self.assertTrue(league_a_found, "Player A was not found in Response.")
83
+ self.assertTrue(league_b_found, "Player B was not found in Response.")
84
+ self.assertFalse(league_c_found, "Player C was found in Response, but should not be found.")
@@ -0,0 +1,65 @@
1
+ import pytest
2
+ from django.test import Client, TestCase
3
+ from django.urls import reverse
4
+ from wbcore.contrib.authentication.factories import SuperUserFactory
5
+ from wbcore.contrib.example_app.factories import MatchFactory, TeamFactory
6
+ from wbcore.contrib.example_app.models import Match
7
+ from wbcore.contrib.example_app.serializers import MatchModelSerializer
8
+ from wbcore.contrib.example_app.tests.test_viewsets.test_utils_viewsets import (
9
+ get_create_view,
10
+ get_delete_view,
11
+ get_detail_view,
12
+ get_partial_view,
13
+ get_update_view,
14
+ )
15
+ from wbcore.contrib.example_app.viewsets import MatchModelViewSet
16
+
17
+
18
+ @pytest.mark.django_db
19
+ class TestMatchModelViewSet(TestCase):
20
+ def setUp(self):
21
+ self.user = SuperUserFactory()
22
+ self.client = Client()
23
+ self.client.force_login(user=self.user)
24
+ self.list_url = reverse("example_app:match-list")
25
+ self.detail_url_str = "example_app:match-detail"
26
+
27
+ def test_list_view(self):
28
+ response = self.client.get(self.list_url)
29
+ self.assertEqual(response.status_code, 200)
30
+
31
+ def test_create_view(self):
32
+ match = MatchFactory()
33
+ response = get_create_view(self.client, match, self.user, self.list_url, MatchModelViewSet)
34
+ self.assertEqual(response.status_code, 201)
35
+ self.assertTrue(Match.objects.filter(home=match.home, away=match.away).exists())
36
+
37
+ def test_detail_view(self):
38
+ instance = MatchFactory()
39
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
40
+ self.assertEqual(response.status_code, 200)
41
+ self.assertEqual(response.data["instance"]["id"], instance.id)
42
+
43
+ def test_update_view(self):
44
+ instance = MatchFactory(status=Match.MatchStatus.SCHEDULED)
45
+ new_home_team = TeamFactory()
46
+ instance.home = new_home_team
47
+ response = get_update_view(self.client, instance, MatchModelSerializer, self.detail_url_str)
48
+ instance.refresh_from_db()
49
+ self.assertEqual(response.status_code, 200)
50
+ self.assertEqual(response.data["instance"]["home"], instance.home.id)
51
+
52
+ def test_partial_update_view(self):
53
+ instance = MatchFactory()
54
+ new_home_team = TeamFactory()
55
+ response = get_partial_view(self.client, instance.id, {"home": new_home_team.id}, self.detail_url_str)
56
+ instance.refresh_from_db()
57
+ self.assertEqual(response.status_code, 200)
58
+ self.assertEqual(response.data["instance"]["home"], instance.home.id)
59
+
60
+ def test_delete_view(self):
61
+ instance = MatchFactory()
62
+ self.assertTrue(Match.objects.filter(pk=instance.pk).exists())
63
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
64
+ self.assertEqual(response.status_code, 204)
65
+ self.assertFalse(Match.objects.filter(pk=instance.pk).exists())
@@ -0,0 +1,166 @@
1
+ import pytest
2
+ from django.test import Client, TestCase
3
+ from django.urls import reverse
4
+ from wbcore.contrib.authentication.factories import SuperUserFactory
5
+ from wbcore.contrib.example_app.factories import (
6
+ PlayerFactory,
7
+ SportPersonFactory,
8
+ TeamFactory,
9
+ )
10
+ from wbcore.contrib.example_app.models import Player, SportPerson
11
+ from wbcore.contrib.example_app.serializers import (
12
+ PlayerModelSerializer,
13
+ SportPersonModelSerializer,
14
+ )
15
+ from wbcore.contrib.example_app.tests.test_viewsets.test_utils_viewsets import (
16
+ find_instances_in_response,
17
+ get_create_view,
18
+ get_delete_view,
19
+ get_detail_view,
20
+ get_partial_view,
21
+ get_update_view,
22
+ )
23
+ from wbcore.contrib.example_app.viewsets import (
24
+ PlayerModelViewSet,
25
+ SportPersonModelViewSet,
26
+ )
27
+
28
+
29
+ @pytest.mark.django_db
30
+ class TestSportPersonModelViewSet(TestCase):
31
+ def setUp(self):
32
+ self.user = SuperUserFactory()
33
+ self.client = Client()
34
+ self.client.force_login(user=self.user)
35
+ self.list_url = reverse("example_app:person-list")
36
+ self.detail_url_str = "example_app:person-detail"
37
+
38
+ def test_list_view(self):
39
+ response = self.client.get(self.list_url)
40
+ self.assertEqual(response.status_code, 200)
41
+
42
+ def test_create_view(self):
43
+ person = SportPersonFactory()
44
+ response = get_create_view(self.client, person, self.user, self.list_url, SportPersonModelViewSet)
45
+ self.assertEqual(response.status_code, 201)
46
+ self.assertTrue(SportPerson.objects.filter(last_name=person.last_name).exists())
47
+
48
+ def test_detail_view(self):
49
+ instance = SportPersonFactory()
50
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
51
+ self.assertEqual(response.status_code, 200)
52
+ self.assertEqual(response.data["instance"]["last_name"], instance.last_name)
53
+
54
+ def test_update_view(self):
55
+ instance = SportPersonFactory()
56
+ instance.last_name = "Updated Instance"
57
+ instance.profile_image = None
58
+ response = get_update_view(self.client, instance, SportPersonModelSerializer, self.detail_url_str)
59
+ instance.refresh_from_db()
60
+ self.assertEqual(response.status_code, 200)
61
+ self.assertEqual(response.data["instance"]["last_name"], instance.last_name)
62
+
63
+ def test_partial_update_view(self):
64
+ instance = SportPersonFactory()
65
+ response = get_partial_view(self.client, instance.id, {"last_name": "Updated Instance"}, self.detail_url_str)
66
+ instance.refresh_from_db()
67
+ self.assertEqual(response.status_code, 200)
68
+ self.assertEqual(response.data["instance"]["last_name"], instance.last_name)
69
+
70
+ def test_delete_view(self):
71
+ instance = SportPersonFactory()
72
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
73
+ self.assertEqual(response.status_code, 204)
74
+ self.assertFalse(SportPerson.objects.filter(pk=instance.pk).exists())
75
+
76
+ def test_ordering_fields(self):
77
+ person_a = SportPersonFactory(first_name="Hans", last_name="Brecht")
78
+ person_b = SportPersonFactory(first_name="Hans", last_name="Ahrens")
79
+ person_c = SportPersonFactory(first_name="Ralf", last_name="Christ")
80
+
81
+ response = self.client.get(self.list_url)
82
+ self.assertEqual(response.status_code, 200)
83
+ self.assertEqual(response.data["count"], SportPerson.objects.count())
84
+ self.assertEqual(response.data["results"][0]["id"], person_b.id)
85
+ self.assertEqual(response.data["results"][1]["id"], person_a.id)
86
+ self.assertEqual(response.data["results"][2]["id"], person_c.id)
87
+
88
+
89
+ @pytest.mark.django_db
90
+ class TestPlayerModelViewSet(TestCase):
91
+ def setUp(self):
92
+ self.user = SuperUserFactory()
93
+ self.client = Client()
94
+ self.client.force_login(user=self.user)
95
+ self.detail_url_str = "example_app:player-detail"
96
+ self.list_url = reverse("example_app:player-list")
97
+
98
+ def test_list_view(self):
99
+ response = self.client.get(self.list_url)
100
+ self.assertEqual(response.status_code, 200)
101
+
102
+ def test_create_view(self):
103
+ player = PlayerFactory()
104
+ response = get_create_view(self.client, player, self.user, self.list_url, PlayerModelViewSet)
105
+ self.assertEqual(response.status_code, 201)
106
+ self.assertTrue(Player.objects.filter(last_name=player.last_name).exists())
107
+
108
+ def test_detail_view(self):
109
+ instance = PlayerFactory()
110
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
111
+ self.assertEqual(response.status_code, 200)
112
+ self.assertEqual(response.data["instance"]["last_name"], instance.last_name)
113
+
114
+ def test_update_view(self):
115
+ instance = PlayerFactory()
116
+ instance.last_name = "Updated Instance"
117
+ response = get_update_view(self.client, instance, PlayerModelSerializer, self.detail_url_str)
118
+ instance.refresh_from_db()
119
+ self.assertEqual(response.status_code, 200)
120
+ self.assertEqual(response.data["instance"]["last_name"], instance.last_name)
121
+
122
+ def test_partial_update_view(self):
123
+ instance = PlayerFactory()
124
+ response = get_partial_view(self.client, instance.id, {"last_name": "Updated Instance"}, self.detail_url_str)
125
+ instance.refresh_from_db()
126
+ self.assertEqual(response.status_code, 200)
127
+ self.assertEqual(response.data["instance"]["last_name"], instance.last_name)
128
+
129
+ def test_delete_view(self):
130
+ instance = PlayerFactory()
131
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
132
+ self.assertEqual(response.status_code, 204)
133
+ self.assertFalse(Player.objects.filter(pk=instance.pk).exists())
134
+
135
+ def test_ordering_fields(self):
136
+ team_a, team_b = TeamFactory(name="Team A"), TeamFactory(name="Team B")
137
+ person_a = PlayerFactory(first_name="Hans", last_name="Ahrens", current_team=team_b)
138
+ person_b = PlayerFactory(first_name="Hans", last_name="Ahrens", current_team=team_a)
139
+ person_c = PlayerFactory(first_name="Ralf", last_name="Brecht")
140
+
141
+ response = self.client.get(self.list_url)
142
+ self.assertEqual(response.status_code, 200)
143
+ self.assertEqual(response.data["count"], Player.objects.count())
144
+ self.assertEqual(response.data["results"][0]["id"], person_b.id)
145
+ self.assertEqual(response.data["results"][1]["id"], person_a.id)
146
+ self.assertEqual(response.data["results"][2]["id"], person_c.id)
147
+
148
+ def test_player_team(self):
149
+ player_a = PlayerFactory()
150
+ player_b = PlayerFactory(current_team=player_a.current_team)
151
+ player_c = PlayerFactory()
152
+ expected_number_of_player = Player.objects.filter(current_team=player_a.current_team).count()
153
+ player_team_url = reverse("example_app:player-team-list", args=[player_a.current_team.id])
154
+ response = self.client.get(player_team_url)
155
+ player_a_found, player_b_found, player_c_found = find_instances_in_response(
156
+ [player_a, player_b, player_c], response
157
+ )
158
+ self.assertEqual(
159
+ response.data["count"],
160
+ expected_number_of_player,
161
+ f"The answer should contain {expected_number_of_player} players",
162
+ )
163
+ self.assertEqual(response.status_code, 200)
164
+ self.assertTrue(player_a_found, "Player A was not found in Response")
165
+ self.assertTrue(player_b_found, "Player B was not found in Response")
166
+ self.assertFalse(player_c_found, "Player C was found in Response, but should not be found")
@@ -0,0 +1,75 @@
1
+ import pytest
2
+ from django.test import Client, TestCase
3
+ from django.urls import reverse
4
+ from wbcore.contrib.authentication.factories import SuperUserFactory
5
+ from wbcore.contrib.example_app.factories import RoleFactory
6
+ from wbcore.contrib.example_app.models import Role
7
+ from wbcore.contrib.example_app.serializers import RoleModelSerializer
8
+ from wbcore.contrib.example_app.tests.test_viewsets.test_utils_viewsets import (
9
+ get_create_view,
10
+ get_delete_view,
11
+ get_detail_view,
12
+ get_partial_view,
13
+ get_update_view,
14
+ )
15
+ from wbcore.contrib.example_app.viewsets import RoleModelViewSet
16
+
17
+
18
+ @pytest.mark.django_db
19
+ class TestRoleModelViewSet(TestCase):
20
+ def setUp(self):
21
+ self.user = SuperUserFactory()
22
+ self.client = Client()
23
+ self.client.force_login(user=self.user)
24
+ self.list_url = reverse("example_app:role-list")
25
+ self.detail_url_str = "example_app:role-detail"
26
+
27
+ def test_list_view(self):
28
+ response = self.client.get(self.list_url)
29
+ self.assertEqual(response.status_code, 200)
30
+
31
+ def test_create_view(self):
32
+ role = RoleFactory()
33
+ response = get_create_view(self.client, role, self.user, self.list_url, RoleModelViewSet)
34
+ self.assertEqual(response.status_code, 201)
35
+ self.assertTrue(Role.objects.filter(title=role.title).exists())
36
+
37
+ def test_detail_view(self):
38
+ instance = RoleFactory()
39
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
40
+ self.assertEqual(response.status_code, 200)
41
+ self.assertEqual(response.data["instance"]["title"], instance.title)
42
+
43
+ def test_update_view(self):
44
+ instance = RoleFactory()
45
+ instance.title = "Updated Instance"
46
+ response = get_update_view(self.client, instance, RoleModelSerializer, self.detail_url_str)
47
+ instance.refresh_from_db()
48
+ self.assertEqual(response.status_code, 200)
49
+ self.assertEqual(response.data["instance"]["title"], instance.title)
50
+
51
+ def test_partial_update_view(self):
52
+ instance = RoleFactory()
53
+ response = get_partial_view(self.client, instance.id, {"title": "Patched Title"}, self.detail_url_str)
54
+ instance.refresh_from_db()
55
+ self.assertEqual(response.status_code, 200)
56
+ self.assertEqual(response.data["instance"]["title"], instance.title)
57
+
58
+ def test_delete_view(self):
59
+ instance = RoleFactory()
60
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
61
+ self.assertEqual(response.status_code, 204)
62
+ self.assertFalse(Role.objects.filter(pk=instance.pk).exists())
63
+
64
+ def test_ordering_fields(self):
65
+ first_role, second_role, third_role = "Role A", "Role B", "Role C"
66
+ RoleFactory(title=second_role)
67
+ RoleFactory(title=first_role)
68
+ RoleFactory(title=third_role)
69
+
70
+ response = self.client.get(self.list_url)
71
+ self.assertEqual(response.status_code, 200)
72
+ self.assertEqual(response.data["count"], Role.objects.count())
73
+ self.assertEqual(response.data["results"][0]["title"], first_role)
74
+ self.assertEqual(response.data["results"][1]["title"], second_role)
75
+ self.assertEqual(response.data["results"][2]["title"], third_role)
@@ -0,0 +1,75 @@
1
+ import pytest
2
+ from django.test import Client, TestCase
3
+ from django.urls import reverse
4
+ from wbcore.contrib.authentication.factories import SuperUserFactory
5
+ from wbcore.contrib.example_app.factories import SportFactory
6
+ from wbcore.contrib.example_app.models import Sport
7
+ from wbcore.contrib.example_app.serializers import SportModelSerializer
8
+ from wbcore.contrib.example_app.tests.test_viewsets.test_utils_viewsets import (
9
+ get_create_view,
10
+ get_delete_view,
11
+ get_detail_view,
12
+ get_partial_view,
13
+ get_update_view,
14
+ )
15
+ from wbcore.contrib.example_app.viewsets import SportModelViewSet
16
+
17
+
18
+ @pytest.mark.django_db
19
+ class TestSportModelViewSet(TestCase):
20
+ def setUp(self):
21
+ self.user = SuperUserFactory()
22
+ self.client = Client()
23
+ self.client.force_login(user=self.user)
24
+ self.list_url = reverse("example_app:sport-list")
25
+ self.detail_url_str = "example_app:sport-detail"
26
+
27
+ def test_list_view(self):
28
+ response = self.client.get(self.list_url)
29
+ self.assertEqual(response.status_code, 200)
30
+
31
+ def test_create_view(self):
32
+ sport = SportFactory()
33
+ response = get_create_view(self.client, sport, self.user, self.list_url, SportModelViewSet)
34
+ self.assertEqual(response.status_code, 201)
35
+ self.assertTrue(Sport.objects.filter(name=sport.name).exists())
36
+
37
+ def test_detail_view(self):
38
+ instance = SportFactory()
39
+ response = get_detail_view(self.client, instance.pk, self.detail_url_str)
40
+ self.assertEqual(response.status_code, 200)
41
+ self.assertEqual(response.data["instance"]["name"], instance.name)
42
+
43
+ def test_update_view(self):
44
+ instance = SportFactory()
45
+ instance.name = "Updated Instance"
46
+ response = get_update_view(self.client, instance, SportModelSerializer, self.detail_url_str)
47
+ instance.refresh_from_db()
48
+ self.assertEqual(response.status_code, 200)
49
+ self.assertEqual(response.data["instance"]["name"], instance.name)
50
+
51
+ def test_partial_update_view(self):
52
+ instance = SportFactory()
53
+ response = get_partial_view(self.client, instance.id, {"name": "Patched name"}, self.detail_url_str)
54
+ instance.refresh_from_db()
55
+ self.assertEqual(response.status_code, 200)
56
+ self.assertEqual(response.data["instance"]["name"], instance.name)
57
+
58
+ def test_delete_view(self):
59
+ instance = SportFactory()
60
+ response = get_delete_view(self.client, self.detail_url_str, instance.pk)
61
+ self.assertEqual(response.status_code, 204)
62
+ self.assertFalse(Sport.objects.filter(pk=instance.pk).exists())
63
+
64
+ def test_ordering_fields(self):
65
+ first_name, second_name, third_name = "Team A", "Team B", "Team C"
66
+ SportFactory(name=second_name)
67
+ SportFactory(name=first_name)
68
+ SportFactory(name=third_name)
69
+
70
+ response = self.client.get(self.list_url)
71
+ self.assertEqual(response.status_code, 200)
72
+ self.assertEqual(response.data["count"], Sport.objects.count())
73
+ self.assertEqual(response.data["results"][0]["name"], first_name)
74
+ self.assertEqual(response.data["results"][1]["name"], second_name)
75
+ self.assertEqual(response.data["results"][2]["name"], third_name)