/LightCore.Configuration.Tests/GroupConfigurationTests.cs

https://github.com/JuergenGutsch/LightCore · C# · 210 lines · 173 code · 37 blank · 0 comment · 0 complexity · 0568677c0bafc52324bf820c1c8e5ebe MD5 · raw file

  1. using System;
  2. using LightCore.TestTypes;
  3. using System.Collections.Generic;
  4. using FluentAssertions;
  5. using Xunit;
  6. namespace LightCore.Configuration.Tests
  7. {
  8. public class GroupConfigurationTests
  9. {
  10. [Fact]
  11. public void Exception_is_thrown_when_a_given_active_group_was_not_found()
  12. {
  13. lock (Locker.Lock)
  14. {
  15. var configuration = new LightCoreConfiguration
  16. {
  17. ActiveRegistrationGroups = "test",
  18. RegistrationGroups = GetTestRegistrationGroups()
  19. };
  20. var builder = new ContainerBuilder();
  21. Action act = () => RegistrationLoader.Instance.Register(builder, configuration);
  22. act.ShouldThrow<ActiveGroupNotFoundException>();
  23. }
  24. }
  25. [Fact]
  26. public void Can_register_group_configurations()
  27. {
  28. lock (Locker.Lock)
  29. {
  30. var configuration = new LightCoreConfiguration
  31. {
  32. ActiveRegistrationGroups = "Sql",
  33. RegistrationGroups = GetTestRegistrationGroups()
  34. };
  35. var builder = new ContainerBuilder();
  36. RegistrationLoader.Instance.Register(builder, configuration);
  37. builder.Build();
  38. }
  39. }
  40. [Fact]
  41. public void Can_resolve_active_group_configuration()
  42. {
  43. lock (Locker.Lock)
  44. {
  45. var configuration = new LightCoreConfiguration
  46. {
  47. ActiveRegistrationGroups = "Xml",
  48. RegistrationGroups = GetTestRegistrationGroups()
  49. };
  50. var builder = new ContainerBuilder();
  51. RegistrationLoader.Instance.Register(builder, configuration);
  52. var container = builder.Build();
  53. var actual = container.Resolve<IFoo>();
  54. actual.Should().BeOfType<XmlFoo>();
  55. }
  56. }
  57. [Fact]
  58. public void Can_register_group_configurations_registered_by_code()
  59. {
  60. var builder = new ContainerBuilder { ActiveRegistrationGroups = "Xml" };
  61. builder.Register<IBar, XmlBar>().WithGroup("Xml");
  62. builder.Register<IFoo, XmlFoo>().WithGroup("Xml");
  63. builder.Register<IBar, SqlBar>().WithGroup("Sql");
  64. builder.Register<IFoo, SqlFoo>().WithGroup("Sql");
  65. var container = builder.Build();
  66. var actual = container.Resolve<IFoo>();
  67. actual.Should().BeOfType<XmlFoo>();
  68. }
  69. [Fact]
  70. public void Can_register_multiple_group_configurations_registered_by_code()
  71. {
  72. var builder = new ContainerBuilder { ActiveRegistrationGroups = "Xml, Test" };
  73. builder.Register<IBar, XmlBar>().WithGroup("Xml");
  74. builder.Register<IFoo, XmlFoo>().WithGroup("Xml");
  75. builder.Register<IBar, SqlBar>().WithGroup("Sql");
  76. builder.Register<IFoo, SqlFoo>().WithGroup("Sql");
  77. builder.Register<ILorem, Lorem>().WithGroup("Lalala");
  78. builder.Register<ILorem, TestLorem>().WithGroup("Test");
  79. var container = builder.Build();
  80. var actualFoo = container.Resolve<IFoo>();
  81. var actualLorem = container.Resolve<ILorem>();
  82. actualFoo.Should().BeOfType<XmlFoo>();
  83. actualLorem.Should().BeOfType<TestLorem>();
  84. }
  85. [Fact]
  86. public void Can_register_multiple_group_configurations_registered_configuration()
  87. {
  88. lock (Locker.Lock)
  89. {
  90. var configuration = new LightCoreConfiguration
  91. {
  92. ActiveRegistrationGroups = "Xml, Test",
  93. RegistrationGroups = GetTestRegistrationGroups()
  94. };
  95. var builder = new ContainerBuilder();
  96. RegistrationLoader.Instance.Register(builder, configuration);
  97. var container = builder.Build();
  98. var actualFoo = container.Resolve<IFoo>();
  99. var actualLorem = container.Resolve<ILorem>();
  100. actualFoo.Should().BeOfType<XmlFoo>();
  101. actualLorem.Should().BeOfType<TestLorem>();
  102. }
  103. }
  104. private static List<RegistrationGroup> GetTestRegistrationGroups()
  105. {
  106. return new List<RegistrationGroup>
  107. {
  108. new RegistrationGroup
  109. {
  110. Name = "Xml",
  111. Registrations = new List<Registration>
  112. {
  113. new Registration
  114. {
  115. ContractType = typeof (IBar).AssemblyQualifiedName,
  116. ImplementationType =
  117. typeof (XmlBar).AssemblyQualifiedName,
  118. },
  119. new Registration
  120. {
  121. ContractType = typeof (IFoo).AssemblyQualifiedName,
  122. ImplementationType =
  123. typeof (XmlFoo).AssemblyQualifiedName,
  124. }
  125. }
  126. },
  127. new RegistrationGroup
  128. {
  129. Name = "Sql",
  130. Registrations = new List<Registration>
  131. {
  132. new Registration
  133. {
  134. ContractType = typeof (IBar).AssemblyQualifiedName,
  135. ImplementationType =
  136. typeof (SqlBar).AssemblyQualifiedName,
  137. },
  138. new Registration
  139. {
  140. ContractType = typeof (IFoo).AssemblyQualifiedName,
  141. ImplementationType =
  142. typeof (SqlFoo).AssemblyQualifiedName
  143. }
  144. }
  145. },
  146. new RegistrationGroup
  147. {
  148. Name = "Lalala",
  149. Registrations = new List<Registration>
  150. {
  151. new Registration
  152. {
  153. ContractType = typeof (ILorem).AssemblyQualifiedName,
  154. ImplementationType = typeof(Lorem).AssemblyQualifiedName
  155. }
  156. }
  157. },
  158. new RegistrationGroup
  159. {
  160. Name = "Test",
  161. Registrations = new List<Registration>
  162. {
  163. new Registration
  164. {
  165. ContractType = typeof (ILorem).AssemblyQualifiedName,
  166. ImplementationType = typeof(TestLorem).AssemblyQualifiedName
  167. }
  168. }
  169. }
  170. };
  171. }
  172. }
  173. }