using WebDrop.Core; namespace WebDrop.Core.Tests; public sealed class WorkspaceControlTests { [Theory] [InlineData(ChannelMode.Enc)] [InlineData(ChannelMode.Raw)] public async Task ThreadStructureSurvivesContentExpiryAndEviction(ChannelMode mode) { using var env = new TestEnv(); var endpoint = TestEnv.Endpoint(); var channel = env.Create(endpoint, mode, new ChannelSettings { TtlSeconds = 60, MaxItems = 1 }); var id = TestEnv.NewId(); var control = FrameFlags.Final | FrameFlags.Control | (mode == ChannelMode.Enc ? FrameFlags.Enc : 0); var normal = FrameFlags.Final | (mode == ChannelMode.Enc ? FrameFlags.Enc : 0); int payload = mode == ChannelMode.Enc ? TestEnv.EncPayload : 16; await env.Service.AppendFrameAsync(channel.Id, channel.Owner(endpoint), TestEnv.Frame(id, 0, control, payload), null); env.Clock.Advance(TimeSpan.FromSeconds(59)); for (int i = 0; i < 3; i++) await env.Service.AppendFrameAsync(channel.Id, channel.Owner(endpoint), TestEnv.Frame(TestEnv.NewId(), 0, normal, payload), null); env.Clock.Advance(TimeSpan.FromSeconds(2)); env.Service.Sweep(); Assert.NotNull(env.Store.Read(tx => tx.GetItem(channel.Id, id))); Assert.Equal(1, env.Store.Read(tx => tx.CountControlItems(channel.Id))); Assert.Equal(1, env.Store.Read(tx => tx.CountItems(channel.Id))); } }