using System.Collections.Generic; using Content.Shared.Access; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.Access { [TestFixture] [TestOf(typeof(AccessReaderComponent))] public sealed class AccessReaderTest { [TestPrototypes] private const string Prototypes = @" - type: entity id: TestAccessReader name: access reader components: - type: AccessReader "; [Test] public async Task TestTags() { await using var pair = await PoolManager.GetServerClient(); var server = pair.Server; var entityManager = server.ResolveDependency(); await server.WaitAssertion(() => { var system = entityManager.System(); var ent = entityManager.SpawnEntity("TestAccessReader", MapCoordinates.Nullspace); var reader = new Entity(ent, entityManager.GetComponent(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); }); await pair.CleanReturnAsync(); } } }