chore: heygermany customer project
This commit is contained in:
114
e2e/tests/features/auth-pages.feature
Normal file
114
e2e/tests/features/auth-pages.feature
Normal file
@@ -0,0 +1,114 @@
|
||||
@smoke @auth
|
||||
Feature: Auth pages
|
||||
Login entry points should render their forms and support real session-based login.
|
||||
|
||||
Scenario: company login page renders
|
||||
Given I visit "/en/company/auth/login"
|
||||
Then I see "Login to Company Portal"
|
||||
And I see "Email address"
|
||||
And I see "Password"
|
||||
And I see "Login"
|
||||
|
||||
Scenario: company login validates required fields
|
||||
Given I visit "/en/company/auth/login"
|
||||
When I click "Login"
|
||||
Then I see "Email is required"
|
||||
And I see "Password is required"
|
||||
|
||||
Scenario: company user can log in with real credentials
|
||||
Given I visit "/en/company/auth/login"
|
||||
When I log in as "e2e-company-login@heygermany.test" with password "CompanyPass123!"
|
||||
Then the URL contains "/company"
|
||||
And I see "Find qualified international nurses for German healthcare"
|
||||
|
||||
Scenario: company candidates requires authentication
|
||||
Given I visit "/en/company/candidates"
|
||||
Then the URL contains "/en/company/auth/login"
|
||||
And I see "Login to Company Portal"
|
||||
|
||||
Scenario: company candidate detail requires authentication
|
||||
Given I visit "/en/company/candidate/test-candidate"
|
||||
Then the URL contains "/en/company/auth/login"
|
||||
And I see "Login to Company Portal"
|
||||
|
||||
Scenario: backoffice login page renders
|
||||
Given I visit "/en/backoffice/auth/login"
|
||||
Then I see "Email address"
|
||||
And I see "Password"
|
||||
And I see "Login"
|
||||
And the URL contains "/backoffice/auth/login"
|
||||
|
||||
Scenario: backoffice user can log in with real credentials
|
||||
Given I visit "/en/backoffice/auth/login"
|
||||
When I log in as "e2e-backoffice-login@heygermany.test" with password "BackofficePass123!"
|
||||
Then the URL contains "/backoffice/candidates"
|
||||
And I see "Candidate Pool"
|
||||
|
||||
Scenario: backoffice candidates requires authentication
|
||||
Given I visit "/en/backoffice/candidates"
|
||||
Then the URL contains "/en/backoffice/auth/login"
|
||||
And I see "Login"
|
||||
|
||||
Scenario: backoffice candidate detail requires authentication
|
||||
Given I visit "/en/backoffice/candidate/test-candidate"
|
||||
Then the URL contains "/en/backoffice/auth/login"
|
||||
And I see "Login"
|
||||
|
||||
Scenario: candidate application requires authentication
|
||||
Given I visit "/en/jobs/application"
|
||||
Then the URL contains "/en/jobs/apply"
|
||||
And I see "Who is This For?"
|
||||
|
||||
Scenario: logged-in company user is redirected away from company login
|
||||
Given I visit "/en/company/auth/login"
|
||||
When I log in as "e2e-company-login@heygermany.test" with password "CompanyPass123!"
|
||||
And I visit "/en/company/auth/login"
|
||||
Then the URL contains "/en/company/candidates"
|
||||
And I see "Find qualified international nurses for German healthcare"
|
||||
|
||||
Scenario: company root redirects to candidates after login
|
||||
Given I visit "/en/company/auth/login"
|
||||
When I log in as "e2e-company-login@heygermany.test" with password "CompanyPass123!"
|
||||
And I visit "/en/company"
|
||||
Then the URL contains "/en/company/candidates"
|
||||
|
||||
Scenario: company root requires authentication
|
||||
Given I visit "/en/company"
|
||||
Then the URL contains "/en/company/auth/login"
|
||||
And I see "Login to Company Portal"
|
||||
|
||||
Scenario: logged-in backoffice user is redirected away from backoffice login
|
||||
Given I visit "/en/backoffice/auth/login"
|
||||
When I log in as "e2e-backoffice-login@heygermany.test" with password "BackofficePass123!"
|
||||
And I visit "/en/backoffice/auth/login"
|
||||
Then the URL contains "/en/backoffice/candidates"
|
||||
And I see "Candidate Pool"
|
||||
|
||||
Scenario: backoffice dashboard redirects to candidates after login
|
||||
Given I visit "/en/backoffice/auth/login"
|
||||
When I log in as "e2e-backoffice-login@heygermany.test" with password "BackofficePass123!"
|
||||
And I visit "/en/backoffice/dashboard"
|
||||
Then the URL contains "/en/backoffice/candidates"
|
||||
|
||||
Scenario: backoffice root requires authentication
|
||||
Given I visit "/en/backoffice"
|
||||
Then the URL contains "/en/backoffice/auth/login"
|
||||
And I see "Login"
|
||||
|
||||
Scenario: company logout ends the protected session
|
||||
Given I visit "/en/company/auth/login"
|
||||
When I log in as "e2e-company-login@heygermany.test" with password "CompanyPass123!"
|
||||
And I log out
|
||||
And I wait for 3500 milliseconds
|
||||
And I visit "/en/company/candidates"
|
||||
Then the URL contains "/en/company/auth/login"
|
||||
And I see "Login to Company Portal"
|
||||
|
||||
Scenario: backoffice logout ends the protected session
|
||||
Given I visit "/en/backoffice/auth/login"
|
||||
When I log in as "e2e-backoffice-login@heygermany.test" with password "BackofficePass123!"
|
||||
And I log out
|
||||
And I wait for 3500 milliseconds
|
||||
And I visit "/en/backoffice/candidates"
|
||||
Then the URL contains "/en/backoffice/auth/login"
|
||||
And I see "Login"
|
||||
17
e2e/tests/features/backoffice-pages.feature
Normal file
17
e2e/tests/features/backoffice-pages.feature
Normal file
@@ -0,0 +1,17 @@
|
||||
@backoffice
|
||||
Feature: Backoffice tools
|
||||
Authenticated backoffice users should be able to reach the internal tools they use through the UI.
|
||||
|
||||
Scenario: backoffice translations page loads after login
|
||||
Given I visit "/en/backoffice/auth/login"
|
||||
When I log in as "e2e-backoffice-login@heygermany.test" with password "BackofficePass123!"
|
||||
And I visit "/en/backoffice/translations"
|
||||
Then I see "Backend translations"
|
||||
And I see "Save translation bundle"
|
||||
|
||||
Scenario: backoffice next steps guide loads after login
|
||||
Given I visit "/en/backoffice/auth/login"
|
||||
When I log in as "e2e-backoffice-login@heygermany.test" with password "BackofficePass123!"
|
||||
And I visit "/en/backoffice/help/nextsteps"
|
||||
Then I see "Translation System - CSV Guide"
|
||||
And I see "Understanding the CSV Structure"
|
||||
136
e2e/tests/features/multi-actor-workflows.feature
Normal file
136
e2e/tests/features/multi-actor-workflows.feature
Normal file
@@ -0,0 +1,136 @@
|
||||
@multi-actor
|
||||
Feature: Multi-actor candidate workflows
|
||||
Candidate journeys can span multiple roles and still stay coherent entirely through the UI.
|
||||
|
||||
Scenario: candidate can restart an application after backoffice invalidates it
|
||||
Given the "candidate" actor visits "/en/jobs/apply"
|
||||
When the "candidate" actor starts a new application
|
||||
Then the "candidate" actor URL contains "/jobs/application"
|
||||
|
||||
When the "admin" actor logs into backoffice
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor marks the candidate as "Invalid"
|
||||
|
||||
When the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "Please upload a clear and complete version of the missing or invalid document(s) so we can continue your evaluation."
|
||||
|
||||
When the "candidate" actor clicks "Upload documents again"
|
||||
Then the "candidate" actor sees "Personal Info"
|
||||
And the "candidate" actor URL contains "/jobs/application"
|
||||
|
||||
Scenario: candidate sees the submitted state after backoffice marks the application pending
|
||||
Given the "candidate" actor visits "/en/jobs/apply"
|
||||
When the "candidate" actor starts a new application
|
||||
Then the "candidate" actor URL contains "/jobs/application"
|
||||
|
||||
When the "admin" actor logs into backoffice
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor marks the candidate as "Pending"
|
||||
|
||||
When the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "Thanks! Your documents were uploaded successfully."
|
||||
And the "candidate" actor sees "We’ve got everything we need to start your personal evaluation"
|
||||
|
||||
Scenario: candidate result becomes visible to both the candidate and company after backoffice completes the review
|
||||
Given the "candidate" actor visits "/en/jobs/apply"
|
||||
When the "candidate" actor starts a new application
|
||||
And the "candidate" actor completes and submits the candidate application
|
||||
|
||||
When the "admin" actor logs into backoffice
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor sees "Manual Assessment"
|
||||
And the "admin" actor sets the backoffice field "Status In Home Country" to "Nurse"
|
||||
And the "admin" actor sets the backoffice field "Status In Germany" to "Assistant Nurse"
|
||||
And the "admin" actor sets the backoffice field "License Mandatory" to "No"
|
||||
And the "admin" actor sets the backoffice field "Duration Requirements Met" to "Yes"
|
||||
And the "admin" actor sets the verification field "Nursing Related Degree" to "Yes"
|
||||
And the "admin" actor sets the verification field "Accredited University" to "Yes"
|
||||
And the "admin" actor sets the verification field "Accredited Study Program" to "Yes"
|
||||
And the "admin" actor sets the verification field "Is Nursing Focus" to "Yes"
|
||||
And the "admin" actor sets the verification field "Has Theory" to "Yes"
|
||||
And the "admin" actor sets the verification field "Has Practice" to "Yes"
|
||||
And the "admin" actor sets the verification field "Duration Hours" to "4800"
|
||||
Then the "admin" actor sees "Valid"
|
||||
|
||||
When the "admin" actor marks the candidate as "Complete"
|
||||
And the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "A First Step Towards Your Nursing Career"
|
||||
And the "candidate" actor sees "You Qualify as a Nursing Assistant in Berlin"
|
||||
|
||||
When the "company" actor logs into company
|
||||
And the "company" actor opens the current candidate in company
|
||||
Then the "company" actor URL contains "/en/company/candidate/"
|
||||
And the "company" actor sees the current candidate name
|
||||
And the "company" actor sees "Philippines"
|
||||
|
||||
Scenario: candidate sees both the submitted and invalidated states across repeated admin reviews
|
||||
Given the "candidate" actor visits "/en/jobs/apply"
|
||||
When the "candidate" actor starts a new application
|
||||
And the "candidate" actor completes and submits the candidate application
|
||||
|
||||
When the "admin" actor logs into backoffice
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor marks the candidate as "Pending"
|
||||
|
||||
When the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "Thanks! Your documents were uploaded successfully."
|
||||
And the "candidate" actor sees "We’ve got everything we need to start your personal evaluation"
|
||||
|
||||
When the "admin" actor visits "/en/backoffice/candidates"
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor marks the candidate as "Invalid"
|
||||
|
||||
When the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "Please upload a clear and complete version of the missing or invalid document(s) so we can continue your evaluation."
|
||||
When the "candidate" actor clicks "Upload documents again"
|
||||
Then the "candidate" actor sees "Personal Info"
|
||||
And the "candidate" actor URL contains "/jobs/application"
|
||||
|
||||
Scenario: candidate can move from submission to invalidation to resubmission and final company visibility
|
||||
Given the "candidate" actor visits "/en/jobs/apply"
|
||||
When the "candidate" actor starts a new application
|
||||
And the "candidate" actor completes and submits the candidate application
|
||||
|
||||
When the "admin" actor logs into backoffice
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor marks the candidate as "Pending"
|
||||
|
||||
When the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "Thanks! Your documents were uploaded successfully."
|
||||
And the "candidate" actor sees "We’ve got everything we need to start your personal evaluation"
|
||||
|
||||
When the "admin" actor visits "/en/backoffice/candidates"
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor marks the candidate as "Invalid"
|
||||
|
||||
When the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "Please upload a clear and complete version of the missing or invalid document(s) so we can continue your evaluation."
|
||||
When the "candidate" actor clicks "Upload documents again"
|
||||
And the "candidate" actor completes and submits the candidate application
|
||||
|
||||
When the "admin" actor visits "/en/backoffice/candidates"
|
||||
And the "admin" actor opens the current candidate in backoffice
|
||||
And the "admin" actor sees "Manual Assessment"
|
||||
And the "admin" actor sets the backoffice field "Status In Home Country" to "Nurse"
|
||||
And the "admin" actor sets the backoffice field "Status In Germany" to "Assistant Nurse"
|
||||
And the "admin" actor sets the backoffice field "License Mandatory" to "No"
|
||||
And the "admin" actor sets the backoffice field "Duration Requirements Met" to "Yes"
|
||||
And the "admin" actor sets the verification field "Nursing Related Degree" to "Yes"
|
||||
And the "admin" actor sets the verification field "Accredited University" to "Yes"
|
||||
And the "admin" actor sets the verification field "Accredited Study Program" to "Yes"
|
||||
And the "admin" actor sets the verification field "Is Nursing Focus" to "Yes"
|
||||
And the "admin" actor sets the verification field "Has Theory" to "Yes"
|
||||
And the "admin" actor sets the verification field "Has Practice" to "Yes"
|
||||
And the "admin" actor sets the verification field "Duration Hours" to "4800"
|
||||
Then the "admin" actor sees "Valid"
|
||||
|
||||
When the "admin" actor marks the candidate as "Complete"
|
||||
And the "candidate" actor revisits the current candidate application
|
||||
Then the "candidate" actor sees "A First Step Towards Your Nursing Career"
|
||||
And the "candidate" actor sees "You Qualify as a Nursing Assistant in Berlin"
|
||||
|
||||
When the "company" actor logs into company
|
||||
And the "company" actor opens the current candidate in company
|
||||
Then the "company" actor URL contains "/en/company/candidate/"
|
||||
And the "company" actor sees the current candidate name
|
||||
And the "company" actor sees "Philippines"
|
||||
64
e2e/tests/features/public-pages.feature
Normal file
64
e2e/tests/features/public-pages.feature
Normal file
@@ -0,0 +1,64 @@
|
||||
@smoke
|
||||
Feature: Public pages
|
||||
Public entry points should render without crashing and show their core content.
|
||||
|
||||
Scenario: localized home page loads
|
||||
Given I visit "/en"
|
||||
Then I see "Begin Your Nursing Career in Germany"
|
||||
And I see "Check My Qualification"
|
||||
|
||||
Scenario: about page loads
|
||||
Given I visit "/en/about"
|
||||
Then I see "About HeyGermany"
|
||||
And I see "Ready to Start Your Journey?"
|
||||
|
||||
Scenario: application page loads
|
||||
Given I visit "/en/jobs/apply"
|
||||
Then I see "Who is This For?"
|
||||
And I see "Get Your Results"
|
||||
|
||||
Scenario: result route redirects back to the application flow
|
||||
Given I visit "/en/jobs/result"
|
||||
Then the URL contains "/en/jobs/apply"
|
||||
And I see "Who is This For?"
|
||||
|
||||
Scenario: pilot landing page loads
|
||||
Given I visit "/pilot"
|
||||
Then I see "Pilot-Partner werden"
|
||||
And I see "Warum Pflegeeinrichtungen HeyGermany wählen"
|
||||
|
||||
Scenario: imprint page loads
|
||||
Given I visit "/en/legal/imprint"
|
||||
Then I see "Imprint"
|
||||
And I see "Information according to"
|
||||
|
||||
Scenario: privacy page loads
|
||||
Given I visit "/en/legal/privacy"
|
||||
Then I see "Privacy Policy"
|
||||
And I see "Data Controller"
|
||||
|
||||
Scenario: terms page loads
|
||||
Given I visit "/en/legal/terms-and-conditions"
|
||||
Then I see "Terms & Conditions"
|
||||
And I see "User Responsibilities"
|
||||
|
||||
Scenario: magic link page handles missing token
|
||||
Given I visit "/en/auth/magic-link"
|
||||
Then I see "Magic link failed"
|
||||
And I see "No magic link token provided."
|
||||
|
||||
Scenario: verify email success page loads
|
||||
Given I visit "/en/verify-email?verified=1"
|
||||
Then I see "Thank you for verifying your email!"
|
||||
And I see "Your account is now active and ready to use."
|
||||
|
||||
Scenario: verify email error page loads
|
||||
Given I visit "/en/verify-email?error=expired"
|
||||
Then I see "Email Verification Failed"
|
||||
And I see "Please try requesting a new verification email or contact support if the problem persists."
|
||||
|
||||
Scenario: demo result page loads
|
||||
Given I visit "/en/jobs/result/demo"
|
||||
Then I see "Good News Maria Santos"
|
||||
And I see "You May Qualify as a Nurse in Berlin"
|
||||
And I see "Get Help"
|
||||
Reference in New Issue
Block a user