PlanTempusApp/PlanTempus.X.BDD/FeatureFixtures/EmailConfirmationSpecs.cs

73 lines
No EOL
1.9 KiB
C#

using LightBDD.Framework;
using LightBDD.Framework.Scenarios;
using LightBDD.MsTest3;
using PlanTempus.X.Services;
using Shouldly;
namespace PlanTempus.X.BDD.FeatureFixtures;
[TestClass]
[FeatureDescription(@"As a registered user
I want to confirm my email
So I can activate my account")]
public partial class EmailConfirmationSpecs : FeatureFixture
{
IUserService _userService;
IEmailService _emailService;
IOrganizationService _organizationService;
protected User _currentUser;
protected string _currentEmail;
protected string _confirmationLink;
protected bool _redirectedToWelcome;
protected string _errorMessage;
public async Task Given_a_user_exists_with_unconfirmed_email(string email)
{
_currentUser = await _userService.CreateUserAsync(email, "Test User");
_currentUser.EmailConfirmed.ShouldBeFalse();
_currentEmail = email;
}
public async Task When_I_click_the_valid_confirmation_link_for(string email)
{
_confirmationLink = await _emailService.GetConfirmationLinkForEmail(email);
await _userService.ConfirmEmailAsync(_confirmationLink);
_redirectedToWelcome = true; // Simulate redirect
}
public async Task Then_the_users_email_confirmed_should_be_true()
{
_currentUser = _userService.GetUserByEmail(_currentEmail);
_currentUser.EmailConfirmed.ShouldBeTrue();
}
public async Task And_I_should_be_redirected_to_the_welcome_page()
{
_redirectedToWelcome.ShouldBeTrue();
}
public async Task When_I_click_an_invalid_confirmation_link()
{
try
{
await _userService.ConfirmEmailAsync("invalid-confirmation-token");
}
catch (Exception ex)
{
_errorMessage = ex.Message;
}
}
public async Task Then_I_should_see_an_error_message(string expectedErrorMessage)
{
_errorMessage.ShouldBe(expectedErrorMessage);
}
public async Task And_my_email_remains_unconfirmed()
{
if (_currentUser != null)
{
_currentUser.EmailConfirmed.ShouldBeFalse();
}
}
}