/src/GiveCRM.BusinessLogic.Tests/MemberService.Tests.cs

https://github.com/kuangmarkeleven/GiveCRM · C# · 220 lines · 167 code · 52 blank · 1 comment · 0 complexity · 51685291e548dea50dcef49ff08b1bf3 MD5 · raw file

  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using GiveCRM.Models;
  4. using GiveCRM.Models.Search;
  5. using GiveCRM.Web.Models.Search;
  6. using NSubstitute;
  7. using NUnit.Framework;
  8. namespace GiveCRM.BusinessLogic.Tests
  9. {
  10. [TestFixture]
  11. public class MemberServiceTests
  12. {
  13. private readonly Member member1 = new Member
  14. {
  15. Id = 1,
  16. FirstName = "Joe",
  17. LastName = "Bloggs"
  18. };
  19. private readonly Member member2 = new Member
  20. {
  21. Id = 2,
  22. FirstName = "Jane",
  23. LastName = "Bloggs"
  24. };
  25. private readonly SearchCriteria surnameSearchCriteria = new CampaignSearchCriteria
  26. {
  27. SearchOperator = SearchOperator.EqualTo,
  28. Type = SearchFieldType.String,
  29. DisplayName = "Surname equals Bloggs",
  30. Value = "Bloggs"
  31. };
  32. [Test]
  33. public void All_ShouldReturnAListOfAllTheMembers_WhenThereAreMembers()
  34. {
  35. var allMembers = new[] { member1, member2 };
  36. var memberRepository = Substitute.For<IMemberRepository>();
  37. memberRepository.GetAll().Returns(allMembers);
  38. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  39. var searchQueryService = Substitute.For<ISearchQueryService>();
  40. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  41. var results = memberService.All();
  42. CollectionAssert.AreEqual(allMembers, results);
  43. }
  44. [Test]
  45. public void All_ShouldReturnAnEmptyList_WhenThereAreNoMembers()
  46. {
  47. var allMembers = Enumerable.Empty<Member>();
  48. var memberRepository = Substitute.For<IMemberRepository>();
  49. memberRepository.GetAll().Returns(allMembers);
  50. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  51. var searchQueryService = Substitute.For<ISearchQueryService>();
  52. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  53. var results = memberService.All();
  54. CollectionAssert.AreEqual(allMembers, results);
  55. }
  56. [Test]
  57. public void Get_ShouldReturnTheSpecifiedMember_WhenTheMemberExists()
  58. {
  59. const int memberId = 1;
  60. var memberRepository = Substitute.For<IMemberRepository>();
  61. memberRepository.GetById(memberId).Returns(member1);
  62. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  63. var searchQueryService = Substitute.For<ISearchQueryService>();
  64. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  65. var member = memberService.Get(memberId);
  66. Assert.AreEqual(member1, member);
  67. }
  68. [Test]
  69. public void Get_ShouldReturnNull_WhenTheMemberDoesNotExist()
  70. {
  71. const int memberId = 3;
  72. var memberRepository = Substitute.For<IMemberRepository>();
  73. memberRepository.GetById(memberId).Returns((Member)null);
  74. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  75. var searchQueryService = Substitute.For<ISearchQueryService>();
  76. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  77. var member = memberService.Get(memberId);
  78. Assert.IsNull(member);
  79. }
  80. [Test]
  81. public void Search_ShouldReturnAListOfMembersMatchingTheSpecifedSearchCriteria_WhenTheSearchCriteriaAreValid()
  82. {
  83. var searchResults = new[] { member1, member2 };
  84. var searchCriteria = new[] { surnameSearchCriteria };
  85. var searchQueryService = Substitute.For<ISearchQueryService>();
  86. searchQueryService.CompileQuery<Member>(Arg.Any<IEnumerable<SearchCriteria>>()).Returns(searchResults);
  87. var memberRepository = Substitute.For<IMemberRepository>();
  88. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  89. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  90. var results = memberService.Search(searchCriteria);
  91. CollectionAssert.AreEqual(searchResults, results.ToArray());
  92. }
  93. [Test]
  94. public void Search_ShouldReturnAnEmptyList_WhenTheSearchCriteriaMatchNoMembers()
  95. {
  96. var searchResults = Enumerable.Empty<Member>();
  97. var searchCriteria = new[] { surnameSearchCriteria };
  98. var searchQueryService = Substitute.For<ISearchQueryService>();
  99. searchQueryService.CompileQuery<Member>(searchCriteria).Returns(searchResults);
  100. var memberRepository = Substitute.For<IMemberRepository>();
  101. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  102. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  103. var results = memberService.Search(searchCriteria);
  104. CollectionAssert.AreEqual(searchResults, results);
  105. }
  106. [Test]
  107. public void Search_ShouldReturnAnEmptyList_WhenThereAreNoSearchCriteria()
  108. {
  109. var memberRepository = Substitute.For<IMemberRepository>();
  110. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  111. var searchQueryService = Substitute.For<ISearchQueryService>();
  112. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  113. var results = memberService.Search(Enumerable.Empty<SearchCriteria>());
  114. CollectionAssert.AreEqual(Enumerable.Empty<Member>(), results);
  115. }
  116. [Test]
  117. public void SearchByCampaignId_ShouldReturnAListOfMembers_WhenThereAreMembersInTheCampaign()
  118. {
  119. const int campaignId = 1;
  120. var membersInCampaign1 = new[] { member1, member2 };
  121. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  122. memberSearchFilterRepository.GetByCampaignId(campaignId).Returns(new[]
  123. {
  124. new MemberSearchFilter
  125. {
  126. CampaignId = 1,
  127. DisplayName = "Previously donated to acampaign",
  128. InternalName = "donatedToCampaign"
  129. }
  130. });
  131. var memberRepository = Substitute.For<IMemberRepository>();
  132. var searchQueryService = Substitute.For<ISearchQueryService>();
  133. searchQueryService.CompileQuery<Member>(Arg.Any<IEnumerable<SearchCriteria>>()).Returns(membersInCampaign1);
  134. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  135. var results = memberService.SearchByCampaignId(campaignId);
  136. CollectionAssert.AreEqual(membersInCampaign1, results.ToArray());
  137. }
  138. [Test]
  139. public void SearchByCampaignId_ShouldReturnAnEmptyList_WhenThereAreNoMembersInTheCampaign()
  140. {
  141. const int campaignId = 2;
  142. var membersInCampaign2 = Enumerable.Empty<Member>();
  143. var memberRepository = Substitute.For<IMemberRepository>();
  144. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  145. var searchQueryService = Substitute.For<ISearchQueryService>();
  146. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  147. var results = memberService.SearchByCampaignId(campaignId);
  148. CollectionAssert.AreEqual(membersInCampaign2, results);
  149. }
  150. [Test]
  151. public void SearchByCampaignId_ShouldReturnAnEmptyList_WhenThereAreNoMembersAtAll()
  152. {
  153. const int campaignId = 3;
  154. var membersInCampaign3 = Enumerable.Empty<Member>();
  155. var memberRepository = Substitute.For<IMemberRepository>();
  156. var memberSearchFilterRepository = Substitute.For<IMemberSearchFilterRepository>();
  157. var searchQueryService = Substitute.For<ISearchQueryService>();
  158. var memberService = new MemberService(memberRepository, memberSearchFilterRepository, searchQueryService);
  159. var results = memberService.SearchByCampaignId(campaignId);
  160. CollectionAssert.AreEqual(membersInCampaign3, results);
  161. }
  162. [Test]
  163. public void FromCampaignRun_Should()
  164. {
  165. // Duplicate SearchByCampaignId??
  166. }
  167. }
  168. }