@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,627 +0,0 @@
|
|
|
1
|
-
import { ProjectAdapter } from './index';
|
|
2
|
-
import { RecordStore } from '../../store';
|
|
3
|
-
import { ConfigManager } from '../../config_manager';
|
|
4
|
-
import { DetailedValidationError } from '../../validation/common';
|
|
5
|
-
import { promises as fs, existsSync } from 'fs';
|
|
6
|
-
import { createTaskRecord } from '../../factories/task_factory';
|
|
7
|
-
import { createCycleRecord } from '../../factories/cycle_factory';
|
|
8
|
-
// Mock the factories before importing
|
|
9
|
-
jest.mock('../../factories/task_factory', () => ({
|
|
10
|
-
createTaskRecord: jest.fn()
|
|
11
|
-
}));
|
|
12
|
-
jest.mock('../../factories/cycle_factory', () => ({
|
|
13
|
-
createCycleRecord: jest.fn()
|
|
14
|
-
}));
|
|
15
|
-
jest.mock('../../factories/actor_factory', () => ({
|
|
16
|
-
createActorRecord: jest.fn()
|
|
17
|
-
}));
|
|
18
|
-
// Mock dependencies
|
|
19
|
-
jest.mock('../../store');
|
|
20
|
-
jest.mock('../../config_manager');
|
|
21
|
-
jest.mock('fs', () => ({
|
|
22
|
-
promises: {
|
|
23
|
-
access: jest.fn(),
|
|
24
|
-
writeFile: jest.fn(),
|
|
25
|
-
readFile: jest.fn(),
|
|
26
|
-
unlink: jest.fn(),
|
|
27
|
-
mkdir: jest.fn(),
|
|
28
|
-
rm: jest.fn(),
|
|
29
|
-
appendFile: jest.fn(),
|
|
30
|
-
},
|
|
31
|
-
existsSync: jest.fn(),
|
|
32
|
-
}));
|
|
33
|
-
// Helper function to create mock actor record
|
|
34
|
-
function createMockActorRecord(overrides = {}) {
|
|
35
|
-
return {
|
|
36
|
-
id: 'human:test-user',
|
|
37
|
-
type: 'human',
|
|
38
|
-
displayName: 'Test User',
|
|
39
|
-
publicKey: 'test-public-key',
|
|
40
|
-
roles: ['admin', 'author'],
|
|
41
|
-
status: 'active',
|
|
42
|
-
...overrides,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
// Helper function to create mock cycle record
|
|
46
|
-
function createMockCycleRecord(overrides = {}) {
|
|
47
|
-
return {
|
|
48
|
-
id: `${Date.now()}-cycle-test-cycle`,
|
|
49
|
-
title: 'Test Cycle',
|
|
50
|
-
status: 'planning',
|
|
51
|
-
taskIds: [],
|
|
52
|
-
childCycleIds: [],
|
|
53
|
-
tags: [],
|
|
54
|
-
notes: '',
|
|
55
|
-
...overrides,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
// Helper function to create mock task record
|
|
59
|
-
function createMockTaskRecord(overrides = {}) {
|
|
60
|
-
return {
|
|
61
|
-
id: `${Date.now()}-task-test-task`,
|
|
62
|
-
title: 'Test Task',
|
|
63
|
-
status: 'draft',
|
|
64
|
-
priority: 'medium',
|
|
65
|
-
description: 'Test task description',
|
|
66
|
-
tags: [],
|
|
67
|
-
cycleIds: [],
|
|
68
|
-
...overrides,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
describe('ProjectAdapter', () => {
|
|
72
|
-
let projectAdapter;
|
|
73
|
-
let mockIdentityAdapter;
|
|
74
|
-
let mockBacklogAdapter;
|
|
75
|
-
let mockWorkflowMethodologyAdapter;
|
|
76
|
-
let mockConfigManager;
|
|
77
|
-
let mockTaskStore;
|
|
78
|
-
let mockCycleStore;
|
|
79
|
-
let mockFs;
|
|
80
|
-
let mockCreateTaskRecord;
|
|
81
|
-
let mockCreateCycleRecord;
|
|
82
|
-
beforeEach(() => {
|
|
83
|
-
jest.clearAllMocks();
|
|
84
|
-
// Mock all adapters
|
|
85
|
-
mockIdentityAdapter = {
|
|
86
|
-
createActor: jest.fn(),
|
|
87
|
-
getActor: jest.fn(),
|
|
88
|
-
listActors: jest.fn(),
|
|
89
|
-
revokeActor: jest.fn(),
|
|
90
|
-
createAgentRecord: jest.fn(),
|
|
91
|
-
getAgentRecord: jest.fn(),
|
|
92
|
-
listAgentRecords: jest.fn(),
|
|
93
|
-
getCurrentActor: jest.fn(),
|
|
94
|
-
getEffectiveActorForAgent: jest.fn(),
|
|
95
|
-
};
|
|
96
|
-
mockBacklogAdapter = {
|
|
97
|
-
createTask: jest.fn(),
|
|
98
|
-
createCycle: jest.fn(),
|
|
99
|
-
getTask: jest.fn(),
|
|
100
|
-
getCycle: jest.fn(),
|
|
101
|
-
getAllTasks: jest.fn(),
|
|
102
|
-
getAllCycles: jest.fn(),
|
|
103
|
-
};
|
|
104
|
-
mockWorkflowMethodologyAdapter = {
|
|
105
|
-
getTransitionRule: jest.fn(),
|
|
106
|
-
validateSignature: jest.fn(),
|
|
107
|
-
validateCustomRules: jest.fn(),
|
|
108
|
-
};
|
|
109
|
-
mockConfigManager = {
|
|
110
|
-
loadConfig: jest.fn(),
|
|
111
|
-
loadSession: jest.fn(),
|
|
112
|
-
getRootCycle: jest.fn(),
|
|
113
|
-
getProjectInfo: jest.fn(),
|
|
114
|
-
getActorState: jest.fn(),
|
|
115
|
-
updateActorState: jest.fn(),
|
|
116
|
-
getCloudSessionToken: jest.fn(),
|
|
117
|
-
constructor: { name: 'ConfigManager' },
|
|
118
|
-
};
|
|
119
|
-
// Mock stores
|
|
120
|
-
mockTaskStore = {
|
|
121
|
-
write: jest.fn().mockResolvedValue(undefined),
|
|
122
|
-
read: jest.fn().mockResolvedValue(null),
|
|
123
|
-
list: jest.fn().mockResolvedValue([]),
|
|
124
|
-
delete: jest.fn().mockResolvedValue(undefined),
|
|
125
|
-
exists: jest.fn().mockResolvedValue(false),
|
|
126
|
-
};
|
|
127
|
-
mockCycleStore = {
|
|
128
|
-
write: jest.fn().mockResolvedValue(undefined),
|
|
129
|
-
read: jest.fn().mockResolvedValue(null),
|
|
130
|
-
list: jest.fn().mockResolvedValue([]),
|
|
131
|
-
delete: jest.fn().mockResolvedValue(undefined),
|
|
132
|
-
exists: jest.fn().mockResolvedValue(false),
|
|
133
|
-
};
|
|
134
|
-
mockFs = fs;
|
|
135
|
-
mockFs.existsSync = existsSync;
|
|
136
|
-
// Configure default mock behavior
|
|
137
|
-
mockFs.existsSync.mockReturnValue(true); // Default: .git exists
|
|
138
|
-
// Mock factories
|
|
139
|
-
mockCreateTaskRecord = createTaskRecord;
|
|
140
|
-
mockCreateCycleRecord = createCycleRecord;
|
|
141
|
-
// Setup factory mocks
|
|
142
|
-
mockCreateTaskRecord.mockImplementation(async (payload) => ({
|
|
143
|
-
id: `${Date.now()}-task-${payload.title?.toLowerCase().replace(/\s+/g, '-') || 'test'}`,
|
|
144
|
-
title: payload.title || 'Test Task',
|
|
145
|
-
status: payload.status || 'draft',
|
|
146
|
-
priority: payload.priority || 'medium',
|
|
147
|
-
description: payload.description || '',
|
|
148
|
-
tags: payload.tags || [],
|
|
149
|
-
cycleIds: payload.cycleIds || [],
|
|
150
|
-
}));
|
|
151
|
-
mockCreateCycleRecord.mockImplementation(async (payload) => ({
|
|
152
|
-
id: `${Date.now()}-cycle-${payload.title?.toLowerCase().replace(/\s+/g, '-') || 'test'}`,
|
|
153
|
-
title: payload.title || 'Test Cycle',
|
|
154
|
-
status: payload.status || 'planning',
|
|
155
|
-
taskIds: payload.taskIds || [],
|
|
156
|
-
childCycleIds: payload.childCycleIds || [],
|
|
157
|
-
tags: payload.tags || [],
|
|
158
|
-
notes: payload.notes || '',
|
|
159
|
-
}));
|
|
160
|
-
// Create adapter with all dependencies
|
|
161
|
-
projectAdapter = new ProjectAdapter({
|
|
162
|
-
identityAdapter: mockIdentityAdapter,
|
|
163
|
-
backlogAdapter: mockBacklogAdapter,
|
|
164
|
-
workflowMethodologyAdapter: mockWorkflowMethodologyAdapter,
|
|
165
|
-
configManager: mockConfigManager,
|
|
166
|
-
taskStore: mockTaskStore,
|
|
167
|
-
cycleStore: mockCycleStore,
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
describe('Environment Validation (EARS 2, 7, 8)', () => {
|
|
171
|
-
it('[EARS-21] should validate current directory, not search upward for init', async () => {
|
|
172
|
-
// This test prevents the critical bug where init modifies parent repositories
|
|
173
|
-
// Simulate being in /packages/cli/ but wanting to init there, not in parent /solo-hub/
|
|
174
|
-
// Mock: no .git in current directory (should fail validation)
|
|
175
|
-
mockFs.existsSync.mockImplementation((path) => {
|
|
176
|
-
if (typeof path === 'string' && path.includes('/packages/cli/.git')) {
|
|
177
|
-
return false; // No .git in subdirectory
|
|
178
|
-
}
|
|
179
|
-
if (typeof path === 'string' && path.includes('/solo-hub/.git')) {
|
|
180
|
-
return true; // .git exists in parent (should NOT be found)
|
|
181
|
-
}
|
|
182
|
-
return false;
|
|
183
|
-
});
|
|
184
|
-
// Mock: no write permissions in current directory
|
|
185
|
-
mockFs.writeFile.mockRejectedValueOnce(new Error('Permission denied'));
|
|
186
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
|
|
187
|
-
const result = await projectAdapter.validateEnvironment('/test/project/packages/cli');
|
|
188
|
-
// Should validate the EXACT directory passed, not search upward
|
|
189
|
-
expect(result.isValid).toBe(false);
|
|
190
|
-
expect(result.isGitRepo).toBe(false); // Should be false for /packages/cli/
|
|
191
|
-
expect(result.warnings).toContain('Not a Git repository in directory: /test/project/packages/cli');
|
|
192
|
-
});
|
|
193
|
-
it('[EARS-22] should use GITGOV_ORIGINAL_DIR when provided (pnpm --filter case)', async () => {
|
|
194
|
-
// This test ensures pnpm --filter cli dev init validates the correct directory
|
|
195
|
-
// Mock environment variables as they would be set by our wrapper
|
|
196
|
-
const originalEnv = process.env['GITGOV_ORIGINAL_DIR'];
|
|
197
|
-
process.env['GITGOV_ORIGINAL_DIR'] = '/test/project'; // User executed from root
|
|
198
|
-
try {
|
|
199
|
-
// Mock: .git exists in original directory
|
|
200
|
-
mockFs.existsSync.mockImplementation((path) => {
|
|
201
|
-
if (typeof path === 'string' && path.includes('/test/project/.git')) {
|
|
202
|
-
return true; // .git exists in original directory
|
|
203
|
-
}
|
|
204
|
-
return false;
|
|
205
|
-
});
|
|
206
|
-
// Mock: .gitgov already exists in original directory
|
|
207
|
-
mockFs.writeFile.mockResolvedValueOnce(undefined);
|
|
208
|
-
mockFs.unlink.mockResolvedValueOnce(undefined);
|
|
209
|
-
mockFs.access.mockResolvedValueOnce(undefined); // .gitgov exists
|
|
210
|
-
const result = await projectAdapter.validateEnvironment(); // No path = use env var
|
|
211
|
-
expect(result.isValid).toBe(false);
|
|
212
|
-
expect(result.isGitRepo).toBe(true);
|
|
213
|
-
expect(result.isAlreadyInitialized).toBe(true);
|
|
214
|
-
expect(result.warnings).toContain('GitGovernance already initialized in directory: /test/project');
|
|
215
|
-
}
|
|
216
|
-
finally {
|
|
217
|
-
// Restore original environment
|
|
218
|
-
if (originalEnv) {
|
|
219
|
-
process.env['GITGOV_ORIGINAL_DIR'] = originalEnv;
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
delete process.env['GITGOV_ORIGINAL_DIR'];
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
it('[EARS-23] should create .gitgov in correct directory during init', async () => {
|
|
227
|
-
// This test ensures init creates .gitgov in the target directory, not in parent repos
|
|
228
|
-
const targetDirectory = '/tmp/new-project';
|
|
229
|
-
const originalEnv = process.env['GITGOV_ORIGINAL_DIR'];
|
|
230
|
-
process.env['GITGOV_ORIGINAL_DIR'] = targetDirectory;
|
|
231
|
-
try {
|
|
232
|
-
// Mock: .git exists in target directory
|
|
233
|
-
mockFs.existsSync.mockImplementation((path) => {
|
|
234
|
-
if (typeof path === 'string' && path.includes(`${targetDirectory}/.git`)) {
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
237
|
-
return false;
|
|
238
|
-
});
|
|
239
|
-
// Mock successful initialization
|
|
240
|
-
mockFs.writeFile.mockResolvedValue(undefined);
|
|
241
|
-
mockFs.unlink.mockResolvedValue(undefined);
|
|
242
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
|
|
243
|
-
mockFs.mkdir.mockResolvedValue(undefined);
|
|
244
|
-
mockFs.appendFile.mockResolvedValue(undefined);
|
|
245
|
-
const mockActor = createMockActorRecord();
|
|
246
|
-
const mockCycle = createMockCycleRecord();
|
|
247
|
-
mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
|
|
248
|
-
mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
|
|
249
|
-
const result = await projectAdapter.initializeProject({
|
|
250
|
-
name: 'New Project',
|
|
251
|
-
actorName: 'New User',
|
|
252
|
-
});
|
|
253
|
-
expect(result.success).toBe(true);
|
|
254
|
-
// Verify .gitgov directory creation was attempted in correct location
|
|
255
|
-
expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringContaining(targetDirectory), { recursive: true });
|
|
256
|
-
// Verify config.json was written to correct location
|
|
257
|
-
const configWriteCalls = mockFs.writeFile.mock.calls.filter(call => call[0].toString().includes('config.json'));
|
|
258
|
-
expect(configWriteCalls.length).toBeGreaterThan(0);
|
|
259
|
-
expect(configWriteCalls[0]?.[0]).toContain(targetDirectory);
|
|
260
|
-
}
|
|
261
|
-
finally {
|
|
262
|
-
// Restore original environment
|
|
263
|
-
if (originalEnv) {
|
|
264
|
-
process.env['GITGOV_ORIGINAL_DIR'] = originalEnv;
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
delete process.env['GITGOV_ORIGINAL_DIR'];
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
});
|
|
271
|
-
it('[EARS-2] should verify git repo permissions and previous state', async () => {
|
|
272
|
-
// Mock successful validation using static method
|
|
273
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
274
|
-
mockFs.writeFile.mockResolvedValueOnce(undefined);
|
|
275
|
-
mockFs.unlink.mockResolvedValueOnce(undefined);
|
|
276
|
-
mockFs.access.mockRejectedValueOnce(new Error('Directory does not exist'));
|
|
277
|
-
const result = await projectAdapter.validateEnvironment('/test/project');
|
|
278
|
-
expect(result.isValid).toBe(true);
|
|
279
|
-
expect(result.isGitRepo).toBe(true);
|
|
280
|
-
expect(result.hasWritePermissions).toBe(true);
|
|
281
|
-
expect(result.isAlreadyInitialized).toBe(false);
|
|
282
|
-
expect(result.warnings).toHaveLength(0);
|
|
283
|
-
});
|
|
284
|
-
it('[EARS-7] should return EnvironmentValidation with specific warnings', async () => {
|
|
285
|
-
// Mock ConfigManager static method for this test
|
|
286
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue(null);
|
|
287
|
-
// Mock failed validation - no write permissions and no .git
|
|
288
|
-
mockFs.writeFile.mockRejectedValueOnce(new Error('Permission denied'));
|
|
289
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
|
|
290
|
-
mockFs.existsSync.mockReturnValue(false); // No .git directory
|
|
291
|
-
const result = await projectAdapter.validateEnvironment('/invalid/path');
|
|
292
|
-
expect(result.isValid).toBe(false);
|
|
293
|
-
expect(result.isGitRepo).toBe(false); // Should be false since findProjectRoot returns null
|
|
294
|
-
expect(result.hasWritePermissions).toBe(false);
|
|
295
|
-
expect(result.warnings).toContain('Not a Git repository in directory: /invalid/path');
|
|
296
|
-
expect(result.warnings).toContain('No write permissions in target directory');
|
|
297
|
-
expect(result.suggestions).toContain("Run 'git init' to initialize a Git repository first");
|
|
298
|
-
});
|
|
299
|
-
it('[EARS-8] should detect already initialized GitGovernance project', async () => {
|
|
300
|
-
// Mock already initialized project
|
|
301
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
302
|
-
mockFs.writeFile.mockResolvedValueOnce(undefined);
|
|
303
|
-
mockFs.unlink.mockResolvedValueOnce(undefined);
|
|
304
|
-
mockFs.access.mockResolvedValueOnce(undefined); // .gitgov exists
|
|
305
|
-
const result = await projectAdapter.validateEnvironment('/test/project');
|
|
306
|
-
expect(result.isValid).toBe(false);
|
|
307
|
-
expect(result.isAlreadyInitialized).toBe(true);
|
|
308
|
-
expect(result.warnings).toContain('GitGovernance already initialized in directory: /test/project');
|
|
309
|
-
expect(result.suggestions).toContain("Use 'gitgov status' to check current state or choose a different directory");
|
|
310
|
-
});
|
|
311
|
-
});
|
|
312
|
-
describe('Project Initialization (EARS 1, 5)', () => {
|
|
313
|
-
beforeEach(() => {
|
|
314
|
-
// Setup successful mocks
|
|
315
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
316
|
-
mockFs.writeFile.mockResolvedValue(undefined);
|
|
317
|
-
mockFs.unlink.mockResolvedValue(undefined);
|
|
318
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
|
|
319
|
-
mockFs.mkdir.mockResolvedValue(undefined);
|
|
320
|
-
mockFs.appendFile.mockResolvedValue(undefined);
|
|
321
|
-
});
|
|
322
|
-
it('[EARS-1] should create complete project with 3-adapter orchestration', async () => {
|
|
323
|
-
const mockActor = createMockActorRecord();
|
|
324
|
-
const mockCycle = createMockCycleRecord();
|
|
325
|
-
mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
|
|
326
|
-
mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
|
|
327
|
-
const result = await projectAdapter.initializeProject({
|
|
328
|
-
name: 'Test Project',
|
|
329
|
-
actorName: 'Test User',
|
|
330
|
-
});
|
|
331
|
-
expect(result.success).toBe(true);
|
|
332
|
-
expect(result.projectName).toBe('Test Project');
|
|
333
|
-
expect(result.rootCycle).toBe(mockCycle.id);
|
|
334
|
-
expect(result.actor.id).toBe(mockActor.id);
|
|
335
|
-
expect(result.actor.displayName).toBe(mockActor.displayName);
|
|
336
|
-
expect(mockIdentityAdapter.createActor).toHaveBeenCalledWith({
|
|
337
|
-
type: 'human',
|
|
338
|
-
displayName: 'Test User',
|
|
339
|
-
roles: ['admin', 'author'],
|
|
340
|
-
}, 'bootstrap');
|
|
341
|
-
expect(mockBacklogAdapter.createCycle).toHaveBeenCalledWith(expect.objectContaining({
|
|
342
|
-
title: 'root',
|
|
343
|
-
status: 'planning',
|
|
344
|
-
}), mockActor.id);
|
|
345
|
-
});
|
|
346
|
-
it('[EARS-5] should return ProjectInitResult with complete metadata', async () => {
|
|
347
|
-
const mockActor = createMockActorRecord();
|
|
348
|
-
const mockCycle = createMockCycleRecord();
|
|
349
|
-
mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
|
|
350
|
-
mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
|
|
351
|
-
const result = await projectAdapter.initializeProject({
|
|
352
|
-
name: 'Test Project',
|
|
353
|
-
actorName: 'Test User',
|
|
354
|
-
methodology: 'scrum',
|
|
355
|
-
});
|
|
356
|
-
expect(result).toEqual({
|
|
357
|
-
success: true,
|
|
358
|
-
projectId: 'test-project',
|
|
359
|
-
projectName: 'Test Project',
|
|
360
|
-
rootCycle: mockCycle.id,
|
|
361
|
-
actor: {
|
|
362
|
-
id: mockActor.id,
|
|
363
|
-
displayName: mockActor.displayName,
|
|
364
|
-
publicKeyPath: expect.stringContaining(`${mockActor.id}.json`),
|
|
365
|
-
},
|
|
366
|
-
template: undefined,
|
|
367
|
-
initializationTime: expect.any(Number),
|
|
368
|
-
nextSteps: expect.arrayContaining([
|
|
369
|
-
"Run 'gitgov status' to see your project overview",
|
|
370
|
-
"Use 'gitgov task create' to add your first task"
|
|
371
|
-
]),
|
|
372
|
-
});
|
|
373
|
-
});
|
|
374
|
-
});
|
|
375
|
-
describe('Template Processing (EARS 3, 6)', () => {
|
|
376
|
-
beforeEach(() => {
|
|
377
|
-
const mockTemplate = {
|
|
378
|
-
cycles: [
|
|
379
|
-
{
|
|
380
|
-
title: 'Sprint 1',
|
|
381
|
-
status: 'active',
|
|
382
|
-
tasks: [
|
|
383
|
-
{ title: 'Task 1', priority: 'high', description: 'Test task 1' },
|
|
384
|
-
{ title: 'Task 2', priority: 'medium', description: 'Test task 2' },
|
|
385
|
-
],
|
|
386
|
-
},
|
|
387
|
-
],
|
|
388
|
-
};
|
|
389
|
-
mockFs.readFile.mockResolvedValue(JSON.stringify(mockTemplate));
|
|
390
|
-
});
|
|
391
|
-
it('[EARS-3] should create cycles and tasks using factories with validation', async () => {
|
|
392
|
-
const mockCycle = createMockCycleRecord();
|
|
393
|
-
const mockTask1 = createMockTaskRecord({ title: 'Task 1' });
|
|
394
|
-
const mockTask2 = createMockTaskRecord({ title: 'Task 2' });
|
|
395
|
-
mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
|
|
396
|
-
mockBacklogAdapter.createTask
|
|
397
|
-
.mockResolvedValueOnce(mockTask1)
|
|
398
|
-
.mockResolvedValueOnce(mockTask2);
|
|
399
|
-
const projectContext = {
|
|
400
|
-
projectId: 'test-project',
|
|
401
|
-
projectName: 'Test Project',
|
|
402
|
-
actorId: 'human:test-user',
|
|
403
|
-
rootCycle: 'cycle-123',
|
|
404
|
-
};
|
|
405
|
-
const result = await projectAdapter.processBlueprintTemplate('./template.json', projectContext);
|
|
406
|
-
expect(result.success).toBe(true);
|
|
407
|
-
expect(result.cyclesCreated).toBe(1);
|
|
408
|
-
expect(result.tasksCreated).toBe(2);
|
|
409
|
-
expect(result.createdIds.cycles).toContain(mockCycle.id);
|
|
410
|
-
expect(result.createdIds.tasks).toContain(mockTask1.id);
|
|
411
|
-
expect(result.createdIds.tasks).toContain(mockTask2.id);
|
|
412
|
-
expect(mockBacklogAdapter.createCycle).toHaveBeenCalledWith(expect.objectContaining({
|
|
413
|
-
title: 'Sprint 1',
|
|
414
|
-
status: 'active',
|
|
415
|
-
}), projectContext.actorId);
|
|
416
|
-
});
|
|
417
|
-
it('[EARS-6] should throw DetailedValidationError for invalid template', async () => {
|
|
418
|
-
mockFs.readFile.mockResolvedValue(JSON.stringify({ invalid: 'template' }));
|
|
419
|
-
const projectContext = {
|
|
420
|
-
projectId: 'test-project',
|
|
421
|
-
projectName: 'Test Project',
|
|
422
|
-
actorId: 'human:test-user',
|
|
423
|
-
rootCycle: 'cycle-123',
|
|
424
|
-
};
|
|
425
|
-
await expect(projectAdapter.processBlueprintTemplate('./invalid-template.json', projectContext)).rejects.toThrow(DetailedValidationError);
|
|
426
|
-
await expect(projectAdapter.processBlueprintTemplate('./invalid-template.json', projectContext)).rejects.toThrow('Invalid template format');
|
|
427
|
-
});
|
|
428
|
-
});
|
|
429
|
-
describe('Error Handling & Rollback (EARS 4, 13, 15, 16, 17)', () => {
|
|
430
|
-
it('[EARS-4] should invoke rollback automatically when initialization fails', async () => {
|
|
431
|
-
// Mock ConfigManager static method for this test
|
|
432
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
433
|
-
// Setup environment validation to pass
|
|
434
|
-
mockFs.writeFile.mockResolvedValue(undefined);
|
|
435
|
-
mockFs.unlink.mockResolvedValue(undefined);
|
|
436
|
-
mockFs.access.mockRejectedValueOnce(new Error('Directory does not exist')); // .gitgov doesn't exist (validation)
|
|
437
|
-
mockFs.mkdir.mockResolvedValue(undefined);
|
|
438
|
-
// Setup identity creation to fail
|
|
439
|
-
mockIdentityAdapter.createActor.mockRejectedValueOnce(new Error('Identity creation failed'));
|
|
440
|
-
// Setup rollback mocks
|
|
441
|
-
mockFs.access.mockResolvedValueOnce(undefined); // .gitgov exists for rollback
|
|
442
|
-
mockFs.rm.mockResolvedValue(undefined);
|
|
443
|
-
await expect(projectAdapter.initializeProject({
|
|
444
|
-
name: 'Test Project',
|
|
445
|
-
actorName: 'Test User',
|
|
446
|
-
})).rejects.toThrow('Identity creation failed');
|
|
447
|
-
// Verify rollback was called
|
|
448
|
-
expect(mockFs.rm).toHaveBeenCalledWith(expect.stringContaining('.gitgov'), { recursive: true, force: true });
|
|
449
|
-
});
|
|
450
|
-
it('[EARS-13] should capture adapter errors with specific context', async () => {
|
|
451
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
452
|
-
mockFs.writeFile.mockResolvedValue(undefined);
|
|
453
|
-
mockFs.unlink.mockResolvedValue(undefined);
|
|
454
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
|
|
455
|
-
mockFs.mkdir.mockResolvedValue(undefined);
|
|
456
|
-
const specificError = new Error('BacklogAdapter connection failed');
|
|
457
|
-
mockIdentityAdapter.createActor.mockResolvedValueOnce(createMockActorRecord());
|
|
458
|
-
mockBacklogAdapter.createCycle.mockRejectedValueOnce(specificError);
|
|
459
|
-
await expect(projectAdapter.initializeProject({
|
|
460
|
-
name: 'Test Project',
|
|
461
|
-
actorName: 'Test User',
|
|
462
|
-
})).rejects.toThrow('BacklogAdapter connection failed');
|
|
463
|
-
});
|
|
464
|
-
it('[EARS-15] should provide specific guidance for environment errors', async () => {
|
|
465
|
-
// Mock ConfigManager static method for this test
|
|
466
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue(null);
|
|
467
|
-
mockFs.writeFile.mockRejectedValueOnce(new Error('Permission denied'));
|
|
468
|
-
mockFs.existsSync.mockReturnValue(false); // No .git directory
|
|
469
|
-
const result = await projectAdapter.validateEnvironment('/invalid/path');
|
|
470
|
-
expect(result.isValid).toBe(false);
|
|
471
|
-
expect(result.suggestions).toContain("Run 'git init' to initialize a Git repository first");
|
|
472
|
-
expect(result.suggestions).toContain('Ensure you have write permissions in the target directory');
|
|
473
|
-
});
|
|
474
|
-
it('[EARS-16] should provide field-level errors for DetailedValidationError', async () => {
|
|
475
|
-
mockFs.readFile.mockResolvedValue('invalid json');
|
|
476
|
-
const projectContext = {
|
|
477
|
-
projectId: 'test-project',
|
|
478
|
-
projectName: 'Test Project',
|
|
479
|
-
actorId: 'human:test-user',
|
|
480
|
-
rootCycle: 'cycle-123',
|
|
481
|
-
};
|
|
482
|
-
await expect(projectAdapter.processBlueprintTemplate('./invalid.json', projectContext)).rejects.toThrow(DetailedValidationError);
|
|
483
|
-
try {
|
|
484
|
-
await projectAdapter.processBlueprintTemplate('./invalid.json', projectContext);
|
|
485
|
-
}
|
|
486
|
-
catch (error) {
|
|
487
|
-
expect(error).toBeInstanceOf(DetailedValidationError);
|
|
488
|
-
if (error instanceof DetailedValidationError) {
|
|
489
|
-
expect(error.ajvErrors).toBeDefined();
|
|
490
|
-
expect(error.ajvErrors[0]).toEqual({
|
|
491
|
-
field: 'template',
|
|
492
|
-
message: expect.any(String),
|
|
493
|
-
value: './invalid.json',
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
});
|
|
498
|
-
it('[EARS-17] should handle file system errors gracefully', async () => {
|
|
499
|
-
// Mock ConfigManager static method for this test
|
|
500
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
501
|
-
// Mock file system error during permission check
|
|
502
|
-
mockFs.writeFile.mockRejectedValueOnce(new Error('Disk full'));
|
|
503
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
|
|
504
|
-
mockFs.existsSync.mockReturnValue(true); // .git exists but other errors
|
|
505
|
-
const result = await projectAdapter.validateEnvironment('/test/path');
|
|
506
|
-
expect(result.isValid).toBe(false);
|
|
507
|
-
expect(result.warnings).toContain('No write permissions in target directory');
|
|
508
|
-
expect(result.suggestions).toContain('Ensure you have write permissions in the target directory');
|
|
509
|
-
});
|
|
510
|
-
});
|
|
511
|
-
describe('Graceful Degradation (EARS 14)', () => {
|
|
512
|
-
it('[EARS-14] should continue without optional dependencies with warnings', async () => {
|
|
513
|
-
// Create adapter without optional dependencies
|
|
514
|
-
const minimalAdapter = new ProjectAdapter({
|
|
515
|
-
identityAdapter: mockIdentityAdapter,
|
|
516
|
-
backlogAdapter: mockBacklogAdapter,
|
|
517
|
-
workflowMethodologyAdapter: mockWorkflowMethodologyAdapter,
|
|
518
|
-
configManager: mockConfigManager,
|
|
519
|
-
taskStore: mockTaskStore,
|
|
520
|
-
cycleStore: mockCycleStore,
|
|
521
|
-
// No eventBus, platformApi, or userManagement
|
|
522
|
-
});
|
|
523
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
524
|
-
mockFs.writeFile.mockResolvedValue(undefined);
|
|
525
|
-
mockFs.unlink.mockResolvedValue(undefined);
|
|
526
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
|
|
527
|
-
mockFs.mkdir.mockResolvedValue(undefined);
|
|
528
|
-
mockFs.appendFile.mockResolvedValue(undefined);
|
|
529
|
-
const mockActor = createMockActorRecord();
|
|
530
|
-
const mockCycle = createMockCycleRecord();
|
|
531
|
-
mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
|
|
532
|
-
mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
|
|
533
|
-
const result = await minimalAdapter.initializeProject({
|
|
534
|
-
name: 'Test Project',
|
|
535
|
-
actorName: 'Test User',
|
|
536
|
-
});
|
|
537
|
-
expect(result.success).toBe(true);
|
|
538
|
-
expect(result.projectName).toBe('Test Project');
|
|
539
|
-
// Should work without optional dependencies
|
|
540
|
-
});
|
|
541
|
-
});
|
|
542
|
-
describe('Future Platform Methods (EARS 19, 20)', () => {
|
|
543
|
-
it('[EARS-19] should return project metadata from ConfigManager', async () => {
|
|
544
|
-
const mockConfig = {
|
|
545
|
-
protocolVersion: '1.0.0',
|
|
546
|
-
projectId: 'test-project',
|
|
547
|
-
projectName: 'Test Project',
|
|
548
|
-
rootCycle: 'cycle-123',
|
|
549
|
-
blueprints: { root: './blueprints' },
|
|
550
|
-
state: { branch: 'gitgov-state' },
|
|
551
|
-
};
|
|
552
|
-
mockConfigManager.loadConfig.mockResolvedValueOnce(mockConfig);
|
|
553
|
-
const result = await projectAdapter.getProjectInfo();
|
|
554
|
-
expect(result).toEqual({
|
|
555
|
-
id: 'test-project',
|
|
556
|
-
name: 'Test Project',
|
|
557
|
-
rootCycle: 'cycle-123',
|
|
558
|
-
protocolVersion: '1.0.0',
|
|
559
|
-
});
|
|
560
|
-
});
|
|
561
|
-
it('[EARS-20] should handle missing configuration gracefully', async () => {
|
|
562
|
-
mockConfigManager.loadConfig.mockResolvedValueOnce(null);
|
|
563
|
-
const result = await projectAdapter.getProjectInfo();
|
|
564
|
-
expect(result).toBeNull();
|
|
565
|
-
});
|
|
566
|
-
});
|
|
567
|
-
describe('Type Safety (EARS 18)', () => {
|
|
568
|
-
it('[EARS-18] should compile without any or unknown types unjustified', () => {
|
|
569
|
-
// This test ensures TypeScript compilation is clean
|
|
570
|
-
// The fact that this test file compiles without errors validates EARS-18
|
|
571
|
-
expect(true).toBe(true);
|
|
572
|
-
});
|
|
573
|
-
});
|
|
574
|
-
describe('Integration Tests', () => {
|
|
575
|
-
it('should work end-to-end with real-like data', async () => {
|
|
576
|
-
// Setup complete successful scenario
|
|
577
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
578
|
-
mockFs.writeFile.mockResolvedValue(undefined);
|
|
579
|
-
mockFs.unlink.mockResolvedValue(undefined);
|
|
580
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
|
|
581
|
-
mockFs.mkdir.mockResolvedValue(undefined);
|
|
582
|
-
mockFs.appendFile.mockResolvedValue(undefined);
|
|
583
|
-
const mockActor = createMockActorRecord({
|
|
584
|
-
id: 'human:project-owner',
|
|
585
|
-
displayName: 'Project Owner',
|
|
586
|
-
});
|
|
587
|
-
const mockCycle = createMockCycleRecord({
|
|
588
|
-
id: 'cycle-root-project',
|
|
589
|
-
title: 'My Awesome Project - Root Cycle',
|
|
590
|
-
});
|
|
591
|
-
mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
|
|
592
|
-
mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
|
|
593
|
-
const envValidation = await projectAdapter.validateEnvironment();
|
|
594
|
-
expect(envValidation.isValid).toBe(true);
|
|
595
|
-
const initResult = await projectAdapter.initializeProject({
|
|
596
|
-
name: 'My Awesome Project',
|
|
597
|
-
actorName: 'Project Owner',
|
|
598
|
-
methodology: 'scrum',
|
|
599
|
-
});
|
|
600
|
-
expect(initResult.success).toBe(true);
|
|
601
|
-
expect(initResult.projectName).toBe('My Awesome Project');
|
|
602
|
-
expect(initResult.actor.displayName).toBe('Project Owner');
|
|
603
|
-
expect(initResult.initializationTime).toBeGreaterThanOrEqual(0);
|
|
604
|
-
});
|
|
605
|
-
});
|
|
606
|
-
describe('Performance Tests', () => {
|
|
607
|
-
it('should complete initialization in reasonable time', async () => {
|
|
608
|
-
jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
|
|
609
|
-
mockFs.writeFile.mockResolvedValue(undefined);
|
|
610
|
-
mockFs.unlink.mockResolvedValue(undefined);
|
|
611
|
-
mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
|
|
612
|
-
mockFs.mkdir.mockResolvedValue(undefined);
|
|
613
|
-
mockFs.appendFile.mockResolvedValue(undefined);
|
|
614
|
-
mockIdentityAdapter.createActor.mockResolvedValueOnce(createMockActorRecord());
|
|
615
|
-
mockBacklogAdapter.createCycle.mockResolvedValueOnce(createMockCycleRecord());
|
|
616
|
-
const startTime = Date.now();
|
|
617
|
-
await projectAdapter.initializeProject({
|
|
618
|
-
name: 'Performance Test Project',
|
|
619
|
-
actorName: 'Test User',
|
|
620
|
-
});
|
|
621
|
-
const endTime = Date.now();
|
|
622
|
-
// Should complete within reasonable time (mocked, so should be very fast)
|
|
623
|
-
expect(endTime - startTime).toBeLessThan(1000);
|
|
624
|
-
});
|
|
625
|
-
});
|
|
626
|
-
});
|
|
627
|
-
//# sourceMappingURL=project_adapter.test.js.map
|