Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
181 commits
Select commit Hold shift + click to select a range
ccb1a42
SerenityJS integration for Sharethrift
anya-m-patel Nov 10, 2025
881bc5f
SerenityJS code refactoring
anya-m-patel Nov 12, 2025
4679776
SerenityJS feedback updates
anya-m-patel Nov 13, 2025
df0565f
centralized '1.0.0' inside create-listing.ability.ts
anya-m-patel Nov 14, 2025
be12d08
Resolve merge conflicts with SerenityJS PR
anya-m-patel Nov 17, 2025
5fd948e
Fix Biome lint: convert step definitions to arrow functions
anya-m-patel Nov 17, 2025
1519576
resolve pipeline errors
anya-m-patel Nov 17, 2025
de2b162
resolve pipeline errors
anya-m-patel Nov 17, 2025
244f7f7
resolve pipeline errors
anya-m-patel Nov 17, 2025
07cdc7f
fix lint errors in accpetance tests
anya-m-patel Nov 17, 2025
df18ab7
update async functions
anya-m-patel Nov 17, 2025
82d6ee1
build error changes
anya-m-patel Nov 18, 2025
beb164f
added the canReserveItemListing property
anya-m-patel Nov 18, 2025
f498c2d
feat: add canReserveItemListing permission and install SerenityJS dep…
anya-m-patel Nov 18, 2025
9089e8c
Repair pnpm lockfile after dependency conflict
anya-m-patel Nov 18, 2025
6d0b6a4
merge conflict resolution
anya-m-patel Nov 18, 2025
ccdb69f
Regenerate lockfile to fix missing glob dependency
anya-m-patel Nov 18, 2025
8e93f04
refactor: extract role permissions factory to reduce test duplication
anya-m-patel Nov 18, 2025
33afabe
refactor: extract shared test user fixtures to reduce duplication in …
anya-m-patel Nov 18, 2025
ae7fab2
refactor: extract base AppealRequest class to eliminate duplication b…
anya-m-patel Nov 19, 2025
f8a2eef
pr feedback
anya-m-patel Nov 20, 2025
04448ac
refactor: remove base appeal request class, follow user pattern per P…
anya-m-patel Nov 20, 2025
d7af137
Add AdminUser aggregate and related infrastructure
anya-m-patel Nov 21, 2025
9a9fb3e
resolve merge conflicts pertaining to the deletion of personal-user-role
anya-m-patel Nov 21, 2025
dd2664a
remove generics from appeal-request classes and update admin permissions
anya-m-patel Nov 21, 2025
9b54864
Restore generic type parameters to appeal-request aggregates
anya-m-patel Nov 21, 2025
690caea
Fix UOW interfaces to be concrete types not generic
anya-m-patel Nov 21, 2025
b860b73
Extract duplicated appeal-request logic into shared helpers
anya-m-patel Nov 21, 2025
d903946
Add touch() method to update updatedAt in domain layer
anya-m-patel Nov 21, 2025
f8e50f3
removed base-appeal-request files
anya-m-patel Nov 24, 2025
c994ed2
removed vitest.disableWorkspaceWarning from global settings
anya-m-patel Nov 24, 2025
6049765
removed helpers file, restore inline implementations
anya-m-patel Nov 24, 2025
a19d97f
Resolved merge conflict
anya-m-patel Nov 24, 2025
b0a2da1
remove touch() method from ItemListing aggregate
anya-m-patel Nov 25, 2025
6ed172c
consolidate reservation request permissions to canEditReservationRequest
anya-m-patel Nov 25, 2025
53ecabe
remove role-permissions.factory.ts - doesn't follow CellixJS patterns
anya-m-patel Nov 25, 2025
81e56ab
remove factory export from domain index
anya-m-patel Nov 25, 2025
a3c93b5
fix reservation-request tests after permission consolidation
anya-m-patel Nov 25, 2025
0e5d955
addressed code review feedback for permission model migration
anya-m-patel Dec 4, 2025
35d3bd8
Resolved conflicts:
anya-m-patel Dec 4, 2025
474d3ff
fix: upgrade jsonwebtoken to 9.0.3 to resolve jws vulnerability
anya-m-patel Dec 4, 2025
d3d43ec
upgrade twilio to 5.10.7 to resolve jws vulnerability in apps/api
anya-m-patel Dec 4, 2025
753ac0a
fix: update reservation request visa tests to use canEditReservationR…
anya-m-patel Dec 4, 2025
02cd174
fix: addressed code review comments - improve error handling and redu…
anya-m-patel Dec 5, 2025
48998c1
exclude UI components from SonarCloud coverage analysis
anya-m-patel Dec 5, 2025
3c59c00
exclude UI components from vitest coverage
anya-m-patel Dec 5, 2025
d75579a
filter UI components from merged lcov coverage report
anya-m-patel Dec 5, 2025
0e7bb8b
improve lcov filter with better path matching and debug logging
anya-m-patel Dec 5, 2025
0dad1ce
disable coverage generation for UI app with no unit tests
anya-m-patel Dec 5, 2025
da7823b
Turbo to bypass cache for coverage generation in PR builds
anya-m-patel Dec 5, 2025
cbe9472
disable coverage generation for all UI component packages with no uni…
anya-m-patel Dec 5, 2025
5471535
add comprehensive tests for state setters and property setters to imp…
anya-m-patel Dec 5, 2025
f1583b8
Fix Serenity acceptance tests: handle isNew flag for permission scena…
anya-m-patel Dec 9, 2025
ad4377f
Remove updatedAt assertions from acceptance tests
anya-m-patel Dec 9, 2025
e774b1b
fix: use startsWith for error message assertions in Serenity tests
anya-m-patel Dec 11, 2025
6af8f23
refactor: remove duplicate ActorNamed function
anya-m-patel Dec 11, 2025
be0139b
moved abilities folder into screenplay
anya-m-patel Dec 11, 2025
89c1dc3
remove duplicate unused create-listing.steps.ts
anya-m-patel Dec 11, 2025
833b49f
organized features by domain context
anya-m-patel Dec 11, 2025
e9a0bf3
remove unused contain import
anya-m-patel Dec 11, 2025
4d950e1
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel Dec 11, 2025
87ec7c8
Merge branch 'main' into serenityjs-test-setup
anya-m-patel Dec 11, 2025
963f565
fix: re-add twilio 5.10.7 dependency to apps/api
anya-m-patel Dec 11, 2025
c35dcad
resolve TypeScript build errors
anya-m-patel Dec 11, 2025
7bfde19
resolved remaining TypeScript build errors
anya-m-patel Dec 11, 2025
113d0c8
corrected getNewInstance signature in ItemListingRepository
anya-m-patel Dec 11, 2025
872cc8a
fixed 6 failing tests in domain package
anya-m-patel Dec 11, 2025
850cf2c
restored vitest test scripts in @cellix/ui-core
anya-m-patel Dec 11, 2025
65029f8
Remove filter-lcov script and include UI components in coverage
anya-m-patel Dec 11, 2025
487dbd2
configure Serenity BDD test reporting with HTML dashboard generation
anya-m-patel Dec 12, 2025
6513143
replaced invalid --workspace flags with turbo --filter and fix Biome …
anya-m-patel Dec 15, 2025
26ab701
resolved merge conflicts :
anya-m-patel Dec 15, 2025
0f31007
updated pnpm-lock.yaml for Serenity dependencies
anya-m-patel Dec 15, 2025
53912e8
revert to bracket notation for process.env to satisfy TypeScript TS4111
anya-m-patel Dec 15, 2025
98b20c3
remove unused dependencies and fix typo
anya-m-patel Dec 15, 2025
25c3680
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Dec 15, 2025
8f7b1e9
Update packages/cellix/mock-oauth2-server/src/index.ts
anya-m-patel Dec 15, 2025
4170c11
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel Dec 15, 2025
fc8009a
Revert vitest config change
anya-m-patel Dec 17, 2025
c9052a3
Revert biome.json change
anya-m-patel Dec 17, 2025
76b2c67
reverted changes
anya-m-patel Dec 18, 2025
dc171ce
Revert UI test script changes
anya-m-patel Dec 18, 2025
22a8271
removed the authenticate.ts file
anya-m-patel Dec 18, 2025
87bf1f2
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel Dec 18, 2025
d35eabc
Update package.json
anya-m-patel Dec 18, 2025
da37675
replaced node:crypto with cross-platform uuid library
anya-m-patel Dec 18, 2025
3abeb09
remove unused concurrently devDependency
anya-m-patel Dec 18, 2025
c622e98
Revert item-listing tests to match main
anya-m-patel Dec 18, 2025
36249eb
upgrade storybook to 9.1.17 to fix security vulnerability
anya-m-patel Dec 19, 2025
c78f06a
fix TypeScript compilation errors in item-listing.ts after merge (cor…
anya-m-patel Dec 19, 2025
c74afac
add missing test scenarios and fix passport mock calls
anya-m-patel Dec 19, 2025
1621536
Resolved conflicts in package.json files:
anya-m-patel Dec 19, 2025
cc8b1c5
update pnpm-lock.yaml
anya-m-patel Dec 19, 2025
12355ab
removed GraphQL-dependent acceptance tests from domain package
anya-m-patel Dec 19, 2025
5d58af8
implement CreateListingAbility using Hexagonal Architecture
anya-m-patel Dec 22, 2025
028e52f
CreateListingAbility to use domain factory method
anya-m-patel Dec 22, 2025
45c2439
add state transition methods to CreateListingAbility
anya-m-patel Dec 22, 2025
f17de8e
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Dec 22, 2025
6bb581b
removed state setter to enforce permission checks
anya-m-patel Dec 22, 2025
c4bd12b
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Dec 22, 2025
446ea87
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Dec 22, 2025
2244e8a
removed duplicate export in abilities index.ts
anya-m-patel Dec 22, 2025
bfa7294
use value objects in getNewInstance to enforce validation
anya-m-patel Dec 22, 2025
d8ac268
remove non-null assertion operator in CreateListingAbility
anya-m-patel Dec 22, 2025
ff24d2b
fix test scenarios to match feature file and remove obsolete state se…
anya-m-patel Dec 22, 2025
772ae36
updated reservation request state from PENDING to Requested
anya-m-patel Dec 22, 2025
98b3471
Update packages/sthrift/domain/cucumber.yaml
anya-m-patel Dec 22, 2025
8e72a3e
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel Dec 22, 2025
94e0249
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel Dec 22, 2025
e4f1af5
update Node version to v22 as per code review feedback
anya-m-patel Dec 22, 2025
edd060d
use repo.getNewInstance() instead of static class method in CreateLis…
anya-m-patel Dec 22, 2025
4ceb214
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel Dec 22, 2025
f16a267
change reservation request initial state from Requested to PENDING
anya-m-patel Dec 22, 2025
74f2038
refactored ItemListing.getNewInstance to follow Cellix pattern
anya-m-patel Dec 23, 2025
09512a4
fixed cucumber.yaml for Node v22 compatibility
anya-m-patel Dec 23, 2025
ffcf07d
added working Serenity.js test infrastructure
anya-m-patel Dec 23, 2025
2572a16
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel Dec 23, 2025
31baa99
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel Dec 23, 2025
5d1a45f
updated Serenity reports to use target/site/serenity structure
anya-m-patel Dec 23, 2025
45f78f8
added Serenity BDD report generation to build pipeline
anya-m-patel Dec 23, 2025
51d97e3
removed async from step definitions without await
anya-m-patel Dec 23, 2025
49edfa8
removed unused uuid dependency and tsx from knip ignoreDependencies t…
anya-m-patel Dec 23, 2025
9f2c612
update pnpm-lock.yaml after removing uuid dependency
anya-m-patel Dec 23, 2025
fb4f597
Added turbo task for test:serenity:report and updated pipeline to use…
anya-m-patel Dec 23, 2025
98eaac0
Reverted test scripts in ui-components to use vitest instead of echo …
anya-m-patel Dec 23, 2025
5ef9ece
Merge main into serenityjs-test-setup
anya-m-patel Dec 23, 2025
bd415fc
Updated turbo.json Serenity task inputs and outputs
anya-m-patel Dec 23, 2025
7dd6d15
fix: remove undefined scenario from personal-user reservation-request…
anya-m-patel Dec 23, 2025
00ecf63
clean up Serenity files and fix build process
anya-m-patel Dec 23, 2025
81f09f6
Update packages/sthrift/domain/package.json
anya-m-patel Jan 2, 2026
50e5e27
Update build-pipeline/core/monorepo-build-stage.yml
anya-m-patel Jan 2, 2026
fb7883d
correct indentation in mock-oauth2-server token endpoint
anya-m-patel Jan 2, 2026
05c4049
optimize test:serenity:report turbo cache configuration
anya-m-patel Jan 2, 2026
cb3a1fe
removed redundant checks
anya-m-patel Jan 2, 2026
46458c9
updates comments to make sure the align with the updates paths
anya-m-patel Jan 2, 2026
2abccf7
updated pnpm-lock.yaml to sync with package.json
anya-m-patel Jan 5, 2026
2980cf1
apply pnpm audit security fixes
anya-m-patel Jan 5, 2026
1ef6a32
prevented js-yaml 4.x upgrade breaking gray-matter
anya-m-patel Jan 5, 2026
17c6252
Update packages/sthrift/domain/src/domain/contexts/appeal-request/lis…
anya-m-patel Jan 5, 2026
c1d9e94
move state setter comment to precede the method
anya-m-patel Jan 5, 2026
2547d35
remove trailing whitespace on empty line
anya-m-patel Jan 5, 2026
ac4d43d
remove trailing whitespace on empty line
anya-m-patel Jan 5, 2026
ca0d52a
Update packages/cellix/mock-oauth2-server/src/index.ts
anya-m-patel Jan 5, 2026
771769a
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Jan 5, 2026
25773f5
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Jan 5, 2026
48c1bca
Update packages/sthrift/domain/cucumber.yaml
anya-m-patel Jan 5, 2026
daf2579
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Jan 5, 2026
7623890
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel Jan 5, 2026
fd7b8f2
remove duplicate closing brace and fix ValidationError
anya-m-patel Jan 6, 2026
b907a28
Merge branch 'main' into serenityjs-test-setup
anya-m-patel Jan 6, 2026
02f4043
restore state validation in ensureCanRequestClose
anya-m-patel Jan 6, 2026
7063332
update cucumber.yaml to reference TypeScript step definitions
anya-m-patel Jan 6, 2026
7b2f368
Configure Cucumber acceptance testing with HTML reports
anya-m-patel Jan 6, 2026
bf33fdb
Merge main into serenityjs-test-setup
anya-m-patel Jan 7, 2026
5eda6c0
Add 'open' to ignoreBinaries in knip.json
anya-m-patel Jan 7, 2026
7206d9b
Fix misleading comments in cucumber.yaml
anya-m-patel Jan 7, 2026
3a4a54a
Fix misleading biome-ignore comments
anya-m-patel Jan 7, 2026
ae362b9
Update packages/sthrift/domain/package.json
anya-m-patel Jan 7, 2026
6e7713b
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel Jan 7, 2026
fafcf6d
Update .nvmrc
anya-m-patel Jan 7, 2026
9e40a27
implement Serenity.js Screenplay Pattern for acceptance tests
anya-m-patel Jan 7, 2026
c15df82
chore: update pnpm-lock.yaml after removing ts-node dependency
anya-m-patel Jan 7, 2026
bf4f992
resolve Biome linting errors in Serenity tests
anya-m-patel Jan 7, 2026
f2db98f
Merge remote-tracking branch 'origin/main' into serenityjs-test-setup
anya-m-patel Jan 7, 2026
70c0acf
fix: exclude Serenity.js acceptance test files from SonarCloud covera…
anya-m-patel Jan 7, 2026
b9f5a35
mark acceptance test files as test code in SonarCloud
anya-m-patel Jan 7, 2026
48a631d
update test:serenity:open to open Cucumber report instead of Serenity…
anya-m-patel Jan 8, 2026
11e3b00
fix: exclude acceptance tests from SonarCloud analysis
anya-m-patel Jan 8, 2026
6005169
exclude infrastructure files from coverage analysis
anya-m-patel Jan 8, 2026
796e227
fix: exclude visa and appeal-request entity files from coverage
anya-m-patel Jan 8, 2026
18ac958
revert: remove exclusions that decreased coverage
anya-m-patel Jan 8, 2026
5cf1e9a
test: add coverage for AdminUser sharer in item-listing
anya-m-patel Jan 8, 2026
7af2e13
fix: ignore Serenity target directory from linting
anya-m-patel Jan 8, 2026
6a168b2
add coverage for uncovered item-listing getters and methods
anya-m-patel Jan 8, 2026
fd1bd9c
integrate Serenity BDD reports with Docusaurus deployment
anya-m-patel Jan 8, 2026
c6a3162
upgrade react-router-dom to 7.12.0 to resolve security vulnerabilities
anya-m-patel Jan 8, 2026
c79a4ed
fix: upgrade react-router-dom in ui-components to 7.12.0
anya-m-patel Jan 8, 2026
6f41501
fix docusaurus build issue
anya-m-patel Jan 9, 2026
881be99
fix: remove accidentally tracked Serenity report HTML and update giti…
anya-m-patel Jan 9, 2026
460a381
fix: convert Storybook main.ts configs from CommonJS to ESM
anya-m-patel Jan 9, 2026
2a620e3
chore: upgrade Storybook from 9.1.17 to 10.1.11
anya-m-patel Jan 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .biomeignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Ignore generated Serenity reports
**/target/**
**/dist/**
**/build/**
**/.turbo/**
**/node_modules/**
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/node_modules
.DS_Store
**/coverage
**/test-results
**/target
# .gitignore template - https://github.com/github/gitignore/blob/main/Node.gitignore
lcov-report
__*
Expand All @@ -11,6 +13,10 @@ __*
# SonarScanner
.scannerwork

# Serenity reports copied to Docusaurus static folder (build artifacts)
apps/docs/static/serenity-reports
apps/docs/apps/docs/static/serenity-reports

# Generated GraphQL files
**/generated.ts
**/generated.tsx
Expand Down
4 changes: 2 additions & 2 deletions apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
"@sthrift/event-handler": "workspace:*",
"@sthrift/graphql": "workspace:*",
"@sthrift/messaging-service-mock": "workspace:*",
"@sthrift/messaging-service-twilio": "workspace:*",
"@sthrift/persistence": "workspace:*",
"@sthrift/rest": "workspace:*",
"@sthrift/service-blob-storage": "workspace:*",
Expand All @@ -39,7 +38,8 @@
"@sthrift/payment-service-cybersource": "workspace:*",
"@sthrift/service-mongoose": "workspace:*",
"@sthrift/service-otel": "workspace:*",
"@sthrift/service-token-validation": "workspace:*"
"@sthrift/service-token-validation": "workspace:*",
"@sthrift/messaging-service-twilio": "workspace:*"
},
"devDependencies": {
"@cellix/typescript-config": "workspace:*",
Expand Down
12 changes: 12 additions & 0 deletions apps/docs/.vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Start Docusaurus Dev Server",
"type": "shell",
"command": "pnpm run start",
"isBackground": true,
"problemMatcher": []
}
]
}
9 changes: 9 additions & 0 deletions apps/docs/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ const config: Config = {
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',

// Ignore Serenity reports in broken link checker (they're static files copied during build)
onBrokenAnchors: 'warn',
staticDirectories: ['static'],

// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
Expand Down Expand Up @@ -86,6 +90,11 @@ const config: Config = {
label: 'Doc',
},
{ to: '/blog', label: 'Blog', position: 'left' },
{
type: 'html',
value: '<a href="/serenity-reports/cucumber-report.html" target="_blank" rel="noopener noreferrer" class="navbar__link">Test Reports</a>',
position: 'left',
},
{
href: 'https://github.com/simnova/sharethrift',
label: 'GitHub',
Expand Down
154 changes: 154 additions & 0 deletions apps/docs/static/SERENITY_INTEGRATION_DEMO.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Serenity Integration Demo</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
max-width: 1200px;
margin: 40px auto;
padding: 20px;
background: #f5f5f5;
}
.container {
background: white;
padding: 40px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
h1 {
color: #1a73e8;
border-bottom: 3px solid #1a73e8;
padding-bottom: 10px;
}
h2 {
color: #333;
margin-top: 30px;
}
.status {
display: inline-block;
padding: 4px 12px;
border-radius: 4px;
font-weight: bold;
margin-left: 10px;
}
.success {
background: #d4edda;
color: #155724;
}
.info {
background: #d1ecf1;
color: #0c5460;
}
.link-box {
background: #e7f3ff;
border-left: 4px solid #1a73e8;
padding: 20px;
margin: 20px 0;
}
.link-box a {
color: #1a73e8;
text-decoration: none;
font-size: 18px;
font-weight: 500;
}
.link-box a:hover {
text-decoration: underline;
}
.code {
background: #f4f4f4;
padding: 2px 6px;
border-radius: 3px;
font-family: 'Courier New', monospace;
font-size: 14px;
}
ul {
line-height: 1.8;
}
.flow {
background: #f8f9fa;
padding: 20px;
border-radius: 6px;
margin: 20px 0;
}
.flow-step {
padding: 10px;
margin: 10px 0;
border-left: 3px solid #28a745;
padding-left: 20px;
}
</style>
</head>
<body>
<div class="container">
<h1>✅ Serenity BDD Integration Status</h1>

<h2>Integration Complete <span class="status success">WORKING</span></h2>

<div class="link-box">
<p><strong>📊 View the Serenity Test Reports:</strong></p>
<p><a href="/serenity-reports/cucumber-report.html" target="_blank">→ Open Cucumber Report</a></p>
<p><a href="/serenity-reports/index.html" target="_blank">→ Open Serenity Dashboard</a></p>
<p><a href="/serenity-reports/capabilities.html" target="_blank">→ Open Capabilities Report</a></p>
</div>

<h2>📋 What's Been Implemented:</h2>
<div class="flow">
<div class="flow-step">
<strong>1. Test Execution</strong><br>
Command: <span class="code">pnpm run test:serenity</span><br>
Runs Cucumber tests with Serenity instrumentation
</div>
<div class="flow-step">
<strong>2. Report Generation</strong><br>
Command: <span class="code">pnpm run test:serenity:report</span><br>
Generates HTML reports at <span class="code">packages/sthrift/domain/target/site/serenity/</span>
</div>
<div class="flow-step">
<strong>3. Pipeline Copy Step</strong><br>
File: <span class="code">build-pipeline/core/monorepo-build-stage.yml</span><br>
Copies reports from domain package to <span class="code">apps/docs/static/serenity-reports/</span>
</div>
<div class="flow-step">
<strong>4. Docusaurus Integration</strong><br>
File: <span class="code">apps/docs/docusaurus.config.ts</span><br>
Added "Test Reports" link in navbar pointing to <span class="code">/serenity-reports/cucumber-report.html</span>
</div>
<div class="flow-step">
<strong>5. Build Output</strong><br>
Docusaurus build copies static files to <span class="code">apps/docs/build/serenity-reports/</span><br>
Ready for deployment!
</div>
</div>

<h2>🎯 How It Works in Production:</h2>
<ul>
<li>When the CI/CD pipeline runs, it executes the Serenity tests</li>
<li>Reports are generated and copied to the Docusaurus static folder</li>
<li>Docusaurus builds the documentation site including the reports</li>
<li>The site is deployed to Azure Static Web Apps</li>
<li>Users can click "Test Reports" in the navbar to view the latest test results</li>
</ul>

<h2>📁 File Locations:</h2>
<ul>
<li><strong>Source Reports:</strong> <span class="code">packages/sthrift/domain/target/site/serenity/</span></li>
<li><strong>Docusaurus Static:</strong> <span class="code">apps/docs/static/serenity-reports/</span></li>
<li><strong>Build Output:</strong> <span class="code">apps/docs/build/serenity-reports/</span></li>
</ul>

<h2>🔧 Configuration Files Modified:</h2>
<ul>
<li><span class="code">build-pipeline/core/monorepo-build-stage.yml</span> - Added copy step (lines 264-310)</li>
<li><span class="code">apps/docs/docusaurus.config.ts</span> - Added navbar link and static directory config</li>
<li><span class="code">.gitignore</span> - Added <span class="code">apps/docs/static/serenity-reports/</span></li>
</ul>

<p style="margin-top: 40px; padding-top: 20px; border-top: 1px solid #ddd; color: #666;">
<strong>Note:</strong> This integration was implemented per Patrick's PR feedback to make Serenity reports
available online through the Docusaurus deployment. All components are in place and working!
</p>
</div>
</body>
</html>
5 changes: 3 additions & 2 deletions apps/ui-sharethrift/.storybook/main.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import type { StorybookConfig } from '@storybook/react-vite';

import { dirname } from 'path';
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';

function getAbsolutePath(value: string): string {
// Prevent path traversal attacks
if (value.includes('..') || value.startsWith('/')) {
throw new Error(`Invalid package name: ${value}`);
}
return dirname(require.resolve(value));
return dirname(fileURLToPath(import.meta.resolve(value)));
}
const config: StorybookConfig = {
stories: [
Expand Down
16 changes: 8 additions & 8 deletions apps/ui-sharethrift/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,20 @@
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-oidc-context": "^3.3.0",
"react-router-dom": "^7.8.0",
"react-router-dom": "^7.12.0",
"rxjs": "^7.8.2"
},
"devDependencies": {
"@cellix/typescript-config": "workspace:*",
"@cellix/vitest-config": "workspace:*",
"@chromatic-com/storybook": "^4.1.0",
"@chromatic-com/storybook": "^4.1.3",
"@eslint/js": "^9.30.1",
"@graphql-typed-document-node/core": "^3.2.0",
"@storybook/addon-a11y": "^9.1.17",
"@storybook/addon-docs": "^9.1.17",
"@storybook/addon-vitest": "^9.1.17",
"@storybook/react": "^9.1.17",
"@storybook/react-vite": "^9.1.17",
"@storybook/addon-a11y": "^10.1.11",
"@storybook/addon-docs": "^10.1.11",
"@storybook/addon-vitest": "^10.1.11",
"@storybook/react": "^10.1.11",
"@storybook/react-vite": "^10.1.11",
"@testing-library/jest-dom": "^6.9.1",
"@types/lodash": "^4.17.20",
"@types/react": "^19.1.9",
Expand All @@ -52,7 +52,7 @@
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.3.0",
"storybook": "catalog:",
"storybook": "^10.1.11",
"typescript": "~5.8.3",
"typescript-eslint": "^8.35.1",
"vite": "catalog:",
Expand Down
2 changes: 1 addition & 1 deletion biome.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
"vcs": { "enabled": false, "clientKind": "git", "useIgnoreFile": false },
"vcs": { "enabled": false, "clientKind": "git", "useIgnoreFile": true },
"files": { "ignoreUnknown": false },
"formatter": {
"enabled": true,
Expand Down
44 changes: 44 additions & 0 deletions build-pipeline/core/monorepo-build-stage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,50 @@ stages:
${{ each pair in parameters.buildEnvSettings }}:
${{ pair.key }}: ${{ pair.value }}

# Generate Serenity BDD HTML reports from test results
- task: Bash@3
displayName: 'Generate Serenity BDD reports'
condition: eq(variables['BuildJob.HAS_SOURCE_CHANGES'], 'true')
inputs:
targetType: 'inline'
script: |
set -euo pipefail
echo "Generating Serenity BDD HTML reports..."
pnpm run test:serenity:report
workingDirectory: '$(Build.SourcesDirectory)'

# Copy Serenity reports to Docusaurus static folder for deployment
- task: Bash@3
displayName: 'Copy Serenity reports to Docusaurus static folder'
condition: eq(variables['BuildJob.HAS_SOURCE_CHANGES'], 'true')
inputs:
targetType: 'inline'
script: |
set -euo pipefail
echo "Copying Serenity reports to Docusaurus static folder..."

SERENITY_SOURCE="packages/sthrift/domain/target/site/serenity"
DOCS_STATIC_TARGET="apps/docs/static/serenity-reports"

# Check if Serenity reports exist
if [ ! -d "$SERENITY_SOURCE" ]; then
echo "Warning: Serenity reports not found at $SERENITY_SOURCE"
echo "Skipping report copy step"
exit 0
fi

# Create target directory and copy reports
mkdir -p "$DOCS_STATIC_TARGET"
cp -r "$SERENITY_SOURCE"/* "$DOCS_STATIC_TARGET/"

echo "✓ Serenity reports copied successfully"
echo " Source: $SERENITY_SOURCE"
echo " Target: $DOCS_STATIC_TARGET"
echo ""
echo "Copied files:"
ls -lah "$DOCS_STATIC_TARGET"
workingDirectory: '$(Build.SourcesDirectory)'

# Audit unused dependencies with knip (after packages are built)
- task: Bash@3
displayName: 'Audit unused dependencies with knip'
Expand Down
3 changes: 1 addition & 2 deletions knip.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,7 @@
"@graphql-tools/json-file-loader",
"@graphql-tools/load",
"rollup",
"tsx",
"vite"
],
"ignoreBinaries": ["func"]
"ignoreBinaries": ["func", "open"]
}
Loading
Loading