using Schaad.Accounting.Repositories; using Shouldly; namespace Schaad.Accounting.Tests; public class RepositoryCacheTestShould { [Fact] public void CallLoaderOnceWhenKeyIsRequestedRepeatedly() { var cache = new RepositoryCache(); var loaderCalls = 0; var first = cache.GetOrLoad("key", () => { loaderCalls++; return new List { 1, 2 }; }); var second = cache.GetOrLoad("key", () => { loaderCalls++; return new List { 99 }; }); loaderCalls.ShouldBe(1); second.ShouldBeSameAs(first); second.ShouldBe(new[] { 1, 2 }); } [Fact] public void KeepEntriesSeparateWhenKeysDiffer() { var cache = new RepositoryCache(); var a = cache.GetOrLoad("a", () => new List { 1 }); var b = cache.GetOrLoad("b", () => new List { 2 }); b.ShouldNotBeSameAs(a); a.ShouldBe(new[] { 1 }); b.ShouldBe(new[] { 2 }); } [Fact] public void ReloadFromLoaderWhenKeyIsInvalidated() { var cache = new RepositoryCache(); var loaderCalls = 0; cache.GetOrLoad("k", () => { loaderCalls++; return new List { 1 }; }); cache.Invalidate("k"); cache.GetOrLoad("k", () => { loaderCalls++; return new List { 2 }; }); loaderCalls.ShouldBe(2); } [Fact] public void MatchKeysCaseInsensitivelyWhenLookingUp() { var cache = new RepositoryCache(); cache.GetOrLoad("Path/To/File.xml", () => new List { 1 }); var upper = cache.GetOrLoad("PATH/TO/FILE.XML", () => new List { 99 }); upper.ShouldBe(new[] { 1 }); } }