1+ using Refresh . Database . Models . Users ;
2+ using Refresh . Interfaces . APIv3 . Endpoints . ApiTypes ;
3+ using RefreshTests . GameServer . Extensions ;
4+ using Refresh . Database . Models . Authentication ;
5+ using Refresh . Interfaces . APIv3 . Endpoints . DataTypes . Response . Playlists ;
6+ using Refresh . Interfaces . APIv3 . Endpoints . DataTypes . Request ;
7+ using Refresh . Database . Models . Playlists ;
8+ using Refresh . Database . Models . Levels ;
9+ using Refresh . Common . Constants ;
10+
11+ namespace RefreshTests . GameServer . Tests . ApiV3 ;
12+
13+ public class PlaylistApiTests : GameServerTest
14+ {
15+ [ Test ]
16+ public void CreateAndUpdatePlaylist ( )
17+ {
18+ using TestContext context = this . GetServer ( ) ;
19+ GameUser user = context . CreateUser ( ) ;
20+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , user ) ;
21+
22+ // Create
23+ ApiPlaylistCreationRequest request = new ( )
24+ {
25+ Name = "Hardest levels" ,
26+ Description = "idk"
27+ } ;
28+ ApiResponse < ApiGamePlaylistResponse > ? response = client . PostData < ApiGamePlaylistResponse > ( $ "/api/v3/playlists", request ) ;
29+ Assert . That ( response ? . Data , Is . Not . Null ) ;
30+ Assert . That ( response ! . Data ! . Name , Is . EqualTo ( request . Name ) ) ;
31+ Assert . That ( response ! . Data ! . Description , Is . EqualTo ( request . Description ) ) ;
32+ context . Database . Refresh ( ) ;
33+
34+ // Ensure the playlist is in the root playlist
35+ GamePlaylist ? root = context . Database . GetUserRootPlaylist ( user ) ;
36+ Assert . That ( root , Is . Not . Null ) ;
37+ Assert . That ( context . Database . GetPlaylistsInPlaylist ( root ! , 0 , 100 ) . Items . Any ( p => p . PlaylistId == response . Data . PlaylistId ) , Is . True ) ;
38+ context . Database . Refresh ( ) ;
39+
40+ // Update
41+ ApiPlaylistCreationRequest update = new ( )
42+ {
43+ Description = "Read the description smh"
44+ } ;
45+ response = client . PatchData < ApiGamePlaylistResponse > ( $ "/api/v3/playlists/id/{ response . Data . PlaylistId } ", update ) ;
46+ Assert . That ( response ? . Data , Is . Not . Null ) ;
47+ Assert . That ( response ! . Data ! . Name , Is . EqualTo ( request . Name ) ) ;
48+ Assert . That ( response ! . Data ! . Description , Is . EqualTo ( update . Description ) ) ;
49+ Assert . That ( response ! . Data ! . Description , Is . Not . EqualTo ( request . Description ) ) ;
50+ }
51+
52+ [ Test ]
53+ public void TrimPlaylistNameAndDescription ( )
54+ {
55+ using TestContext context = this . GetServer ( ) ;
56+ GameUser user = context . CreateUser ( ) ;
57+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , user ) ;
58+
59+ // Create
60+ ApiPlaylistCreationRequest request = new ( )
61+ {
62+ Name = new string ( 'S' , 600 ) ,
63+ Description = new string ( 'S' , 600 )
64+ } ;
65+ ApiResponse < ApiGamePlaylistResponse > ? response = client . PostData < ApiGamePlaylistResponse > ( $ "/api/v3/playlists", request ) ;
66+ Assert . That ( response ? . Data , Is . Not . Null ) ;
67+ Assert . That ( response ! . Data ! . Name . Length , Is . EqualTo ( UgcLimits . TitleLimit ) ) ;
68+ Assert . That ( response ! . Data ! . Description . Length , Is . EqualTo ( UgcLimits . DescriptionLimit ) ) ;
69+ context . Database . Refresh ( ) ;
70+
71+ // Update
72+ ApiPlaylistCreationRequest update = new ( )
73+ {
74+ Name = new string ( 'S' , 600 ) ,
75+ Description = new string ( 'S' , 600 )
76+ } ;
77+ response = client . PatchData < ApiGamePlaylistResponse > ( $ "/api/v3/playlists/id/{ response . Data . PlaylistId } ", update ) ;
78+ Assert . That ( response ? . Data , Is . Not . Null ) ;
79+ Assert . That ( response ! . Data ! . Name . Length , Is . EqualTo ( UgcLimits . TitleLimit ) ) ;
80+ Assert . That ( response ! . Data ! . Description . Length , Is . EqualTo ( UgcLimits . DescriptionLimit ) ) ;
81+ }
82+
83+ [ Test ]
84+ public void ClampPlaylistLocation ( )
85+ {
86+ using TestContext context = this . GetServer ( ) ;
87+ GameUser user = context . CreateUser ( ) ;
88+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , user ) ;
89+
90+ // Create
91+ ApiPlaylistCreationRequest request = new ( )
92+ {
93+ Location = new ( 1234567 , - 420 )
94+ } ;
95+ ApiResponse < ApiGamePlaylistResponse > ? response = client . PostData < ApiGamePlaylistResponse > ( $ "/api/v3/playlists", request ) ;
96+ Assert . That ( response ? . Data , Is . Not . Null ) ;
97+ Assert . That ( response ! . Data ! . Location . X , Is . EqualTo ( ushort . MaxValue ) ) ;
98+ Assert . That ( response ! . Data ! . Location . Y , Is . Zero ) ;
99+ context . Database . Refresh ( ) ;
100+
101+ // Update
102+ ApiPlaylistCreationRequest update = new ( )
103+ {
104+ Location = new ( - 420 , 510 )
105+ } ;
106+ response = client . PatchData < ApiGamePlaylistResponse > ( $ "/api/v3/playlists/id/{ response . Data . PlaylistId } ", update ) ;
107+ Assert . That ( response ? . Data , Is . Not . Null ) ;
108+ Assert . That ( response ! . Data ! . Location . X , Is . Zero ) ;
109+ Assert . That ( response ! . Data ! . Location . Y , Is . EqualTo ( update . Location . Y ) ) ;
110+ }
111+
112+ [ Test ]
113+ public async Task GetAndDeletePlaylist ( )
114+ {
115+ using TestContext context = this . GetServer ( ) ;
116+ GameUser user = context . CreateUser ( ) ;
117+ GamePlaylist playlist = context . CreatePlaylist ( user ) ;
118+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , user ) ;
119+
120+ // Get (unauthenticated)
121+ ApiPlaylistCreationRequest request = new ( )
122+ {
123+ Name = "Easiest levels" ,
124+ Description = "for the skill issued"
125+ } ;
126+ ApiResponse < ApiGamePlaylistResponse > ? response = context . Http . GetData < ApiGamePlaylistResponse > ( $ "/api/v3/playlists/id/{ playlist . PlaylistId } ") ;
127+ Assert . That ( response ? . Data , Is . Not . Null ) ;
128+ Assert . That ( response ! . Data ! . PlaylistId , Is . EqualTo ( playlist . PlaylistId ) ) ;
129+
130+ // Delete (authenticated)
131+ HttpResponseMessage deletionResponse = await client . DeleteAsync ( $ "/api/v3/playlists/id/{ playlist . PlaylistId } ") ;
132+ Assert . That ( deletionResponse , Is . Not . Null ) ;
133+ Assert . That ( deletionResponse . IsSuccessStatusCode , Is . True ) ;
134+
135+ GamePlaylist ? postDeletionPlaylist = context . Database . GetPlaylistById ( playlist . PlaylistId ) ;
136+ Assert . That ( postDeletionPlaylist , Is . Null ) ;
137+ }
138+
139+ [ Test ]
140+ public async Task AddAndRemoveLevelToPlaylist ( )
141+ {
142+ using TestContext context = this . GetServer ( ) ;
143+ GameUser user = context . CreateUser ( ) ;
144+ GameLevel level = context . CreateLevel ( user ) ;
145+ GamePlaylist playlist = context . CreatePlaylist ( user ) ;
146+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , user ) ;
147+
148+ // Add
149+ HttpResponseMessage response = await client . PostAsync ( $ "/api/v3/playlists/id/{ playlist . PlaylistId } /addLevel/id/{ level . LevelId } ", null ) ;
150+ Assert . That ( response . IsSuccessStatusCode , Is . True ) ;
151+ Assert . That ( context . Database . GetTotalLevelsInPlaylist ( playlist ) , Is . EqualTo ( 1 ) ) ;
152+ Assert . That ( context . Database . GetTotalPlaylistsContainingLevel ( level ) , Is . EqualTo ( 1 ) ) ;
153+
154+ // Remove
155+ response = await client . PostAsync ( $ "/api/v3/playlists/id/{ playlist . PlaylistId } /removeLevel/id/{ level . LevelId } ", null ) ;
156+ Assert . That ( response . IsSuccessStatusCode , Is . True ) ;
157+ Assert . That ( context . Database . GetTotalLevelsInPlaylist ( playlist ) , Is . Zero ) ;
158+ Assert . That ( context . Database . GetTotalPlaylistsContainingLevel ( level ) , Is . Zero ) ;
159+ }
160+
161+ [ Test ]
162+ public async Task CantAddAndRemoveLevelToOthersPlaylist ( )
163+ {
164+ using TestContext context = this . GetServer ( ) ;
165+ GameUser creator = context . CreateUser ( ) ;
166+ GameUser moron = context . CreateUser ( ) ;
167+ GameLevel level = context . CreateLevel ( moron ) ;
168+ GamePlaylist playlist = context . CreatePlaylist ( creator ) ;
169+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , moron ) ;
170+
171+ // Add (fail)
172+ HttpResponseMessage response = await client . PostAsync ( $ "/api/v3/playlists/id/{ playlist . PlaylistId } /addLevel/id/{ level . LevelId } ", null ) ;
173+ Assert . That ( response . IsSuccessStatusCode , Is . False ) ;
174+ Assert . That ( context . Database . GetTotalLevelsInPlaylist ( playlist ) , Is . Zero ) ;
175+ Assert . That ( context . Database . GetTotalPlaylistsContainingLevel ( level ) , Is . Zero ) ;
176+
177+ // Add (prepare for removal)
178+ context . Database . AddLevelToPlaylist ( level , playlist ) ;
179+ Assert . That ( context . Database . GetTotalLevelsInPlaylist ( playlist ) , Is . EqualTo ( 1 ) ) ;
180+ Assert . That ( context . Database . GetTotalPlaylistsContainingLevel ( level ) , Is . EqualTo ( 1 ) ) ;
181+
182+ // Remove
183+ response = await client . PostAsync ( $ "/api/v3/playlists/id/{ playlist . PlaylistId } /removeLevel/id/{ level . LevelId } ", null ) ;
184+ Assert . That ( response . IsSuccessStatusCode , Is . False ) ;
185+ Assert . That ( context . Database . GetTotalLevelsInPlaylist ( playlist ) , Is . EqualTo ( 1 ) ) ;
186+ Assert . That ( context . Database . GetTotalPlaylistsContainingLevel ( level ) , Is . EqualTo ( 1 ) ) ;
187+ }
188+
189+ [ Test ]
190+ public async Task AddAndRemovePlaylistToPlaylist ( )
191+ {
192+ using TestContext context = this . GetServer ( ) ;
193+ GameUser user = context . CreateUser ( ) ;
194+ GamePlaylist parent = context . CreatePlaylist ( user ) ;
195+ GamePlaylist child = context . CreatePlaylist ( user ) ;
196+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , user ) ;
197+
198+ // Add
199+ HttpResponseMessage response = await client . PostAsync ( $ "/api/v3/playlists/id/{ parent . PlaylistId } /addPlaylist/id/{ child . PlaylistId } ", null ) ;
200+ Assert . That ( response . IsSuccessStatusCode , Is . True ) ;
201+ Assert . That ( context . Database . GetTotalPlaylistsInPlaylist ( parent ) , Is . EqualTo ( 1 ) ) ;
202+ Assert . That ( context . Database . GetTotalPlaylistsContainingPlaylist ( child ) , Is . EqualTo ( 1 ) ) ;
203+
204+ // Remove
205+ response = await client . PostAsync ( $ "/api/v3/playlists/id/{ parent . PlaylistId } /removePlaylist/id/{ child . PlaylistId } ", null ) ;
206+ Assert . That ( response . IsSuccessStatusCode , Is . True ) ;
207+ Assert . That ( context . Database . GetTotalPlaylistsInPlaylist ( parent ) , Is . Zero ) ;
208+ Assert . That ( context . Database . GetTotalPlaylistsContainingPlaylist ( child ) , Is . Zero ) ;
209+ }
210+
211+ [ Test ]
212+ public async Task CantAddAndRemovePlaylistToOthersPlaylist ( )
213+ {
214+ using TestContext context = this . GetServer ( ) ;
215+ GameUser creator = context . CreateUser ( ) ;
216+ GameUser moron = context . CreateUser ( ) ;
217+ GamePlaylist parent = context . CreatePlaylist ( creator ) ;
218+ GamePlaylist child = context . CreatePlaylist ( moron ) ;
219+ using HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , moron ) ;
220+
221+ // Add (fail)
222+ HttpResponseMessage response = await client . PostAsync ( $ "/api/v3/playlists/id/{ parent . PlaylistId } /addPlaylist/id/{ child . PlaylistId } ", null ) ;
223+ Assert . That ( response . IsSuccessStatusCode , Is . False ) ;
224+ Assert . That ( context . Database . GetTotalPlaylistsInPlaylist ( parent ) , Is . Zero ) ;
225+ Assert . That ( context . Database . GetTotalPlaylistsContainingPlaylist ( child ) , Is . Zero ) ;
226+
227+ // Add (prepare for removal)
228+ context . Database . AddPlaylistToPlaylist ( child , parent ) ;
229+ Assert . That ( context . Database . GetTotalPlaylistsInPlaylist ( parent ) , Is . EqualTo ( 1 ) ) ;
230+ Assert . That ( context . Database . GetTotalPlaylistsContainingPlaylist ( child ) , Is . EqualTo ( 1 ) ) ;
231+
232+ // Remove
233+ response = await client . PostAsync ( $ "/api/v3/playlists/id/{ parent . PlaylistId } /removePlaylist/id/{ child . PlaylistId } ", null ) ;
234+ Assert . That ( response . IsSuccessStatusCode , Is . False ) ;
235+ Assert . That ( context . Database . GetTotalPlaylistsInPlaylist ( parent ) , Is . EqualTo ( 1 ) ) ;
236+ Assert . That ( context . Database . GetTotalPlaylistsContainingPlaylist ( child ) , Is . EqualTo ( 1 ) ) ;
237+ }
238+ }
0 commit comments