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

94 lines
2.3 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 new user
I want to register with my email
So I can start using the system")]
public partial class UserRegistrationSpecs : FeatureFixture
{
protected User _currentUser;
protected string _currentEmail;
protected Exception _registrationError;
IUserService _userService;
IEmailService _emailService;
IOrganizationService _organizationService;
public async Task Given_no_user_exists_with_email(string email)
{
// Ensure user doesn't exist with email
var user = await _userService.GetUserByEmailAsync(email);
user.ShouldBeNull();
_currentEmail = email;
}
public async Task When_I_submit_registration_with_name_and_email(string name, string email)
{
try
{
_currentUser = await _userService.CreateUserAsync(email, name);
_currentEmail = email;
}
catch (Exception ex)
{
_registrationError = ex;
}
}
public async Task When_I_submit_registration_with_email(string email)
{
try
{
_currentUser = await _userService.CreateUserAsync(email, "Test User");
_currentEmail = email;
}
catch (Exception ex)
{
_registrationError = ex;
}
}
public async Task Then_a_new_user_should_be_created_with_email_and_confirmation_status(string email, bool confirmationStatus)
{
_currentUser.ShouldNotBeNull();
_currentUser.Email.ShouldBe(email);
_currentUser.EmailConfirmed.ShouldBe(confirmationStatus);
await Task.CompletedTask;
}
public async Task Then_a_confirmation_email_should_be_sent()
{
var emailSent = _emailService.WasConfirmationEmailSent(_currentEmail);
emailSent.ShouldBeTrue();
await Task.CompletedTask;
}
public async Task Given_a_user_already_exists_with_email(string email)
{
// Create a user first to ensure it exists
_currentUser = await _userService.CreateUserAsync(email, "Existing User");
_currentUser.ShouldNotBeNull();
_currentEmail = email;
await Task.CompletedTask;
}
public async Task Then_registration_should_fail_with_error(string expectedErrorMessage)
{
_registrationError.ShouldNotBeNull();
_registrationError.Message.ShouldBe(expectedErrorMessage);
await Task.CompletedTask;
}
}