-
Notifications
You must be signed in to change notification settings - Fork 0
SerenityJS integration for Sharethrift #264
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
anya-m-patel
wants to merge
181
commits into
main
Choose a base branch
from
serenityjs-test-setup
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
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 881bc5f
SerenityJS code refactoring
anya-m-patel 4679776
SerenityJS feedback updates
anya-m-patel df0565f
centralized '1.0.0' inside create-listing.ability.ts
anya-m-patel be12d08
Resolve merge conflicts with SerenityJS PR
anya-m-patel 5fd948e
Fix Biome lint: convert step definitions to arrow functions
anya-m-patel 1519576
resolve pipeline errors
anya-m-patel de2b162
resolve pipeline errors
anya-m-patel 244f7f7
resolve pipeline errors
anya-m-patel 07cdc7f
fix lint errors in accpetance tests
anya-m-patel df18ab7
update async functions
anya-m-patel 82d6ee1
build error changes
anya-m-patel beb164f
added the canReserveItemListing property
anya-m-patel f498c2d
feat: add canReserveItemListing permission and install SerenityJS dep…
anya-m-patel 9089e8c
Repair pnpm lockfile after dependency conflict
anya-m-patel 6d0b6a4
merge conflict resolution
anya-m-patel ccdb69f
Regenerate lockfile to fix missing glob dependency
anya-m-patel 8e93f04
refactor: extract role permissions factory to reduce test duplication
anya-m-patel 33afabe
refactor: extract shared test user fixtures to reduce duplication in …
anya-m-patel ae7fab2
refactor: extract base AppealRequest class to eliminate duplication b…
anya-m-patel f8a2eef
pr feedback
anya-m-patel 04448ac
refactor: remove base appeal request class, follow user pattern per P…
anya-m-patel d7af137
Add AdminUser aggregate and related infrastructure
anya-m-patel 9a9fb3e
resolve merge conflicts pertaining to the deletion of personal-user-role
anya-m-patel dd2664a
remove generics from appeal-request classes and update admin permissions
anya-m-patel 9b54864
Restore generic type parameters to appeal-request aggregates
anya-m-patel 690caea
Fix UOW interfaces to be concrete types not generic
anya-m-patel b860b73
Extract duplicated appeal-request logic into shared helpers
anya-m-patel d903946
Add touch() method to update updatedAt in domain layer
anya-m-patel f8e50f3
removed base-appeal-request files
anya-m-patel c994ed2
removed vitest.disableWorkspaceWarning from global settings
anya-m-patel 6049765
removed helpers file, restore inline implementations
anya-m-patel a19d97f
Resolved merge conflict
anya-m-patel b0a2da1
remove touch() method from ItemListing aggregate
anya-m-patel 6ed172c
consolidate reservation request permissions to canEditReservationRequest
anya-m-patel 53ecabe
remove role-permissions.factory.ts - doesn't follow CellixJS patterns
anya-m-patel 81e56ab
remove factory export from domain index
anya-m-patel a3c93b5
fix reservation-request tests after permission consolidation
anya-m-patel 0e5d955
addressed code review feedback for permission model migration
anya-m-patel 35d3bd8
Resolved conflicts:
anya-m-patel 474d3ff
fix: upgrade jsonwebtoken to 9.0.3 to resolve jws vulnerability
anya-m-patel d3d43ec
upgrade twilio to 5.10.7 to resolve jws vulnerability in apps/api
anya-m-patel 753ac0a
fix: update reservation request visa tests to use canEditReservationR…
anya-m-patel 02cd174
fix: addressed code review comments - improve error handling and redu…
anya-m-patel 48998c1
exclude UI components from SonarCloud coverage analysis
anya-m-patel 3c59c00
exclude UI components from vitest coverage
anya-m-patel d75579a
filter UI components from merged lcov coverage report
anya-m-patel 0e7bb8b
improve lcov filter with better path matching and debug logging
anya-m-patel 0dad1ce
disable coverage generation for UI app with no unit tests
anya-m-patel da7823b
Turbo to bypass cache for coverage generation in PR builds
anya-m-patel cbe9472
disable coverage generation for all UI component packages with no uni…
anya-m-patel 5471535
add comprehensive tests for state setters and property setters to imp…
anya-m-patel f1583b8
Fix Serenity acceptance tests: handle isNew flag for permission scena…
anya-m-patel ad4377f
Remove updatedAt assertions from acceptance tests
anya-m-patel e774b1b
fix: use startsWith for error message assertions in Serenity tests
anya-m-patel 6af8f23
refactor: remove duplicate ActorNamed function
anya-m-patel be0139b
moved abilities folder into screenplay
anya-m-patel 89c1dc3
remove duplicate unused create-listing.steps.ts
anya-m-patel 833b49f
organized features by domain context
anya-m-patel e9a0bf3
remove unused contain import
anya-m-patel 4d950e1
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel 87ec7c8
Merge branch 'main' into serenityjs-test-setup
anya-m-patel 963f565
fix: re-add twilio 5.10.7 dependency to apps/api
anya-m-patel c35dcad
resolve TypeScript build errors
anya-m-patel 7bfde19
resolved remaining TypeScript build errors
anya-m-patel 113d0c8
corrected getNewInstance signature in ItemListingRepository
anya-m-patel 872cc8a
fixed 6 failing tests in domain package
anya-m-patel 850cf2c
restored vitest test scripts in @cellix/ui-core
anya-m-patel 65029f8
Remove filter-lcov script and include UI components in coverage
anya-m-patel 487dbd2
configure Serenity BDD test reporting with HTML dashboard generation
anya-m-patel 6513143
replaced invalid --workspace flags with turbo --filter and fix Biome …
anya-m-patel 26ab701
resolved merge conflicts :
anya-m-patel 0f31007
updated pnpm-lock.yaml for Serenity dependencies
anya-m-patel 53912e8
revert to bracket notation for process.env to satisfy TypeScript TS4111
anya-m-patel 98b20c3
remove unused dependencies and fix typo
anya-m-patel 25c3680
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel 8f7b1e9
Update packages/cellix/mock-oauth2-server/src/index.ts
anya-m-patel 4170c11
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel fc8009a
Revert vitest config change
anya-m-patel c9052a3
Revert biome.json change
anya-m-patel 76b2c67
reverted changes
anya-m-patel dc171ce
Revert UI test script changes
anya-m-patel 22a8271
removed the authenticate.ts file
anya-m-patel 87bf1f2
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel d35eabc
Update package.json
anya-m-patel da37675
replaced node:crypto with cross-platform uuid library
anya-m-patel 3abeb09
remove unused concurrently devDependency
anya-m-patel c622e98
Revert item-listing tests to match main
anya-m-patel 36249eb
upgrade storybook to 9.1.17 to fix security vulnerability
anya-m-patel c78f06a
fix TypeScript compilation errors in item-listing.ts after merge (cor…
anya-m-patel c74afac
add missing test scenarios and fix passport mock calls
anya-m-patel 1621536
Resolved conflicts in package.json files:
anya-m-patel cc8b1c5
update pnpm-lock.yaml
anya-m-patel 12355ab
removed GraphQL-dependent acceptance tests from domain package
anya-m-patel 5d58af8
implement CreateListingAbility using Hexagonal Architecture
anya-m-patel 028e52f
CreateListingAbility to use domain factory method
anya-m-patel 45c2439
add state transition methods to CreateListingAbility
anya-m-patel f17de8e
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel 6bb581b
removed state setter to enforce permission checks
anya-m-patel c4bd12b
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel 446ea87
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel 2244e8a
removed duplicate export in abilities index.ts
anya-m-patel bfa7294
use value objects in getNewInstance to enforce validation
anya-m-patel d8ac268
remove non-null assertion operator in CreateListingAbility
anya-m-patel ff24d2b
fix test scenarios to match feature file and remove obsolete state se…
anya-m-patel 772ae36
updated reservation request state from PENDING to Requested
anya-m-patel 98b3471
Update packages/sthrift/domain/cucumber.yaml
anya-m-patel 8e72a3e
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel 94e0249
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel e4f1af5
update Node version to v22 as per code review feedback
anya-m-patel edd060d
use repo.getNewInstance() instead of static class method in CreateLis…
anya-m-patel 4ceb214
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel f16a267
change reservation request initial state from Requested to PENDING
anya-m-patel 74f2038
refactored ItemListing.getNewInstance to follow Cellix pattern
anya-m-patel 09512a4
fixed cucumber.yaml for Node v22 compatibility
anya-m-patel ffcf07d
added working Serenity.js test infrastructure
anya-m-patel 2572a16
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel 31baa99
Potential fix for pull request finding 'Unused variable, import, func…
anya-m-patel 5d1a45f
updated Serenity reports to use target/site/serenity structure
anya-m-patel 45f78f8
added Serenity BDD report generation to build pipeline
anya-m-patel 51d97e3
removed async from step definitions without await
anya-m-patel 49edfa8
removed unused uuid dependency and tsx from knip ignoreDependencies t…
anya-m-patel 9f2c612
update pnpm-lock.yaml after removing uuid dependency
anya-m-patel fb4f597
Added turbo task for test:serenity:report and updated pipeline to use…
anya-m-patel 98eaac0
Reverted test scripts in ui-components to use vitest instead of echo …
anya-m-patel 5ef9ece
Merge main into serenityjs-test-setup
anya-m-patel bd415fc
Updated turbo.json Serenity task inputs and outputs
anya-m-patel 7dd6d15
fix: remove undefined scenario from personal-user reservation-request…
anya-m-patel 00ecf63
clean up Serenity files and fix build process
anya-m-patel 81f09f6
Update packages/sthrift/domain/package.json
anya-m-patel 50e5e27
Update build-pipeline/core/monorepo-build-stage.yml
anya-m-patel fb7883d
correct indentation in mock-oauth2-server token endpoint
anya-m-patel 05c4049
optimize test:serenity:report turbo cache configuration
anya-m-patel cb3a1fe
removed redundant checks
anya-m-patel 46458c9
updates comments to make sure the align with the updates paths
anya-m-patel 2abccf7
updated pnpm-lock.yaml to sync with package.json
anya-m-patel 2980cf1
apply pnpm audit security fixes
anya-m-patel 1ef6a32
prevented js-yaml 4.x upgrade breaking gray-matter
anya-m-patel 17c6252
Update packages/sthrift/domain/src/domain/contexts/appeal-request/lis…
anya-m-patel c1d9e94
move state setter comment to precede the method
anya-m-patel 2547d35
remove trailing whitespace on empty line
anya-m-patel ac4d43d
remove trailing whitespace on empty line
anya-m-patel ca0d52a
Update packages/cellix/mock-oauth2-server/src/index.ts
anya-m-patel 771769a
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel 25773f5
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel 48c1bca
Update packages/sthrift/domain/cucumber.yaml
anya-m-patel daf2579
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel 7623890
Update packages/sthrift/domain/src/domain/contexts/reservation-reques…
anya-m-patel fd7b8f2
remove duplicate closing brace and fix ValidationError
anya-m-patel b907a28
Merge branch 'main' into serenityjs-test-setup
anya-m-patel 02f4043
restore state validation in ensureCanRequestClose
anya-m-patel 7063332
update cucumber.yaml to reference TypeScript step definitions
anya-m-patel 7b2f368
Configure Cucumber acceptance testing with HTML reports
anya-m-patel bf33fdb
Merge main into serenityjs-test-setup
anya-m-patel 5eda6c0
Add 'open' to ignoreBinaries in knip.json
anya-m-patel 7206d9b
Fix misleading comments in cucumber.yaml
anya-m-patel 3a4a54a
Fix misleading biome-ignore comments
anya-m-patel ae362b9
Update packages/sthrift/domain/package.json
anya-m-patel 6e7713b
Update packages/sthrift/domain/src/domain/contexts/listing/item/item-…
anya-m-patel fafcf6d
Update .nvmrc
anya-m-patel 9e40a27
implement Serenity.js Screenplay Pattern for acceptance tests
anya-m-patel c15df82
chore: update pnpm-lock.yaml after removing ts-node dependency
anya-m-patel bf4f992
resolve Biome linting errors in Serenity tests
anya-m-patel f2db98f
Merge remote-tracking branch 'origin/main' into serenityjs-test-setup
anya-m-patel 70c0acf
fix: exclude Serenity.js acceptance test files from SonarCloud covera…
anya-m-patel b9f5a35
mark acceptance test files as test code in SonarCloud
anya-m-patel 48a631d
update test:serenity:open to open Cucumber report instead of Serenity…
anya-m-patel 11e3b00
fix: exclude acceptance tests from SonarCloud analysis
anya-m-patel 6005169
exclude infrastructure files from coverage analysis
anya-m-patel 796e227
fix: exclude visa and appeal-request entity files from coverage
anya-m-patel 18ac958
revert: remove exclusions that decreased coverage
anya-m-patel 5cf1e9a
test: add coverage for AdminUser sharer in item-listing
anya-m-patel 7af2e13
fix: ignore Serenity target directory from linting
anya-m-patel 6a168b2
add coverage for uncovered item-listing getters and methods
anya-m-patel fd1bd9c
integrate Serenity BDD reports with Docusaurus deployment
anya-m-patel c6a3162
upgrade react-router-dom to 7.12.0 to resolve security vulnerabilities
anya-m-patel c79a4ed
fix: upgrade react-router-dom in ui-components to 7.12.0
anya-m-patel 6f41501
fix docusaurus build issue
anya-m-patel 881be99
fix: remove accidentally tracked Serenity report HTML and update giti…
anya-m-patel 460a381
fix: convert Storybook main.ts configs from CommonJS to ESM
anya-m-patel 2a620e3
chore: upgrade Storybook from 9.1.17 to 10.1.11
anya-m-patel File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| # Ignore generated Serenity reports | ||
| **/target/** | ||
| **/dist/** | ||
| **/build/** | ||
| **/.turbo/** | ||
| **/node_modules/** |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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": [] | ||
| } | ||
| ] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.