@gitgov/core 1.0.1 → 1.1.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 +31 -31
- package/dist/src/index.d.ts +5493 -21
- package/dist/src/index.js +8090 -22
- package/dist/src/index.js.map +1 -1
- package/package.json +17 -5
- package/dist/scripts/compile-json-to-types.d.ts +0 -11
- package/dist/scripts/compile-json-to-types.d.ts.map +0 -1
- package/dist/scripts/compile-json-to-types.js +0 -129
- package/dist/scripts/compile-json-to-types.js.map +0 -1
- package/dist/scripts/diagnose-duplicates.d.ts +0 -7
- package/dist/scripts/diagnose-duplicates.d.ts.map +0 -1
- package/dist/scripts/diagnose-duplicates.js +0 -72
- package/dist/scripts/diagnose-duplicates.js.map +0 -1
- package/dist/scripts/generate-indexes.d.ts +0 -22
- package/dist/scripts/generate-indexes.d.ts.map +0 -1
- package/dist/scripts/generate-indexes.js +0 -168
- package/dist/scripts/generate-indexes.js.map +0 -1
- package/dist/scripts/sync-schemas.d.ts +0 -10
- package/dist/scripts/sync-schemas.d.ts.map +0 -1
- package/dist/scripts/sync-schemas.js +0 -84
- package/dist/scripts/sync-schemas.js.map +0 -1
- package/dist/scripts/sync-workflow-configs.d.ts +0 -11
- package/dist/scripts/sync-workflow-configs.d.ts.map +0 -1
- package/dist/scripts/sync-workflow-configs.js +0 -61
- package/dist/scripts/sync-workflow-configs.js.map +0 -1
- package/dist/scripts/update-diagram.d.ts +0 -7
- package/dist/scripts/update-diagram.d.ts.map +0 -1
- package/dist/scripts/update-diagram.js +0 -47
- package/dist/scripts/update-diagram.js.map +0 -1
- package/dist/scripts/validate-schemas.d.ts +0 -18
- package/dist/scripts/validate-schemas.d.ts.map +0 -1
- package/dist/scripts/validate-schemas.js +0 -313
- package/dist/scripts/validate-schemas.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts +0 -2
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js +0 -507
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts +0 -2
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js +0 -1282
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts +0 -10
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js +0 -144
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/index.d.ts +0 -213
- package/dist/src/adapters/backlog_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/index.js +0 -924
- package/dist/src/adapters/backlog_adapter/index.js.map +0 -1
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts +0 -2
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js +0 -505
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js.map +0 -1
- package/dist/src/adapters/changelog_adapter/index.d.ts +0 -101
- package/dist/src/adapters/changelog_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/changelog_adapter/index.js +0 -197
- package/dist/src/adapters/changelog_adapter/index.js.map +0 -1
- package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts +0 -2
- package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/execution_adapter/execution_adapter.test.js +0 -266
- package/dist/src/adapters/execution_adapter/execution_adapter.test.js.map +0 -1
- package/dist/src/adapters/execution_adapter/index.d.ts +0 -90
- package/dist/src/adapters/execution_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/execution_adapter/index.js +0 -150
- package/dist/src/adapters/execution_adapter/index.js.map +0 -1
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts +0 -2
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js +0 -256
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js.map +0 -1
- package/dist/src/adapters/feedback_adapter/index.d.ts +0 -95
- package/dist/src/adapters/feedback_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/feedback_adapter/index.js +0 -192
- package/dist/src/adapters/feedback_adapter/index.js.map +0 -1
- package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts +0 -2
- package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/identity_adapter/identity_adapter.test.js +0 -624
- package/dist/src/adapters/identity_adapter/identity_adapter.test.js.map +0 -1
- package/dist/src/adapters/identity_adapter/index.d.ts +0 -82
- package/dist/src/adapters/identity_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/identity_adapter/index.js +0 -336
- package/dist/src/adapters/identity_adapter/index.js.map +0 -1
- package/dist/src/adapters/index.d.ts +0 -10
- package/dist/src/adapters/index.d.ts.map +0 -1
- package/dist/src/adapters/index.js +0 -10
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/adapters/indexer_adapter/index.d.ts +0 -214
- package/dist/src/adapters/indexer_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/indexer_adapter/index.js +0 -643
- package/dist/src/adapters/indexer_adapter/index.js.map +0 -1
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts +0 -2
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js +0 -409
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js.map +0 -1
- package/dist/src/adapters/metrics_adapter/index.d.ts +0 -189
- package/dist/src/adapters/metrics_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/metrics_adapter/index.js +0 -592
- package/dist/src/adapters/metrics_adapter/index.js.map +0 -1
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts +0 -2
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js +0 -558
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js.map +0 -1
- package/dist/src/adapters/project_adapter/index.d.ts +0 -164
- package/dist/src/adapters/project_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/project_adapter/index.js +0 -445
- package/dist/src/adapters/project_adapter/index.js.map +0 -1
- package/dist/src/adapters/project_adapter/project_adapter.test.d.ts +0 -2
- package/dist/src/adapters/project_adapter/project_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/project_adapter/project_adapter.test.js +0 -627
- package/dist/src/adapters/project_adapter/project_adapter.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/index.d.ts +0 -75
- package/dist/src/adapters/workflow_methodology_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/index.js +0 -205
- package/dist/src/adapters/workflow_methodology_adapter/index.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts +0 -2
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js +0 -463
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts +0 -2
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js +0 -287
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts +0 -2
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js +0 -278
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_default.json +0 -188
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_scrum.json +0 -284
- package/dist/src/config_manager/config_manager.test.d.ts +0 -2
- package/dist/src/config_manager/config_manager.test.d.ts.map +0 -1
- package/dist/src/config_manager/config_manager.test.js +0 -321
- package/dist/src/config_manager/config_manager.test.js.map +0 -1
- package/dist/src/config_manager/index.d.ts +0 -107
- package/dist/src/config_manager/index.d.ts.map +0 -1
- package/dist/src/config_manager/index.js +0 -192
- package/dist/src/config_manager/index.js.map +0 -1
- package/dist/src/crypto/checksum.d.ts +0 -6
- package/dist/src/crypto/checksum.d.ts.map +0 -1
- package/dist/src/crypto/checksum.js +0 -38
- package/dist/src/crypto/checksum.js.map +0 -1
- package/dist/src/crypto/checksum.test.d.ts +0 -2
- package/dist/src/crypto/checksum.test.d.ts.map +0 -1
- package/dist/src/crypto/checksum.test.js +0 -167
- package/dist/src/crypto/checksum.test.js.map +0 -1
- package/dist/src/crypto/index.d.ts +0 -3
- package/dist/src/crypto/index.d.ts.map +0 -1
- package/dist/src/crypto/index.js +0 -3
- package/dist/src/crypto/index.js.map +0 -1
- package/dist/src/crypto/signatures.d.ts +0 -24
- package/dist/src/crypto/signatures.d.ts.map +0 -1
- package/dist/src/crypto/signatures.js +0 -67
- package/dist/src/crypto/signatures.js.map +0 -1
- package/dist/src/crypto/signatures.test.d.ts +0 -2
- package/dist/src/crypto/signatures.test.d.ts.map +0 -1
- package/dist/src/crypto/signatures.test.js +0 -378
- package/dist/src/crypto/signatures.test.js.map +0 -1
- package/dist/src/diagram_generator/diagram_generator.d.ts +0 -76
- package/dist/src/diagram_generator/diagram_generator.d.ts.map +0 -1
- package/dist/src/diagram_generator/diagram_generator.js +0 -233
- package/dist/src/diagram_generator/diagram_generator.js.map +0 -1
- package/dist/src/diagram_generator/graph_validator.d.ts +0 -19
- package/dist/src/diagram_generator/graph_validator.d.ts.map +0 -1
- package/dist/src/diagram_generator/graph_validator.js +0 -98
- package/dist/src/diagram_generator/graph_validator.js.map +0 -1
- package/dist/src/diagram_generator/index.d.ts +0 -4
- package/dist/src/diagram_generator/index.d.ts.map +0 -1
- package/dist/src/diagram_generator/index.js +0 -4
- package/dist/src/diagram_generator/index.js.map +0 -1
- package/dist/src/diagram_generator/mermaid_renderer.d.ts +0 -82
- package/dist/src/diagram_generator/mermaid_renderer.d.ts.map +0 -1
- package/dist/src/diagram_generator/mermaid_renderer.js +0 -306
- package/dist/src/diagram_generator/mermaid_renderer.js.map +0 -1
- package/dist/src/diagram_generator/relationship_analyzer.d.ts +0 -116
- package/dist/src/diagram_generator/relationship_analyzer.d.ts.map +0 -1
- package/dist/src/diagram_generator/relationship_analyzer.js +0 -381
- package/dist/src/diagram_generator/relationship_analyzer.js.map +0 -1
- package/dist/src/event_bus/event_bus.d.ts +0 -110
- package/dist/src/event_bus/event_bus.d.ts.map +0 -1
- package/dist/src/event_bus/event_bus.js +0 -161
- package/dist/src/event_bus/event_bus.js.map +0 -1
- package/dist/src/event_bus/event_bus.test.d.ts +0 -2
- package/dist/src/event_bus/event_bus.test.d.ts.map +0 -1
- package/dist/src/event_bus/event_bus.test.js +0 -332
- package/dist/src/event_bus/event_bus.test.js.map +0 -1
- package/dist/src/event_bus/event_bus_integration.test.d.ts +0 -2
- package/dist/src/event_bus/event_bus_integration.test.d.ts.map +0 -1
- package/dist/src/event_bus/event_bus_integration.test.js +0 -474
- package/dist/src/event_bus/event_bus_integration.test.js.map +0 -1
- package/dist/src/event_bus/index.d.ts +0 -3
- package/dist/src/event_bus/index.d.ts.map +0 -1
- package/dist/src/event_bus/index.js +0 -3
- package/dist/src/event_bus/index.js.map +0 -1
- package/dist/src/event_bus/types.d.ts +0 -203
- package/dist/src/event_bus/types.d.ts.map +0 -1
- package/dist/src/event_bus/types.js +0 -5
- package/dist/src/event_bus/types.js.map +0 -1
- package/dist/src/factories/actor_factory.d.ts +0 -6
- package/dist/src/factories/actor_factory.d.ts.map +0 -1
- package/dist/src/factories/actor_factory.js +0 -25
- package/dist/src/factories/actor_factory.js.map +0 -1
- package/dist/src/factories/actor_factory.test.d.ts +0 -2
- package/dist/src/factories/actor_factory.test.d.ts.map +0 -1
- package/dist/src/factories/actor_factory.test.js +0 -169
- package/dist/src/factories/actor_factory.test.js.map +0 -1
- package/dist/src/factories/agent_factory.d.ts +0 -6
- package/dist/src/factories/agent_factory.d.ts.map +0 -1
- package/dist/src/factories/agent_factory.js +0 -25
- package/dist/src/factories/agent_factory.js.map +0 -1
- package/dist/src/factories/agent_factory.test.d.ts +0 -2
- package/dist/src/factories/agent_factory.test.d.ts.map +0 -1
- package/dist/src/factories/agent_factory.test.js +0 -199
- package/dist/src/factories/agent_factory.test.js.map +0 -1
- package/dist/src/factories/changelog_factory.d.ts +0 -9
- package/dist/src/factories/changelog_factory.d.ts.map +0 -1
- package/dist/src/factories/changelog_factory.js +0 -46
- package/dist/src/factories/changelog_factory.js.map +0 -1
- package/dist/src/factories/changelog_factory.test.d.ts +0 -2
- package/dist/src/factories/changelog_factory.test.d.ts.map +0 -1
- package/dist/src/factories/changelog_factory.test.js +0 -368
- package/dist/src/factories/changelog_factory.test.js.map +0 -1
- package/dist/src/factories/cycle_factory.d.ts +0 -6
- package/dist/src/factories/cycle_factory.d.ts.map +0 -1
- package/dist/src/factories/cycle_factory.js +0 -28
- package/dist/src/factories/cycle_factory.js.map +0 -1
- package/dist/src/factories/cycle_factory.test.d.ts +0 -2
- package/dist/src/factories/cycle_factory.test.d.ts.map +0 -1
- package/dist/src/factories/cycle_factory.test.js +0 -175
- package/dist/src/factories/cycle_factory.test.js.map +0 -1
- package/dist/src/factories/execution_factory.d.ts +0 -9
- package/dist/src/factories/execution_factory.d.ts.map +0 -1
- package/dist/src/factories/execution_factory.js +0 -29
- package/dist/src/factories/execution_factory.js.map +0 -1
- package/dist/src/factories/execution_factory.test.d.ts +0 -2
- package/dist/src/factories/execution_factory.test.d.ts.map +0 -1
- package/dist/src/factories/execution_factory.test.js +0 -207
- package/dist/src/factories/execution_factory.test.js.map +0 -1
- package/dist/src/factories/feedback_factory.d.ts +0 -9
- package/dist/src/factories/feedback_factory.d.ts.map +0 -1
- package/dist/src/factories/feedback_factory.js +0 -30
- package/dist/src/factories/feedback_factory.js.map +0 -1
- package/dist/src/factories/feedback_factory.test.d.ts +0 -2
- package/dist/src/factories/feedback_factory.test.d.ts.map +0 -1
- package/dist/src/factories/feedback_factory.test.js +0 -256
- package/dist/src/factories/feedback_factory.test.js.map +0 -1
- package/dist/src/factories/index.d.ts +0 -9
- package/dist/src/factories/index.d.ts.map +0 -1
- package/dist/src/factories/index.js +0 -9
- package/dist/src/factories/index.js.map +0 -1
- package/dist/src/factories/task_factory.d.ts +0 -6
- package/dist/src/factories/task_factory.d.ts.map +0 -1
- package/dist/src/factories/task_factory.js +0 -30
- package/dist/src/factories/task_factory.js.map +0 -1
- package/dist/src/factories/task_factory.test.d.ts +0 -2
- package/dist/src/factories/task_factory.test.d.ts.map +0 -1
- package/dist/src/factories/task_factory.test.js +0 -197
- package/dist/src/factories/task_factory.test.js.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.d.ts +0 -11
- package/dist/src/factories/workflow_methodology_factory.d.ts.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.js +0 -173
- package/dist/src/factories/workflow_methodology_factory.js.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.test.d.ts +0 -2
- package/dist/src/factories/workflow_methodology_factory.test.d.ts.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.test.js +0 -244
- package/dist/src/factories/workflow_methodology_factory.test.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/integration/cycles_tasks_integration.test.d.ts +0 -2
- package/dist/src/integration/cycles_tasks_integration.test.d.ts.map +0 -1
- package/dist/src/integration/cycles_tasks_integration.test.js +0 -258
- package/dist/src/integration/cycles_tasks_integration.test.js.map +0 -1
- package/dist/src/integration/schema_integration.test.d.ts +0 -8
- package/dist/src/integration/schema_integration.test.d.ts.map +0 -1
- package/dist/src/integration/schema_integration.test.js +0 -279
- package/dist/src/integration/schema_integration.test.js.map +0 -1
- package/dist/src/logger/index.d.ts +0 -2
- package/dist/src/logger/index.d.ts.map +0 -1
- package/dist/src/logger/index.js +0 -2
- package/dist/src/logger/index.js.map +0 -1
- package/dist/src/logger/logger.d.ts +0 -10
- package/dist/src/logger/logger.d.ts.map +0 -1
- package/dist/src/logger/logger.js +0 -48
- package/dist/src/logger/logger.js.map +0 -1
- package/dist/src/schemas/errors.d.ts +0 -28
- package/dist/src/schemas/errors.d.ts.map +0 -1
- package/dist/src/schemas/errors.js +0 -31
- package/dist/src/schemas/errors.js.map +0 -1
- package/dist/src/schemas/generated/actor_record_schema.json +0 -91
- package/dist/src/schemas/generated/agent_record_schema.json +0 -142
- package/dist/src/schemas/generated/changelog_record_schema.json +0 -227
- package/dist/src/schemas/generated/cycle_record_schema.json +0 -80
- package/dist/src/schemas/generated/embedded_metadata_schema.json +0 -318
- package/dist/src/schemas/generated/execution_record_schema.json +0 -89
- package/dist/src/schemas/generated/feedback_record_schema.json +0 -83
- package/dist/src/schemas/generated/index.d.ts +0 -2221
- package/dist/src/schemas/generated/index.d.ts.map +0 -1
- package/dist/src/schemas/generated/index.js +0 -48
- package/dist/src/schemas/generated/index.js.map +0 -1
- package/dist/src/schemas/generated/task_record_schema.json +0 -103
- package/dist/src/schemas/generated/workflow_methodology_record_schema.json +0 -393
- package/dist/src/schemas/index.d.ts +0 -4
- package/dist/src/schemas/index.d.ts.map +0 -1
- package/dist/src/schemas/index.js +0 -4
- package/dist/src/schemas/index.js.map +0 -1
- package/dist/src/schemas/schema_cache.d.ts +0 -39
- package/dist/src/schemas/schema_cache.d.ts.map +0 -1
- package/dist/src/schemas/schema_cache.js +0 -109
- package/dist/src/schemas/schema_cache.js.map +0 -1
- package/dist/src/schemas/schema_cache.test.d.ts +0 -2
- package/dist/src/schemas/schema_cache.test.d.ts.map +0 -1
- package/dist/src/schemas/schema_cache.test.js +0 -163
- package/dist/src/schemas/schema_cache.test.js.map +0 -1
- package/dist/src/store/index.d.ts +0 -2
- package/dist/src/store/index.d.ts.map +0 -1
- package/dist/src/store/index.js +0 -2
- package/dist/src/store/index.js.map +0 -1
- package/dist/src/store/record_store.d.ts +0 -30
- package/dist/src/store/record_store.d.ts.map +0 -1
- package/dist/src/store/record_store.js +0 -83
- package/dist/src/store/record_store.js.map +0 -1
- package/dist/src/store/record_store.test.d.ts +0 -2
- package/dist/src/store/record_store.test.d.ts.map +0 -1
- package/dist/src/store/record_store.test.js +0 -646
- package/dist/src/store/record_store.test.js.map +0 -1
- package/dist/src/types/common.types.d.ts +0 -43
- package/dist/src/types/common.types.d.ts.map +0 -1
- package/dist/src/types/common.types.js +0 -13
- package/dist/src/types/common.types.js.map +0 -1
- package/dist/src/types/embedded.types.d.ts +0 -17
- package/dist/src/types/embedded.types.d.ts.map +0 -1
- package/dist/src/types/embedded.types.js +0 -2
- package/dist/src/types/embedded.types.js.map +0 -1
- package/dist/src/types/generated/actor_record.d.ts +0 -45
- package/dist/src/types/generated/actor_record.d.ts.map +0 -1
- package/dist/src/types/generated/actor_record.js +0 -7
- package/dist/src/types/generated/actor_record.js.map +0 -1
- package/dist/src/types/generated/agent_record.d.ts +0 -40
- package/dist/src/types/generated/agent_record.d.ts.map +0 -1
- package/dist/src/types/generated/agent_record.js +0 -7
- package/dist/src/types/generated/agent_record.js.map +0 -1
- package/dist/src/types/generated/changelog_record.d.ts +0 -100
- package/dist/src/types/generated/changelog_record.d.ts.map +0 -1
- package/dist/src/types/generated/changelog_record.js +0 -7
- package/dist/src/types/generated/changelog_record.js.map +0 -1
- package/dist/src/types/generated/cycle_record.d.ts +0 -36
- package/dist/src/types/generated/cycle_record.d.ts.map +0 -1
- package/dist/src/types/generated/cycle_record.js +0 -7
- package/dist/src/types/generated/cycle_record.js.map +0 -1
- package/dist/src/types/generated/embedded_metadata.d.ts +0 -94
- package/dist/src/types/generated/embedded_metadata.d.ts.map +0 -1
- package/dist/src/types/generated/embedded_metadata.js +0 -7
- package/dist/src/types/generated/embedded_metadata.js.map +0 -1
- package/dist/src/types/generated/execution_record.d.ts +0 -39
- package/dist/src/types/generated/execution_record.d.ts.map +0 -1
- package/dist/src/types/generated/execution_record.js +0 -7
- package/dist/src/types/generated/execution_record.js.map +0 -1
- package/dist/src/types/generated/feedback_record.d.ts +0 -43
- package/dist/src/types/generated/feedback_record.d.ts.map +0 -1
- package/dist/src/types/generated/feedback_record.js +0 -7
- package/dist/src/types/generated/feedback_record.js.map +0 -1
- package/dist/src/types/generated/index.d.ts +0 -15
- package/dist/src/types/generated/index.d.ts.map +0 -1
- package/dist/src/types/generated/index.js +0 -15
- package/dist/src/types/generated/index.js.map +0 -1
- package/dist/src/types/generated/task_record.d.ts +0 -47
- package/dist/src/types/generated/task_record.d.ts.map +0 -1
- package/dist/src/types/generated/task_record.js +0 -7
- package/dist/src/types/generated/task_record.js.map +0 -1
- package/dist/src/types/generated/workflow_methodology_record.d.ts +0 -211
- package/dist/src/types/generated/workflow_methodology_record.d.ts.map +0 -1
- package/dist/src/types/generated/workflow_methodology_record.js +0 -7
- package/dist/src/types/generated/workflow_methodology_record.js.map +0 -1
- package/dist/src/types/index.d.ts +0 -4
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/index.js +0 -4
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/utils/id_generator.d.ts +0 -44
- package/dist/src/utils/id_generator.d.ts.map +0 -1
- package/dist/src/utils/id_generator.js +0 -107
- package/dist/src/utils/id_generator.js.map +0 -1
- package/dist/src/utils/id_generator.test.d.ts +0 -2
- package/dist/src/utils/id_generator.test.d.ts.map +0 -1
- package/dist/src/utils/id_generator.test.js +0 -100
- package/dist/src/utils/id_generator.test.js.map +0 -1
- package/dist/src/utils/index.d.ts +0 -2
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js +0 -3
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/validation/actor_validator.d.ts +0 -21
- package/dist/src/validation/actor_validator.d.ts.map +0 -1
- package/dist/src/validation/actor_validator.js +0 -48
- package/dist/src/validation/actor_validator.js.map +0 -1
- package/dist/src/validation/actor_validator.test.d.ts +0 -2
- package/dist/src/validation/actor_validator.test.d.ts.map +0 -1
- package/dist/src/validation/actor_validator.test.js +0 -83
- package/dist/src/validation/actor_validator.test.js.map +0 -1
- package/dist/src/validation/agent_validator.d.ts +0 -30
- package/dist/src/validation/agent_validator.d.ts.map +0 -1
- package/dist/src/validation/agent_validator.js +0 -66
- package/dist/src/validation/agent_validator.js.map +0 -1
- package/dist/src/validation/agent_validator.test.d.ts +0 -2
- package/dist/src/validation/agent_validator.test.d.ts.map +0 -1
- package/dist/src/validation/agent_validator.test.js +0 -73
- package/dist/src/validation/agent_validator.test.js.map +0 -1
- package/dist/src/validation/changelog_validator.d.ts +0 -23
- package/dist/src/validation/changelog_validator.d.ts.map +0 -1
- package/dist/src/validation/changelog_validator.js +0 -58
- package/dist/src/validation/changelog_validator.js.map +0 -1
- package/dist/src/validation/changelog_validator.test.d.ts +0 -2
- package/dist/src/validation/changelog_validator.test.d.ts.map +0 -1
- package/dist/src/validation/changelog_validator.test.js +0 -401
- package/dist/src/validation/changelog_validator.test.js.map +0 -1
- package/dist/src/validation/common.d.ts +0 -10
- package/dist/src/validation/common.d.ts.map +0 -1
- package/dist/src/validation/common.js +0 -12
- package/dist/src/validation/common.js.map +0 -1
- package/dist/src/validation/cycle_validator.d.ts +0 -24
- package/dist/src/validation/cycle_validator.d.ts.map +0 -1
- package/dist/src/validation/cycle_validator.js +0 -51
- package/dist/src/validation/cycle_validator.js.map +0 -1
- package/dist/src/validation/cycle_validator.test.d.ts +0 -2
- package/dist/src/validation/cycle_validator.test.d.ts.map +0 -1
- package/dist/src/validation/cycle_validator.test.js +0 -182
- package/dist/src/validation/cycle_validator.test.js.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.d.ts +0 -26
- package/dist/src/validation/embedded_metadata_validator.d.ts.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.js +0 -122
- package/dist/src/validation/embedded_metadata_validator.js.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.test.d.ts +0 -2
- package/dist/src/validation/embedded_metadata_validator.test.d.ts.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.test.js +0 -316
- package/dist/src/validation/embedded_metadata_validator.test.js.map +0 -1
- package/dist/src/validation/errors.d.ts +0 -67
- package/dist/src/validation/errors.d.ts.map +0 -1
- package/dist/src/validation/errors.js +0 -83
- package/dist/src/validation/errors.js.map +0 -1
- package/dist/src/validation/execution_validator.d.ts +0 -23
- package/dist/src/validation/execution_validator.d.ts.map +0 -1
- package/dist/src/validation/execution_validator.js +0 -58
- package/dist/src/validation/execution_validator.js.map +0 -1
- package/dist/src/validation/execution_validator.test.d.ts +0 -2
- package/dist/src/validation/execution_validator.test.d.ts.map +0 -1
- package/dist/src/validation/execution_validator.test.js +0 -167
- package/dist/src/validation/execution_validator.test.js.map +0 -1
- package/dist/src/validation/feedback_validator.d.ts +0 -23
- package/dist/src/validation/feedback_validator.d.ts.map +0 -1
- package/dist/src/validation/feedback_validator.js +0 -58
- package/dist/src/validation/feedback_validator.js.map +0 -1
- package/dist/src/validation/feedback_validator.test.d.ts +0 -2
- package/dist/src/validation/feedback_validator.test.d.ts.map +0 -1
- package/dist/src/validation/feedback_validator.test.js +0 -131
- package/dist/src/validation/feedback_validator.test.js.map +0 -1
- package/dist/src/validation/index.d.ts +0 -11
- package/dist/src/validation/index.d.ts.map +0 -1
- package/dist/src/validation/index.js +0 -10
- package/dist/src/validation/index.js.map +0 -1
- package/dist/src/validation/task_validator.d.ts +0 -24
- package/dist/src/validation/task_validator.d.ts.map +0 -1
- package/dist/src/validation/task_validator.js +0 -50
- package/dist/src/validation/task_validator.js.map +0 -1
- package/dist/src/validation/task_validator.test.d.ts +0 -2
- package/dist/src/validation/task_validator.test.d.ts.map +0 -1
- package/dist/src/validation/task_validator.test.js +0 -185
- package/dist/src/validation/task_validator.test.js.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.d.ts +0 -32
- package/dist/src/validation/workflow_methodology_validator.d.ts.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.js +0 -91
- package/dist/src/validation/workflow_methodology_validator.js.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.test.d.ts +0 -2
- package/dist/src/validation/workflow_methodology_validator.test.d.ts.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.test.js +0 -229
- package/dist/src/validation/workflow_methodology_validator.test.js.map +0 -1
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
import { createChangelogRecord } from './changelog_factory';
|
|
2
|
-
import { generateChangelogId } from '../utils/id_generator';
|
|
3
|
-
import { DetailedValidationError } from '../validation/common';
|
|
4
|
-
// Mock the validator
|
|
5
|
-
jest.mock('../validation/changelog_validator', () => ({
|
|
6
|
-
validateChangelogRecordDetailed: jest.fn()
|
|
7
|
-
}));
|
|
8
|
-
// Mock ID generator
|
|
9
|
-
jest.mock('../utils/id_generator', () => ({
|
|
10
|
-
generateChangelogId: jest.fn()
|
|
11
|
-
}));
|
|
12
|
-
describe('ChangelogRecord Factory', () => {
|
|
13
|
-
const mockValidateChangelogRecordDetailed = require('../validation/changelog_validator').validateChangelogRecordDetailed;
|
|
14
|
-
const mockGenerateChangelogId = generateChangelogId;
|
|
15
|
-
beforeEach(() => {
|
|
16
|
-
jest.clearAllMocks();
|
|
17
|
-
// Default successful validation
|
|
18
|
-
mockValidateChangelogRecordDetailed.mockReturnValue({
|
|
19
|
-
isValid: true,
|
|
20
|
-
errors: []
|
|
21
|
-
});
|
|
22
|
-
// Default ID generation
|
|
23
|
-
mockGenerateChangelogId.mockReturnValue('1752707800-changelog-task-test-task');
|
|
24
|
-
});
|
|
25
|
-
describe('createChangelogRecord', () => {
|
|
26
|
-
it('[EARS-1] should create a valid ChangelogRecord with all required fields', async () => {
|
|
27
|
-
const payload = {
|
|
28
|
-
entityType: 'task',
|
|
29
|
-
entityId: '1752274500-task-test-task',
|
|
30
|
-
changeType: 'completion',
|
|
31
|
-
title: 'Test Task Completion',
|
|
32
|
-
description: 'Successfully completed the test task with all requirements',
|
|
33
|
-
triggeredBy: 'human:developer',
|
|
34
|
-
reason: 'All acceptance criteria met and code review passed',
|
|
35
|
-
files: ['src/test.ts', 'docs/test.md'],
|
|
36
|
-
commits: ['abc123', 'def456']
|
|
37
|
-
};
|
|
38
|
-
const result = await createChangelogRecord(payload);
|
|
39
|
-
expect(result).toEqual({
|
|
40
|
-
id: '1752707800-changelog-task-test-task',
|
|
41
|
-
entityType: 'task',
|
|
42
|
-
entityId: '1752274500-task-test-task',
|
|
43
|
-
changeType: 'completion',
|
|
44
|
-
title: 'Test Task Completion',
|
|
45
|
-
description: 'Successfully completed the test task with all requirements',
|
|
46
|
-
timestamp: expect.any(Number),
|
|
47
|
-
trigger: 'manual',
|
|
48
|
-
triggeredBy: 'human:developer',
|
|
49
|
-
reason: 'All acceptance criteria met and code review passed',
|
|
50
|
-
riskLevel: 'low',
|
|
51
|
-
files: ['src/test.ts', 'docs/test.md'],
|
|
52
|
-
commits: ['abc123', 'def456']
|
|
53
|
-
});
|
|
54
|
-
expect(mockValidateChangelogRecordDetailed).toHaveBeenCalledWith(result);
|
|
55
|
-
});
|
|
56
|
-
it('[EARS-2] should apply default values for missing optional fields', async () => {
|
|
57
|
-
const payload = {
|
|
58
|
-
entityType: 'task',
|
|
59
|
-
entityId: '1752274500-task-test-task',
|
|
60
|
-
title: 'Test Task Completion',
|
|
61
|
-
description: 'Successfully completed the test task',
|
|
62
|
-
triggeredBy: 'human:developer',
|
|
63
|
-
reason: 'Task completed successfully'
|
|
64
|
-
};
|
|
65
|
-
const result = await createChangelogRecord(payload);
|
|
66
|
-
expect(result).toEqual({
|
|
67
|
-
id: '1752707800-changelog-task-test-task',
|
|
68
|
-
entityType: 'task',
|
|
69
|
-
entityId: '1752274500-task-test-task',
|
|
70
|
-
changeType: 'completion',
|
|
71
|
-
title: 'Test Task Completion',
|
|
72
|
-
description: 'Successfully completed the test task',
|
|
73
|
-
timestamp: expect.any(Number),
|
|
74
|
-
trigger: 'manual',
|
|
75
|
-
triggeredBy: 'human:developer',
|
|
76
|
-
reason: 'Task completed successfully',
|
|
77
|
-
riskLevel: 'low'
|
|
78
|
-
});
|
|
79
|
-
expect(mockGenerateChangelogId).toHaveBeenCalledWith('task', '1752274500-task-test-task', expect.any(Number));
|
|
80
|
-
});
|
|
81
|
-
it('[EARS-3] should preserve provided ID when specified', async () => {
|
|
82
|
-
const payload = {
|
|
83
|
-
id: '1752707900-changelog-task-custom-id',
|
|
84
|
-
entityType: 'task',
|
|
85
|
-
entityId: '1752274500-task-test-task',
|
|
86
|
-
changeType: 'completion',
|
|
87
|
-
title: 'Custom ID Test',
|
|
88
|
-
description: 'Successfully completed the test task',
|
|
89
|
-
triggeredBy: 'human:developer',
|
|
90
|
-
reason: 'Custom test case'
|
|
91
|
-
};
|
|
92
|
-
const result = await createChangelogRecord(payload);
|
|
93
|
-
expect(result.id).toBe('1752707900-changelog-task-custom-id');
|
|
94
|
-
expect(mockGenerateChangelogId).not.toHaveBeenCalled();
|
|
95
|
-
});
|
|
96
|
-
it('[EARS-4] should generate ID from entityType and entityId when ID is not provided', async () => {
|
|
97
|
-
const payload = {
|
|
98
|
-
entityType: 'task',
|
|
99
|
-
entityId: '1752274500-task-implement-auth',
|
|
100
|
-
changeType: 'completion',
|
|
101
|
-
title: 'Authentication Implementation Completed',
|
|
102
|
-
description: 'Authentication system implemented successfully',
|
|
103
|
-
triggeredBy: 'human:developer',
|
|
104
|
-
reason: 'All auth requirements completed'
|
|
105
|
-
};
|
|
106
|
-
mockGenerateChangelogId.mockReturnValue('1752707800-changelog-task-implement-auth');
|
|
107
|
-
const result = await createChangelogRecord(payload);
|
|
108
|
-
expect(result.id).toBe('1752707800-changelog-task-implement-auth');
|
|
109
|
-
expect(mockGenerateChangelogId).toHaveBeenCalledWith('task', '1752274500-task-implement-auth', expect.any(Number));
|
|
110
|
-
});
|
|
111
|
-
it('[EARS-5] should throw DetailedValidationError when validation fails', async () => {
|
|
112
|
-
const payload = {
|
|
113
|
-
entityType: 'task',
|
|
114
|
-
entityId: 'invalid-entity-id',
|
|
115
|
-
changeType: 'completion',
|
|
116
|
-
title: 'Test',
|
|
117
|
-
description: 'Test description',
|
|
118
|
-
triggeredBy: 'human:developer',
|
|
119
|
-
reason: 'Test reason'
|
|
120
|
-
};
|
|
121
|
-
const validationErrors = [
|
|
122
|
-
{ field: 'entityId', message: 'must match pattern', value: payload.entityId }
|
|
123
|
-
];
|
|
124
|
-
mockValidateChangelogRecordDetailed.mockReturnValue({
|
|
125
|
-
isValid: false,
|
|
126
|
-
errors: validationErrors
|
|
127
|
-
});
|
|
128
|
-
await expect(createChangelogRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
129
|
-
await expect(createChangelogRecord(payload)).rejects.toThrow('ChangelogRecord');
|
|
130
|
-
});
|
|
131
|
-
it('[EARS-6] should preserve all provided fields in the output', async () => {
|
|
132
|
-
const payload = {
|
|
133
|
-
id: '1752707900-changelog-task-preserve-fields',
|
|
134
|
-
entityType: 'task',
|
|
135
|
-
entityId: '1752274500-task-test-task',
|
|
136
|
-
changeType: 'update',
|
|
137
|
-
title: 'Task Update',
|
|
138
|
-
description: 'Updating task configuration',
|
|
139
|
-
timestamp: 1752707900,
|
|
140
|
-
trigger: 'automated',
|
|
141
|
-
triggeredBy: 'agent:system',
|
|
142
|
-
reason: 'Automated update process',
|
|
143
|
-
riskLevel: 'medium',
|
|
144
|
-
files: ['src/updated.ts'],
|
|
145
|
-
commits: ['xyz789'],
|
|
146
|
-
usersAffected: 10
|
|
147
|
-
};
|
|
148
|
-
const result = await createChangelogRecord(payload);
|
|
149
|
-
expect(result).toEqual(payload);
|
|
150
|
-
expect(mockValidateChangelogRecordDetailed).toHaveBeenCalledWith(payload);
|
|
151
|
-
});
|
|
152
|
-
it('[EARS-7] should handle empty files array', async () => {
|
|
153
|
-
const payload = {
|
|
154
|
-
entityType: 'task',
|
|
155
|
-
entityId: '1752274500-task-test-task',
|
|
156
|
-
changeType: 'completion',
|
|
157
|
-
title: 'Test Task Completion',
|
|
158
|
-
description: 'Successfully completed the test task',
|
|
159
|
-
triggeredBy: 'human:developer',
|
|
160
|
-
reason: 'Task completed',
|
|
161
|
-
files: []
|
|
162
|
-
};
|
|
163
|
-
const result = await createChangelogRecord(payload);
|
|
164
|
-
expect(result.files).toEqual([]);
|
|
165
|
-
});
|
|
166
|
-
it('[EARS-8] should use current timestamp when none provided', async () => {
|
|
167
|
-
const payload = {
|
|
168
|
-
entityType: 'task',
|
|
169
|
-
entityId: '1752274500-task-test-task',
|
|
170
|
-
changeType: 'completion',
|
|
171
|
-
title: 'Timestamp Test',
|
|
172
|
-
description: 'Testing timestamp generation',
|
|
173
|
-
triggeredBy: 'human:developer',
|
|
174
|
-
reason: 'Testing timestamp functionality'
|
|
175
|
-
};
|
|
176
|
-
const beforeTime = Math.floor(Date.now() / 1000);
|
|
177
|
-
await createChangelogRecord(payload);
|
|
178
|
-
const afterTime = Math.floor(Date.now() / 1000);
|
|
179
|
-
expect(mockGenerateChangelogId).toHaveBeenCalledWith('task', '1752274500-task-test-task', expect.any(Number));
|
|
180
|
-
const calledTimestamp = mockGenerateChangelogId.mock.calls[0][2];
|
|
181
|
-
expect(calledTimestamp).toBeGreaterThanOrEqual(beforeTime);
|
|
182
|
-
expect(calledTimestamp).toBeLessThanOrEqual(afterTime);
|
|
183
|
-
});
|
|
184
|
-
describe('ChangelogRecord Specific Factory Operations (EARS 29-37)', () => {
|
|
185
|
-
it('[EARS-29] should generate ID with timestamp-changelog-entityType-slug format', async () => {
|
|
186
|
-
const payload = {
|
|
187
|
-
entityType: 'task',
|
|
188
|
-
entityId: '1752274500-task-implement-feature',
|
|
189
|
-
changeType: 'completion',
|
|
190
|
-
title: 'Feature Implementation Completed',
|
|
191
|
-
description: 'Successfully implemented the requested feature',
|
|
192
|
-
triggeredBy: 'human:developer',
|
|
193
|
-
reason: 'All requirements completed'
|
|
194
|
-
};
|
|
195
|
-
mockGenerateChangelogId.mockReturnValue('1752707800-changelog-task-implement-feature');
|
|
196
|
-
const result = await createChangelogRecord(payload);
|
|
197
|
-
expect(result.id).toBe('1752707800-changelog-task-implement-feature');
|
|
198
|
-
expect(mockGenerateChangelogId).toHaveBeenCalledWith('task', '1752274500-task-implement-feature', expect.any(Number));
|
|
199
|
-
});
|
|
200
|
-
it('[EARS-30] should use entityId directly for system entities', async () => {
|
|
201
|
-
const payload = {
|
|
202
|
-
entityType: 'system',
|
|
203
|
-
entityId: 'payment-gateway',
|
|
204
|
-
changeType: 'hotfix',
|
|
205
|
-
title: 'Payment Gateway Hotfix',
|
|
206
|
-
description: 'Fixed critical payment processing issue',
|
|
207
|
-
triggeredBy: 'human:on-call',
|
|
208
|
-
reason: 'Critical production issue'
|
|
209
|
-
};
|
|
210
|
-
mockGenerateChangelogId.mockReturnValue('1752707800-changelog-system-payment-gateway');
|
|
211
|
-
const result = await createChangelogRecord(payload);
|
|
212
|
-
expect(result.id).toBe('1752707800-changelog-system-payment-gateway');
|
|
213
|
-
expect(mockGenerateChangelogId).toHaveBeenCalledWith('system', 'payment-gateway', expect.any(Number));
|
|
214
|
-
});
|
|
215
|
-
it('[EARS-31] should use entityId directly for configuration entities', async () => {
|
|
216
|
-
const payload = {
|
|
217
|
-
entityType: 'configuration',
|
|
218
|
-
entityId: 'database-config',
|
|
219
|
-
changeType: 'update',
|
|
220
|
-
title: 'Database Configuration Update',
|
|
221
|
-
description: 'Updated connection pool settings',
|
|
222
|
-
triggeredBy: 'human:devops',
|
|
223
|
-
reason: 'Performance optimization'
|
|
224
|
-
};
|
|
225
|
-
mockGenerateChangelogId.mockReturnValue('1752707800-changelog-configuration-database-config');
|
|
226
|
-
const result = await createChangelogRecord(payload);
|
|
227
|
-
expect(result.id).toBe('1752707800-changelog-configuration-database-config');
|
|
228
|
-
expect(mockGenerateChangelogId).toHaveBeenCalledWith('configuration', 'database-config', expect.any(Number));
|
|
229
|
-
});
|
|
230
|
-
it('[EARS-32] should extract slug from timestamped entityId for task/cycle/agent', async () => {
|
|
231
|
-
const testCases = [
|
|
232
|
-
{ entityType: 'task', entityId: '1752274500-task-implement-auth', expectedSlug: 'implement-auth' },
|
|
233
|
-
{ entityType: 'cycle', entityId: '1752300000-cycle-sprint-q4', expectedSlug: 'sprint-q4' },
|
|
234
|
-
{ entityType: 'agent', entityId: 'agent:cursor-assistant', expectedSlug: 'cursor-assistant' }
|
|
235
|
-
];
|
|
236
|
-
for (const testCase of testCases) {
|
|
237
|
-
const payload = {
|
|
238
|
-
entityType: testCase.entityType,
|
|
239
|
-
entityId: testCase.entityId,
|
|
240
|
-
changeType: 'update',
|
|
241
|
-
title: `${testCase.entityType} Update`,
|
|
242
|
-
description: `Updated ${testCase.entityType}`,
|
|
243
|
-
triggeredBy: 'human:developer',
|
|
244
|
-
reason: 'Regular update'
|
|
245
|
-
};
|
|
246
|
-
mockGenerateChangelogId.mockReturnValue(`1752707800-changelog-${testCase.entityType}-${testCase.expectedSlug}`);
|
|
247
|
-
const result = await createChangelogRecord(payload);
|
|
248
|
-
expect(result.id).toBe(`1752707800-changelog-${testCase.entityType}-${testCase.expectedSlug}`);
|
|
249
|
-
expect(mockGenerateChangelogId).toHaveBeenCalledWith(testCase.entityType, testCase.entityId, expect.any(Number));
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
it('[EARS-33] should apply sensible defaults for required fields', async () => {
|
|
253
|
-
const payload = {
|
|
254
|
-
entityType: 'task',
|
|
255
|
-
entityId: '1752274500-task-test-task',
|
|
256
|
-
title: 'Test Changelog',
|
|
257
|
-
description: 'Testing default values application',
|
|
258
|
-
triggeredBy: 'human:developer',
|
|
259
|
-
reason: 'Testing defaults'
|
|
260
|
-
};
|
|
261
|
-
const result = await createChangelogRecord(payload);
|
|
262
|
-
expect(result.changeType).toBe('completion'); // Default
|
|
263
|
-
expect(result.trigger).toBe('manual'); // Default
|
|
264
|
-
expect(result.riskLevel).toBe('low'); // Default
|
|
265
|
-
expect(result.timestamp).toEqual(expect.any(Number)); // Generated timestamp
|
|
266
|
-
});
|
|
267
|
-
it('[EARS-34] should preserve all provided optional fields', async () => {
|
|
268
|
-
const payload = {
|
|
269
|
-
entityType: 'task',
|
|
270
|
-
entityId: '1752274500-task-test-task',
|
|
271
|
-
changeType: 'hotfix',
|
|
272
|
-
title: 'Critical Hotfix',
|
|
273
|
-
description: 'Emergency fix for production issue',
|
|
274
|
-
timestamp: 1752707900,
|
|
275
|
-
trigger: 'emergency',
|
|
276
|
-
triggeredBy: 'human:on-call',
|
|
277
|
-
reason: 'Production down',
|
|
278
|
-
riskLevel: 'critical',
|
|
279
|
-
affectedSystems: ['api-gateway', 'auth-service'],
|
|
280
|
-
usersAffected: 1000,
|
|
281
|
-
downtime: 300,
|
|
282
|
-
files: ['src/auth.ts', 'src/gateway.ts'],
|
|
283
|
-
commits: ['abc123', 'def456'],
|
|
284
|
-
rollbackInstructions: 'Revert commits and restart services',
|
|
285
|
-
references: {
|
|
286
|
-
tasks: ['1752274500-task-test-task'],
|
|
287
|
-
executions: ['1752707800-exec-hotfix']
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
|
-
const result = await createChangelogRecord(payload);
|
|
291
|
-
// All optional fields should be preserved exactly
|
|
292
|
-
expect(result.affectedSystems).toEqual(['api-gateway', 'auth-service']);
|
|
293
|
-
expect(result.usersAffected).toBe(1000);
|
|
294
|
-
expect(result.downtime).toBe(300);
|
|
295
|
-
expect(result.files).toEqual(['src/auth.ts', 'src/gateway.ts']);
|
|
296
|
-
expect(result.commits).toEqual(['abc123', 'def456']);
|
|
297
|
-
expect(result.rollbackInstructions).toBe('Revert commits and restart services');
|
|
298
|
-
expect(result.references).toEqual({
|
|
299
|
-
tasks: ['1752274500-task-test-task'],
|
|
300
|
-
executions: ['1752707800-exec-hotfix']
|
|
301
|
-
});
|
|
302
|
-
});
|
|
303
|
-
it('[EARS-35] should throw DetailedValidationError for high riskLevel without rollbackInstructions', async () => {
|
|
304
|
-
const validationErrors = [
|
|
305
|
-
{ field: 'root', message: 'rollbackInstructions is required when riskLevel is high', value: { riskLevel: 'high' } }
|
|
306
|
-
];
|
|
307
|
-
mockValidateChangelogRecordDetailed.mockReturnValue({
|
|
308
|
-
isValid: false,
|
|
309
|
-
errors: validationErrors
|
|
310
|
-
});
|
|
311
|
-
const payload = {
|
|
312
|
-
entityType: 'task',
|
|
313
|
-
entityId: '1752274500-task-test-task',
|
|
314
|
-
changeType: 'update',
|
|
315
|
-
title: 'High Risk Update',
|
|
316
|
-
description: 'Major system update with high risk',
|
|
317
|
-
triggeredBy: 'human:developer',
|
|
318
|
-
reason: 'System upgrade',
|
|
319
|
-
riskLevel: 'high'
|
|
320
|
-
// rollbackInstructions missing
|
|
321
|
-
};
|
|
322
|
-
await expect(createChangelogRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
323
|
-
});
|
|
324
|
-
it('[EARS-36] should throw DetailedValidationError for critical riskLevel without rollbackInstructions', async () => {
|
|
325
|
-
const validationErrors = [
|
|
326
|
-
{ field: 'root', message: 'rollbackInstructions is required when riskLevel is critical', value: { riskLevel: 'critical' } }
|
|
327
|
-
];
|
|
328
|
-
mockValidateChangelogRecordDetailed.mockReturnValue({
|
|
329
|
-
isValid: false,
|
|
330
|
-
errors: validationErrors
|
|
331
|
-
});
|
|
332
|
-
const payload = {
|
|
333
|
-
entityType: 'system',
|
|
334
|
-
entityId: 'payment-gateway',
|
|
335
|
-
changeType: 'hotfix',
|
|
336
|
-
title: 'Critical System Fix',
|
|
337
|
-
description: 'Emergency fix for critical system failure',
|
|
338
|
-
triggeredBy: 'human:on-call',
|
|
339
|
-
reason: 'System down',
|
|
340
|
-
riskLevel: 'critical'
|
|
341
|
-
// rollbackInstructions missing
|
|
342
|
-
};
|
|
343
|
-
await expect(createChangelogRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
344
|
-
});
|
|
345
|
-
it('[EARS-37] should throw DetailedValidationError for completion changeType without references.tasks', async () => {
|
|
346
|
-
const validationErrors = [
|
|
347
|
-
{ field: 'root', message: 'references.tasks is required when changeType is completion', value: { changeType: 'completion' } }
|
|
348
|
-
];
|
|
349
|
-
mockValidateChangelogRecordDetailed.mockReturnValue({
|
|
350
|
-
isValid: false,
|
|
351
|
-
errors: validationErrors
|
|
352
|
-
});
|
|
353
|
-
const payload = {
|
|
354
|
-
entityType: 'task',
|
|
355
|
-
entityId: '1752274500-task-test-task',
|
|
356
|
-
changeType: 'completion',
|
|
357
|
-
title: 'Task Completion',
|
|
358
|
-
description: 'Task has been completed',
|
|
359
|
-
triggeredBy: 'human:developer',
|
|
360
|
-
reason: 'All work finished'
|
|
361
|
-
// references.tasks missing for completion
|
|
362
|
-
};
|
|
363
|
-
await expect(createChangelogRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
364
|
-
});
|
|
365
|
-
});
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
//# sourceMappingURL=changelog_factory.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"changelog_factory.test.js","sourceRoot":"","sources":["../../../src/factories/changelog_factory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,qBAAqB;AACrB,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,+BAA+B,EAAE,IAAI,CAAC,EAAE,EAAE;CAC3C,CAAC,CAAC,CAAC;AAEJ,oBAAoB;AACpB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,mCAAmC,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAAC,+BAA+B,CAAC;IACzH,MAAM,uBAAuB,GAAG,mBAAsE,CAAC;IAEvG,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,gCAAgC;QAChC,mCAAmC,CAAC,eAAe,CAAC;YAClD,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;QAEH,wBAAwB;QACxB,uBAAuB,CAAC,eAAe,CAAC,qCAAqC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,2BAA2B;gBACrC,UAAU,EAAE,YAAqB;gBACjC,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,4DAA4D;gBACzE,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,oDAAoD;gBAC5D,KAAK,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;gBACtC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;aAC9B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,EAAE,EAAE,qCAAqC;gBACzC,UAAU,EAAE,MAAM;gBAClB,QAAQ,EAAE,2BAA2B;gBACrC,UAAU,EAAE,YAAY;gBACxB,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,4DAA4D;gBACzE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC7B,OAAO,EAAE,QAAQ;gBACjB,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,oDAAoD;gBAC5D,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;gBACtC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;aAC9B,CAAC,CAAC;YAEH,MAAM,CAAC,mCAAmC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,2BAA2B;gBACrC,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,sCAAsC;gBACnD,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,6BAA6B;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,EAAE,EAAE,qCAAqC;gBACzC,UAAU,EAAE,MAAM;gBAClB,QAAQ,EAAE,2BAA2B;gBACrC,UAAU,EAAE,YAAY;gBACxB,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,sCAAsC;gBACnD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC7B,OAAO,EAAE,QAAQ;gBACjB,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,6BAA6B;gBACrC,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YAEH,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,2BAA2B,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,OAAO,GAAG;gBACd,EAAE,EAAE,qCAAqC;gBACzC,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,2BAA2B;gBACrC,UAAU,EAAE,YAAqB;gBACjC,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,sCAAsC;gBACnD,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,kBAAkB;aAC3B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAC9D,MAAM,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;YAChG,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,gCAAgC;gBAC1C,UAAU,EAAE,YAAqB;gBACjC,KAAK,EAAE,yCAAyC;gBAChD,WAAW,EAAE,gDAAgD;gBAC7D,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,iCAAiC;aAC1C,CAAC;YAEF,uBAAuB,CAAC,eAAe,CAAC,0CAA0C,CAAC,CAAC;YAEpF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACnE,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,gCAAgC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACrH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,mBAAmB;gBAC7B,UAAU,EAAE,YAAqB;gBACjC,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,kBAAkB;gBAC/B,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,aAAa;aACtB,CAAC;YAEF,MAAM,gBAAgB,GAAG;gBACvB,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;aAC9E,CAAC;YAEF,mCAAmC,CAAC,eAAe,CAAC;gBAClD,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACtF,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,OAAO,GAAG;gBACd,EAAE,EAAE,2CAA2C;gBAC/C,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,2BAA2B;gBACrC,UAAU,EAAE,QAAiB;gBAC7B,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,6BAA6B;gBAC1C,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,WAAoB;gBAC7B,WAAW,EAAE,cAAc;gBAC3B,MAAM,EAAE,0BAA0B;gBAClC,SAAS,EAAE,QAAiB;gBAC5B,KAAK,EAAE,CAAC,gBAAgB,CAAC;gBACzB,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACnB,aAAa,EAAE,EAAE;aAClB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,CAAC,mCAAmC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,2BAA2B;gBACrC,UAAU,EAAE,YAAqB;gBACjC,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,sCAAsC;gBACnD,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEpD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE,MAAe;gBAC3B,QAAQ,EAAE,2BAA2B;gBACrC,UAAU,EAAE,YAAqB;gBACjC,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,8BAA8B;gBAC3C,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,iCAAiC;aAC1C,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACjD,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAEhD,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAClD,MAAM,EACN,2BAA2B,EAC3B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;YAEF,MAAM,eAAe,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,CAAC,eAAe,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;YACxE,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;gBAC5F,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,MAAe;oBAC3B,QAAQ,EAAE,mCAAmC;oBAC7C,UAAU,EAAE,YAAqB;oBACjC,KAAK,EAAE,kCAAkC;oBACzC,WAAW,EAAE,gDAAgD;oBAC7D,WAAW,EAAE,iBAAiB;oBAC9B,MAAM,EAAE,4BAA4B;iBACrC,CAAC;gBAEF,uBAAuB,CAAC,eAAe,CAAC,6CAA6C,CAAC,CAAC;gBAEvF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAEpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBACtE,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,mCAAmC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACxH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,QAAiB;oBAC7B,QAAQ,EAAE,iBAAiB;oBAC3B,UAAU,EAAE,QAAiB;oBAC7B,KAAK,EAAE,wBAAwB;oBAC/B,WAAW,EAAE,yCAAyC;oBACtD,WAAW,EAAE,eAAe;oBAC5B,MAAM,EAAE,2BAA2B;iBACpC,CAAC;gBAEF,uBAAuB,CAAC,eAAe,CAAC,6CAA6C,CAAC,CAAC;gBAEvF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAEpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBACtE,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;gBACjF,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,eAAwB;oBACpC,QAAQ,EAAE,iBAAiB;oBAC3B,UAAU,EAAE,QAAiB;oBAC7B,KAAK,EAAE,+BAA+B;oBACtC,WAAW,EAAE,kCAAkC;oBAC/C,WAAW,EAAE,cAAc;oBAC3B,MAAM,EAAE,0BAA0B;iBACnC,CAAC;gBAEF,uBAAuB,CAAC,eAAe,CAAC,oDAAoD,CAAC,CAAC;gBAE9F,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAEpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;gBAC7E,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,eAAe,EAAE,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/G,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;gBAC5F,MAAM,SAAS,GAAG;oBAChB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,gCAAgC,EAAE,YAAY,EAAE,gBAAgB,EAAE;oBAClG,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE,YAAY,EAAE,WAAW,EAAE;oBAC1F,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,YAAY,EAAE,kBAAkB,EAAE;iBAC9F,CAAC;gBAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG;wBACd,UAAU,EAAE,QAAQ,CAAC,UAAiB;wBACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,UAAU,EAAE,QAAiB;wBAC7B,KAAK,EAAE,GAAG,QAAQ,CAAC,UAAU,SAAS;wBACtC,WAAW,EAAE,WAAW,QAAQ,CAAC,UAAU,EAAE;wBAC7C,WAAW,EAAE,iBAAiB;wBAC9B,MAAM,EAAE,gBAAgB;qBACzB,CAAC;oBAEF,uBAAuB,CAAC,eAAe,CAAC,wBAAwB,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;oBAEhH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;oBAEpD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC/F,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC5E,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,MAAe;oBAC3B,QAAQ,EAAE,2BAA2B;oBACrC,KAAK,EAAE,gBAAgB;oBACvB,WAAW,EAAE,oCAAoC;oBACjD,WAAW,EAAE,iBAAiB;oBAC9B,MAAM,EAAE,kBAAkB;iBAC3B,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAEpD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU;gBACxD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;gBACjD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU;gBAChD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB;YAC9E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;gBACtE,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,MAAe;oBAC3B,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,QAAiB;oBAC7B,KAAK,EAAE,iBAAiB;oBACxB,WAAW,EAAE,oCAAoC;oBACjD,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,WAAoB;oBAC7B,WAAW,EAAE,eAAe;oBAC5B,MAAM,EAAE,iBAAiB;oBACzB,SAAS,EAAE,UAAmB;oBAC9B,eAAe,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;oBAChD,aAAa,EAAE,IAAI;oBACnB,QAAQ,EAAE,GAAG;oBACb,KAAK,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;oBACxC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAC7B,oBAAoB,EAAE,qCAAqC;oBAC3D,UAAU,EAAE;wBACV,KAAK,EAAE,CAAC,2BAA2B,CAAC;wBACpC,UAAU,EAAE,CAAC,wBAAwB,CAAC;qBACvC;iBACF,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAEpD,kDAAkD;gBAClD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;gBACxE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACrD,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBAChF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;oBAChC,KAAK,EAAE,CAAC,2BAA2B,CAAC;oBACpC,UAAU,EAAE,CAAC,wBAAwB,CAAC;iBACvC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gGAAgG,EAAE,KAAK,IAAI,EAAE;gBAC9G,MAAM,gBAAgB,GAAG;oBACvB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,yDAAyD,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;iBACpH,CAAC;gBAEF,mCAAmC,CAAC,eAAe,CAAC;oBAClD,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,gBAAgB;iBACzB,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,MAAe;oBAC3B,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,QAAiB;oBAC7B,KAAK,EAAE,kBAAkB;oBACzB,WAAW,EAAE,oCAAoC;oBACjD,WAAW,EAAE,iBAAiB;oBAC9B,MAAM,EAAE,gBAAgB;oBACxB,SAAS,EAAE,MAAe;oBAC1B,+BAA+B;iBAChC,CAAC;gBAEF,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oGAAoG,EAAE,KAAK,IAAI,EAAE;gBAClH,MAAM,gBAAgB,GAAG;oBACvB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,6DAA6D,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE;iBAC5H,CAAC;gBAEF,mCAAmC,CAAC,eAAe,CAAC;oBAClD,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,gBAAgB;iBACzB,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,QAAiB;oBAC7B,QAAQ,EAAE,iBAAiB;oBAC3B,UAAU,EAAE,QAAiB;oBAC7B,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,2CAA2C;oBACxD,WAAW,EAAE,eAAe;oBAC5B,MAAM,EAAE,aAAa;oBACrB,SAAS,EAAE,UAAmB;oBAC9B,+BAA+B;iBAChC,CAAC;gBAEF,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;gBACjH,MAAM,gBAAgB,GAAG;oBACvB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,4DAA4D,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;iBAC9H,CAAC;gBAEF,mCAAmC,CAAC,eAAe,CAAC;oBAClD,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,gBAAgB;iBACzB,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG;oBACd,UAAU,EAAE,MAAe;oBAC3B,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,YAAqB;oBACjC,KAAK,EAAE,iBAAiB;oBACxB,WAAW,EAAE,yBAAyB;oBACtC,WAAW,EAAE,iBAAiB;oBAC9B,MAAM,EAAE,mBAAmB;oBAC3B,0CAA0C;iBAC3C,CAAC;gBAEF,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cycle_factory.d.ts","sourceRoot":"","sources":["../../../src/factories/cycle_factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,CAuBtB"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { validateCycleRecordDetailed } from "../validation/cycle_validator";
|
|
2
|
-
import { DetailedValidationError } from "../validation/common";
|
|
3
|
-
import { generateCycleId } from "../utils/id_generator";
|
|
4
|
-
/**
|
|
5
|
-
* Creates a new, fully-formed CycleRecord with validation.
|
|
6
|
-
*/
|
|
7
|
-
export async function createCycleRecord(payload) {
|
|
8
|
-
// Generate timestamp for ID if not provided
|
|
9
|
-
const timestamp = Math.floor(Date.now() / 1000);
|
|
10
|
-
// Build cycle with defaults for optional fields
|
|
11
|
-
const cycle = {
|
|
12
|
-
id: payload.id || generateCycleId(payload.title || '', timestamp),
|
|
13
|
-
title: payload.title || '',
|
|
14
|
-
status: payload.status || 'planning',
|
|
15
|
-
taskIds: payload.taskIds || [], // EARS-21: Default empty array
|
|
16
|
-
childCycleIds: payload.childCycleIds,
|
|
17
|
-
tags: payload.tags,
|
|
18
|
-
notes: payload.notes,
|
|
19
|
-
...payload,
|
|
20
|
-
};
|
|
21
|
-
// Use validator to check complete schema with detailed errors
|
|
22
|
-
const validation = validateCycleRecordDetailed(cycle);
|
|
23
|
-
if (!validation.isValid) {
|
|
24
|
-
throw new DetailedValidationError('CycleRecord', validation.errors);
|
|
25
|
-
}
|
|
26
|
-
return cycle;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=cycle_factory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cycle_factory.js","sourceRoot":"","sources":["../../../src/factories/cycle_factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA6B;IAE7B,4CAA4C;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAEhD,gDAAgD;IAChD,MAAM,KAAK,GAAgB;QACzB,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC;QACjE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU;QACpC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,+BAA+B;QAC/D,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,OAAO;KACI,CAAC;IAEjB,8DAA8D;IAC9D,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,uBAAuB,CAAC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cycle_factory.test.d.ts","sourceRoot":"","sources":["../../../src/factories/cycle_factory.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { createCycleRecord } from './cycle_factory';
|
|
2
|
-
import { DetailedValidationError } from '../validation/common';
|
|
3
|
-
// Manual mock for validateCycleRecordDetailed
|
|
4
|
-
jest.mock('../validation/cycle_validator', () => ({
|
|
5
|
-
validateCycleRecordDetailed: jest.fn()
|
|
6
|
-
.mockReturnValue({ isValid: true, errors: [] }),
|
|
7
|
-
}));
|
|
8
|
-
describe('createCycleRecord', () => {
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
// Reset mock to default success state before each test
|
|
11
|
-
const { validateCycleRecordDetailed } = require('../validation/cycle_validator');
|
|
12
|
-
validateCycleRecordDetailed.mockReturnValue({ isValid: true, errors: [] });
|
|
13
|
-
});
|
|
14
|
-
it('[EARS-2 & EARS-3] should create a valid cycle record with defaults and a generated ID', async () => {
|
|
15
|
-
const payload = {
|
|
16
|
-
title: 'Sprint Q4 API Performance',
|
|
17
|
-
taskIds: ['1752274500-task-optimizar-endpoint', '1752360900-task-cache-redis'],
|
|
18
|
-
tags: ['roadmap:q4', 'team:backend'],
|
|
19
|
-
};
|
|
20
|
-
const cycle = await createCycleRecord(payload);
|
|
21
|
-
expect(cycle.id).toMatch(/^\d{10}-cycle-sprint-q4-api-performance$/); // ID is generated
|
|
22
|
-
expect(cycle.status).toBe('planning'); // Default status
|
|
23
|
-
expect(cycle.title).toBe('Sprint Q4 API Performance');
|
|
24
|
-
expect(cycle.taskIds).toEqual(['1752274500-task-optimizar-endpoint', '1752360900-task-cache-redis']);
|
|
25
|
-
expect(cycle.tags).toEqual(['roadmap:q4', 'team:backend']);
|
|
26
|
-
});
|
|
27
|
-
it('[EARS-1] should throw DetailedValidationError for missing/invalid fields', async () => {
|
|
28
|
-
const { validateCycleRecordDetailed } = require('../validation/cycle_validator');
|
|
29
|
-
validateCycleRecordDetailed.mockReturnValue({
|
|
30
|
-
isValid: false,
|
|
31
|
-
errors: [
|
|
32
|
-
{ field: 'title', message: 'must be a non-empty string', value: '' },
|
|
33
|
-
{ field: 'status', message: 'must be one of: planning, active, completed, archived', value: 'invalid' }
|
|
34
|
-
]
|
|
35
|
-
});
|
|
36
|
-
const payload = {
|
|
37
|
-
title: '',
|
|
38
|
-
status: 'invalid',
|
|
39
|
-
};
|
|
40
|
-
await expect(createCycleRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
41
|
-
});
|
|
42
|
-
it('[EARS-4] should use a provided ID instead of generating one', async () => {
|
|
43
|
-
const payload = {
|
|
44
|
-
id: '1754400000-cycle-custom-cycle-id',
|
|
45
|
-
title: 'Custom Cycle',
|
|
46
|
-
status: 'active',
|
|
47
|
-
tags: ['custom'],
|
|
48
|
-
};
|
|
49
|
-
const cycle = await createCycleRecord(payload);
|
|
50
|
-
expect(cycle.id).toBe('1754400000-cycle-custom-cycle-id');
|
|
51
|
-
});
|
|
52
|
-
it('[EARS-5] should throw DetailedValidationError if the created record fails validation', async () => {
|
|
53
|
-
const { validateCycleRecordDetailed } = require('../validation/cycle_validator');
|
|
54
|
-
validateCycleRecordDetailed.mockReturnValue({
|
|
55
|
-
isValid: false,
|
|
56
|
-
errors: [
|
|
57
|
-
{ field: 'taskIds', message: 'items must match pattern', value: ['invalid-task-id'] }
|
|
58
|
-
]
|
|
59
|
-
});
|
|
60
|
-
const payload = {
|
|
61
|
-
title: 'Valid Title',
|
|
62
|
-
status: 'active',
|
|
63
|
-
taskIds: ['invalid-task-id'],
|
|
64
|
-
};
|
|
65
|
-
await expect(createCycleRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
66
|
-
});
|
|
67
|
-
it('[EARS-6] should set default values for optional fields', async () => {
|
|
68
|
-
const payload = {
|
|
69
|
-
title: 'Minimal Cycle',
|
|
70
|
-
};
|
|
71
|
-
const cycle = await createCycleRecord(payload);
|
|
72
|
-
expect(cycle.status).toBe('planning');
|
|
73
|
-
expect(cycle.taskIds).toEqual([]); // EARS-21: Default empty array
|
|
74
|
-
expect(cycle.childCycleIds).toBeUndefined();
|
|
75
|
-
expect(cycle.tags).toBeUndefined();
|
|
76
|
-
expect(cycle.notes).toBeUndefined();
|
|
77
|
-
});
|
|
78
|
-
it('[EARS-7] should preserve provided optional fields', async () => {
|
|
79
|
-
const payload = {
|
|
80
|
-
title: 'Complex Cycle',
|
|
81
|
-
status: 'active',
|
|
82
|
-
taskIds: ['1752274500-task-task1', '1752360900-task-task2'],
|
|
83
|
-
childCycleIds: ['1754500000-cycle-child1'],
|
|
84
|
-
tags: ['roadmap:q4', 'team:backend'],
|
|
85
|
-
notes: 'This cycle requires careful coordination between teams'
|
|
86
|
-
};
|
|
87
|
-
const cycle = await createCycleRecord(payload);
|
|
88
|
-
expect(cycle.status).toBe('active');
|
|
89
|
-
expect(cycle.taskIds).toEqual(['1752274500-task-task1', '1752360900-task-task2']);
|
|
90
|
-
expect(cycle.childCycleIds).toEqual(['1754500000-cycle-child1']);
|
|
91
|
-
expect(cycle.tags).toEqual(['roadmap:q4', 'team:backend']);
|
|
92
|
-
expect(cycle.notes).toBe('This cycle requires careful coordination between teams');
|
|
93
|
-
});
|
|
94
|
-
it('[EARS-8] should generate ID with current timestamp when title is provided', async () => {
|
|
95
|
-
const beforeTimestamp = Math.floor(Date.now() / 1000);
|
|
96
|
-
const payload = {
|
|
97
|
-
title: 'Test Cycle for ID Generation',
|
|
98
|
-
};
|
|
99
|
-
const cycle = await createCycleRecord(payload);
|
|
100
|
-
const afterTimestamp = Math.floor(Date.now() / 1000);
|
|
101
|
-
// Extract timestamp from generated ID
|
|
102
|
-
const idParts = cycle.id.split('-');
|
|
103
|
-
const extractedTimestamp = parseInt(idParts[0] || '0');
|
|
104
|
-
expect(extractedTimestamp).toBeGreaterThanOrEqual(beforeTimestamp);
|
|
105
|
-
expect(extractedTimestamp).toBeLessThanOrEqual(afterTimestamp);
|
|
106
|
-
expect(cycle.id).toMatch(/^\d{10}-cycle-test-cycle-for-id-generation$/);
|
|
107
|
-
});
|
|
108
|
-
describe('CycleRecord Specific Factory Operations (EARS 19-21)', () => {
|
|
109
|
-
it('[EARS-19] should throw DetailedValidationError for invalid status', async () => {
|
|
110
|
-
const { validateCycleRecordDetailed } = require('../validation/cycle_validator');
|
|
111
|
-
validateCycleRecordDetailed.mockReturnValue({
|
|
112
|
-
isValid: false,
|
|
113
|
-
errors: [
|
|
114
|
-
{ field: 'status', message: 'must be one of planning, active, completed, archived', value: 'invalid-status' }
|
|
115
|
-
]
|
|
116
|
-
});
|
|
117
|
-
const payload = {
|
|
118
|
-
title: 'Test Cycle',
|
|
119
|
-
status: 'invalid-status'
|
|
120
|
-
};
|
|
121
|
-
await expect(createCycleRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
122
|
-
// Restore mock
|
|
123
|
-
validateCycleRecordDetailed.mockReturnValue({ isValid: true, errors: [] });
|
|
124
|
-
});
|
|
125
|
-
it('[EARS-20] should throw DetailedValidationError for invalid taskIds pattern', async () => {
|
|
126
|
-
const { validateCycleRecordDetailed } = require('../validation/cycle_validator');
|
|
127
|
-
validateCycleRecordDetailed.mockReturnValue({
|
|
128
|
-
isValid: false,
|
|
129
|
-
errors: [
|
|
130
|
-
{ field: 'taskIds', message: 'items must match task ID pattern', value: ['invalid-task-id', '1752274500-task-valid'] }
|
|
131
|
-
]
|
|
132
|
-
});
|
|
133
|
-
const payload = {
|
|
134
|
-
title: 'Test Cycle',
|
|
135
|
-
taskIds: ['invalid-task-id', '1752274500-task-valid']
|
|
136
|
-
};
|
|
137
|
-
await expect(createCycleRecord(payload)).rejects.toThrow(DetailedValidationError);
|
|
138
|
-
// Restore mock
|
|
139
|
-
validateCycleRecordDetailed.mockReturnValue({ isValid: true, errors: [] });
|
|
140
|
-
});
|
|
141
|
-
it('[EARS-21] should apply default empty array for taskIds when not provided', async () => {
|
|
142
|
-
const payload = {
|
|
143
|
-
title: 'Cycle Without Tasks'
|
|
144
|
-
// taskIds not provided - should default to []
|
|
145
|
-
};
|
|
146
|
-
const cycle = await createCycleRecord(payload);
|
|
147
|
-
expect(cycle.taskIds).toEqual([]); // Default empty array
|
|
148
|
-
});
|
|
149
|
-
it('[EARS-19] should accept valid status values', async () => {
|
|
150
|
-
const validStatuses = ['planning', 'active', 'completed', 'archived'];
|
|
151
|
-
for (const status of validStatuses) {
|
|
152
|
-
const payload = {
|
|
153
|
-
title: `Test Cycle ${status}`,
|
|
154
|
-
status: status
|
|
155
|
-
};
|
|
156
|
-
const cycle = await createCycleRecord(payload);
|
|
157
|
-
expect(cycle.status).toBe(status);
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
it('[EARS-20] should accept valid taskIds with correct pattern', async () => {
|
|
161
|
-
const validTaskIds = [
|
|
162
|
-
'1752274500-task-implement-feature',
|
|
163
|
-
'1752360900-task-write-tests',
|
|
164
|
-
'1752400000-task-deploy-service'
|
|
165
|
-
];
|
|
166
|
-
const payload = {
|
|
167
|
-
title: 'Cycle With Valid Tasks',
|
|
168
|
-
taskIds: validTaskIds
|
|
169
|
-
};
|
|
170
|
-
const cycle = await createCycleRecord(payload);
|
|
171
|
-
expect(cycle.taskIds).toEqual(validTaskIds);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
//# sourceMappingURL=cycle_factory.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cycle_factory.test.js","sourceRoot":"","sources":["../../../src/factories/cycle_factory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { ExecutionRecord } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Creates a complete ExecutionRecord with validation
|
|
4
|
-
*
|
|
5
|
-
* @param payload - Partial ExecutionRecord payload
|
|
6
|
-
* @returns Promise<ExecutionRecord> - The validated ExecutionRecord
|
|
7
|
-
*/
|
|
8
|
-
export declare function createExecutionRecord(payload: Partial<ExecutionRecord>): Promise<ExecutionRecord>;
|
|
9
|
-
//# sourceMappingURL=execution_factory.d.ts.map
|