Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/migrate moq to nsubstitute #1165

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
<PackageVersion Include="Flurl" Version="3.0.7" />
<PackageVersion Include="Flurl.Http" Version="3.2.4" />
<PackageVersion Include="GoogleReCaptcha.V3" Version="1.3.1" />
<PackageVersion Include="ILogger.Moq" Version="1.1.10" />
<PackageVersion Include="Markdig" Version="0.33.0" />
<PackageVersion Include="MediaInfo.Wrapper.Core" Version="21.9.3" />
<PackageVersion Include="MediatR" Version="12.1.1" />
Expand All @@ -61,7 +60,6 @@
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
<PackageVersion Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.13" />
<PackageVersion Include="Moq" Version="4.18.4" />
<PackageVersion Include="NETStandard.Library" Version="2.0.3" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="NimblePros.Vimeo" Version="1.0.6" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,21 @@ public class MemberAddBillingActivityService : IMemberAddBillingActivityService
{
private readonly IRepository<Member> _memberRepository;
private readonly IMemberLookupService _memberLookupService;

public MemberAddBillingActivityService(IRepository<Member> memberRepository,
IMemberLookupService memberLookup)
{
_memberRepository = memberRepository;
_memberLookupService = memberLookup;
}

#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
public MemberAddBillingActivityService()
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
{

}

/// <summary>
/// This should only be called after a member has registered and been created.
/// </summary>
Expand Down
1 change: 0 additions & 1 deletion src/DevBetterWeb.Web/Views/Home/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,6 @@
Join the devBetter group coaching program today and get immediate access to all recorded sessions, the
Discord channel,
the web site resources, the private GitHub, the private Stack Overflow team, and more!
</a>
</p>
<div style="width: 100%; text-align: center; margin-top: 10px; margin-bottom: 20px;">
<a class="btn btn-primary" href="/checkout/monthly">
Expand Down
1 change: 0 additions & 1 deletion tests/DevBetterWeb.Tests/DevBetterWeb.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
<PackageReference Include="Microsoft.Extensions.Identity.Core" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Moq" />
<PackageReference Include="NSubstitute" />
<PackageReference Include="ReportGenerator" />
<PackageReference Include="xunit" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,29 @@
using DevBetterWeb.Core.Interfaces;
using DevBetterWeb.Core.ValueObjects;
using DevBetterWeb.Infrastructure.Services;
using Moq;
using NSubstitute;
using Xunit;

namespace DevBetterWeb.Tests.Services.AlumniGraduationServiceTests;

public class CheckIfAnyMemberGraduating
{
private readonly Mock<IUserLookupService> userLookupService;
private readonly Mock<IRepository<Member>> repository;
private readonly Mock<IGraduationCommunicationsService> graduationCommunications;
private readonly Mock<IUserRoleManager> userManager;
private readonly IUserLookupService userLookupService;
private readonly IRepository<Member> repository;
private readonly IGraduationCommunicationsService graduationCommunications;
private readonly IUserRoleManager userManager;

private const int DAYS_IN_TWO_YEARS = 365 * 2;

private AlumniGraduationService service;

public CheckIfAnyMemberGraduating()
{
userLookupService = new Mock<IUserLookupService>();
repository = new Mock<IRepository<Member>>();
graduationCommunications = new Mock<IGraduationCommunicationsService>();
userManager = new Mock<IUserRoleManager>();
service = new AlumniGraduationService(userLookupService.Object, repository.Object, graduationCommunications.Object, userManager.Object);
userLookupService = Substitute.For<IUserLookupService>();
repository = Substitute.For<IRepository<Member>>();
graduationCommunications = Substitute.For<IGraduationCommunicationsService>();
userManager = Substitute.For<IUserRoleManager>();
service = new AlumniGraduationService(userLookupService, repository, graduationCommunications, userManager);
}

[Fact]
Expand All @@ -47,7 +47,7 @@ public async Task ReturnsSameListGivenListWithAllMembersGraduating()
var graduatingMember = GetGraduatingMember();
testlist.Add(graduatingMember);

userLookupService.Setup(u => u.FindUserIsAlumniByUserIdAsync(graduatingMember.UserId)).ReturnsAsync(false);
userLookupService.FindUserIsAlumniByUserIdAsync(graduatingMember.UserId).Returns(Task.FromResult(false));

var list = await service.CheckIfAnyMemberGraduating(testlist);

Expand All @@ -65,8 +65,8 @@ public async Task ReturnsOnlyGraduatingMembersGivenListWithSomeMembersGraduating
var nonGraduatingMember = GetNonGraduatingMember();
testlist.Add(nonGraduatingMember);

userLookupService.Setup(u => u.FindUserIsAlumniByUserIdAsync(graduatingMember.UserId)).ReturnsAsync(false);

userLookupService.FindUserIsAlumniByUserIdAsync(graduatingMember.UserId).Returns(Task.FromResult(false));
var list = await service.CheckIfAnyMemberGraduating(testlist);

Assert.Contains(graduatingMember, list);
Expand All @@ -91,8 +91,8 @@ public async Task ReturnsEmptyListGivenListOfAlumni()
var testlist = new List<Member>();
var alum = GetGraduatingMember();
testlist.Add(alum);

userLookupService.Setup(u => u.FindUserIsAlumniByUserIdAsync(alum.UserId)).ReturnsAsync(true);
userLookupService.FindUserIsAlumniByUserIdAsync(alum.UserId).Returns(Task.FromResult(true));

var list = await service.CheckIfAnyMemberGraduating(testlist);

Expand All @@ -109,7 +109,7 @@ public async Task ReturnsEmptyListGivenListWithMemberOneDayFromGraduation()
member.MemberSubscriptions.Add(nearGraduationSubscription);
testlist.Add(member);

userLookupService.Setup(u => u.FindUserIsAlumniByUserIdAsync(member.UserId)).ReturnsAsync(false);
userLookupService.FindUserIsAlumniByUserIdAsync(member.UserId).Returns(Task.FromResult(false));

var list = await service.CheckIfAnyMemberGraduating(testlist);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@
using DevBetterWeb.Infrastructure.Identity.Data;
using DevBetterWeb.Infrastructure.Services;
using Microsoft.AspNetCore.Identity;
using Moq;
using NSubstitute;
using Xunit;

namespace DevBetterWeb.Tests.Services.DailyCheckPingServiceTests;

public class CheckIfAnyActiveInvitationsRequireAdminPing
{
private readonly Mock<IRepository<Invitation>> _repository = new();
private readonly Mock<IRepository<Member>> _memberRepository = new();
private readonly Mock<IEmailService> _emailService = new();
private readonly Mock<UserManager<ApplicationUser>> _userManager;
private readonly IRepository<Invitation> _repository;
private readonly IRepository<Member> _memberRepository;
private readonly IEmailService _emailService;
private readonly UserManager<ApplicationUser> _userManager;

private DailyCheckPingService _service;

Expand All @@ -23,9 +23,12 @@ public class CheckIfAnyActiveInvitationsRequireAdminPing

public CheckIfAnyActiveInvitationsRequireAdminPing()
{
var store = new Mock<IUserStore<ApplicationUser>>();
_userManager = new Mock<UserManager<ApplicationUser>>(store.Object, null, null, null, null, null, null, null, null);
_service = new DailyCheckPingService(_repository.Object, _memberRepository.Object, _emailService.Object, _userManager.Object);
var store = Substitute.For<IUserStore<ApplicationUser>>();
_userManager = Substitute.For<UserManager<ApplicationUser>>(store, null, null, null, null, null, null, null, null);
_repository = Substitute.For<IRepository<Invitation>>();
_memberRepository = Substitute.For<IRepository<Member>>();
_emailService = Substitute.For<IEmailService>();
_service = new DailyCheckPingService(_repository, _memberRepository, _emailService, _userManager);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@
using DevBetterWeb.Infrastructure.Identity.Data;
using DevBetterWeb.Infrastructure.Services;
using Microsoft.AspNetCore.Identity;
using Moq;
using NSubstitute;
using Xunit;

namespace DevBetterWeb.Tests.Services.DailyCheckPingServiceTests;

public class CheckIfAnyActiveInvitationsRequireUserPing
{
private readonly Mock<IRepository<Invitation>> _repository = new();
private readonly Mock<IRepository<Member>> _membrRepository = new();
private readonly Mock<IEmailService> _emailService = new();
private readonly Mock<UserManager<ApplicationUser>> _userManager;
private readonly IRepository<Invitation> _repository;
private readonly IRepository<Member> _memberRepository;
private readonly IEmailService _emailService;
private readonly UserManager<ApplicationUser> _userManager;

private DailyCheckPingService _service;

Expand All @@ -23,10 +23,12 @@ public class CheckIfAnyActiveInvitationsRequireUserPing

public CheckIfAnyActiveInvitationsRequireUserPing()
{
var store = new Mock<IUserStore<ApplicationUser>>();
_userManager = new Mock<UserManager<ApplicationUser>>(store.Object, null, null, null, null, null, null, null, null);

_service = new DailyCheckPingService(_repository.Object, _membrRepository.Object, _emailService.Object, _userManager.Object);
var store = Substitute.For<IUserStore<ApplicationUser>>();
_userManager = Substitute.For<UserManager<ApplicationUser>>(store, null, null, null, null, null, null, null, null);
_repository = Substitute.For<IRepository<Invitation>>();
_memberRepository = Substitute.For<IRepository<Member>>();
_emailService = Substitute.For<IEmailService>();
_service = new DailyCheckPingService(_repository, _memberRepository, _emailService, _userManager);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
using DevBetterWeb.Core.Entities;
using DevBetterWeb.Core.Interfaces;
using DevBetterWeb.Core.Services;
using Moq;
using NSubstitute;

namespace DevBetterWeb.Tests.Services.MemberSubscriptionCancellationServiceTests;

public class MemberSubscriptionCancellationServiceTest
{
internal readonly Mock<IUserRoleMembershipService> _userRoleMembershipService;
internal readonly Mock<IEmailService> _emailService;
internal readonly Mock<IUserLookupService> _userLookup;
internal readonly Mock<IMemberLookupService> _memberLookup;
internal readonly Mock<IRepository<Member>> _memberRepository;
internal readonly Mock<IMemberSubscriptionPeriodCalculationsService> _subscriptionPeriodCalculationsService;
internal readonly IUserRoleMembershipService _userRoleMembershipService;
internal readonly IEmailService _emailService;
internal readonly IUserLookupService _userLookup;
internal readonly IMemberLookupService _memberLookup;
internal readonly IRepository<Member> _memberRepository;
internal readonly IMemberSubscriptionPeriodCalculationsService _subscriptionPeriodCalculationsService;

internal readonly IMemberCancellationService _memberCancellationService;

public MemberSubscriptionCancellationServiceTest()
{
_userRoleMembershipService = new Mock<IUserRoleMembershipService>();
_emailService = new Mock<IEmailService>();
_userLookup = new Mock<IUserLookupService>();
_memberLookup = new Mock<IMemberLookupService>();
_memberRepository = new Mock<IRepository<Member>>();
_subscriptionPeriodCalculationsService = new Mock<IMemberSubscriptionPeriodCalculationsService>();
_memberCancellationService = new MemberSubscriptionCancellationService(_userRoleMembershipService.Object,
_emailService.Object, _userLookup.Object, _memberLookup.Object, _memberRepository.Object, _subscriptionPeriodCalculationsService.Object);
_userRoleMembershipService = Substitute.For<IUserRoleMembershipService>();
_emailService = Substitute.For<IEmailService>();
_userLookup = Substitute.For<IUserLookupService>();
_memberLookup = Substitute.For<IMemberLookupService>();
_memberRepository = Substitute.For<IRepository<Member>>();
_subscriptionPeriodCalculationsService = Substitute.For<IMemberSubscriptionPeriodCalculationsService>();
_memberCancellationService = new MemberSubscriptionCancellationService(_userRoleMembershipService,
_emailService, _userLookup, _memberLookup, _memberRepository, _subscriptionPeriodCalculationsService);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
using DevBetterWeb.Core;
using Moq;
using NSubstitute;
using Xunit;

namespace DevBetterWeb.Tests.Services.MemberSubscriptionCancellationServiceTests;
Expand All @@ -13,11 +13,11 @@ public class RemoveUserFromMemberRoleAsync : MemberSubscriptionCancellationServi
[Fact]
public async Task RemovesUserFromMemberRole()
{
_userLookup.Setup(u => u.FindUserIdByEmailAsync(_email)).ReturnsAsync(_userId);
_userLookup.FindUserIdByEmailAsync(_email).Returns(Task.FromResult(_userId));

await _memberCancellationService.RemoveUserFromMemberRoleAsync(_email);

_userRoleMembershipService.Verify(u => u.RemoveUserFromRoleByRoleNameAsync(_userId, Constants.MEMBER_ROLE_NAME), Times.Once);
await _userRoleMembershipService.Received(1).RemoveUserFromRoleByRoleNameAsync(_userId, Constants.MEMBER_ROLE_NAME);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.Threading.Tasks;
using Moq;
using NSubstitute;
using Xunit;

namespace DevBetterWeb.Tests.Services.MemberSubscriptionCancellationServiceTests;
Expand All @@ -13,7 +13,7 @@ public async Task SendsEmail()
{
await _memberCancellationService.SendCancellationEmailAsync(_email);

_emailService.Verify(e => e.SendEmailAsync(_email, It.IsAny<string>(), It.IsAny<string>()));
await _emailService.Received().SendEmailAsync(_email, Arg.Any<string>(), Arg.Any<string>());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,31 @@
using System.Threading.Tasks;
using DevBetterWeb.Core.Entities;
using DevBetterWeb.Core.Specs;
using Moq;
using NSubstitute;
using Xunit;

namespace DevBetterWeb.Tests.Services.MemberSubscriptionCancellationServiceTests;

public class SendFutureCancellationEmailAsync : MemberSubscriptionCancellationServiceTest
{
private readonly string _email = "TestEmail";
private readonly DateTime _date = new DateTime(1, 1, 1);
private readonly string _email = "TestEmail";
private readonly DateTime _date = new DateTime(1, 1, 1);

[Fact]
public async Task SendsEmail()
{
_memberRepository.Setup(s => s.FirstOrDefaultAsync(It.IsAny<MemberByUserIdSpec>(), CancellationToken.None)).ReturnsAsync(new Member());
_subscriptionPeriodCalculationsService.Setup(s => s.GetCurrentSubscriptionEndDate(It.IsAny<Member>())).Returns(_date);
[Fact]
public async Task SendsEmail()
{
_memberRepository.FirstOrDefaultAsync(
Arg.Any<MemberByUserIdSpec>(),
CancellationToken.None)!
.Returns(Task.FromResult(new Member()));

await _memberCancellationService.SendFutureCancellationEmailAsync(_email);
_subscriptionPeriodCalculationsService.GetCurrentSubscriptionEndDate(
Arg.Any<Member>())
.Returns(_date);

_emailService.Verify(e => e.SendEmailAsync(_email, It.IsAny<string>(), It.IsAny<string>()));
}
await _memberCancellationService.SendFutureCancellationEmailAsync(_email);

await _emailService.Received()
.SendEmailAsync(_email, Arg.Any<string>(), Arg.Any<string>());
}
}
Loading