@eui/mcp 1.0.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -743
- package/dist/config/__tests__/schema.property.test.d.ts +2 -0
- package/dist/config/__tests__/schema.property.test.d.ts.map +1 -0
- package/dist/config/__tests__/schema.property.test.js +203 -0
- package/dist/config/__tests__/schema.property.test.js.map +1 -0
- package/dist/config/__tests__/schema.test.d.ts +2 -0
- package/dist/config/__tests__/schema.test.d.ts.map +1 -0
- package/dist/config/__tests__/schema.test.js +454 -0
- package/dist/config/__tests__/schema.test.js.map +1 -0
- package/dist/config/loader.js +4 -4
- package/dist/config/loader.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/loader/__tests__/cache-manager.property.test.d.ts +2 -0
- package/dist/loader/__tests__/cache-manager.property.test.d.ts.map +1 -0
- package/dist/loader/__tests__/cache-manager.property.test.js +245 -0
- package/dist/loader/__tests__/cache-manager.property.test.js.map +1 -0
- package/dist/loader/__tests__/cache-manager.test.d.ts +2 -0
- package/dist/loader/__tests__/cache-manager.test.d.ts.map +1 -0
- package/dist/loader/__tests__/cache-manager.test.js +256 -0
- package/dist/loader/__tests__/cache-manager.test.js.map +1 -0
- package/dist/loader/__tests__/documentation-loader.integration.test.d.ts +2 -0
- package/dist/loader/__tests__/documentation-loader.integration.test.d.ts.map +1 -0
- package/dist/loader/__tests__/documentation-loader.integration.test.js +498 -0
- package/dist/loader/__tests__/documentation-loader.integration.test.js.map +1 -0
- package/dist/loader/__tests__/documentation-loader.property.test.d.ts +2 -0
- package/dist/loader/__tests__/documentation-loader.property.test.d.ts.map +1 -0
- package/dist/loader/__tests__/documentation-loader.property.test.js +258 -0
- package/dist/loader/__tests__/documentation-loader.property.test.js.map +1 -0
- package/dist/loader/__tests__/errors.test.d.ts +2 -0
- package/dist/loader/__tests__/errors.test.d.ts.map +1 -0
- package/dist/loader/__tests__/errors.test.js +132 -0
- package/dist/loader/__tests__/errors.test.js.map +1 -0
- package/dist/loader/__tests__/http-client.property.test.d.ts +2 -0
- package/dist/loader/__tests__/http-client.property.test.d.ts.map +1 -0
- package/dist/loader/__tests__/http-client.property.test.js +288 -0
- package/dist/loader/__tests__/http-client.property.test.js.map +1 -0
- package/dist/loader/__tests__/http-client.test.d.ts +2 -0
- package/dist/loader/__tests__/http-client.test.d.ts.map +1 -0
- package/dist/loader/__tests__/http-client.test.js +497 -0
- package/dist/loader/__tests__/http-client.test.js.map +1 -0
- package/dist/loader/__tests__/local-documentation-source.property.test.d.ts +2 -0
- package/dist/loader/__tests__/local-documentation-source.property.test.d.ts.map +1 -0
- package/dist/loader/__tests__/local-documentation-source.property.test.js +373 -0
- package/dist/loader/__tests__/local-documentation-source.property.test.js.map +1 -0
- package/dist/loader/__tests__/local-documentation-source.test.d.ts +2 -0
- package/dist/loader/__tests__/local-documentation-source.test.d.ts.map +1 -0
- package/dist/loader/__tests__/local-documentation-source.test.js +544 -0
- package/dist/loader/__tests__/local-documentation-source.test.js.map +1 -0
- package/dist/loader/__tests__/path-type-detector.property.test.d.ts +2 -0
- package/dist/loader/__tests__/path-type-detector.property.test.d.ts.map +1 -0
- package/dist/loader/__tests__/path-type-detector.property.test.js +245 -0
- package/dist/loader/__tests__/path-type-detector.property.test.js.map +1 -0
- package/dist/loader/__tests__/path-type-detector.test.d.ts +2 -0
- package/dist/loader/__tests__/path-type-detector.test.d.ts.map +1 -0
- package/dist/loader/__tests__/path-type-detector.test.js +390 -0
- package/dist/loader/__tests__/path-type-detector.test.js.map +1 -0
- package/dist/loader/__tests__/remote-documentation-source.property.test.d.ts +2 -0
- package/dist/loader/__tests__/remote-documentation-source.property.test.d.ts.map +1 -0
- package/dist/loader/__tests__/remote-documentation-source.property.test.js +462 -0
- package/dist/loader/__tests__/remote-documentation-source.property.test.js.map +1 -0
- package/dist/loader/__tests__/remote-documentation-source.test.d.ts +2 -0
- package/dist/loader/__tests__/remote-documentation-source.test.d.ts.map +1 -0
- package/dist/loader/__tests__/remote-documentation-source.test.js +707 -0
- package/dist/loader/__tests__/remote-documentation-source.test.js.map +1 -0
- package/dist/loader/remote-documentation-source.d.ts +0 -4
- package/dist/loader/remote-documentation-source.d.ts.map +1 -1
- package/dist/loader/remote-documentation-source.js +1 -4
- package/dist/loader/remote-documentation-source.js.map +1 -1
- package/dist/main.js +0 -0
- package/dist/main.js.map +1 -1
- package/dist/mcp/__tests__/server.property.test.d.ts +2 -0
- package/dist/mcp/__tests__/server.property.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/server.property.test.js +286 -0
- package/dist/mcp/__tests__/server.property.test.js.map +1 -0
- package/dist/mcp/__tests__/server.test.d.ts +2 -0
- package/dist/mcp/__tests__/server.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/server.test.js +101 -0
- package/dist/mcp/__tests__/server.test.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +16 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/publish/__tests__/publish-utils.test.d.ts +5 -0
- package/dist/publish/__tests__/publish-utils.test.d.ts.map +1 -0
- package/dist/publish/__tests__/publish-utils.test.js +189 -0
- package/dist/publish/__tests__/publish-utils.test.js.map +1 -0
- package/dist/query/__tests__/deprecation-parser.test.d.ts +2 -0
- package/dist/query/__tests__/deprecation-parser.test.d.ts.map +1 -0
- package/dist/query/__tests__/deprecation-parser.test.js +154 -0
- package/dist/query/__tests__/deprecation-parser.test.js.map +1 -0
- package/dist/query/__tests__/deprecation-query.test.d.ts +2 -0
- package/dist/query/__tests__/deprecation-query.test.d.ts.map +1 -0
- package/dist/query/__tests__/deprecation-query.test.js +199 -0
- package/dist/query/__tests__/deprecation-query.test.js.map +1 -0
- package/dist/query/__tests__/index-builder-debug.test.d.ts +2 -0
- package/dist/query/__tests__/index-builder-debug.test.d.ts.map +1 -0
- package/dist/query/__tests__/index-builder-debug.test.js +34 -0
- package/dist/query/__tests__/index-builder-debug.test.js.map +1 -0
- package/dist/query/__tests__/index-builder.property.test.d.ts +2 -0
- package/dist/query/__tests__/index-builder.property.test.d.ts.map +1 -0
- package/dist/query/__tests__/index-builder.property.test.js +422 -0
- package/dist/query/__tests__/index-builder.property.test.js.map +1 -0
- package/dist/query/__tests__/index-builder.test.d.ts +2 -0
- package/dist/query/__tests__/index-builder.test.d.ts.map +1 -0
- package/dist/query/__tests__/index-builder.test.js +55 -0
- package/dist/query/__tests__/index-builder.test.js.map +1 -0
- package/dist/query/__tests__/result-formatter-deprecation.test.d.ts +2 -0
- package/dist/query/__tests__/result-formatter-deprecation.test.d.ts.map +1 -0
- package/dist/query/__tests__/result-formatter-deprecation.test.js +159 -0
- package/dist/query/__tests__/result-formatter-deprecation.test.js.map +1 -0
- package/dist/query/__tests__/result-formatter.integration.test.d.ts +2 -0
- package/dist/query/__tests__/result-formatter.integration.test.d.ts.map +1 -0
- package/dist/query/__tests__/result-formatter.integration.test.js +140 -0
- package/dist/query/__tests__/result-formatter.integration.test.js.map +1 -0
- package/dist/query/__tests__/result-formatter.property.test.d.ts +2 -0
- package/dist/query/__tests__/result-formatter.property.test.d.ts.map +1 -0
- package/dist/query/__tests__/result-formatter.property.test.js +163 -0
- package/dist/query/__tests__/result-formatter.property.test.js.map +1 -0
- package/dist/query/__tests__/result-formatter.test.d.ts +2 -0
- package/dist/query/__tests__/result-formatter.test.d.ts.map +1 -0
- package/dist/query/__tests__/result-formatter.test.js +85 -0
- package/dist/query/__tests__/result-formatter.test.js.map +1 -0
- package/dist/query/__tests__/search-engine.property.test.d.ts +2 -0
- package/dist/query/__tests__/search-engine.property.test.d.ts.map +1 -0
- package/dist/query/__tests__/search-engine.property.test.js +389 -0
- package/dist/query/__tests__/search-engine.property.test.js.map +1 -0
- package/dist/query/deprecation-parser.d.ts +46 -0
- package/dist/query/deprecation-parser.d.ts.map +1 -0
- package/dist/query/deprecation-parser.js +81 -0
- package/dist/query/deprecation-parser.js.map +1 -0
- package/dist/query/deprecation-query.d.ts +19 -0
- package/dist/query/deprecation-query.d.ts.map +1 -0
- package/dist/query/deprecation-query.js +73 -0
- package/dist/query/deprecation-query.js.map +1 -0
- package/dist/query/result-formatter.d.ts +27 -0
- package/dist/query/result-formatter.d.ts.map +1 -1
- package/dist/query/result-formatter.js +64 -5
- package/dist/query/result-formatter.js.map +1 -1
- package/dist/tools/__tests__/deprecation-tools.test.d.ts +2 -0
- package/dist/tools/__tests__/deprecation-tools.test.d.ts.map +1 -0
- package/dist/tools/__tests__/deprecation-tools.test.js +178 -0
- package/dist/tools/__tests__/deprecation-tools.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-docs.property.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-docs.property.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-docs.property.test.js +594 -0
- package/dist/tools/__tests__/get-component-docs.property.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-docs.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-docs.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-docs.test.js +137 -0
- package/dist/tools/__tests__/get-component-docs.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-examples.property.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-examples.property.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-examples.property.test.js +245 -0
- package/dist/tools/__tests__/get-component-examples.property.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-examples.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-examples.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-examples.test.js +128 -0
- package/dist/tools/__tests__/get-component-examples.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-inputs.property.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-inputs.property.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-inputs.property.test.js +310 -0
- package/dist/tools/__tests__/get-component-inputs.property.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-inputs.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-inputs.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-inputs.test.js +245 -0
- package/dist/tools/__tests__/get-component-inputs.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-outputs.property.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-outputs.property.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-outputs.property.test.js +227 -0
- package/dist/tools/__tests__/get-component-outputs.property.test.js.map +1 -0
- package/dist/tools/__tests__/get-component-outputs.test.d.ts +2 -0
- package/dist/tools/__tests__/get-component-outputs.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-component-outputs.test.js +189 -0
- package/dist/tools/__tests__/get-component-outputs.test.js.map +1 -0
- package/dist/tools/__tests__/get-library-version.property.test.d.ts +2 -0
- package/dist/tools/__tests__/get-library-version.property.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-library-version.property.test.js +115 -0
- package/dist/tools/__tests__/get-library-version.property.test.js.map +1 -0
- package/dist/tools/__tests__/get-library-version.test.d.ts +2 -0
- package/dist/tools/__tests__/get-library-version.test.d.ts.map +1 -0
- package/dist/tools/__tests__/get-library-version.test.js +97 -0
- package/dist/tools/__tests__/get-library-version.test.js.map +1 -0
- package/dist/tools/__tests__/list-components.property.test.d.ts +2 -0
- package/dist/tools/__tests__/list-components.property.test.d.ts.map +1 -0
- package/dist/tools/__tests__/list-components.property.test.js +241 -0
- package/dist/tools/__tests__/list-components.property.test.js.map +1 -0
- package/dist/tools/__tests__/list-components.test.d.ts +2 -0
- package/dist/tools/__tests__/list-components.test.d.ts.map +1 -0
- package/dist/tools/__tests__/list-components.test.js +170 -0
- package/dist/tools/__tests__/list-components.test.js.map +1 -0
- package/dist/tools/__tests__/search-components.test.d.ts +2 -0
- package/dist/tools/__tests__/search-components.test.d.ts.map +1 -0
- package/dist/tools/__tests__/search-components.test.js +239 -0
- package/dist/tools/__tests__/search-components.test.js.map +1 -0
- package/dist/tools/get-deprecation-info.d.ts +42 -0
- package/dist/tools/get-deprecation-info.d.ts.map +1 -0
- package/dist/tools/get-deprecation-info.js +55 -0
- package/dist/tools/get-deprecation-info.js.map +1 -0
- package/dist/tools/get-library-version.d.ts +33 -0
- package/dist/tools/get-library-version.d.ts.map +1 -0
- package/dist/tools/get-library-version.js +62 -0
- package/dist/tools/get-library-version.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-deprecated.d.ts +47 -0
- package/dist/tools/list-deprecated.d.ts.map +1 -0
- package/dist/tools/list-deprecated.js +56 -0
- package/dist/tools/list-deprecated.js.map +1 -0
- package/dist/types/compodoc.d.ts +1 -0
- package/dist/types/compodoc.d.ts.map +1 -1
- package/dist/types/deprecation.d.ts +33 -0
- package/dist/types/deprecation.d.ts.map +1 -0
- package/dist/types/deprecation.js +5 -0
- package/dist/types/deprecation.js.map +1 -0
- package/dist/utils/__tests__/credential-masking.property.test.d.ts +2 -0
- package/dist/utils/__tests__/credential-masking.property.test.d.ts.map +1 -0
- package/dist/utils/__tests__/credential-masking.property.test.js +145 -0
- package/dist/utils/__tests__/credential-masking.property.test.js.map +1 -0
- package/dist/utils/__tests__/credential-masking.test.d.ts +2 -0
- package/dist/utils/__tests__/credential-masking.test.d.ts.map +1 -0
- package/dist/utils/__tests__/credential-masking.test.js +188 -0
- package/dist/utils/__tests__/credential-masking.test.js.map +1 -0
- package/dist/utils/__tests__/errors.test.d.ts +2 -0
- package/dist/utils/__tests__/errors.test.d.ts.map +1 -0
- package/dist/utils/__tests__/errors.test.js +110 -0
- package/dist/utils/__tests__/errors.test.js.map +1 -0
- package/dist/utils/__tests__/integration.test.d.ts +2 -0
- package/dist/utils/__tests__/integration.test.d.ts.map +1 -0
- package/dist/utils/__tests__/integration.test.js +142 -0
- package/dist/utils/__tests__/integration.test.js.map +1 -0
- package/dist/utils/__tests__/logger.test.d.ts +2 -0
- package/dist/utils/__tests__/logger.test.d.ts.map +1 -0
- package/dist/utils/__tests__/logger.test.js +119 -0
- package/dist/utils/__tests__/logger.test.js.map +1 -0
- package/dist/utils/__tests__/retry.test.d.ts +2 -0
- package/dist/utils/__tests__/retry.test.d.ts.map +1 -0
- package/dist/utils/__tests__/retry.test.js +84 -0
- package/dist/utils/__tests__/retry.test.js.map +1 -0
- package/dist/utils/credential-masking.js +4 -4
- package/dist/utils/credential-masking.js.map +1 -1
- package/dist/version/__tests__/changelog-commit-grouping.property.test.d.ts +2 -0
- package/dist/version/__tests__/changelog-commit-grouping.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/changelog-commit-grouping.property.test.js +297 -0
- package/dist/version/__tests__/changelog-commit-grouping.property.test.js.map +1 -0
- package/dist/version/__tests__/changelog-commit-parsing.property.test.d.ts +2 -0
- package/dist/version/__tests__/changelog-commit-parsing.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/changelog-commit-parsing.property.test.js +396 -0
- package/dist/version/__tests__/changelog-commit-parsing.property.test.js.map +1 -0
- package/dist/version/__tests__/changelog-file-updates.property.test.d.ts +11 -0
- package/dist/version/__tests__/changelog-file-updates.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/changelog-file-updates.property.test.js +452 -0
- package/dist/version/__tests__/changelog-file-updates.property.test.js.map +1 -0
- package/dist/version/__tests__/dry-run-action.property.test.d.ts +8 -0
- package/dist/version/__tests__/dry-run-action.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/dry-run-action.property.test.js +50 -0
- package/dist/version/__tests__/dry-run-action.property.test.js.map +1 -0
- package/dist/version/__tests__/dry-run-changelog.property.test.d.ts +8 -0
- package/dist/version/__tests__/dry-run-changelog.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/dry-run-changelog.property.test.js +53 -0
- package/dist/version/__tests__/dry-run-changelog.property.test.js.map +1 -0
- package/dist/version/__tests__/dry-run-utils.test.d.ts +7 -0
- package/dist/version/__tests__/dry-run-utils.test.d.ts.map +1 -0
- package/dist/version/__tests__/dry-run-utils.test.js +205 -0
- package/dist/version/__tests__/dry-run-utils.test.js.map +1 -0
- package/dist/version/__tests__/dry-run-version.property.test.d.ts +8 -0
- package/dist/version/__tests__/dry-run-version.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/dry-run-version.property.test.js +59 -0
- package/dist/version/__tests__/dry-run-version.property.test.js.map +1 -0
- package/dist/version/__tests__/git-tag-annotation.property.test.d.ts +11 -0
- package/dist/version/__tests__/git-tag-annotation.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/git-tag-annotation.property.test.js +271 -0
- package/dist/version/__tests__/git-tag-annotation.property.test.js.map +1 -0
- package/dist/version/__tests__/git-tag-format.property.test.d.ts +11 -0
- package/dist/version/__tests__/git-tag-format.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/git-tag-format.property.test.js +411 -0
- package/dist/version/__tests__/git-tag-format.property.test.js.map +1 -0
- package/dist/version/__tests__/git-tag-utils.test.d.ts +2 -0
- package/dist/version/__tests__/git-tag-utils.test.d.ts.map +1 -0
- package/dist/version/__tests__/git-tag-utils.test.js +142 -0
- package/dist/version/__tests__/git-tag-utils.test.js.map +1 -0
- package/dist/version/__tests__/npm-tag-selection.property.test.d.ts +2 -0
- package/dist/version/__tests__/npm-tag-selection.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/npm-tag-selection.property.test.js +79 -0
- package/dist/version/__tests__/npm-tag-selection.property.test.js.map +1 -0
- package/dist/version/__tests__/release-title-format.property.test.d.ts +11 -0
- package/dist/version/__tests__/release-title-format.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/release-title-format.property.test.js +422 -0
- package/dist/version/__tests__/release-title-format.property.test.js.map +1 -0
- package/dist/version/__tests__/release-utils.test.d.ts +7 -0
- package/dist/version/__tests__/release-utils.test.d.ts.map +1 -0
- package/dist/version/__tests__/release-utils.test.js +176 -0
- package/dist/version/__tests__/release-utils.test.js.map +1 -0
- package/dist/version/__tests__/rollback-changelog.property.test.d.ts +8 -0
- package/dist/version/__tests__/rollback-changelog.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/rollback-changelog.property.test.js +61 -0
- package/dist/version/__tests__/rollback-changelog.property.test.js.map +1 -0
- package/dist/version/__tests__/rollback-utils.test.d.ts +7 -0
- package/dist/version/__tests__/rollback-utils.test.d.ts.map +1 -0
- package/dist/version/__tests__/rollback-utils.test.js +74 -0
- package/dist/version/__tests__/rollback-utils.test.js.map +1 -0
- package/dist/version/__tests__/version-manager.property.test.d.ts +2 -0
- package/dist/version/__tests__/version-manager.property.test.d.ts.map +1 -0
- package/dist/version/__tests__/version-manager.property.test.js +143 -0
- package/dist/version/__tests__/version-manager.property.test.js.map +1 -0
- package/dist/version/__tests__/version-manager.test.d.ts +2 -0
- package/dist/version/__tests__/version-manager.test.d.ts.map +1 -0
- package/dist/version/__tests__/version-manager.test.js +203 -0
- package/dist/version/__tests__/version-manager.test.js.map +1 -0
- package/dist/version/version-manager.d.ts.map +1 -1
- package/dist/version/version-manager.js +0 -4
- package/dist/version/version-manager.js.map +1 -1
- package/package.json +1 -1
- package/dist/test-error.ts +0 -1
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property-based tests for changelog file updates
|
|
3
|
+
*
|
|
4
|
+
* **Property 10: Changelog File Update Idempotence**
|
|
5
|
+
* **Validates: Requirements 7.4, 7.5**
|
|
6
|
+
*
|
|
7
|
+
* For any existing CHANGELOG.md file, adding a new version section should preserve
|
|
8
|
+
* all existing version sections and place the new section at the top.
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, expect } from '@jest/globals';
|
|
11
|
+
import fc from 'fast-check';
|
|
12
|
+
import { addChangelogEntry, parseChangelog, extractVersions, hasVersion, createChangelog, } from '../changelog-file-utils.js';
|
|
13
|
+
// Arbitrary generators for property-based testing
|
|
14
|
+
/**
|
|
15
|
+
* Generates a valid semantic version
|
|
16
|
+
*/
|
|
17
|
+
const versionArb = fc.record({
|
|
18
|
+
major: fc.nat(100),
|
|
19
|
+
minor: fc.nat(100),
|
|
20
|
+
patch: fc.nat(100),
|
|
21
|
+
}).map(v => `${v.major}.${v.minor}.${v.patch}`);
|
|
22
|
+
/**
|
|
23
|
+
* Generates a valid date string in YYYY-MM-DD format
|
|
24
|
+
*/
|
|
25
|
+
const dateArb = fc.date({
|
|
26
|
+
min: new Date('2020-01-01'),
|
|
27
|
+
max: new Date('2030-12-31'),
|
|
28
|
+
}).map(d => d.toISOString().split('T')[0]);
|
|
29
|
+
/**
|
|
30
|
+
* Generates an array of change descriptions
|
|
31
|
+
*/
|
|
32
|
+
const changesArb = fc.array(fc.string({ minLength: 5, maxLength: 100 }).filter(s => s.trim().length > 0), { minLength: 0, maxLength: 10 });
|
|
33
|
+
/**
|
|
34
|
+
* Generates a changelog entry
|
|
35
|
+
*/
|
|
36
|
+
const changelogEntryArb = fc.record({
|
|
37
|
+
version: versionArb,
|
|
38
|
+
date: dateArb,
|
|
39
|
+
features: fc.option(changesArb, { nil: undefined }),
|
|
40
|
+
fixes: fc.option(changesArb, { nil: undefined }),
|
|
41
|
+
breaking: fc.option(changesArb, { nil: undefined }),
|
|
42
|
+
other: fc.option(changesArb, { nil: undefined }),
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Generates an array of unique changelog entries (no duplicate versions)
|
|
46
|
+
*/
|
|
47
|
+
const uniqueEntriesArb = fc.array(changelogEntryArb, { minLength: 1, maxLength: 10 })
|
|
48
|
+
.chain(entries => {
|
|
49
|
+
// Ensure all versions are unique
|
|
50
|
+
const uniqueVersions = new Set();
|
|
51
|
+
const uniqueEntries = [];
|
|
52
|
+
for (const entry of entries) {
|
|
53
|
+
if (!uniqueVersions.has(entry.version)) {
|
|
54
|
+
uniqueVersions.add(entry.version);
|
|
55
|
+
uniqueEntries.push(entry);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return fc.constant(uniqueEntries);
|
|
59
|
+
})
|
|
60
|
+
.filter(entries => entries.length > 0);
|
|
61
|
+
describe('Feature: pipeline-release-support, Property 10: Changelog File Update Idempotence', () => {
|
|
62
|
+
describe('Version Preservation', () => {
|
|
63
|
+
/**
|
|
64
|
+
* For any existing changelog and new entry, all existing versions should be preserved
|
|
65
|
+
*/
|
|
66
|
+
it('should preserve all existing version sections when adding a new entry', () => {
|
|
67
|
+
fc.assert(fc.property(uniqueEntriesArb, changelogEntryArb, (existingEntries, newEntry) => {
|
|
68
|
+
// Ensure new entry has a unique version
|
|
69
|
+
const existingVersions = existingEntries.map(e => e.version);
|
|
70
|
+
if (existingVersions.includes(newEntry.version)) {
|
|
71
|
+
// Make version unique by appending to major version
|
|
72
|
+
const maxMajor = Math.max(...existingVersions.map(v => parseInt(v.split('.')[0])));
|
|
73
|
+
newEntry = { ...newEntry, version: `${maxMajor + 1}.0.0` };
|
|
74
|
+
}
|
|
75
|
+
// Create changelog with existing entries
|
|
76
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
77
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
78
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
79
|
+
}
|
|
80
|
+
// Get versions before adding new entry
|
|
81
|
+
const versionsBefore = extractVersions(changelog);
|
|
82
|
+
// Add new entry
|
|
83
|
+
const updatedChangelog = addChangelogEntry(changelog, newEntry);
|
|
84
|
+
// Get versions after adding new entry
|
|
85
|
+
const versionsAfter = extractVersions(updatedChangelog);
|
|
86
|
+
// Property: All existing versions should still be present
|
|
87
|
+
for (const version of versionsBefore) {
|
|
88
|
+
expect(versionsAfter).toContain(version);
|
|
89
|
+
}
|
|
90
|
+
// Property: New version should be added
|
|
91
|
+
expect(versionsAfter).toContain(newEntry.version);
|
|
92
|
+
// Property: Total count should be original + 1
|
|
93
|
+
expect(versionsAfter.length).toBe(versionsBefore.length + 1);
|
|
94
|
+
return true;
|
|
95
|
+
}), { numRuns: 100 });
|
|
96
|
+
});
|
|
97
|
+
/**
|
|
98
|
+
* For any changelog, all section content should be preserved
|
|
99
|
+
*/
|
|
100
|
+
it('should preserve all section content when adding a new entry', () => {
|
|
101
|
+
fc.assert(fc.property(uniqueEntriesArb, changelogEntryArb, (existingEntries, newEntry) => {
|
|
102
|
+
// Ensure new entry has a unique version
|
|
103
|
+
const existingVersions = existingEntries.map(e => e.version);
|
|
104
|
+
if (existingVersions.includes(newEntry.version)) {
|
|
105
|
+
const maxMajor = Math.max(...existingVersions.map(v => parseInt(v.split('.')[0])));
|
|
106
|
+
newEntry = { ...newEntry, version: `${maxMajor + 1}.0.0` };
|
|
107
|
+
}
|
|
108
|
+
// Create changelog with existing entries
|
|
109
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
110
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
111
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
112
|
+
}
|
|
113
|
+
// Parse sections before
|
|
114
|
+
const sectionsBefore = parseChangelog(changelog);
|
|
115
|
+
// Add new entry
|
|
116
|
+
const updatedChangelog = addChangelogEntry(changelog, newEntry);
|
|
117
|
+
// Parse sections after
|
|
118
|
+
const sectionsAfter = parseChangelog(updatedChangelog);
|
|
119
|
+
// Property: All existing sections should still be present
|
|
120
|
+
for (const sectionBefore of sectionsBefore) {
|
|
121
|
+
const matchingSection = sectionsAfter.find(s => s.version === sectionBefore.version);
|
|
122
|
+
expect(matchingSection).toBeDefined();
|
|
123
|
+
expect(matchingSection?.content).toBe(sectionBefore.content);
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
}), { numRuns: 100 });
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('Top Placement', () => {
|
|
130
|
+
/**
|
|
131
|
+
* For any changelog and new entry, the new entry should be placed at the top
|
|
132
|
+
*/
|
|
133
|
+
it('should place new version section at the top of the changelog', () => {
|
|
134
|
+
fc.assert(fc.property(uniqueEntriesArb, changelogEntryArb, (existingEntries, newEntry) => {
|
|
135
|
+
// Ensure new entry has a unique version
|
|
136
|
+
const existingVersions = existingEntries.map(e => e.version);
|
|
137
|
+
if (existingVersions.includes(newEntry.version)) {
|
|
138
|
+
const maxMajor = Math.max(...existingVersions.map(v => parseInt(v.split('.')[0])));
|
|
139
|
+
newEntry = { ...newEntry, version: `${maxMajor + 1}.0.0` };
|
|
140
|
+
}
|
|
141
|
+
// Create changelog with existing entries
|
|
142
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
143
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
144
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
145
|
+
}
|
|
146
|
+
// Add new entry
|
|
147
|
+
const updatedChangelog = addChangelogEntry(changelog, newEntry);
|
|
148
|
+
// Get versions after adding
|
|
149
|
+
const versionsAfter = extractVersions(updatedChangelog);
|
|
150
|
+
// Property: New version should be first in the list
|
|
151
|
+
expect(versionsAfter[0]).toBe(newEntry.version);
|
|
152
|
+
return true;
|
|
153
|
+
}), { numRuns: 100 });
|
|
154
|
+
});
|
|
155
|
+
/**
|
|
156
|
+
* For any changelog, the new entry should appear before all existing entries
|
|
157
|
+
*/
|
|
158
|
+
it('should place new entry before all existing entries in the file', () => {
|
|
159
|
+
fc.assert(fc.property(uniqueEntriesArb, changelogEntryArb, (existingEntries, newEntry) => {
|
|
160
|
+
// Ensure new entry has a unique version
|
|
161
|
+
const existingVersions = existingEntries.map(e => e.version);
|
|
162
|
+
if (existingVersions.includes(newEntry.version)) {
|
|
163
|
+
const maxMajor = Math.max(...existingVersions.map(v => parseInt(v.split('.')[0])));
|
|
164
|
+
newEntry = { ...newEntry, version: `${maxMajor + 1}.0.0` };
|
|
165
|
+
}
|
|
166
|
+
// Create changelog with existing entries
|
|
167
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
168
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
169
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
170
|
+
}
|
|
171
|
+
// Add new entry
|
|
172
|
+
const updatedChangelog = addChangelogEntry(changelog, newEntry);
|
|
173
|
+
// Find position of new version header in the file
|
|
174
|
+
const newVersionHeaderRegex = new RegExp(`## \\[${newEntry.version.replace(/\./g, '\\.')}\\]`);
|
|
175
|
+
const newVersionMatch = updatedChangelog.match(newVersionHeaderRegex);
|
|
176
|
+
expect(newVersionMatch).not.toBeNull();
|
|
177
|
+
const newVersionIndex = newVersionMatch ? updatedChangelog.indexOf(newVersionMatch[0]) : -1;
|
|
178
|
+
// Find positions of all existing version headers
|
|
179
|
+
for (const existingEntry of existingEntries) {
|
|
180
|
+
const existingVersionRegex = new RegExp(`## \\[${existingEntry.version.replace(/\./g, '\\.')}\\]`);
|
|
181
|
+
const existingVersionMatch = updatedChangelog.match(existingVersionRegex);
|
|
182
|
+
if (existingVersionMatch) {
|
|
183
|
+
const existingVersionIndex = updatedChangelog.indexOf(existingVersionMatch[0]);
|
|
184
|
+
// Property: New version should appear before existing versions
|
|
185
|
+
expect(newVersionIndex).toBeLessThan(existingVersionIndex);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return true;
|
|
189
|
+
}), { numRuns: 100 });
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe('Idempotence', () => {
|
|
193
|
+
/**
|
|
194
|
+
* For any changelog and entry, adding the same entry twice should not duplicate it
|
|
195
|
+
*/
|
|
196
|
+
it('should not duplicate entries when adding the same version twice', () => {
|
|
197
|
+
fc.assert(fc.property(uniqueEntriesArb, changelogEntryArb, (existingEntries, newEntry) => {
|
|
198
|
+
// Ensure new entry has a unique version
|
|
199
|
+
const existingVersions = existingEntries.map(e => e.version);
|
|
200
|
+
if (existingVersions.includes(newEntry.version)) {
|
|
201
|
+
const maxMajor = Math.max(...existingVersions.map(v => parseInt(v.split('.')[0])));
|
|
202
|
+
newEntry = { ...newEntry, version: `${maxMajor + 1}.0.0` };
|
|
203
|
+
}
|
|
204
|
+
// Create changelog with existing entries
|
|
205
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
206
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
207
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
208
|
+
}
|
|
209
|
+
// Add new entry once
|
|
210
|
+
const changelog1 = addChangelogEntry(changelog, newEntry);
|
|
211
|
+
// Add same entry again
|
|
212
|
+
const changelog2 = addChangelogEntry(changelog1, newEntry);
|
|
213
|
+
// Property: Second addition should not change the changelog
|
|
214
|
+
expect(changelog2).toBe(changelog1);
|
|
215
|
+
// Property: Version should appear exactly once
|
|
216
|
+
const versions = extractVersions(changelog2);
|
|
217
|
+
const occurrences = versions.filter(v => v === newEntry.version).length;
|
|
218
|
+
expect(occurrences).toBe(1);
|
|
219
|
+
return true;
|
|
220
|
+
}), { numRuns: 100 });
|
|
221
|
+
});
|
|
222
|
+
/**
|
|
223
|
+
* For any changelog and entry, adding the same entry multiple times is idempotent
|
|
224
|
+
*/
|
|
225
|
+
it('should be idempotent when adding the same entry multiple times', () => {
|
|
226
|
+
fc.assert(fc.property(uniqueEntriesArb, changelogEntryArb, fc.integer({ min: 2, max: 5 }), (existingEntries, newEntry, repetitions) => {
|
|
227
|
+
// Ensure new entry has a unique version
|
|
228
|
+
const existingVersions = existingEntries.map(e => e.version);
|
|
229
|
+
if (existingVersions.includes(newEntry.version)) {
|
|
230
|
+
const maxMajor = Math.max(...existingVersions.map(v => parseInt(v.split('.')[0])));
|
|
231
|
+
newEntry = { ...newEntry, version: `${maxMajor + 1}.0.0` };
|
|
232
|
+
}
|
|
233
|
+
// Create changelog with existing entries
|
|
234
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
235
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
236
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
237
|
+
}
|
|
238
|
+
// Add new entry once
|
|
239
|
+
const changelogAfterFirst = addChangelogEntry(changelog, newEntry);
|
|
240
|
+
// Add same entry multiple times
|
|
241
|
+
let changelogAfterMultiple = changelogAfterFirst;
|
|
242
|
+
for (let i = 0; i < repetitions; i++) {
|
|
243
|
+
changelogAfterMultiple = addChangelogEntry(changelogAfterMultiple, newEntry);
|
|
244
|
+
}
|
|
245
|
+
// Property: Multiple additions should produce same result as single addition
|
|
246
|
+
expect(changelogAfterMultiple).toBe(changelogAfterFirst);
|
|
247
|
+
return true;
|
|
248
|
+
}), { numRuns: 100 });
|
|
249
|
+
});
|
|
250
|
+
/**
|
|
251
|
+
* For any existing version in changelog, attempting to add it again returns unchanged
|
|
252
|
+
*/
|
|
253
|
+
it('should return unchanged changelog when adding an existing version', () => {
|
|
254
|
+
fc.assert(fc.property(uniqueEntriesArb, fc.integer({ min: 0, max: 9 }), (existingEntries, indexToReAdd) => {
|
|
255
|
+
// Create changelog with existing entries
|
|
256
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
257
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
258
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
259
|
+
}
|
|
260
|
+
// Try to add an existing entry again
|
|
261
|
+
const entryToReAdd = existingEntries[indexToReAdd % existingEntries.length];
|
|
262
|
+
const updatedChangelog = addChangelogEntry(changelog, entryToReAdd);
|
|
263
|
+
// Property: Changelog should remain unchanged
|
|
264
|
+
expect(updatedChangelog).toBe(changelog);
|
|
265
|
+
return true;
|
|
266
|
+
}), { numRuns: 100 });
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
describe('Order Preservation', () => {
|
|
270
|
+
/**
|
|
271
|
+
* For any changelog, the relative order of existing entries should be preserved
|
|
272
|
+
*/
|
|
273
|
+
it('should preserve the relative order of existing entries', () => {
|
|
274
|
+
fc.assert(fc.property(uniqueEntriesArb, changelogEntryArb, (existingEntries, newEntry) => {
|
|
275
|
+
// Ensure new entry has a unique version
|
|
276
|
+
const existingVersions = existingEntries.map(e => e.version);
|
|
277
|
+
if (existingVersions.includes(newEntry.version)) {
|
|
278
|
+
const maxMajor = Math.max(...existingVersions.map(v => parseInt(v.split('.')[0])));
|
|
279
|
+
newEntry = { ...newEntry, version: `${maxMajor + 1}.0.0` };
|
|
280
|
+
}
|
|
281
|
+
// Create changelog with existing entries
|
|
282
|
+
let changelog = createChangelog(existingEntries[0]);
|
|
283
|
+
for (let i = 1; i < existingEntries.length; i++) {
|
|
284
|
+
changelog = addChangelogEntry(changelog, existingEntries[i]);
|
|
285
|
+
}
|
|
286
|
+
// Get order before
|
|
287
|
+
const versionsBefore = extractVersions(changelog);
|
|
288
|
+
// Add new entry
|
|
289
|
+
const updatedChangelog = addChangelogEntry(changelog, newEntry);
|
|
290
|
+
// Get order after
|
|
291
|
+
const versionsAfter = extractVersions(updatedChangelog);
|
|
292
|
+
// Property: Relative order of existing versions should be preserved
|
|
293
|
+
// (they should appear in the same order, just shifted by 1 position)
|
|
294
|
+
for (let i = 0; i < versionsBefore.length; i++) {
|
|
295
|
+
expect(versionsAfter[i + 1]).toBe(versionsBefore[i]);
|
|
296
|
+
}
|
|
297
|
+
return true;
|
|
298
|
+
}), { numRuns: 100 });
|
|
299
|
+
});
|
|
300
|
+
/**
|
|
301
|
+
* For any sequence of additions, the order should reflect the addition sequence
|
|
302
|
+
*/
|
|
303
|
+
it('should maintain order reflecting the sequence of additions', () => {
|
|
304
|
+
fc.assert(fc.property(uniqueEntriesArb, (entries) => {
|
|
305
|
+
// Add entries one by one
|
|
306
|
+
let changelog = createChangelog(entries[0]);
|
|
307
|
+
for (let i = 1; i < entries.length; i++) {
|
|
308
|
+
changelog = addChangelogEntry(changelog, entries[i]);
|
|
309
|
+
}
|
|
310
|
+
// Get final order
|
|
311
|
+
const finalVersions = extractVersions(changelog);
|
|
312
|
+
// Property: Versions should be in reverse order of addition
|
|
313
|
+
// (most recently added first)
|
|
314
|
+
for (let i = 0; i < entries.length; i++) {
|
|
315
|
+
const expectedVersion = entries[entries.length - 1 - i].version;
|
|
316
|
+
expect(finalVersions[i]).toBe(expectedVersion);
|
|
317
|
+
}
|
|
318
|
+
return true;
|
|
319
|
+
}), { numRuns: 100 });
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
describe('Edge Cases', () => {
|
|
323
|
+
/**
|
|
324
|
+
* For any entry, adding to an empty changelog should work correctly
|
|
325
|
+
*/
|
|
326
|
+
it('should handle adding to a changelog with only a title', () => {
|
|
327
|
+
fc.assert(fc.property(changelogEntryArb, (entry) => {
|
|
328
|
+
const emptyChangelog = '# Changelog\n\n';
|
|
329
|
+
const updatedChangelog = addChangelogEntry(emptyChangelog, entry);
|
|
330
|
+
// Property: Should contain the new version
|
|
331
|
+
expect(hasVersion(updatedChangelog, entry.version)).toBe(true);
|
|
332
|
+
// Property: Should have exactly one version
|
|
333
|
+
const versions = extractVersions(updatedChangelog);
|
|
334
|
+
expect(versions.length).toBe(1);
|
|
335
|
+
expect(versions[0]).toBe(entry.version);
|
|
336
|
+
return true;
|
|
337
|
+
}), { numRuns: 100 });
|
|
338
|
+
});
|
|
339
|
+
/**
|
|
340
|
+
* For any entry with empty change arrays, formatting should still work
|
|
341
|
+
*/
|
|
342
|
+
it('should handle entries with no changes', () => {
|
|
343
|
+
fc.assert(fc.property(versionArb, dateArb, (version, date) => {
|
|
344
|
+
const emptyEntry = {
|
|
345
|
+
version,
|
|
346
|
+
date,
|
|
347
|
+
features: undefined,
|
|
348
|
+
fixes: undefined,
|
|
349
|
+
breaking: undefined,
|
|
350
|
+
other: undefined,
|
|
351
|
+
};
|
|
352
|
+
const changelog = createChangelog(emptyEntry);
|
|
353
|
+
// Property: Should create valid changelog
|
|
354
|
+
expect(changelog).toContain('# Changelog');
|
|
355
|
+
expect(changelog).toContain(`## [${version}]`);
|
|
356
|
+
expect(changelog).toContain(date);
|
|
357
|
+
return true;
|
|
358
|
+
}), { numRuns: 100 });
|
|
359
|
+
});
|
|
360
|
+
/**
|
|
361
|
+
* For any changelog, adding entries with same version but different content is idempotent
|
|
362
|
+
*/
|
|
363
|
+
it('should ignore content differences when version already exists', () => {
|
|
364
|
+
fc.assert(fc.property(changelogEntryArb, changelogEntryArb, (entry1, entry2) => {
|
|
365
|
+
// Make entry2 have same version as entry1 but different content
|
|
366
|
+
const entry2Modified = {
|
|
367
|
+
...entry2,
|
|
368
|
+
version: entry1.version,
|
|
369
|
+
};
|
|
370
|
+
// Create changelog with first entry
|
|
371
|
+
const changelog = createChangelog(entry1);
|
|
372
|
+
// Try to add second entry with same version
|
|
373
|
+
const updatedChangelog = addChangelogEntry(changelog, entry2Modified);
|
|
374
|
+
// Property: Changelog should remain unchanged
|
|
375
|
+
expect(updatedChangelog).toBe(changelog);
|
|
376
|
+
// Property: Should still have only one version
|
|
377
|
+
const versions = extractVersions(updatedChangelog);
|
|
378
|
+
expect(versions.length).toBe(1);
|
|
379
|
+
return true;
|
|
380
|
+
}), { numRuns: 100 });
|
|
381
|
+
});
|
|
382
|
+
/**
|
|
383
|
+
* For any large number of entries, the operation should remain efficient
|
|
384
|
+
*/
|
|
385
|
+
it('should handle large changelogs efficiently', () => {
|
|
386
|
+
fc.assert(fc.property(fc.array(changelogEntryArb, { minLength: 20, maxLength: 50 })
|
|
387
|
+
.chain(entries => {
|
|
388
|
+
// Ensure all versions are unique
|
|
389
|
+
const uniqueVersions = new Set();
|
|
390
|
+
const uniqueEntries = [];
|
|
391
|
+
for (const entry of entries) {
|
|
392
|
+
if (!uniqueVersions.has(entry.version)) {
|
|
393
|
+
uniqueVersions.add(entry.version);
|
|
394
|
+
uniqueEntries.push(entry);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return fc.constant(uniqueEntries);
|
|
398
|
+
})
|
|
399
|
+
.filter(entries => entries.length >= 20), (entries) => {
|
|
400
|
+
// Create changelog with many entries
|
|
401
|
+
let changelog = createChangelog(entries[0]);
|
|
402
|
+
for (let i = 1; i < entries.length; i++) {
|
|
403
|
+
changelog = addChangelogEntry(changelog, entries[i]);
|
|
404
|
+
}
|
|
405
|
+
// Property: All versions should be present
|
|
406
|
+
const versions = extractVersions(changelog);
|
|
407
|
+
expect(versions.length).toBe(entries.length);
|
|
408
|
+
// Property: All entries should be accounted for
|
|
409
|
+
for (const entry of entries) {
|
|
410
|
+
expect(versions).toContain(entry.version);
|
|
411
|
+
}
|
|
412
|
+
return true;
|
|
413
|
+
}), { numRuns: 20 } // Fewer runs for performance
|
|
414
|
+
);
|
|
415
|
+
});
|
|
416
|
+
});
|
|
417
|
+
describe('Content Integrity', () => {
|
|
418
|
+
/**
|
|
419
|
+
* For any entry with special characters, content should be preserved
|
|
420
|
+
*/
|
|
421
|
+
it('should preserve special characters in change descriptions', () => {
|
|
422
|
+
fc.assert(fc.property(versionArb, dateArb, fc.array(fc.constantFrom('Add support for @mentions', 'Fix issue #123', 'Update version to 1.2.3', 'Remove deprecated API (breaking)', 'Add feature: new component', 'Fix: nested colons work', 'Update [config] settings', 'Add {new} syntax support', 'Handle "quoted" strings', "Handle 'single quotes'", 'Handle <html> tags', 'Handle & ampersands', 'Handle * asterisks *', 'Handle _underscores_'), { minLength: 1, maxLength: 5 }), (version, date, features) => {
|
|
423
|
+
const entry = {
|
|
424
|
+
version,
|
|
425
|
+
date,
|
|
426
|
+
features,
|
|
427
|
+
};
|
|
428
|
+
const changelog = createChangelog(entry);
|
|
429
|
+
// Property: All special characters should be preserved
|
|
430
|
+
for (const feature of features) {
|
|
431
|
+
expect(changelog).toContain(feature);
|
|
432
|
+
}
|
|
433
|
+
return true;
|
|
434
|
+
}), { numRuns: 100 });
|
|
435
|
+
});
|
|
436
|
+
/**
|
|
437
|
+
* For any entry, the date format should be preserved
|
|
438
|
+
*/
|
|
439
|
+
it('should preserve date format in changelog entries', () => {
|
|
440
|
+
fc.assert(fc.property(changelogEntryArb, (entry) => {
|
|
441
|
+
const changelog = createChangelog(entry);
|
|
442
|
+
// Property: Date should appear in the changelog
|
|
443
|
+
expect(changelog).toContain(entry.date);
|
|
444
|
+
// Property: Date should be in the header line
|
|
445
|
+
const headerRegex = new RegExp(`## \\[${entry.version.replace(/\./g, '\\.')}\\] - ${entry.date}`);
|
|
446
|
+
expect(changelog).toMatch(headerRegex);
|
|
447
|
+
return true;
|
|
448
|
+
}), { numRuns: 100 });
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
});
|
|
452
|
+
//# sourceMappingURL=changelog-file-updates.property.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog-file-updates.property.test.js","sourceRoot":"","sources":["../../../src/version/__tests__/changelog-file-updates.property.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run-action.property.test.d.ts","sourceRoot":"","sources":["../../../src/version/__tests__/dry-run-action.property.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property Tests for Dry Run Action Reporting
|
|
3
|
+
*
|
|
4
|
+
* Property 17: Dry Run Action Reporting
|
|
5
|
+
* Validates: Requirements 15.5
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect } from '@jest/globals';
|
|
8
|
+
import fc from 'fast-check';
|
|
9
|
+
import { createDryRunSummary } from '../dry-run-utils.js';
|
|
10
|
+
describe('Feature: pipeline-release-support, Property 17: Dry Run Action Reporting', () => {
|
|
11
|
+
const actionArb = fc.record({
|
|
12
|
+
type: fc.constantFrom('version', 'changelog', 'git', 'npm', 'release'),
|
|
13
|
+
description: fc.stringOf(fc.char(), { minLength: 5, maxLength: 50 }),
|
|
14
|
+
details: fc.option(fc.dictionary(fc.stringOf(fc.char(), { minLength: 1, maxLength: 10 }), fc.oneof(fc.string(), fc.integer(), fc.boolean())), { nil: undefined }),
|
|
15
|
+
});
|
|
16
|
+
it('should create summary with all actions preserved', () => {
|
|
17
|
+
fc.assert(fc.property(fc.array(actionArb, { minLength: 0, maxLength: 20 }), (actions) => {
|
|
18
|
+
const summary = createDryRunSummary(actions);
|
|
19
|
+
// Should preserve all actions
|
|
20
|
+
expect(summary.actions).toEqual(actions);
|
|
21
|
+
expect(summary.totalActions).toBe(actions.length);
|
|
22
|
+
// Should have timestamp
|
|
23
|
+
expect(summary.timestamp).toBeTruthy();
|
|
24
|
+
expect(new Date(summary.timestamp).getTime()).toBeGreaterThan(0);
|
|
25
|
+
}));
|
|
26
|
+
});
|
|
27
|
+
it('should count actions correctly', () => {
|
|
28
|
+
fc.assert(fc.property(fc.array(actionArb, { minLength: 0, maxLength: 50 }), (actions) => {
|
|
29
|
+
const summary = createDryRunSummary(actions);
|
|
30
|
+
expect(summary.totalActions).toBe(actions.length);
|
|
31
|
+
expect(summary.actions.length).toBe(actions.length);
|
|
32
|
+
}));
|
|
33
|
+
});
|
|
34
|
+
it('should handle empty action list', () => {
|
|
35
|
+
const summary = createDryRunSummary([]);
|
|
36
|
+
expect(summary.actions).toEqual([]);
|
|
37
|
+
expect(summary.totalActions).toBe(0);
|
|
38
|
+
expect(summary.timestamp).toBeTruthy();
|
|
39
|
+
});
|
|
40
|
+
it('should preserve action types and descriptions', () => {
|
|
41
|
+
fc.assert(fc.property(fc.array(actionArb, { minLength: 1, maxLength: 10 }), (actions) => {
|
|
42
|
+
const summary = createDryRunSummary(actions);
|
|
43
|
+
for (let i = 0; i < actions.length; i++) {
|
|
44
|
+
expect(summary.actions[i].type).toBe(actions[i].type);
|
|
45
|
+
expect(summary.actions[i].description).toBe(actions[i].description);
|
|
46
|
+
}
|
|
47
|
+
}));
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=dry-run-action.property.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run-action.property.test.js","sourceRoot":"","sources":["../../../src/version/__tests__/dry-run-action.property.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run-changelog.property.test.d.ts","sourceRoot":"","sources":["../../../src/version/__tests__/dry-run-changelog.property.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property Tests for Dry Run Changelog Generation
|
|
3
|
+
*
|
|
4
|
+
* Property 16: Dry Run Changelog Generation
|
|
5
|
+
* Validates: Requirements 15.3
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect } from '@jest/globals';
|
|
8
|
+
import fc from 'fast-check';
|
|
9
|
+
import { generateDryRunChangelog } from '../changelog-utils.js';
|
|
10
|
+
describe('Feature: pipeline-release-support, Property 16: Dry Run Changelog Generation', () => {
|
|
11
|
+
const commitArb = fc.record({
|
|
12
|
+
type: fc.constantFrom('feat', 'fix', 'docs', 'chore'),
|
|
13
|
+
scope: fc.option(fc.stringOf(fc.char(), { minLength: 1, maxLength: 10 }), { nil: undefined }),
|
|
14
|
+
message: fc.stringOf(fc.char(), { minLength: 5, maxLength: 50 }),
|
|
15
|
+
breaking: fc.boolean(),
|
|
16
|
+
}).map(({ type, scope, message, breaking }) => {
|
|
17
|
+
const scopePart = scope ? `(${scope})` : '';
|
|
18
|
+
const breakingPart = breaking ? '!' : '';
|
|
19
|
+
return `${type}${scopePart}${breakingPart}: ${message}`;
|
|
20
|
+
});
|
|
21
|
+
it('should generate preview without modifying input commits', () => {
|
|
22
|
+
fc.assert(fc.property(fc.stringOf(fc.char(), { minLength: 5, maxLength: 10 }), fc.array(commitArb, { minLength: 1, maxLength: 20 }), (version, commits) => {
|
|
23
|
+
const commitsCopy = [...commits];
|
|
24
|
+
const result = generateDryRunChangelog(version, commits);
|
|
25
|
+
// Should return dry run result
|
|
26
|
+
expect(result.isDryRun).toBe(true);
|
|
27
|
+
expect(result.version).toBe(version);
|
|
28
|
+
expect(result.preview).toBeTruthy();
|
|
29
|
+
// Should not modify input
|
|
30
|
+
expect(commits).toEqual(commitsCopy);
|
|
31
|
+
// Preview should contain version
|
|
32
|
+
expect(result.preview).toContain(version);
|
|
33
|
+
}));
|
|
34
|
+
});
|
|
35
|
+
it('should include all commit types in grouped commits', () => {
|
|
36
|
+
fc.assert(fc.property(fc.stringOf(fc.char(), { minLength: 5, maxLength: 10 }), fc.array(commitArb, { minLength: 1, maxLength: 20 }), (version, commits) => {
|
|
37
|
+
const result = generateDryRunChangelog(version, commits);
|
|
38
|
+
// All commits should be grouped
|
|
39
|
+
const totalGrouped = Object.values(result.commits).reduce((sum, arr) => sum + arr.length, 0);
|
|
40
|
+
// Should group at least some commits (conventional format)
|
|
41
|
+
expect(totalGrouped).toBeGreaterThanOrEqual(0);
|
|
42
|
+
}));
|
|
43
|
+
});
|
|
44
|
+
it('should be idempotent - calling twice produces same preview', () => {
|
|
45
|
+
fc.assert(fc.property(fc.stringOf(fc.char(), { minLength: 5, maxLength: 10 }), fc.array(commitArb, { minLength: 1, maxLength: 10 }), (version, commits) => {
|
|
46
|
+
const result1 = generateDryRunChangelog(version, commits);
|
|
47
|
+
const result2 = generateDryRunChangelog(version, commits);
|
|
48
|
+
expect(result1.version).toBe(result2.version);
|
|
49
|
+
expect(result1.preview).toBe(result2.preview);
|
|
50
|
+
}));
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=dry-run-changelog.property.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run-changelog.property.test.js","sourceRoot":"","sources":["../../../src/version/__tests__/dry-run-changelog.property.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,QAAQ,CAAC,8EAA8E,EAAE,GAAG,EAAE;IAC5F,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;QACrD,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QAC7F,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAChE,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE;KACvB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,KAAK,OAAO,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,EAAE,CAAC,MAAM,CACP,EAAE,CAAC,QAAQ,CACT,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EACvD,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACnB,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEzD,+BAA+B;YAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;YAEpC,0BAA0B;YAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAErC,iCAAiC;YACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CACF,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,EAAE,CAAC,MAAM,CACP,EAAE,CAAC,QAAQ,CACT,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EACvD,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACnB,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEzD,gCAAgC;YAChC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CACvD,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAC9B,CAAC,CACF,CAAC;YAEF,2DAA2D;YAC3D,MAAM,CAAC,YAAY,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CACF,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,EAAE,CAAC,MAAM,CACP,EAAE,CAAC,QAAQ,CACT,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EACvD,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACnB,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,CACF,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|