// Copyright (c) Microsoft. All rights reserved. using Microsoft.Extensions.AI; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.SemanticKernel.Connectors.SqlServer; using VectorData.ConformanceTests; using Xunit; namespace SqlServer.ConformanceTests; public class SqlServerDependencyInjectionTests : DependencyInjectionTests.Record>, string, DependencyInjectionTests.Record> { protected const string ConnectionString = "Server=localhost;Database=master;Integrated Security=True;"; protected override void PopulateConfiguration(ConfigurationManager configuration, object? serviceKey = null) => configuration.AddInMemoryCollection( [ new(CreateConfigKey("SqlServer", serviceKey, "ConnectionString"), ConnectionString), ]); private static string ConnectionStringProvider(IServiceProvider sp) => sp.GetRequiredService().GetRequiredSection("SqlServer:ConnectionString").Value!; private static string ConnectionStringProvider(IServiceProvider sp, object serviceKey) => sp.GetRequiredService().GetRequiredSection(CreateConfigKey("SqlServer", serviceKey, "ConnectionString")).Value!; public override IEnumerable> CollectionDelegates { get { yield return (services, serviceKey, name, lifetime) => serviceKey is null ? services.AddSqlServerCollection( name, connectionString: ConnectionString, lifetime: lifetime) : services.AddKeyedSqlServerCollection( serviceKey, name, connectionString: ConnectionString, lifetime: lifetime); yield return (services, serviceKey, name, lifetime) => serviceKey is null ? services.AddSqlServerCollection( name, ConnectionStringProvider, lifetime: lifetime) : services.AddKeyedSqlServerCollection( serviceKey, name, sp => ConnectionStringProvider(sp, serviceKey), lifetime: lifetime); } } public override IEnumerable> StoreDelegates { get { yield return (services, serviceKey, lifetime) => serviceKey is null ? services.AddSqlServerVectorStore( ConnectionStringProvider, lifetime: lifetime) : services.AddKeyedSqlServerVectorStore( serviceKey, sp => ConnectionStringProvider(sp, serviceKey), lifetime: lifetime); } } [Fact] public void ConnectionStringProviderCantBeNull() { IServiceCollection services = new ServiceCollection(); Assert.Throws(() => services.AddSqlServerVectorStore(connectionStringProvider: null!)); Assert.Throws(() => services.AddKeyedSqlServerVectorStore(serviceKey: "notNull", connectionStringProvider: null!)); Assert.Throws(() => services.AddSqlServerCollection(name: "notNull", connectionStringProvider: null!)); Assert.Throws(() => services.AddKeyedSqlServerCollection(serviceKey: "notNull", name: "notNull", connectionStringProvider: null!)); } [Fact] public void ConnectionStringCantBeNullOrEmpty() { IServiceCollection services = new ServiceCollection(); Assert.Throws(() => services.AddSqlServerCollection( name: "notNull", connectionString: null!)); Assert.Throws(() => services.AddSqlServerCollection( name: "notNull", connectionString: "")); Assert.Throws(() => services.AddKeyedSqlServerCollection( serviceKey: "notNull", name: "notNull", connectionString: null!)); Assert.Throws(() => services.AddKeyedSqlServerCollection( serviceKey: "notNull", name: "notNull", connectionString: "")); } }