using ZB.MOM.WW.Secrets.Abstractions; using ZB.MOM.WW.Secrets.Replicator.SqlServer; using ZB.MOM.WW.Secrets.Sqlite; namespace ZB.MOM.WW.Secrets.Replicator.SqlServer.Tests.Fakes; /// /// An backed by a real SQLite store, standing in for the shared /// SQL-Server hub in offline convergence tests. /// /// /// Deliberately backed by a real store rather than a dictionary: the behaviour under test is /// last-writer-wins convergence, which lives in ApplyReplicatedAsync. A hand-rolled fake would /// be re-implementing the very logic the tests exist to check, and would happily agree with a broken /// reconciler. The live SQL-Server tests then confirm the T-SQL store behaves the same way. /// /// The SQLite store standing in for the hub database. public sealed class SqliteBackedHub(SqliteSecretStore store) : ISecretReplicationHub { /// Number of times the sweep asked this hub for rows — asserts the fetch was skipped. public int GetManyCallCount { get; private set; } /// public Task> GetManifestAsync(CancellationToken ct) => store.GetManifestAsync(ct); /// public async Task> GetManyAsync( IReadOnlyList names, CancellationToken ct) { GetManyCallCount++; var rows = new List(names.Count); foreach (SecretName name in names) { StoredSecret? row = await store.GetAsync(name, ct); if (row is not null) { rows.Add(row); } } return rows; } /// public Task ApplyReplicatedAsync(StoredSecret row, CancellationToken ct) => store.ApplyReplicatedAsync(row, ct); }