reviewflow 3.6.0 → 3.7.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/CHANGELOG.md +28 -0
- package/dist/config/projectConfig.d.ts +2 -0
- package/dist/config/projectConfig.d.ts.map +1 -1
- package/dist/config/projectConfig.js +17 -0
- package/dist/config/projectConfig.js.map +1 -1
- package/dist/entities/backfill/backfillProgress.d.ts +7 -0
- package/dist/entities/backfill/backfillProgress.d.ts.map +1 -0
- package/dist/entities/backfill/backfillProgress.js +2 -0
- package/dist/entities/backfill/backfillProgress.js.map +1 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.d.ts +8 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.d.ts.map +1 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.js +21 -0
- package/dist/entities/cleanup/retentionPolicy.valueObject.js.map +1 -0
- package/dist/entities/diffStats/diffStats.d.ts +6 -0
- package/dist/entities/diffStats/diffStats.d.ts.map +1 -0
- package/dist/entities/diffStats/diffStats.js +2 -0
- package/dist/entities/diffStats/diffStats.js.map +1 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.d.ts +5 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.d.ts.map +1 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.js +2 -0
- package/dist/entities/diffStats/diffStatsFetch.gateway.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.d.ts +18 -0
- package/dist/entities/packageVersion/packageVersion.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.gateway.d.ts +4 -0
- package/dist/entities/packageVersion/packageVersion.gateway.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.gateway.js +2 -0
- package/dist/entities/packageVersion/packageVersion.gateway.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.guard.d.ts +7 -0
- package/dist/entities/packageVersion/packageVersion.guard.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.guard.js +13 -0
- package/dist/entities/packageVersion/packageVersion.guard.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.js +2 -0
- package/dist/entities/packageVersion/packageVersion.js.map +1 -0
- package/dist/entities/packageVersion/packageVersion.schema.d.ts +12 -0
- package/dist/entities/packageVersion/packageVersion.schema.d.ts.map +1 -0
- package/dist/entities/packageVersion/packageVersion.schema.js +11 -0
- package/dist/entities/packageVersion/packageVersion.schema.js.map +1 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts +8 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.d.ts.map +1 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.js +2 -0
- package/dist/entities/packageVersion/selfUpdateCommand.gateway.js.map +1 -0
- package/dist/entities/packageVersion/versionCache.gateway.d.ts +7 -0
- package/dist/entities/packageVersion/versionCache.gateway.d.ts.map +1 -0
- package/dist/entities/packageVersion/versionCache.gateway.js +2 -0
- package/dist/entities/packageVersion/versionCache.gateway.js.map +1 -0
- package/dist/entities/stats/projectStats.d.ts +36 -0
- package/dist/entities/stats/projectStats.d.ts.map +1 -0
- package/dist/entities/stats/projectStats.js +2 -0
- package/dist/entities/stats/projectStats.js.map +1 -0
- package/dist/entities/stats/recalculateBody.guard.d.ts +11 -0
- package/dist/entities/stats/recalculateBody.guard.d.ts.map +1 -0
- package/dist/entities/stats/recalculateBody.guard.js +9 -0
- package/dist/entities/stats/recalculateBody.guard.js.map +1 -0
- package/dist/entities/stats/stats.gateway.d.ts +7 -0
- package/dist/entities/stats/stats.gateway.d.ts.map +1 -0
- package/dist/entities/stats/stats.gateway.js +2 -0
- package/dist/entities/stats/stats.gateway.js.map +1 -0
- package/dist/entities/tracking/reviewEvent.d.ts +2 -0
- package/dist/entities/tracking/reviewEvent.d.ts.map +1 -1
- package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
- package/dist/frameworks/claude/claudeInvoker.js +15 -1
- package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
- package/dist/frameworks/scheduler/cleanupScheduler.d.ts +16 -0
- package/dist/frameworks/scheduler/cleanupScheduler.d.ts.map +1 -0
- package/dist/frameworks/scheduler/cleanupScheduler.js +35 -0
- package/dist/frameworks/scheduler/cleanupScheduler.js.map +1 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.d.ts +16 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.d.ts.map +1 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.js +44 -0
- package/dist/interface-adapters/controllers/http/cleanup.routes.js.map +1 -0
- package/dist/interface-adapters/controllers/http/health.routes.d.ts +3 -1
- package/dist/interface-adapters/controllers/http/health.routes.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/http/health.routes.js +5 -1
- package/dist/interface-adapters/controllers/http/health.routes.js.map +1 -1
- package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +13 -2
- package/dist/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
- package/dist/interface-adapters/controllers/http/stats.routes.d.ts +20 -6
- package/dist/interface-adapters/controllers/http/stats.routes.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/http/stats.routes.js +35 -2
- package/dist/interface-adapters/controllers/http/stats.routes.js.map +1 -1
- package/dist/interface-adapters/controllers/http/version.routes.d.ts +18 -0
- package/dist/interface-adapters/controllers/http/version.routes.d.ts.map +1 -0
- package/dist/interface-adapters/controllers/http/version.routes.js +18 -0
- package/dist/interface-adapters/controllers/http/version.routes.js.map +1 -0
- package/dist/interface-adapters/controllers/webhook/github.controller.d.ts +2 -0
- package/dist/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/webhook/github.controller.js +9 -3
- package/dist/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.d.ts +2 -0
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.js +17 -5
- package/dist/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.d.ts +10 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.js +26 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.github.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.d.ts +10 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.js +28 -0
- package/dist/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.d.ts +7 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.js +47 -0
- package/dist/interface-adapters/gateways/fileSystem/reviewLogFile.fileSystem.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts +2 -2
- package/dist/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts.map +1 -1
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.d.ts +7 -0
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.js +25 -0
- package/dist/interface-adapters/gateways/packageVersion.npm.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.d.ts +12 -0
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.js +2 -0
- package/dist/interface-adapters/gateways/reviewLogFile.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts +19 -0
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js +44 -0
- package/dist/interface-adapters/gateways/selfUpdate.cli.gateway.js.map +1 -0
- package/dist/interface-adapters/gateways/stats.gateway.d.ts +1 -6
- package/dist/interface-adapters/gateways/stats.gateway.d.ts.map +1 -1
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.d.ts +12 -0
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.d.ts.map +1 -0
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.js +22 -0
- package/dist/interface-adapters/gateways/versionCache.memory.gateway.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/index.html +359 -40
- package/dist/interface-adapters/views/dashboard/modules/cleanup.d.ts +10 -0
- package/dist/interface-adapters/views/dashboard/modules/cleanup.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/cleanup.js +45 -0
- package/dist/interface-adapters/views/dashboard/modules/cleanup.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.d.ts +13 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.js +71 -0
- package/dist/interface-adapters/views/dashboard/modules/collapsibleList.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/i18n.d.ts.map +1 -1
- package/dist/interface-adapters/views/dashboard/modules/i18n.js +96 -0
- package/dist/interface-adapters/views/dashboard/modules/i18n.js.map +1 -1
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.d.ts +25 -0
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.js +414 -0
- package/dist/interface-adapters/views/dashboard/modules/mrSheet.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.d.ts +35 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.js +476 -0
- package/dist/interface-adapters/views/dashboard/modules/statsCharts.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.d.ts +16 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.d.ts.map +1 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.js +54 -0
- package/dist/interface-adapters/views/dashboard/modules/versionUpdate.js.map +1 -0
- package/dist/interface-adapters/views/dashboard/styles.css +939 -0
- package/dist/main/dependencies.d.ts +2 -0
- package/dist/main/dependencies.d.ts.map +1 -1
- package/dist/main/dependencies.js +2 -0
- package/dist/main/dependencies.js.map +1 -1
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +55 -2
- package/dist/main/routes.js.map +1 -1
- package/dist/main/server.d.ts.map +1 -1
- package/dist/main/server.js +8 -0
- package/dist/main/server.js.map +1 -1
- package/dist/main/websocket.d.ts +2 -0
- package/dist/main/websocket.d.ts.map +1 -1
- package/dist/main/websocket.js +13 -0
- package/dist/main/websocket.js.map +1 -1
- package/dist/services/statsService.d.ts +8 -32
- package/dist/services/statsService.d.ts.map +1 -1
- package/dist/services/statsService.js +27 -22
- package/dist/services/statsService.js.map +1 -1
- package/dist/shared/foundation/commandExecutor.d.ts +2 -0
- package/dist/shared/foundation/commandExecutor.d.ts.map +1 -0
- package/dist/shared/foundation/commandExecutor.js +2 -0
- package/dist/shared/foundation/commandExecutor.js.map +1 -0
- package/dist/tests/factories/diffStats.factory.d.ts +5 -0
- package/dist/tests/factories/diffStats.factory.d.ts.map +1 -0
- package/dist/tests/factories/diffStats.factory.js +11 -0
- package/dist/tests/factories/diffStats.factory.js.map +1 -0
- package/dist/tests/factories/packageVersion.factory.d.ts +7 -0
- package/dist/tests/factories/packageVersion.factory.d.ts.map +1 -0
- package/dist/tests/factories/packageVersion.factory.js +18 -0
- package/dist/tests/factories/packageVersion.factory.js.map +1 -0
- package/dist/tests/factories/projectStats.factory.d.ts +3 -1
- package/dist/tests/factories/projectStats.factory.d.ts.map +1 -1
- package/dist/tests/factories/projectStats.factory.js +17 -3
- package/dist/tests/factories/projectStats.factory.js.map +1 -1
- package/dist/tests/stubs/diffStatsFetch.stub.d.ts +11 -0
- package/dist/tests/stubs/diffStatsFetch.stub.d.ts.map +1 -0
- package/dist/tests/stubs/diffStatsFetch.stub.js +19 -0
- package/dist/tests/stubs/diffStatsFetch.stub.js.map +1 -0
- package/dist/tests/stubs/packageVersion.stub.d.ts +7 -0
- package/dist/tests/stubs/packageVersion.stub.d.ts.map +1 -0
- package/dist/tests/stubs/packageVersion.stub.js +10 -0
- package/dist/tests/stubs/packageVersion.stub.js.map +1 -0
- package/dist/tests/stubs/reviewLogFile.stub.d.ts +15 -0
- package/dist/tests/stubs/reviewLogFile.stub.d.ts.map +1 -0
- package/dist/tests/stubs/reviewLogFile.stub.js +35 -0
- package/dist/tests/stubs/reviewLogFile.stub.js.map +1 -0
- package/dist/tests/stubs/selfUpdate.stub.d.ts +12 -0
- package/dist/tests/stubs/selfUpdate.stub.d.ts.map +1 -0
- package/dist/tests/stubs/selfUpdate.stub.js +18 -0
- package/dist/tests/stubs/selfUpdate.stub.js.map +1 -0
- package/dist/tests/stubs/stats.stub.d.ts +2 -2
- package/dist/tests/stubs/stats.stub.d.ts.map +1 -1
- package/dist/tests/stubs/versionCache.stub.d.ts +11 -0
- package/dist/tests/stubs/versionCache.stub.d.ts.map +1 -0
- package/dist/tests/stubs/versionCache.stub.js +18 -0
- package/dist/tests/stubs/versionCache.stub.js.map +1 -0
- package/dist/tests/units/config/projectConfig.test.js +60 -1
- package/dist/tests/units/config/projectConfig.test.js.map +1 -1
- package/dist/tests/units/entities/backfill/backfillProgress.test.d.ts +2 -0
- package/dist/tests/units/entities/backfill/backfillProgress.test.d.ts.map +1 -0
- package/dist/tests/units/entities/backfill/backfillProgress.test.js +40 -0
- package/dist/tests/units/entities/backfill/backfillProgress.test.js.map +1 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.d.ts +2 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.d.ts.map +1 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.js +47 -0
- package/dist/tests/units/entities/cleanup/retentionPolicy.valueObject.test.js.map +1 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.d.ts +2 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.d.ts.map +1 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.js +27 -0
- package/dist/tests/units/entities/diffStats/diffStats.test.js.map +1 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.d.ts +2 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.d.ts.map +1 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.js +154 -0
- package/dist/tests/units/entities/packageVersion/packageVersion.test.js.map +1 -0
- package/dist/tests/units/factories/packageVersion.factory.test.d.ts +2 -0
- package/dist/tests/units/factories/packageVersion.factory.test.d.ts.map +1 -0
- package/dist/tests/units/factories/packageVersion.factory.test.js +37 -0
- package/dist/tests/units/factories/packageVersion.factory.test.js.map +1 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.d.ts +2 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.d.ts.map +1 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.js +74 -0
- package/dist/tests/units/frameworks/scheduler/cleanupScheduler.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.js +62 -0
- package/dist/tests/units/interface-adapters/controllers/http/cleanup.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js +96 -0
- package/dist/tests/units/interface-adapters/controllers/http/health.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.js +82 -0
- package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js +83 -0
- package/dist/tests/units/interface-adapters/controllers/http/version.routes.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +3 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.js +63 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.github.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.js +94 -0
- package/dist/tests/units/interface-adapters/gateways/diffStatsFetch.gitlab.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.js +42 -0
- package/dist/tests/units/interface-adapters/gateways/packageVersion.npm.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.js +65 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.fileSystem.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.js +63 -0
- package/dist/tests/units/interface-adapters/gateways/reviewLogFile.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/reviewRequestTracking.gateway.test.js +2 -0
- package/dist/tests/units/interface-adapters/gateways/reviewRequestTracking.gateway.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js +33 -0
- package/dist/tests/units/interface-adapters/gateways/selfUpdate.cli.gateway.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.js +38 -0
- package/dist/tests/units/interface-adapters/gateways/versionCache.memory.gateway.test.js.map +1 -0
- package/dist/tests/units/services/statsService.diffStats.test.d.ts +2 -0
- package/dist/tests/units/services/statsService.diffStats.test.d.ts.map +1 -0
- package/dist/tests/units/services/statsService.diffStats.test.js +61 -0
- package/dist/tests/units/services/statsService.diffStats.test.js.map +1 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.d.ts +2 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.d.ts.map +1 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.js +20 -0
- package/dist/tests/units/stubs/packageVersion.stub.test.js.map +1 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.d.ts +2 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.d.ts.map +1 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.js +30 -0
- package/dist/tests/units/stubs/selfUpdate.stub.test.js.map +1 -0
- package/dist/tests/units/stubs/versionCache.stub.test.d.ts +2 -0
- package/dist/tests/units/stubs/versionCache.stub.test.d.ts.map +1 -0
- package/dist/tests/units/stubs/versionCache.stub.test.js +34 -0
- package/dist/tests/units/stubs/versionCache.stub.test.js.map +1 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.js +83 -0
- package/dist/tests/units/usecases/cleanup/cleanupExpiredReviews.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.js +186 -0
- package/dist/tests/units/usecases/stats/backfillDiffStats.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.js +130 -0
- package/dist/tests/units/usecases/stats/recalculateProjectStats.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.js +138 -0
- package/dist/tests/units/usecases/stats/recalculateWithBackfill.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/tracking/recordReviewCompletion.usecase.test.js +31 -2
- package/dist/tests/units/usecases/tracking/recordReviewCompletion.usecase.test.js.map +1 -1
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.js +63 -0
- package/dist/tests/units/usecases/version/checkVersion.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js +21 -0
- package/dist/tests/units/usecases/version/triggerSelfUpdate.usecase.test.js.map +1 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.d.ts +13 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.d.ts.map +1 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.js +41 -0
- package/dist/usecases/cleanup/cleanupExpiredReviews.usecase.js.map +1 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.d.ts +18 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.d.ts.map +1 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.js +43 -0
- package/dist/usecases/stats/backfillDiffStats.usecase.js.map +1 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.d.ts +7 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.d.ts.map +1 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.js +47 -0
- package/dist/usecases/stats/recalculateProjectStats.usecase.js.map +1 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.d.ts +22 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.d.ts.map +1 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.js +33 -0
- package/dist/usecases/stats/recalculateWithBackfill.usecase.js.map +1 -0
- package/dist/usecases/tracking/recordReviewCompletion.usecase.d.ts +2 -0
- package/dist/usecases/tracking/recordReviewCompletion.usecase.d.ts.map +1 -1
- package/dist/usecases/tracking/recordReviewCompletion.usecase.js +1 -0
- package/dist/usecases/tracking/recordReviewCompletion.usecase.js.map +1 -1
- package/dist/usecases/version/checkVersion.usecase.d.ts +13 -0
- package/dist/usecases/version/checkVersion.usecase.d.ts.map +1 -0
- package/dist/usecases/version/checkVersion.usecase.js +20 -0
- package/dist/usecases/version/checkVersion.usecase.js.map +1 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts +7 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.d.ts.map +1 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.js +9 -0
- package/dist/usecases/version/triggerSelfUpdate.usecase.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffStats.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/entities/diffStats/diffStats.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAE5C,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACxC,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAE9D,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageVersion.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/units/entities/packageVersion/packageVersion.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { npmRegistryResponseSchema, versionCheckResultSchema, } from '../../../../entities/packageVersion/packageVersion.schema.js';
|
|
3
|
+
import { parseNpmRegistryResponse, safeParseNpmRegistryResponse, isValidNpmRegistryResponse, } from '../../../../entities/packageVersion/packageVersion.guard.js';
|
|
4
|
+
describe('npmRegistryResponseSchema', () => {
|
|
5
|
+
it('should validate a valid npm registry response', () => {
|
|
6
|
+
const response = { version: '2.0.0' };
|
|
7
|
+
const result = npmRegistryResponseSchema.safeParse(response);
|
|
8
|
+
expect(result.success).toBe(true);
|
|
9
|
+
});
|
|
10
|
+
it('should reject a response without version field', () => {
|
|
11
|
+
const response = { name: 'some-package' };
|
|
12
|
+
const result = npmRegistryResponseSchema.safeParse(response);
|
|
13
|
+
expect(result.success).toBe(false);
|
|
14
|
+
});
|
|
15
|
+
it('should reject a response with non-string version', () => {
|
|
16
|
+
const response = { version: 123 };
|
|
17
|
+
const result = npmRegistryResponseSchema.safeParse(response);
|
|
18
|
+
expect(result.success).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
it('should reject null input', () => {
|
|
21
|
+
const result = npmRegistryResponseSchema.safeParse(null);
|
|
22
|
+
expect(result.success).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('versionCheckResultSchema', () => {
|
|
26
|
+
it('should validate a complete version check result', () => {
|
|
27
|
+
const checkResult = {
|
|
28
|
+
currentVersion: '1.0.0',
|
|
29
|
+
latestVersion: '2.0.0',
|
|
30
|
+
updateAvailable: true,
|
|
31
|
+
checkedAt: '2026-03-14T10:00:00Z',
|
|
32
|
+
};
|
|
33
|
+
const result = versionCheckResultSchema.safeParse(checkResult);
|
|
34
|
+
expect(result.success).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
it('should validate a result with null latestVersion', () => {
|
|
37
|
+
const checkResult = {
|
|
38
|
+
currentVersion: '1.0.0',
|
|
39
|
+
latestVersion: null,
|
|
40
|
+
updateAvailable: false,
|
|
41
|
+
checkedAt: '2026-03-14T10:00:00Z',
|
|
42
|
+
};
|
|
43
|
+
const result = versionCheckResultSchema.safeParse(checkResult);
|
|
44
|
+
expect(result.success).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it('should reject a result with missing fields', () => {
|
|
47
|
+
const checkResult = {
|
|
48
|
+
currentVersion: '1.0.0',
|
|
49
|
+
};
|
|
50
|
+
const result = versionCheckResultSchema.safeParse(checkResult);
|
|
51
|
+
expect(result.success).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
it('should reject a result with non-boolean updateAvailable', () => {
|
|
54
|
+
const checkResult = {
|
|
55
|
+
currentVersion: '1.0.0',
|
|
56
|
+
latestVersion: '2.0.0',
|
|
57
|
+
updateAvailable: 'yes',
|
|
58
|
+
checkedAt: '2026-03-14T10:00:00Z',
|
|
59
|
+
};
|
|
60
|
+
const result = versionCheckResultSchema.safeParse(checkResult);
|
|
61
|
+
expect(result.success).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('NpmRegistryResponse Guard', () => {
|
|
65
|
+
describe('parseNpmRegistryResponse', () => {
|
|
66
|
+
it('should parse a valid npm registry response', () => {
|
|
67
|
+
const response = { version: '2.0.0' };
|
|
68
|
+
const result = parseNpmRegistryResponse(response);
|
|
69
|
+
expect(result.version).toBe('2.0.0');
|
|
70
|
+
});
|
|
71
|
+
it('should throw on invalid npm registry response', () => {
|
|
72
|
+
expect(() => parseNpmRegistryResponse({ invalid: true })).toThrow();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('safeParseNpmRegistryResponse', () => {
|
|
76
|
+
it('should return success true for valid response', () => {
|
|
77
|
+
const response = { version: '1.5.0' };
|
|
78
|
+
const result = safeParseNpmRegistryResponse(response);
|
|
79
|
+
expect(result.success).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it('should return success false for invalid response', () => {
|
|
82
|
+
const result = safeParseNpmRegistryResponse({ version: 42 });
|
|
83
|
+
expect(result.success).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('isValidNpmRegistryResponse', () => {
|
|
87
|
+
it('should return true for valid response', () => {
|
|
88
|
+
expect(isValidNpmRegistryResponse({ version: '3.0.0' })).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
it('should return false for invalid response', () => {
|
|
91
|
+
expect(isValidNpmRegistryResponse(null)).toBe(false);
|
|
92
|
+
expect(isValidNpmRegistryResponse({ name: 'pkg' })).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('VersionCheckResult type', () => {
|
|
97
|
+
it('should allow creating a VersionCheckResult with all fields', () => {
|
|
98
|
+
const result = {
|
|
99
|
+
currentVersion: '1.0.0',
|
|
100
|
+
latestVersion: '2.0.0',
|
|
101
|
+
updateAvailable: true,
|
|
102
|
+
checkedAt: '2026-03-14T10:00:00Z',
|
|
103
|
+
};
|
|
104
|
+
expect(result.currentVersion).toBe('1.0.0');
|
|
105
|
+
expect(result.latestVersion).toBe('2.0.0');
|
|
106
|
+
expect(result.updateAvailable).toBe(true);
|
|
107
|
+
expect(result.checkedAt).toBe('2026-03-14T10:00:00Z');
|
|
108
|
+
});
|
|
109
|
+
it('should allow null latestVersion', () => {
|
|
110
|
+
const result = {
|
|
111
|
+
currentVersion: '1.0.0',
|
|
112
|
+
latestVersion: null,
|
|
113
|
+
updateAvailable: false,
|
|
114
|
+
checkedAt: '2026-03-14T10:00:00Z',
|
|
115
|
+
};
|
|
116
|
+
expect(result.latestVersion).toBeNull();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('SelfUpdateResult type', () => {
|
|
120
|
+
it('should represent a started status', () => {
|
|
121
|
+
const result = { status: 'started' };
|
|
122
|
+
expect(result.status).toBe('started');
|
|
123
|
+
});
|
|
124
|
+
it('should represent an updated status with version info', () => {
|
|
125
|
+
const result = {
|
|
126
|
+
status: 'updated',
|
|
127
|
+
previousVersion: '1.0.0',
|
|
128
|
+
newVersion: '2.0.0',
|
|
129
|
+
};
|
|
130
|
+
expect(result.status).toBe('updated');
|
|
131
|
+
expect(result.previousVersion).toBe('1.0.0');
|
|
132
|
+
expect(result.newVersion).toBe('2.0.0');
|
|
133
|
+
});
|
|
134
|
+
it('should represent a failed status with error message', () => {
|
|
135
|
+
const result = {
|
|
136
|
+
status: 'failed',
|
|
137
|
+
error: 'Permission denied',
|
|
138
|
+
};
|
|
139
|
+
expect(result.status).toBe('failed');
|
|
140
|
+
expect(result.error).toBe('Permission denied');
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('UpdateStatus type', () => {
|
|
144
|
+
it('should accept all valid status values', () => {
|
|
145
|
+
const statuses = ['idle', 'checking', 'updating', 'restarting', 'failed'];
|
|
146
|
+
expect(statuses).toHaveLength(5);
|
|
147
|
+
expect(statuses).toContain('idle');
|
|
148
|
+
expect(statuses).toContain('checking');
|
|
149
|
+
expect(statuses).toContain('updating');
|
|
150
|
+
expect(statuses).toContain('restarting');
|
|
151
|
+
expect(statuses).toContain('failed');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=packageVersion.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageVersion.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/entities/packageVersion/packageVersion.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageVersion.factory.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/units/factories/packageVersion.factory.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { PackageVersionFactory } from '../../../tests/factories/packageVersion.factory.js';
|
|
3
|
+
import { versionCheckResultSchema, npmRegistryResponseSchema } from '../../../entities/packageVersion/packageVersion.schema.js';
|
|
4
|
+
describe('PackageVersionFactory', () => {
|
|
5
|
+
describe('createVersionCheckResult', () => {
|
|
6
|
+
it('should create a valid VersionCheckResult with defaults', () => {
|
|
7
|
+
const result = PackageVersionFactory.createVersionCheckResult();
|
|
8
|
+
expect(result.currentVersion).toBeDefined();
|
|
9
|
+
expect(result.latestVersion).toBeDefined();
|
|
10
|
+
expect(result.updateAvailable).toBeDefined();
|
|
11
|
+
expect(result.checkedAt).toBeDefined();
|
|
12
|
+
expect(versionCheckResultSchema.safeParse(result).success).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it('should allow overriding fields', () => {
|
|
15
|
+
const result = PackageVersionFactory.createVersionCheckResult({
|
|
16
|
+
currentVersion: '3.0.0',
|
|
17
|
+
latestVersion: null,
|
|
18
|
+
updateAvailable: false,
|
|
19
|
+
});
|
|
20
|
+
expect(result.currentVersion).toBe('3.0.0');
|
|
21
|
+
expect(result.latestVersion).toBeNull();
|
|
22
|
+
expect(result.updateAvailable).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('createNpmRegistryResponse', () => {
|
|
26
|
+
it('should create a valid npm registry response with defaults', () => {
|
|
27
|
+
const response = PackageVersionFactory.createNpmRegistryResponse();
|
|
28
|
+
expect(response.version).toBeDefined();
|
|
29
|
+
expect(npmRegistryResponseSchema.safeParse(response).success).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it('should allow overriding version', () => {
|
|
32
|
+
const response = PackageVersionFactory.createNpmRegistryResponse({ version: '5.0.0' });
|
|
33
|
+
expect(response.version).toBe('5.0.0');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=packageVersion.factory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageVersion.factory.test.js","sourceRoot":"","sources":["../../../../src/tests/units/factories/packageVersion.factory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;AACnF,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAA;AAExH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,MAAM,GAAG,qBAAqB,CAAC,wBAAwB,EAAE,CAAA;YAE/D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAA;YAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;YAC5C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;YACtC,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,wBAAwB,CAAC;gBAC5D,cAAc,EAAE,OAAO;gBACvB,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,KAAK;aACvB,CAAC,CAAA;YAEF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,yBAAyB,EAAE,CAAA;YAElE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;YACtC,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,yBAAyB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YAEtF,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanupScheduler.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/scheduler/cleanupScheduler.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { startCleanupScheduler } from '../../../../frameworks/scheduler/cleanupScheduler.js';
|
|
3
|
+
import { InMemoryReviewFileGateway } from '../../../../tests/stubs/reviewFile.stub.js';
|
|
4
|
+
import { InMemoryReviewLogFileGateway } from '../../../../tests/stubs/reviewLogFile.stub.js';
|
|
5
|
+
import { createStubLogger } from '../../../../tests/stubs/logger.stub.js';
|
|
6
|
+
describe('cleanupScheduler', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
vi.useFakeTimers();
|
|
9
|
+
});
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
vi.useRealTimers();
|
|
12
|
+
});
|
|
13
|
+
it('should run cleanup immediately on start', async () => {
|
|
14
|
+
const reviewFileGateway = new InMemoryReviewFileGateway();
|
|
15
|
+
const reviewLogFileGateway = new InMemoryReviewLogFileGateway();
|
|
16
|
+
reviewFileGateway.addReview('/my/project', '2020-01-01-MR-1-review.md', '# Old review');
|
|
17
|
+
const scheduler = startCleanupScheduler({
|
|
18
|
+
reviewFileGateway,
|
|
19
|
+
reviewLogFileGateway,
|
|
20
|
+
getRepositories: () => [{ localPath: '/my/project', enabled: true }],
|
|
21
|
+
logger: createStubLogger(),
|
|
22
|
+
});
|
|
23
|
+
await vi.advanceTimersByTimeAsync(100);
|
|
24
|
+
const remaining = await reviewFileGateway.listReviews('/my/project');
|
|
25
|
+
expect(remaining).toHaveLength(0);
|
|
26
|
+
scheduler.stop();
|
|
27
|
+
});
|
|
28
|
+
it('should skip disabled repositories', async () => {
|
|
29
|
+
const reviewFileGateway = new InMemoryReviewFileGateway();
|
|
30
|
+
const reviewLogFileGateway = new InMemoryReviewLogFileGateway();
|
|
31
|
+
reviewFileGateway.addReview('/disabled/project', '2020-01-01-MR-1-review.md', '# Old review');
|
|
32
|
+
const scheduler = startCleanupScheduler({
|
|
33
|
+
reviewFileGateway,
|
|
34
|
+
reviewLogFileGateway,
|
|
35
|
+
getRepositories: () => [{ localPath: '/disabled/project', enabled: false }],
|
|
36
|
+
logger: createStubLogger(),
|
|
37
|
+
});
|
|
38
|
+
await vi.advanceTimersByTimeAsync(100);
|
|
39
|
+
const remaining = await reviewFileGateway.listReviews('/disabled/project');
|
|
40
|
+
expect(remaining).toHaveLength(1);
|
|
41
|
+
scheduler.stop();
|
|
42
|
+
});
|
|
43
|
+
it('should return a stop function that clears the interval', () => {
|
|
44
|
+
const reviewFileGateway = new InMemoryReviewFileGateway();
|
|
45
|
+
const reviewLogFileGateway = new InMemoryReviewLogFileGateway();
|
|
46
|
+
const scheduler = startCleanupScheduler({
|
|
47
|
+
reviewFileGateway,
|
|
48
|
+
reviewLogFileGateway,
|
|
49
|
+
getRepositories: () => [],
|
|
50
|
+
logger: createStubLogger(),
|
|
51
|
+
});
|
|
52
|
+
expect(typeof scheduler.stop).toBe('function');
|
|
53
|
+
scheduler.stop();
|
|
54
|
+
});
|
|
55
|
+
it('should not throw when a repository cleanup fails', async () => {
|
|
56
|
+
const reviewLogFileGateway = new InMemoryReviewLogFileGateway();
|
|
57
|
+
const failingGateway = {
|
|
58
|
+
listReviews: () => { throw new Error('filesystem error'); },
|
|
59
|
+
readReview: () => Promise.resolve(null),
|
|
60
|
+
deleteReview: () => Promise.resolve(false),
|
|
61
|
+
reviewExists: () => Promise.resolve(false),
|
|
62
|
+
getReviewsDirectory: (projectPath) => `${projectPath}/.claude/reviews`,
|
|
63
|
+
};
|
|
64
|
+
const scheduler = startCleanupScheduler({
|
|
65
|
+
reviewFileGateway: failingGateway,
|
|
66
|
+
reviewLogFileGateway,
|
|
67
|
+
getRepositories: () => [{ localPath: '/my/project', enabled: true }],
|
|
68
|
+
logger: createStubLogger(),
|
|
69
|
+
});
|
|
70
|
+
await expect(vi.advanceTimersByTimeAsync(100)).resolves.not.toThrow();
|
|
71
|
+
scheduler.stop();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=cleanupScheduler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanupScheduler.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/scheduler/cleanupScheduler.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.routes.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/cleanup.routes.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import Fastify from 'fastify';
|
|
3
|
+
import { cleanupRoutes } from '../../../../../interface-adapters/controllers/http/cleanup.routes.js';
|
|
4
|
+
import { InMemoryReviewFileGateway } from '../../../../../tests/stubs/reviewFile.stub.js';
|
|
5
|
+
import { InMemoryReviewLogFileGateway } from '../../../../../tests/stubs/reviewLogFile.stub.js';
|
|
6
|
+
import { createStubLogger } from '../../../../../tests/stubs/logger.stub.js';
|
|
7
|
+
describe('cleanup routes', () => {
|
|
8
|
+
let application;
|
|
9
|
+
let reviewFileGateway;
|
|
10
|
+
let reviewLogFileGateway;
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
reviewFileGateway = new InMemoryReviewFileGateway();
|
|
13
|
+
reviewLogFileGateway = new InMemoryReviewLogFileGateway();
|
|
14
|
+
application = Fastify();
|
|
15
|
+
await application.register(cleanupRoutes, {
|
|
16
|
+
reviewFileGateway,
|
|
17
|
+
reviewLogFileGateway,
|
|
18
|
+
getRepositories: () => [
|
|
19
|
+
{ localPath: '/project-a', enabled: true },
|
|
20
|
+
{ localPath: '/project-b', enabled: false },
|
|
21
|
+
],
|
|
22
|
+
logger: createStubLogger(),
|
|
23
|
+
});
|
|
24
|
+
await application.ready();
|
|
25
|
+
});
|
|
26
|
+
it('should return success with zero deleted files when no expired files exist', async () => {
|
|
27
|
+
const response = await application.inject({
|
|
28
|
+
method: 'POST',
|
|
29
|
+
url: '/api/reviews/cleanup',
|
|
30
|
+
});
|
|
31
|
+
const body = JSON.parse(response.body);
|
|
32
|
+
expect(response.statusCode).toBe(200);
|
|
33
|
+
expect(body.success).toBe(true);
|
|
34
|
+
expect(body.deletedCount).toBe(0);
|
|
35
|
+
});
|
|
36
|
+
it('should cleanup only enabled repositories', async () => {
|
|
37
|
+
reviewFileGateway.addReview('/project-a', '2020-01-01-MR-1-review.md', '# Old review');
|
|
38
|
+
reviewFileGateway.addReview('/project-b', '2020-01-01-MR-2-review.md', '# Old review disabled repo');
|
|
39
|
+
const response = await application.inject({
|
|
40
|
+
method: 'POST',
|
|
41
|
+
url: '/api/reviews/cleanup',
|
|
42
|
+
});
|
|
43
|
+
const body = JSON.parse(response.body);
|
|
44
|
+
expect(body.success).toBe(true);
|
|
45
|
+
expect(body.deletedCount).toBe(1);
|
|
46
|
+
expect(body.deletedFiles).toContain('2020-01-01-MR-1-review.md');
|
|
47
|
+
expect(body.deletedFiles).not.toContain('2020-01-01-MR-2-review.md');
|
|
48
|
+
});
|
|
49
|
+
it('should cleanup single project when path query parameter is provided', async () => {
|
|
50
|
+
reviewFileGateway.addReview('/project-a', '2020-01-01-MR-1-review.md', '# Old review A');
|
|
51
|
+
reviewFileGateway.addReview('/specific/project', '2020-01-01-MR-3-review.md', '# Old review specific');
|
|
52
|
+
const response = await application.inject({
|
|
53
|
+
method: 'POST',
|
|
54
|
+
url: '/api/reviews/cleanup?path=/specific/project',
|
|
55
|
+
});
|
|
56
|
+
const body = JSON.parse(response.body);
|
|
57
|
+
expect(body.success).toBe(true);
|
|
58
|
+
expect(body.deletedCount).toBe(1);
|
|
59
|
+
expect(body.deletedFiles).toContain('2020-01-01-MR-3-review.md');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=cleanup.routes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/cleanup.routes.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,WAA4B,CAAC;IACjC,IAAI,iBAA4C,CAAC;IACjD,IAAI,oBAAkD,CAAC;IAEvD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,iBAAiB,GAAG,IAAI,yBAAyB,EAAE,CAAC;QACpD,oBAAoB,GAAG,IAAI,4BAA4B,EAAE,CAAC;QAE1D,WAAW,GAAG,OAAO,EAAE,CAAC;QACxB,MAAM,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE;YACxC,iBAAiB;YACjB,oBAAoB;YACpB,eAAe,EAAE,GAAG,EAAE,CAAC;gBACrB,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;gBAC1C,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE;aAC5C;YACD,MAAM,EAAE,gBAAgB,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,sBAAsB;SAC5B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,iBAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,2BAA2B,EAAE,cAAc,CAAC,CAAC;QACvF,iBAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,2BAA2B,EAAE,4BAA4B,CAAC,CAAC;QAErG,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,sBAAsB;SAC5B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,iBAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;QACzF,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,uBAAuB,CAAC,CAAC;QAEvG,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,6CAA6C;SACnD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.routes.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/health.routes.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import Fastify from 'fastify';
|
|
3
|
+
import { healthRoutes } from '../../../../../interface-adapters/controllers/http/health.routes.js';
|
|
4
|
+
import { StubVersionCache } from '../../../../../tests/stubs/versionCache.stub.js';
|
|
5
|
+
import { PackageVersionFactory } from '../../../../../tests/factories/packageVersion.factory.js';
|
|
6
|
+
describe('health routes', () => {
|
|
7
|
+
let application;
|
|
8
|
+
describe('GET /api/status', () => {
|
|
9
|
+
it('should return version from config', async () => {
|
|
10
|
+
application = Fastify();
|
|
11
|
+
await application.register(healthRoutes, {
|
|
12
|
+
getConfig: () => ({ version: '3.6.0' }),
|
|
13
|
+
});
|
|
14
|
+
await application.ready();
|
|
15
|
+
const response = await application.inject({
|
|
16
|
+
method: 'GET',
|
|
17
|
+
url: '/api/status',
|
|
18
|
+
});
|
|
19
|
+
const body = JSON.parse(response.body);
|
|
20
|
+
expect(response.statusCode).toBe(200);
|
|
21
|
+
expect(body.version).toBe('3.6.0');
|
|
22
|
+
expect(body.status).toBe('running');
|
|
23
|
+
});
|
|
24
|
+
it('should include version check data when cache has a value', async () => {
|
|
25
|
+
const cached = PackageVersionFactory.createVersionCheckResult({
|
|
26
|
+
latestVersion: '4.0.0',
|
|
27
|
+
updateAvailable: true,
|
|
28
|
+
checkedAt: '2026-03-14T12:00:00Z',
|
|
29
|
+
});
|
|
30
|
+
const versionCache = new StubVersionCache(cached, false);
|
|
31
|
+
application = Fastify();
|
|
32
|
+
await application.register(healthRoutes, {
|
|
33
|
+
getConfig: () => ({ version: '3.6.0' }),
|
|
34
|
+
versionCache,
|
|
35
|
+
});
|
|
36
|
+
await application.ready();
|
|
37
|
+
const response = await application.inject({
|
|
38
|
+
method: 'GET',
|
|
39
|
+
url: '/api/status',
|
|
40
|
+
});
|
|
41
|
+
const body = JSON.parse(response.body);
|
|
42
|
+
expect(body.latestVersion).toBe('4.0.0');
|
|
43
|
+
expect(body.updateAvailable).toBe(true);
|
|
44
|
+
expect(body.versionCheckedAt).toBe('2026-03-14T12:00:00Z');
|
|
45
|
+
});
|
|
46
|
+
it('should return null version data when cache is empty', async () => {
|
|
47
|
+
const versionCache = new StubVersionCache(null, true);
|
|
48
|
+
application = Fastify();
|
|
49
|
+
await application.register(healthRoutes, {
|
|
50
|
+
getConfig: () => ({ version: '3.6.0' }),
|
|
51
|
+
versionCache,
|
|
52
|
+
});
|
|
53
|
+
await application.ready();
|
|
54
|
+
const response = await application.inject({
|
|
55
|
+
method: 'GET',
|
|
56
|
+
url: '/api/status',
|
|
57
|
+
});
|
|
58
|
+
const body = JSON.parse(response.body);
|
|
59
|
+
expect(body.latestVersion).toBeNull();
|
|
60
|
+
expect(body.updateAvailable).toBe(false);
|
|
61
|
+
expect(body.versionCheckedAt).toBeNull();
|
|
62
|
+
});
|
|
63
|
+
it('should return null version data when no versionCache is provided', async () => {
|
|
64
|
+
application = Fastify();
|
|
65
|
+
await application.register(healthRoutes, {
|
|
66
|
+
getConfig: () => ({ version: '3.6.0' }),
|
|
67
|
+
});
|
|
68
|
+
await application.ready();
|
|
69
|
+
const response = await application.inject({
|
|
70
|
+
method: 'GET',
|
|
71
|
+
url: '/api/status',
|
|
72
|
+
});
|
|
73
|
+
const body = JSON.parse(response.body);
|
|
74
|
+
expect(body.latestVersion).toBeNull();
|
|
75
|
+
expect(body.updateAvailable).toBe(false);
|
|
76
|
+
expect(body.versionCheckedAt).toBeNull();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('GET /health', () => {
|
|
80
|
+
it('should return ok status', async () => {
|
|
81
|
+
application = Fastify();
|
|
82
|
+
await application.register(healthRoutes, {
|
|
83
|
+
getConfig: () => ({ version: '3.6.0' }),
|
|
84
|
+
});
|
|
85
|
+
await application.ready();
|
|
86
|
+
const response = await application.inject({
|
|
87
|
+
method: 'GET',
|
|
88
|
+
url: '/health',
|
|
89
|
+
});
|
|
90
|
+
const body = JSON.parse(response.body);
|
|
91
|
+
expect(response.statusCode).toBe(200);
|
|
92
|
+
expect(body.status).toBe('ok');
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=health.routes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/health.routes.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statsRecalculate.routes.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import Fastify from 'fastify';
|
|
3
|
+
import { statsRoutes } from '../../../../../interface-adapters/controllers/http/stats.routes.js';
|
|
4
|
+
import { InMemoryStatsGateway } from '../../../../../tests/stubs/stats.stub.js';
|
|
5
|
+
import { StubDiffStatsFetchGateway } from '../../../../../tests/stubs/diffStatsFetch.stub.js';
|
|
6
|
+
import { ProjectStatsFactory, ReviewStatsFactory } from '../../../../../tests/factories/projectStats.factory.js';
|
|
7
|
+
function createTestOptions(overrides = {}) {
|
|
8
|
+
const statsGateway = new InMemoryStatsGateway();
|
|
9
|
+
const diffStatsFetchGateway = new StubDiffStatsFetchGateway();
|
|
10
|
+
return {
|
|
11
|
+
statsGateway,
|
|
12
|
+
getRepositories: () => [{ localPath: '/test/project', name: 'test', enabled: true, platform: 'gitlab' }],
|
|
13
|
+
diffStatsFetchGateways: { gitlab: diffStatsFetchGateway, github: diffStatsFetchGateway },
|
|
14
|
+
broadcastBackfillProgress: vi.fn(),
|
|
15
|
+
logger: { warn: vi.fn(), info: vi.fn(), error: vi.fn() },
|
|
16
|
+
...overrides,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
describe('POST /api/stats/recalculate', () => {
|
|
20
|
+
it('should return started status when valid path is provided', async () => {
|
|
21
|
+
const options = createTestOptions();
|
|
22
|
+
const reviews = [ReviewStatsFactory.create({ id: 'r1', mrNumber: 1 })];
|
|
23
|
+
options.statsGateway.saveProjectStats('/test/project', ProjectStatsFactory.create({ reviews }));
|
|
24
|
+
const fastify = Fastify();
|
|
25
|
+
await fastify.register(statsRoutes, options);
|
|
26
|
+
const response = await fastify.inject({
|
|
27
|
+
method: 'POST',
|
|
28
|
+
url: '/api/stats/recalculate',
|
|
29
|
+
payload: { path: '/test/project', backfill: false },
|
|
30
|
+
});
|
|
31
|
+
expect(response.statusCode).toBe(200);
|
|
32
|
+
const body = JSON.parse(response.body);
|
|
33
|
+
expect(body.status).toBe('started');
|
|
34
|
+
});
|
|
35
|
+
it('should return 404 when path is not found in repositories', async () => {
|
|
36
|
+
const options = createTestOptions({
|
|
37
|
+
getRepositories: () => [{ localPath: '/other/project', name: 'other', enabled: true, platform: 'gitlab' }],
|
|
38
|
+
});
|
|
39
|
+
const fastify = Fastify();
|
|
40
|
+
await fastify.register(statsRoutes, options);
|
|
41
|
+
const response = await fastify.inject({
|
|
42
|
+
method: 'POST',
|
|
43
|
+
url: '/api/stats/recalculate',
|
|
44
|
+
payload: { path: '/unknown/project', backfill: false },
|
|
45
|
+
});
|
|
46
|
+
expect(response.statusCode).toBe(404);
|
|
47
|
+
});
|
|
48
|
+
it('should return 400 when path is missing', async () => {
|
|
49
|
+
const options = createTestOptions();
|
|
50
|
+
const fastify = Fastify();
|
|
51
|
+
await fastify.register(statsRoutes, options);
|
|
52
|
+
const response = await fastify.inject({
|
|
53
|
+
method: 'POST',
|
|
54
|
+
url: '/api/stats/recalculate',
|
|
55
|
+
payload: { backfill: false },
|
|
56
|
+
});
|
|
57
|
+
expect(response.statusCode).toBe(400);
|
|
58
|
+
});
|
|
59
|
+
it('should recalculate stats asynchronously', async () => {
|
|
60
|
+
const options = createTestOptions();
|
|
61
|
+
const reviews = [
|
|
62
|
+
ReviewStatsFactory.create({ id: 'r1', mrNumber: 1, score: 6 }),
|
|
63
|
+
ReviewStatsFactory.create({ id: 'r2', mrNumber: 2, score: 8 }),
|
|
64
|
+
];
|
|
65
|
+
options.statsGateway.saveProjectStats('/test/project', ProjectStatsFactory.create({
|
|
66
|
+
reviews,
|
|
67
|
+
averageScore: 0,
|
|
68
|
+
}));
|
|
69
|
+
const fastify = Fastify();
|
|
70
|
+
await fastify.register(statsRoutes, options);
|
|
71
|
+
const response = await fastify.inject({
|
|
72
|
+
method: 'POST',
|
|
73
|
+
url: '/api/stats/recalculate',
|
|
74
|
+
payload: { path: '/test/project', backfill: false },
|
|
75
|
+
});
|
|
76
|
+
expect(response.statusCode).toBe(200);
|
|
77
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
78
|
+
const saved = options.statsGateway.loadProjectStats('/test/project');
|
|
79
|
+
expect(saved?.averageScore).toBe(7);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=statsRecalculate.routes.test.js.map
|
package/dist/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statsRecalculate.routes.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/statsRecalculate.routes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.routes.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/interface-adapters/controllers/http/version.routes.test.ts"],"names":[],"mappings":""}
|