Skip to content

Commit 84cc028

Browse files
chrislowzhengxiChris Lowmalvarezdemalde
authored
[API] Added test coverage and LiveChatFactory for testing LiveChat endpoints. can test with TesLiveChatAPI. Closes: #1400 (#1403)
Co-authored-by: Chris Low <[email protected]> Co-authored-by: malvarezdemalde <[email protected]>
1 parent 02b2d74 commit 84cc028

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

src/chigame/api/tests/factories.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from factory import Faker, Iterator, LazyAttribute, LazyFunction, Sequence, SubFactory, post_generation
66
from factory.django import DjangoModelFactory
77

8+
from chigame.chat.models import LiveChat, LiveChatUser
89
from chigame.games.models import Category, Chat, Feedback, Game, Lobby, Match, Mechanic, Review, Tournament
910
from chigame.users.models import User
1011

@@ -182,3 +183,18 @@ class Meta:
182183
is_public = True
183184
user = factory.SubFactory(UserFactory)
184185
game = factory.SubFactory(GameFactory)
186+
187+
188+
class LiveChatFactory(factory.django.DjangoModelFactory):
189+
class Meta:
190+
model = LiveChat
191+
192+
name = factory.Sequence(lambda n: f"LiveChat {n}")
193+
194+
@factory.post_generation
195+
def users(self, create, extracted, **kwargs):
196+
if not create:
197+
return
198+
if extracted:
199+
for user in extracted:
200+
LiveChatUser.objects.create(user=user, live_chat=self)

src/chigame/api/tests/test_api.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
ChatFactory,
1919
FeedbackFactory,
2020
GameFactory,
21+
LiveChatFactory,
2122
LobbyFactory,
2223
MatchFactory,
2324
TournamentFactory,
@@ -1276,3 +1277,54 @@ def test_delete_gamedata(self):
12761277

12771278
response = self.client.get(detail_url)
12781279
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
1280+
1281+
1282+
class TestLiveChatAPI(APITestCase):
1283+
def setUp(self):
1284+
self.user1 = UserFactory()
1285+
self.user2 = UserFactory()
1286+
self.user3 = UserFactory()
1287+
1288+
self.client.force_authenticate(user=self.user1)
1289+
1290+
def test_create_livechat(self):
1291+
url = reverse("api-livechat-create")
1292+
response = self.client.post(url, {"name": "Test Chat"})
1293+
1294+
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
1295+
self.assertEqual(response.data["name"], "Test Chat")
1296+
self.assertEqual(response.data["users"], [self.user1.id])
1297+
1298+
def test_add_users_to_chat(self):
1299+
chat = LiveChatFactory(users=[self.user1])
1300+
url = reverse("api-livechat-add-user", args=[chat.id])
1301+
1302+
response = self.client.post(url, {"user_ids": [self.user2.id, self.user3.id]}, format="json")
1303+
self.assertEqual(response.status_code, status.HTTP_200_OK)
1304+
1305+
# Reloads LiveChat from the database to get the latest state
1306+
chat.refresh_from_db()
1307+
user_ids = set(chat.users.values_list("id", flat=True))
1308+
self.assertSetEqual(user_ids, {self.user1.id, self.user2.id, self.user3.id})
1309+
1310+
def test_list_chats_user_is_in(self):
1311+
# user1 is only in this one
1312+
chat = LiveChatFactory(name="Test Chat", users=[self.user1])
1313+
LiveChatFactory(users=[self.user1])
1314+
LiveChatFactory(users=[self.user2])
1315+
1316+
url = reverse("api-livechat-list")
1317+
response = self.client.get(url)
1318+
1319+
self.assertEqual(response.status_code, status.HTTP_200_OK)
1320+
self.assertEqual(response.data["count"], 2)
1321+
self.assertEqual(response.data["results"][0]["id"], chat.id)
1322+
1323+
def test_livechat_detail(self):
1324+
chat = LiveChatFactory(users=[self.user1, self.user2])
1325+
url = reverse("api-livechat-detail", args=[chat.id])
1326+
1327+
response = self.client.get(url)
1328+
self.assertEqual(response.status_code, status.HTTP_200_OK)
1329+
self.assertEqual(response.data["id"], chat.id)
1330+
self.assertEqual(set(response.data["users"]), {self.user1.id, self.user2.id})

0 commit comments

Comments
 (0)