@@ -85,12 +85,33 @@ public void ShouldAddFlagsAtRuntime()
8585 [ Fact ]
8686 public void ShouldAddPlayerToGroup ( )
8787 {
88+ // AddPlayerToGroup will create a new AdminData instance here, as "STEAM_0:1:3" does not
89+ // exist internally at this stage. Afterwards, AddPlayerToGroup will add "#css/root" as
90+ // a group.
8891 AdminManager . AddPlayerToGroup ( new SteamID ( "STEAM_0:1:3" ) , "#css/root" ) ;
8992 var adminData = AdminManager . GetPlayerAdminData ( new SteamID ( "STEAM_0:1:3" ) ) ;
9093 Assert . NotNull ( adminData ) ;
94+ Assert . True ( adminData . Groups . Any ( ) ) ;
9195 Assert . Equal ( "#css/root" , adminData . Groups . Single ( ) ) ;
9296 }
93-
97+
98+ [ Fact ]
99+ public void ShouldAddPlayerToGroupAtRuntime ( )
100+ {
101+ // Similar to ShouldPlayerAddToGroup, but different in that we create AdminData
102+ // manually first, then add the player into the group.
103+ // Aimed to resolve an issue raised on Discord by r3troattack.
104+
105+ AdminManager . CreateAdminData ( ( SteamID ) 76561197960265999 ) ;
106+ Assert . False ( AdminManager . PlayerInGroup ( ( SteamID ) 76561197960265999 , "#css/root" ) ) ;
107+ AdminManager . AddPlayerToGroup ( ( SteamID ) 76561197960265999 , "#css/root" ) ;
108+
109+ var adminData = AdminManager . GetPlayerAdminData ( ( SteamID ) 76561197960265999 ) ;
110+ Assert . NotNull ( adminData ) ;
111+ Assert . True ( adminData . Groups . Any ( ) ) ;
112+ Assert . Equal ( "#css/root" , adminData . Groups . Single ( ) ) ;
113+ }
114+
94115 [ Fact ]
95116 public void ShouldAddPlayerPermissionOverridesAtRuntime ( )
96117 {
@@ -116,4 +137,108 @@ public void ShouldAddCommandPermissionOverridesWithEmpty()
116137 Assert . True ( AdminManager . CommandIsOverriden ( "runtime_command_b" ) ) ;
117138 Assert . False ( AdminManager . GetPermissionOverrides ( "runtime_command_b" ) . Any ( ) ) ;
118139 }
119- }
140+
141+ [ Fact ]
142+ public void ShouldAllowRootFlagInRequiresPermissions ( )
143+ {
144+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265732 , "@css/root" ) ) ;
145+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265732 , "@css/root" ) ;
146+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265732 , "@css/root" ) ) ;
147+
148+ var adminData = AdminManager . GetPlayerAdminData ( ( SteamID ) 76561197960265732 ) ;
149+ Assert . NotNull ( adminData ) ;
150+ Assert . True ( adminData . DomainHasRootFlag ( "css" ) ) ;
151+
152+ var requirePerms = new RequiresPermissions ( "@css/ban" ) ;
153+ Assert . NotNull ( requirePerms ) ;
154+ Assert . True ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265732 ) ) ;
155+ }
156+
157+ [ Fact ]
158+ public void ShouldRequiresPermissionsPass ( )
159+ {
160+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265738 , "@css/ban" ) ) ;
161+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265738 , "@css/ban" ) ;
162+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265738 , "@css/ban" ) ) ;
163+
164+ var requirePerms = new RequiresPermissions ( "@css/ban" ) ;
165+ Assert . NotNull ( requirePerms ) ;
166+ Assert . True ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265738 ) ) ;
167+ }
168+
169+ [ Fact ]
170+ public void ShouldRequiresPermissionsOrPassSameDomain ( )
171+ {
172+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265739 , "@css/ban" ) ) ;
173+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265739 , "@css/ban" ) ;
174+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265739 , "@css/ban" ) ) ;
175+
176+ var requirePerms = new RequiresPermissionsOr ( "@css/ban" , "@css/kick" ) ;
177+ Assert . NotNull ( requirePerms ) ;
178+ Assert . True ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265739 ) ) ;
179+ }
180+
181+ [ Fact ]
182+ public void ShouldRequiresPermissionsOrPassDifferentDomains ( )
183+ {
184+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265740 , "@css/ban" ) ) ;
185+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265740 , "@css/ban" ) ;
186+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265740 , "@css/ban" ) ) ;
187+
188+ var requirePerms = new RequiresPermissionsOr ( "@css/ban" , "@domain2/flag" ) ;
189+ Assert . NotNull ( requirePerms ) ;
190+ Assert . True ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265740 ) ) ;
191+ }
192+
193+ [ Fact ]
194+ public void ShouldRequiresPermissionsCheckFail ( )
195+ {
196+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265735 , "@css/ban" ) ) ;
197+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265735 , "@css/ban" ) ;
198+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265735 , "@css/ban" ) ) ;
199+
200+ var requirePerms = new RequiresPermissions ( "@css/kick" ) ;
201+ Assert . NotNull ( requirePerms ) ;
202+ Assert . False ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265735 ) ) ;
203+ }
204+
205+ [ Fact ]
206+ public void ShouldRequiresPermissionsOrCheckFailSameDomain ( )
207+ {
208+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265736 , "@css/ban" ) ) ;
209+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265736 , "@css/ban" ) ;
210+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265736 , "@css/ban" ) ) ;
211+
212+ var requirePerms = new RequiresPermissionsOr ( "@css/kick" , "@css/vote" ) ;
213+ Assert . NotNull ( requirePerms ) ;
214+ Assert . False ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265736 ) ) ;
215+ }
216+
217+ [ Fact ]
218+ public void ShouldRequiresPermissionsOrCheckFailDifferentDomains ( )
219+ {
220+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265737 , "@css/ban" ) ) ;
221+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265737 , "@css/ban" ) ;
222+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265737 , "@css/ban" ) ) ;
223+
224+ var requirePerms = new RequiresPermissionsOr ( "@css/kick" , "@domain2/flag" ) ;
225+ Assert . NotNull ( requirePerms ) ;
226+ Assert . False ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265737 ) ) ;
227+ }
228+
229+ [ Fact ]
230+ public void ShouldAllowRootFlagInRequiresPermissionsOr ( )
231+ {
232+ Assert . False ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265733 , "@css/root" ) ) ;
233+ AdminManager . AddPlayerPermissions ( ( SteamID ) 76561197960265733 , "@css/root" ) ;
234+ Assert . True ( AdminManager . PlayerHasPermissions ( ( SteamID ) 76561197960265733 , "@css/root" ) ) ;
235+
236+ var adminData = AdminManager . GetPlayerAdminData ( ( SteamID ) 76561197960265733 ) ;
237+ Assert . NotNull ( adminData ) ;
238+ Assert . True ( adminData . DomainHasRootFlag ( "css" ) ) ;
239+
240+ var requirePerms = new RequiresPermissionsOr ( "@css/ban" , "@css/kick" , "@domain2/flag" ) ;
241+ Assert . NotNull ( requirePerms ) ;
242+ Assert . True ( requirePerms . CanExecuteCommand ( ( SteamID ) 76561197960265733 ) ) ;
243+ }
244+ }
0 commit comments