using Svrnty.CQRS.Abstractions.Discovery; using Svrnty.CQRS.Discovery; namespace Svrnty.CQRS.Tests; public class QueryDiscoveryTests { private static QueryDiscovery CreateDiscovery(params IQueryMeta[] metas) { return new QueryDiscovery(metas); } [Fact] public void GetQueries_ReturnsAllRegistered() { var meta1 = new QueryMeta(typeof(PersonQuery), typeof(object), typeof(IEnumerable)); var meta2 = new QueryMeta(typeof(PersonLookupQuery), typeof(object), typeof(string)); var discovery = CreateDiscovery(meta1, meta2); var queries = discovery.GetQueries().ToList(); Assert.Equal(2, queries.Count); } [Fact] public void GetQueries_ReturnsEmpty_WhenNoneRegistered() { var discovery = CreateDiscovery(); var queries = discovery.GetQueries().ToList(); Assert.Empty(queries); } [Fact] public void FindQuery_ByName_ReturnsCorrectMeta() { var meta = new QueryMeta(typeof(PersonQuery), typeof(object), typeof(IEnumerable)); var discovery = CreateDiscovery(meta); var found = discovery.FindQuery("Person"); Assert.NotNull(found); Assert.Equal(typeof(PersonQuery), found.QueryType); } [Fact] public void FindQuery_ByName_ReturnsNull_WhenNotFound() { var discovery = CreateDiscovery(); var found = discovery.FindQuery("NonExistent"); Assert.Null(found); } [Fact] public void FindQuery_ByType_ReturnsCorrectMeta() { var meta = new QueryMeta(typeof(PersonQuery), typeof(object), typeof(IEnumerable)); var discovery = CreateDiscovery(meta); var found = discovery.FindQuery(typeof(PersonQuery)); Assert.NotNull(found); Assert.Equal("Person", found.Name); } [Fact] public void FindQuery_ByType_ReturnsNull_WhenNotFound() { var discovery = CreateDiscovery(); var found = discovery.FindQuery(typeof(PersonQuery)); Assert.Null(found); } [Fact] public void QueryExists_ByName_ReturnsTrue_WhenFound() { var meta = new QueryMeta(typeof(PersonQuery), typeof(object), typeof(IEnumerable)); var discovery = CreateDiscovery(meta); Assert.True(discovery.QueryExists("Person")); } [Fact] public void QueryExists_ByName_ReturnsFalse_WhenNotFound() { var discovery = CreateDiscovery(); Assert.False(discovery.QueryExists("Person")); } [Fact] public void QueryExists_ByType_ReturnsTrue_WhenFound() { var meta = new QueryMeta(typeof(PersonQuery), typeof(object), typeof(IEnumerable)); var discovery = CreateDiscovery(meta); Assert.True(discovery.QueryExists(typeof(PersonQuery))); } [Fact] public void QueryExists_ByType_ReturnsFalse_WhenNotFound() { var discovery = CreateDiscovery(); Assert.False(discovery.QueryExists(typeof(PersonQuery))); } [Fact] public void FindQuery_WithCustomName_FindsByAttributeName() { var meta = new QueryMeta(typeof(PersonLookupQuery), typeof(object), typeof(string)); var discovery = CreateDiscovery(meta); var found = discovery.FindQuery("customPersonLookup"); Assert.NotNull(found); Assert.Equal(typeof(PersonLookupQuery), found.QueryType); } }