Skip to content

Commit 906f943

Browse files
committed
Test disallowance endpoints
1 parent d6e0dc0 commit 906f943

2 files changed

Lines changed: 417 additions & 0 deletions

File tree

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
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

Comments
 (0)