namespace Syrette.Tests; public class ServiceContainerRegistrationTests { [Fact] public void AddSingleton_TInterface_TImplementation_registers_successfully() { var container = new ServiceContainer(); container.AddSingleton(); Assert.NotNull(container.GetService()); } [Fact] public void AddSingleton_TInterface_TImplementation_with_args_registers_successfully() { var container = new ServiceContainer(); container.AddSingleton(Guid.NewGuid()); Assert.NotNull(container.GetService()); } [Fact] public void AddSingleton_TClass_registers_successfully() { var container = new ServiceContainer(); container.AddSingleton(); Assert.NotNull(container.GetService()); } [Fact] public void AddSingleton_TClass_with_args_registers_successfully() { var container = new ServiceContainer(); container.AddSingleton(Guid.NewGuid()); Assert.NotNull(container.GetService()); } [Fact] public void AddTransient_TInterface_TImplementation_registers_successfully() { var container = new ServiceContainer(); container.AddTransient(); Assert.NotNull(container.GetService()); } [Fact] public void AddTransient_TInterface_TImplementation_with_args_registers_successfully() { var container = new ServiceContainer(); container.AddTransient(Guid.NewGuid()); Assert.NotNull(container.GetService()); } [Fact] public void AddTransient_TClass_registers_successfully() { var container = new ServiceContainer(); container.AddTransient(); Assert.NotNull(container.GetService()); } [Fact] public void AddTransient_TClass_with_args_registers_successfully() { var container = new ServiceContainer(); container.AddTransient(Guid.NewGuid()); Assert.NotNull(container.GetService()); } [Fact] public void Fluent_chaining_returns_same_container() { var container = new ServiceContainer(); var result = container .AddSingleton() .AddTransient(); Assert.Same(container, result); } [Fact] public void Duplicate_registration_same_pair_throws() { var container = new ServiceContainer(); container.AddSingleton(); Assert.Throws(() => container.AddSingleton()); } [Fact] public void Duplicate_registration_different_impl_for_same_service_allowed() { var container = new ServiceContainer(); container.AddSingleton(); container.AddSingleton(); var services = container.GetServiceTypes(); Assert.Equal(2, services.Count); Assert.Contains(typeof(TestServiceImpl), services); Assert.Contains(typeof(TestServiceAlt), services); } }