#nullable enable using System.Collections.Generic; using Content.IntegrationTests.Fixtures; using Content.IntegrationTests.Fixtures.Attributes; using Content.Shared.Access; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.Access { [TestOf(typeof(AccessReaderComponent))] public sealed class AccessReaderTest : GameTest { [TestPrototypes] private const string Prototypes = @" - type: entity id: TestAccessReader name: access reader components: - type: AccessReader "; [SidedDependency(Side.Server)] private readonly AccessReaderSystem _system = null!; [Test] [RunOnSide(Side.Server)] public async Task TestTags() { var ent = SSpawn("TestAccessReader"); var reader = new Entity(ent, SComp(ent)); // test empty Assert.Multiple(() => { Assert.That(_system.AreAccessTagsAllowed(new List> { "Foo" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(new List> { "Bar" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.True); }); // test deny _system.AddDenyTag(reader, "A"); Assert.Multiple(() => { Assert.That(_system.AreAccessTagsAllowed(new List> { "Foo" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(new List> { "A", "Foo" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.True); }); _system.ClearDenyTags(reader); // test one list _system.TryAddAccess(reader, "A"); Assert.Multiple(() => { Assert.That(_system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(new List> { "B" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); _system.TryClearAccesses(reader); // test one list - two items _system.TryAddAccess(reader, new HashSet> { "A", "B" }); Assert.Multiple(() => { Assert.That(_system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(new List> { "B" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); _system.TryClearAccesses(reader); // test two list var accesses = new List>>() { new HashSet> () { "A" }, new HashSet> () { "B", "C" } }; _system.TryAddAccesses(reader, accesses); Assert.Multiple(() => { Assert.That(_system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(new List> { "B" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(new List> { "C", "B" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(new List> { "C", "B", "A" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); _system.TryClearAccesses(reader); // test deny list _system.TryAddAccess(reader, new HashSet> { "A" }); _system.AddDenyTag(reader, "B"); Assert.Multiple(() => { Assert.That(_system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); Assert.That(_system.AreAccessTagsAllowed(new List> { "B" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.False); Assert.That(_system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); _system.TryClearAccesses(reader); _system.ClearDenyTags(reader); } } }