1+ using Refresh . Database . Models . Authentication ;
2+ using Refresh . Database . Models . Users ;
3+ using RefreshTests . GameServer . Extensions ;
4+ using Refresh . Interfaces . APIv3 . Endpoints . ApiTypes ;
5+ using Refresh . Interfaces . APIv3 . Endpoints . DataTypes . Request ;
6+ using Refresh . Interfaces . APIv3 . Endpoints . DataTypes . Response . Data ;
7+ using Refresh . Database . Models . Assets ;
8+
9+ namespace RefreshTests . GameServer . Tests . ApiV3 ;
10+
11+ public class AdminAssetApiTests : GameServerTest
12+ {
13+ [ Test ]
14+ [ TestCase ( true , false ) ]
15+ [ TestCase ( false , true ) ]
16+ [ TestCase ( false , false ) ]
17+ public void CanDisallowAssetUsingApi ( bool uploadGameAsset , bool specifyType )
18+ {
19+ const string hash = "hashie" ;
20+ using TestContext context = this . GetServer ( ) ;
21+ GameUser mod = context . CreateUser ( role : GameUserRole . Moderator ) ;
22+ HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , mod ) ;
23+
24+ if ( uploadGameAsset )
25+ {
26+ context . Database . AddAssetToDatabase ( new ( )
27+ {
28+ AssetHash = hash ,
29+ AssetType = GameAssetType . LocalProfile ,
30+ } ) ;
31+ context . Database . Refresh ( ) ;
32+ }
33+
34+ ApiDisallowAssetRequest disallowRequest = new ( )
35+ {
36+ AssetHash = hash ,
37+ AssetType = specifyType ? nameof ( GameAssetType . VoiceRecording ) : null ,
38+ Reason = "garbage singing to torture people" ,
39+ } ;
40+
41+ // Add via API
42+ ApiResponse < ApiDisallowedAssetResponse > ? response = client . PostData < ApiDisallowedAssetResponse > ( $ "/api/v3/admin/disallowed/assets", disallowRequest , false , false ) ;
43+ Assert . That ( response ? . Data , Is . Not . Null ) ;
44+ Assert . That ( response ! . StatusCode , Is . EqualTo ( Created ) ) ;
45+ Assert . That ( response ! . Data ! . AssetHash , Is . EqualTo ( hash ) ) ;
46+ if ( ! specifyType )
47+ {
48+ if ( ! uploadGameAsset ) Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . Unknown ) ) ;
49+ else Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . LocalProfile ) ) ;
50+ }
51+ else
52+ {
53+ Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . VoiceRecording ) ) ;
54+ }
55+ Assert . That ( response ! . Data ! . Reason , Is . EqualTo ( disallowRequest . Reason ) ) ;
56+ context . Database . Refresh ( ) ;
57+
58+ // Try to add again (different status code)
59+ response = client . PostData < ApiDisallowedAssetResponse > ( $ "/api/v3/admin/disallowed/assets", disallowRequest ) ;
60+ Assert . That ( response ? . Data , Is . Not . Null ) ;
61+ Assert . That ( response ! . StatusCode , Is . EqualTo ( OK ) ) ;
62+ Assert . That ( response ! . Data ! . AssetHash , Is . EqualTo ( hash ) ) ;
63+ Assert . That ( response ! . Data ! . Reason , Is . EqualTo ( disallowRequest . Reason ) ) ;
64+
65+ // Ensure it's actually in DB
66+ DisallowedAsset ? disallowed = context . Database . GetDisallowedAssetInfo ( hash ) ;
67+ Assert . That ( disallowed , Is . Not . Null ) ;
68+ Assert . That ( disallowed ! . AssetHash , Is . EqualTo ( hash ) ) ;
69+ if ( ! specifyType )
70+ {
71+ if ( ! uploadGameAsset ) Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . Unknown ) ) ;
72+ else Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . LocalProfile ) ) ;
73+ }
74+ else
75+ {
76+ Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . VoiceRecording ) ) ;
77+ }
78+ Assert . That ( disallowed ! . Reason , Is . EqualTo ( disallowRequest . Reason ) ) ;
79+
80+ // Different hash will fail
81+ const string wrong = "ass that info is null" ;
82+ Assert . That ( context . Database . GetDisallowedAssetInfo ( wrong ) , Is . Null ) ;
83+
84+ // Get list
85+ ApiListResponse < ApiDisallowedAssetResponse > ? listResponse = client . GetList < ApiDisallowedAssetResponse > ( $ "/api/v3/admin/disallowed/assets") ;
86+ Assert . That ( listResponse ? . Data , Is . Not . Null ) ;
87+ Assert . That ( listResponse ! . Data ! [ 0 ] . AssetHash , Is . EqualTo ( hash ) ) ;
88+ if ( ! specifyType )
89+ {
90+ if ( ! uploadGameAsset ) Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . Unknown ) ) ;
91+ else Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . LocalProfile ) ) ;
92+ }
93+ else
94+ {
95+ Assert . That ( response ! . Data ! . AssetType , Is . EqualTo ( GameAssetType . VoiceRecording ) ) ;
96+ }
97+ Assert . That ( listResponse ! . Data ! [ 0 ] . Reason , Is . EqualTo ( disallowRequest . Reason ) ) ;
98+
99+ // Reallow
100+ ApiDisallowAssetRequest reallowRequest = new ( )
101+ {
102+ AssetHash = hash ,
103+ Reason = "shit i pasted in the wrong hash sorry" ,
104+ } ;
105+
106+ response = client . DeleteData < ApiDisallowedAssetResponse > ( $ "/api/v3/admin/disallowed/assets", reallowRequest ) ;
107+ Assert . That ( response ? . Data , Is . Not . Null ) ;
108+ Assert . That ( response ! . StatusCode , Is . EqualTo ( OK ) ) ;
109+ context . Database . Refresh ( ) ;
110+
111+ // Try to reallow again
112+ response = client . DeleteData < ApiDisallowedAssetResponse > ( $ "/api/v3/admin/disallowed/assets", reallowRequest , false , true ) ;
113+ Assert . That ( response ? . Error , Is . Not . Null ) ;
114+ Assert . That ( response ! . StatusCode , Is . EqualTo ( NotFound ) ) ;
115+
116+ // Ensure it's no longer in DB
117+ Assert . That ( context . Database . GetDisallowedAssetInfo ( hash ) , Is . Null ) ;
118+ }
119+
120+ [ Test ]
121+ [ TestCase ( GameUserRole . User ) ]
122+ [ TestCase ( GameUserRole . Curator ) ]
123+ public void CannotDisallowAssetsAsNonMod ( GameUserRole role )
124+ {
125+ using TestContext context = this . GetServer ( ) ;
126+ GameUser moron = context . CreateUser ( role : role ) ;
127+ HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , moron ) ;
128+
129+ // Asset
130+ ApiDisallowAssetRequest disallowAssetRequest = new ( )
131+ {
132+ AssetHash = "ass type and hash" ,
133+ AssetType = nameof ( GameAssetType . Game ) ,
134+ Reason = "Game Disappeared." ,
135+ } ;
136+
137+ ApiResponse < ApiDisallowedAssetResponse > ? assetResponse = client . PostData < ApiDisallowedAssetResponse > ( $ "/api/v3/admin/disallowed/assets", disallowAssetRequest , false , true ) ;
138+ Assert . That ( assetResponse ? . Data , Is . Null ) ;
139+
140+ context . Database . Refresh ( ) ;
141+ Assert . That ( context . Database . GetDisallowedAssetInfo ( disallowAssetRequest . AssetHash ) , Is . Null ) ;
142+ }
143+ }
0 commit comments