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; } }