Skip to content

Commit b709b00

Browse files
committed
add unittests, added alias checking function
1 parent 606177a commit b709b00

File tree

11 files changed

+134
-39
lines changed

11 files changed

+134
-39
lines changed

CustomCommands.sln

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 17
44
VisualStudioVersion = 17.7.34018.315
55
MinimumVisualStudioVersion = 10.0.40219.1
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomCommands", "CustomCommands\CustomCommands.csproj", "{CFD687D3-02AF-4F8B-B561-ED01C4B2C5D3}"
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomCommands", "CustomCommands\CustomCommands.csproj", "{CFD687D3-02AF-4F8B-B561-ED01C4B2C5D3}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{F5F2148E-D3A3-4196-B97A-4E0941326365}"
79
EndProject
810
Global
911
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1012
Debug|Any CPU = Debug|Any CPU
1113
Release|Any CPU = Release|Any CPU
1214
EndGlobalSection
1315
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14-
{DBAE0443-7660-456C-B185-444366A42766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15-
{DBAE0443-7660-456C-B185-444366A42766}.Debug|Any CPU.Build.0 = Debug|Any CPU
16-
{DBAE0443-7660-456C-B185-444366A42766}.Release|Any CPU.ActiveCfg = Release|Any CPU
17-
{DBAE0443-7660-456C-B185-444366A42766}.Release|Any CPU.Build.0 = Release|Any CPU
18-
{C4B486A3-D8FC-41AC-827E-905BAFF50A9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19-
{C4B486A3-D8FC-41AC-827E-905BAFF50A9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
20-
{C4B486A3-D8FC-41AC-827E-905BAFF50A9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
21-
{C4B486A3-D8FC-41AC-827E-905BAFF50A9D}.Release|Any CPU.Build.0 = Release|Any CPU
22-
{A590C358-C1B2-4F21-B9B0-FE56B6562F39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23-
{A590C358-C1B2-4F21-B9B0-FE56B6562F39}.Debug|Any CPU.Build.0 = Debug|Any CPU
24-
{A590C358-C1B2-4F21-B9B0-FE56B6562F39}.Release|Any CPU.ActiveCfg = Release|Any CPU
25-
{A590C358-C1B2-4F21-B9B0-FE56B6562F39}.Release|Any CPU.Build.0 = Release|Any CPU
26-
{8BF8B3C3-FE3F-459E-B414-72469816539A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27-
{8BF8B3C3-FE3F-459E-B414-72469816539A}.Debug|Any CPU.Build.0 = Debug|Any CPU
28-
{8BF8B3C3-FE3F-459E-B414-72469816539A}.Release|Any CPU.ActiveCfg = Release|Any CPU
29-
{8BF8B3C3-FE3F-459E-B414-72469816539A}.Release|Any CPU.Build.0 = Release|Any CPU
3016
{CFD687D3-02AF-4F8B-B561-ED01C4B2C5D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
3117
{CFD687D3-02AF-4F8B-B561-ED01C4B2C5D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
3218
{CFD687D3-02AF-4F8B-B561-ED01C4B2C5D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
3319
{CFD687D3-02AF-4F8B-B561-ED01C4B2C5D3}.Release|Any CPU.Build.0 = Release|Any CPU
20+
{F5F2148E-D3A3-4196-B97A-4E0941326365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{F5F2148E-D3A3-4196-B97A-4E0941326365}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{F5F2148E-D3A3-4196-B97A-4E0941326365}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{F5F2148E-D3A3-4196-B97A-4E0941326365}.Release|Any CPU.Build.0 = Release|Any CPU
3424
EndGlobalSection
3525
GlobalSection(SolutionProperties) = preSolution
3626
HideSolutionNode = FALSE

CustomCommands/CustomCommandsServiceCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class CustomCommandsServiceCollection : IPluginServiceCollection<CustomCo
1010
public void ConfigureServices(IServiceCollection services)
1111
{
1212
services.Scan(scan => scan
13-
.FromAssemblyOf<IPermissionsManager>()
13+
.FromAssemblyOf<IRegisterCommands>()
1414
.AddClasses()
1515
.AsImplementedInterfaces()
1616
.WithSingletonLifetime()
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
12
using CounterStrikeSharp.API.Core;
23
using CustomCommands.Model;
34

45
namespace CustomCommands.Interfaces;
56

6-
public interface IPermissionsManager
7+
public interface IPluginUtilities
78
{
9+
string[] SplitStringByCommaOrSemicolon(string str);
10+
void ExecuteServerCommands(Commands cmd);
811
bool RequiresPermissions(CCSPlayerController player, Permission permissions);
912
}

CustomCommands/Interfaces/IRegisterCommands.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@ public interface IRegisterCommands
66
{
77
void AddCommands(Commands cmd);
88
List<Commands> CheckForDuplicateCommands(List<Commands> comms);
9-
void ExecuteServerCommands(Commands cmd);
109
}

CustomCommands/Services/PermissionsManager.cs renamed to CustomCommands/Services/PluginUtilities.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,37 @@
1+
using System.Text.RegularExpressions;
2+
using CounterStrikeSharp.API;
13
using CounterStrikeSharp.API.Core;
24
using CounterStrikeSharp.API.Modules.Admin;
35
using CustomCommands.Interfaces;
46
using CustomCommands.Model;
57

68
namespace CustomCommands.Services;
79

8-
public class PermissionsManager : IPermissionsManager
10+
public class PluginUtilities : IPluginUtilities
911
{
1012
private readonly IPluginGlobals PluginGlobals;
11-
12-
public PermissionsManager(IPluginGlobals PluginGlobals)
13+
14+
public PluginUtilities(IPluginGlobals PluginGlobals)
1315
{
1416
this.PluginGlobals = PluginGlobals;
1517
}
1618

19+
public string[] SplitStringByCommaOrSemicolon(string str)
20+
{
21+
return Regex.Split(str, ",|;|\\s")
22+
.Where(s => !string.IsNullOrEmpty(s))
23+
.ToArray();
24+
}
25+
26+
public void ExecuteServerCommands(Commands cmd)
27+
{
28+
if (cmd.ServerCommands.Count == 0) return;
29+
30+
foreach (var serverCommand in cmd.ServerCommands)
31+
{
32+
Server.ExecuteCommand(serverCommand);
33+
}
34+
}
1735
public bool RequiresPermissions(CCSPlayerController player, Permission permissions)
1836
{
1937
if (!permissions.RequiresAllPermissions)

CustomCommands/Services/RegisterCommands.cs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using CounterStrikeSharp.API;
21
using CounterStrikeSharp.API.Core.Plugin;
32
using CustomCommands.Interfaces;
43
using CustomCommands.Model;
@@ -10,24 +9,25 @@ public class RegisterCommands : IRegisterCommands
109
private readonly ILogger<CustomCommands> Logger;
1110
private readonly IMessageManager MessageManager;
1211
private readonly IPluginGlobals PluginGlobals;
13-
private readonly IPermissionsManager PermissionsManager;
1412
private readonly PluginContext PluginContext;
13+
private readonly IPluginUtilities PluginUtilities;
1514

1615
public RegisterCommands(ILogger<CustomCommands> Logger, IMessageManager MessageManager,
17-
IPluginGlobals PluginGlobals, IPermissionsManager PermissionsManager, IPluginContext PluginContext)
16+
IPluginGlobals PluginGlobals, IPluginContext PluginContext,
17+
IPluginUtilities PluginUtilities)
1818
{
1919
this.Logger = Logger;
2020
this.MessageManager = MessageManager;
2121
this.PluginGlobals = PluginGlobals;
22-
this.PermissionsManager = PermissionsManager;
2322
this.PluginContext = (PluginContext as PluginContext)!;
23+
this.PluginUtilities = PluginUtilities;
2424
}
2525

2626
public void AddCommands(Commands com)
2727
{
2828
CustomCommands plugin = (PluginContext.Plugin as CustomCommands)!;
2929

30-
string[] aliases = com.Command.Split(',');
30+
string[] aliases = PluginUtilities.SplitStringByCommaOrSemicolon(com.Command);
3131

3232
for (int i = 0; i < aliases.Length; i++)
3333
{
@@ -36,12 +36,12 @@ public void AddCommands(Commands com)
3636
if (player == null) return;
3737

3838
if (com.Permission.PermissionList.Count > 0 && com.Permission != null)
39-
if (!PermissionsManager.RequiresPermissions(player, com.Permission))
39+
if (!PluginUtilities.RequiresPermissions(player, com.Permission))
4040
return;
4141

4242
MessageManager.SendMessage(player, com);
4343

44-
ExecuteServerCommands(com);
44+
PluginUtilities.ExecuteServerCommands(com);
4545
});
4646
}
4747
}
@@ -89,13 +89,4 @@ public List<Commands> CheckForDuplicateCommands(List<Commands> comms)
8989

9090
return commands;
9191
}
92-
public void ExecuteServerCommands(Commands cmd)
93-
{
94-
if (cmd.ServerCommands.Count == 0) return;
95-
96-
foreach (var serverCommand in cmd.ServerCommands)
97-
{
98-
Server.ExecuteCommand(serverCommand);
99-
}
100-
}
10192
}

UnitTests/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/.vs
2+
/bin
3+
/obj

UnitTests/GlobalUsings.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
global using Xunit;
2+
global using CustomCommands.Services;
3+
global using Microsoft.Extensions.DependencyInjection;

UnitTests/PluginUtilitiesTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using CustomCommands.Interfaces;
2+
using CustomCommands.Model;
3+
4+
namespace UnitTests;
5+
6+
public partial class UnitTests
7+
{
8+
[Theory]
9+
[InlineData("test,test2,test3", new[] { "test", "test2", "test3" })]
10+
[InlineData("test;test2;test3", new[] { "test", "test2", "test3" })]
11+
[InlineData("test,test2;test3", new[] { "test", "test2", "test3" })]
12+
[InlineData("test", new[] { "test" })]
13+
[InlineData("test;", new[] { "test" })]
14+
[InlineData("", new string[] { })]
15+
public void Test_SplitStringByCommaOrSemicolon(string input, string[] expected)
16+
{
17+
var pluginUtilities = _sp.GetRequiredService<IPluginUtilities>();
18+
var split = pluginUtilities.SplitStringByCommaOrSemicolon(input);
19+
Assert.Equal(expected, split);
20+
}
21+
22+
[Fact]
23+
public void Test_ExecuteServerCommands()
24+
{
25+
var pluginUtilities = _sp.GetRequiredService<IPluginUtilities>();
26+
var commands = new Commands
27+
{
28+
ServerCommands = new List<string>
29+
{
30+
"sv_cheats 1",
31+
"echo hello"
32+
}
33+
};
34+
pluginUtilities.ExecuteServerCommands(commands);
35+
}
36+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using CustomCommands.Interfaces;
2+
3+
namespace UnitTests;
4+
5+
public partial class UnitTests
6+
{
7+
private readonly IServiceProvider _sp;
8+
public UnitTests()
9+
{
10+
var serviceCollection = new ServiceCollection();
11+
serviceCollection.AddLogging();
12+
serviceCollection.Scan(scan => scan
13+
.FromAssemblyOf<IRegisterCommands>()
14+
.AddClasses()
15+
.AsImplementedInterfaces()
16+
.WithSingletonLifetime()
17+
);
18+
_sp = serviceCollection.BuildServiceProvider();
19+
}
20+
}

0 commit comments

Comments
 (0)