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 AccountRegistrationSpecs : FeatureFixture { protected Account _currentAccount; protected string _currentEmail; protected Exception _registrationError; IAccountService _accountService; IEmailService _emailService; IOrganizationService _organizationService; public async Task Given_no_account_exists_with_email(string email) { // Ensure account doesn't exist with email var account = await _accountService.GetAccountByEmailAsync(email); account.ShouldBeNull(); _currentEmail = email; } public async Task When_I_submit_registration_with_email_and_password(string email, string password) { try { _currentAccount = await _accountService.CreateAccountAsync(email, password); _currentEmail = email; } catch (Exception ex) { _registrationError = ex; } } public async Task When_I_submit_registration_with_email(string email) { try { _currentAccount = await _accountService.CreateAccountAsync(email, "TestPassword123!"); _currentEmail = email; } catch (Exception ex) { _registrationError = ex; } } public async Task Then_a_new_account_should_be_created_with_email_and_confirmation_status(string email, bool confirmationStatus) { _currentAccount.ShouldNotBeNull(); _currentAccount.Email.ShouldBe(email); _currentAccount.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_an_account_already_exists_with_email(string email) { // Create an account first to ensure it exists _currentAccount = await _accountService.CreateAccountAsync(email, "ExistingPassword123!"); _currentAccount.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; } }