diff --git a/CSF.Screenplay.SpecFlow/ServiceCollectionAdapter.cs b/CSF.Screenplay.SpecFlow/ServiceCollectionAdapter.cs index 1f28a14..6f1896e 100644 --- a/CSF.Screenplay.SpecFlow/ServiceCollectionAdapter.cs +++ b/CSF.Screenplay.SpecFlow/ServiceCollectionAdapter.cs @@ -84,10 +84,8 @@ public void Add(ServiceDescriptor item) OpenGenericRegisterFactory.MakeGenericMethod(item.ServiceType).Invoke(this, new[] { item }); else if (item.ImplementationInstance != null) OpenGenericRegisterInstance.MakeGenericMethod(item.ServiceType).Invoke(this, new[] { item }); - else if (item.ImplementationType != null) - OpenGenericRegisterType.MakeGenericMethod(item.ServiceType, item.ImplementationType).Invoke(this, Array.Empty()); else - throw new ArgumentException($"Unsupported {nameof(ServiceDescriptor)}; one of implementation factory, instance or type must not be null", nameof(item)); + OpenGenericRegisterType.MakeGenericMethod(item.ServiceType, item.ImplementationType).Invoke(this, Array.Empty()); } void RegisterType() where TImpl : class,TSvc diff --git a/Tests/CSF.Screenplay.SpecFlow.Tests/ServiceCollectionAdapterTests.cs b/Tests/CSF.Screenplay.SpecFlow.Tests/ServiceCollectionAdapterTests.cs new file mode 100644 index 0000000..abf78ef --- /dev/null +++ b/Tests/CSF.Screenplay.SpecFlow.Tests/ServiceCollectionAdapterTests.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using BoDi; +using Microsoft.Extensions.DependencyInjection; + +namespace CSF.Screenplay; + +[TestFixture,Parallelizable] +public class ServiceCollectionAdapterTests +{ + [Test] + public void UnsupportedFunctionalityShouldThrowNotSupportedException() + { + var container = new ObjectContainer(); + var sut = new ServiceCollectionAdapter(container); + + Assert.Multiple(() => + { + Assert.That(() => sut[0], Throws.InstanceOf(), "Indexer get"); + Assert.That(() => sut[0] = null, Throws.InstanceOf(), "Indexer set"); + Assert.That(() => sut.Clear(), Throws.InstanceOf(), nameof(IServiceCollection.Clear)); + Assert.That(() => sut.Contains(null), Throws.InstanceOf(), nameof(IServiceCollection.Contains)); + Assert.That(() => sut.CopyTo(null, default), Throws.InstanceOf(), nameof(IServiceCollection.CopyTo)); + Assert.That(() => sut.GetEnumerator(), Throws.InstanceOf(), nameof(IServiceCollection.GetEnumerator)); + Assert.That(() => ((IEnumerable) sut).GetEnumerator(), Throws.InstanceOf(), nameof(IServiceCollection.GetEnumerator) + ": " + nameof(IEnumerable)); + Assert.That(() => sut.IndexOf(default), Throws.InstanceOf(), nameof(IServiceCollection.IndexOf)); + Assert.That(() => sut.Insert(default, null), Throws.InstanceOf(), nameof(IServiceCollection.Insert)); + Assert.That(() => sut.Remove(null), Throws.InstanceOf(), nameof(IServiceCollection.Remove)); + Assert.That(() => sut.RemoveAt(default), Throws.InstanceOf(), nameof(IServiceCollection.RemoveAt)); + }); + } + + [Test] + public void AddTypeShouldAddToObjectContainer() + { + var container = new ObjectContainer(); + var sut = new ServiceCollectionAdapter(container); + + sut.AddSingleton(); + Assert.That(container.Resolve, Is.InstanceOf()); + } + + [Test] + public void AddInstanceShouldAddToObjectContainer() + { + var container = new ObjectContainer(); + var sut = new ServiceCollectionAdapter(container); + + var instance = new SampleType(); + sut.AddSingleton(instance); + Assert.That(container.Resolve(), Is.SameAs(instance)); + } + + [Test] + public void AddFactoryShouldAddToObjectContainer() + { + var container = new ObjectContainer(); + var sut = new ServiceCollectionAdapter(container); + + var instance = new SampleType(); + sut.AddSingleton(_ => instance); + Assert.That(container.Resolve(), Is.SameAs(instance)); + } + + interface ISampleInterface {} + + class SampleType : ISampleInterface {} +} \ No newline at end of file