@tstdl/base 0.93.182 → 0.93.184
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/api/server/api-request-token.provider.js +1 -1
- package/api/server/gateway.js +6 -1
- package/authentication/authentication.api.d.ts +13 -40
- package/authentication/authentication.api.js +5 -14
- package/authentication/client/authentication.service.d.ts +6 -14
- package/authentication/client/authentication.service.js +22 -4
- package/authentication/client/module.d.ts +1 -1
- package/authentication/client/module.js +4 -4
- package/authentication/models/index.d.ts +1 -0
- package/authentication/models/index.js +1 -0
- package/authentication/models/totp-results.model.d.ts +11 -0
- package/authentication/models/totp-results.model.js +37 -0
- package/authentication/server/authentication.api-controller.d.ts +3 -3
- package/authentication/server/authentication.api-controller.js +31 -4
- package/authentication/server/authentication.service.d.ts +5 -14
- package/authentication/server/authentication.service.js +6 -4
- package/core.d.ts +0 -5
- package/core.js +0 -8
- package/document-management/api/document-management.api.d.ts +2 -2
- package/document-management/service-models/document.service-model.d.ts +1 -1
- package/examples/config.d.ts +25 -0
- package/examples/config.js +26 -0
- package/notification/server/module.d.ts +1 -1
- package/notification/server/module.js +1 -1
- package/package.json +5 -5
- package/signals/api.d.ts +5 -1
- package/signals/api.js +3 -1
- package/signals/implementation/api.d.ts +10 -1
- package/signals/implementation/api.js +7 -1
- package/signals/implementation/asserts.d.ts +2 -2
- package/signals/implementation/asserts.js +3 -3
- package/signals/implementation/computed.d.ts +7 -34
- package/signals/implementation/computed.js +14 -83
- package/signals/implementation/configure.js +6 -2
- package/signals/implementation/effect.d.ts +65 -46
- package/signals/implementation/effect.js +97 -62
- package/signals/implementation/index.d.ts +2 -4
- package/signals/implementation/index.js +2 -4
- package/signals/implementation/linked_signal.d.ts +36 -0
- package/signals/implementation/linked_signal.js +34 -0
- package/signals/implementation/primitive/computed.d.ts +55 -0
- package/signals/implementation/primitive/computed.js +107 -0
- package/signals/implementation/primitive/effect.d.ts +26 -0
- package/signals/implementation/primitive/effect.js +31 -0
- package/signals/implementation/{equality.d.ts → primitive/equality.d.ts} +1 -1
- package/signals/implementation/{equality.js → primitive/equality.js} +1 -1
- package/signals/implementation/primitive/errors.d.ts +10 -0
- package/signals/implementation/{errors.js → primitive/errors.js} +3 -4
- package/signals/implementation/primitive/formatter.d.ts +19 -0
- package/signals/implementation/primitive/formatter.js +136 -0
- package/signals/implementation/{graph.d.ts → primitive/graph.d.ts} +68 -36
- package/signals/implementation/primitive/graph.js +386 -0
- package/signals/implementation/primitive/linked_signal.d.ts +46 -0
- package/signals/implementation/primitive/linked_signal.js +110 -0
- package/signals/implementation/primitive/signal.d.ts +31 -0
- package/signals/implementation/primitive/signal.js +80 -0
- package/signals/implementation/primitive/untracked.d.ts +12 -0
- package/signals/implementation/primitive/untracked.js +23 -0
- package/signals/implementation/{watch.d.ts → primitive/watch.d.ts} +1 -2
- package/signals/implementation/{watch.js → primitive/watch.js} +22 -16
- package/signals/implementation/resource/api.d.ts +275 -0
- package/signals/implementation/resource/api.js +26 -0
- package/signals/implementation/resource/debounce.d.ts +13 -0
- package/signals/implementation/resource/debounce.js +113 -0
- package/signals/implementation/resource/from_snapshots.d.ts +16 -0
- package/signals/implementation/resource/from_snapshots.js +44 -0
- package/signals/implementation/resource/index.d.ts +11 -0
- package/signals/implementation/resource/index.js +11 -0
- package/signals/implementation/resource/resource.d.ts +110 -0
- package/signals/implementation/resource/resource.js +402 -0
- package/signals/implementation/root_effect_scheduler.d.ts +50 -0
- package/signals/implementation/root_effect_scheduler.js +66 -0
- package/signals/implementation/signal.d.ts +42 -18
- package/signals/implementation/signal.js +29 -49
- package/signals/implementation/to-observable.d.ts +12 -5
- package/signals/implementation/to-observable.js +12 -2
- package/signals/implementation/to-signal.d.ts +9 -18
- package/signals/implementation/to-signal.js +46 -13
- package/signals/implementation/untracked.d.ts +1 -1
- package/signals/implementation/untracked.js +3 -11
- package/signals/operators/debounce.d.ts +8 -0
- package/signals/operators/debounce.js +19 -0
- package/signals/operators/derive-async.js +43 -15
- package/signals/operators/index.d.ts +2 -0
- package/signals/operators/index.js +2 -0
- package/signals/operators/throttle.d.ts +8 -0
- package/signals/operators/throttle.js +31 -0
- package/ai/genkit/tests/multi-region.test.d.ts +0 -2
- package/ai/genkit/tests/multi-region.test.js +0 -179
- package/ai/genkit/tests/token-limit-fallback.test.d.ts +0 -2
- package/ai/genkit/tests/token-limit-fallback.test.js +0 -209
- package/ai/prompts/tests/prompt-builder.test.d.ts +0 -1
- package/ai/prompts/tests/prompt-builder.test.js +0 -22
- package/ai/tests/instructions-formatter.test.d.ts +0 -1
- package/ai/tests/instructions-formatter.test.js +0 -116
- package/ai/tests/steering.test.d.ts +0 -1
- package/ai/tests/steering.test.js +0 -37
- package/api/client/tests/api-client.test.d.ts +0 -1
- package/api/client/tests/api-client.test.js +0 -194
- package/api/server/tests/csrf.middleware.test.d.ts +0 -1
- package/api/server/tests/csrf.middleware.test.js +0 -91
- package/authentication/tests/authentication-password-requirements.validator.test.d.ts +0 -1
- package/authentication/tests/authentication-password-requirements.validator.test.js +0 -29
- package/authentication/tests/authentication.api-controller.test.d.ts +0 -1
- package/authentication/tests/authentication.api-controller.test.js +0 -156
- package/authentication/tests/authentication.api-request-token.provider.test.d.ts +0 -1
- package/authentication/tests/authentication.api-request-token.provider.test.js +0 -48
- package/authentication/tests/authentication.client-error-handling.test.d.ts +0 -1
- package/authentication/tests/authentication.client-error-handling.test.js +0 -123
- package/authentication/tests/authentication.client-middleware.test.d.ts +0 -1
- package/authentication/tests/authentication.client-middleware.test.js +0 -118
- package/authentication/tests/authentication.client-service-methods.test.d.ts +0 -1
- package/authentication/tests/authentication.client-service-methods.test.js +0 -177
- package/authentication/tests/authentication.client-service-refresh.test.d.ts +0 -1
- package/authentication/tests/authentication.client-service-refresh.test.js +0 -153
- package/authentication/tests/authentication.client-service.test.d.ts +0 -1
- package/authentication/tests/authentication.client-service.test.js +0 -76
- package/authentication/tests/authentication.refresh-busy-loop.test.d.ts +0 -1
- package/authentication/tests/authentication.refresh-busy-loop.test.js +0 -84
- package/authentication/tests/authentication.service.test.d.ts +0 -1
- package/authentication/tests/authentication.service.test.js +0 -167
- package/authentication/tests/authentication.test-ancillary-service.d.ts +0 -9
- package/authentication/tests/authentication.test-ancillary-service.js +0 -27
- package/authentication/tests/brute-force-protection.test.d.ts +0 -1
- package/authentication/tests/brute-force-protection.test.js +0 -211
- package/authentication/tests/helper.test.d.ts +0 -1
- package/authentication/tests/helper.test.js +0 -122
- package/authentication/tests/password-requirements.error.test.d.ts +0 -1
- package/authentication/tests/password-requirements.error.test.js +0 -14
- package/authentication/tests/remember.api.test.d.ts +0 -1
- package/authentication/tests/remember.api.test.js +0 -117
- package/authentication/tests/remember.service.test.d.ts +0 -1
- package/authentication/tests/remember.service.test.js +0 -83
- package/authentication/tests/subject.service.test.d.ts +0 -1
- package/authentication/tests/subject.service.test.js +0 -140
- package/authentication/tests/suspended-subject.test.d.ts +0 -1
- package/authentication/tests/suspended-subject.test.js +0 -120
- package/authentication/tests/totp.enrollment.test.d.ts +0 -1
- package/authentication/tests/totp.enrollment.test.js +0 -123
- package/authentication/tests/totp.login.test.d.ts +0 -1
- package/authentication/tests/totp.login.test.js +0 -213
- package/authentication/tests/totp.recovery-codes.test.d.ts +0 -1
- package/authentication/tests/totp.recovery-codes.test.js +0 -97
- package/authentication/tests/totp.status.test.d.ts +0 -1
- package/authentication/tests/totp.status.test.js +0 -72
- package/cancellation/tests/coverage.test.d.ts +0 -1
- package/cancellation/tests/coverage.test.js +0 -49
- package/cancellation/tests/leak.test.d.ts +0 -1
- package/cancellation/tests/leak.test.js +0 -35
- package/cancellation/tests/token.test.d.ts +0 -1
- package/cancellation/tests/token.test.js +0 -136
- package/circuit-breaker/tests/circuit-breaker.test.d.ts +0 -1
- package/circuit-breaker/tests/circuit-breaker.test.js +0 -116
- package/cryptography/tests/cryptography.test.d.ts +0 -1
- package/cryptography/tests/cryptography.test.js +0 -175
- package/cryptography/tests/jwt.test.d.ts +0 -1
- package/cryptography/tests/jwt.test.js +0 -54
- package/cryptography/tests/modern.test.d.ts +0 -1
- package/cryptography/tests/modern.test.js +0 -105
- package/cryptography/tests/module.test.d.ts +0 -1
- package/cryptography/tests/module.test.js +0 -100
- package/cryptography/tests/totp.test.d.ts +0 -1
- package/cryptography/tests/totp.test.js +0 -108
- package/document-management/tests/ai-config-hierarchy.test.d.ts +0 -1
- package/document-management/tests/ai-config-hierarchy.test.js +0 -59
- package/document-management/tests/ai-config-integration.test.d.ts +0 -1
- package/document-management/tests/ai-config-integration.test.js +0 -125
- package/document-management/tests/ai-config-merge.test.d.ts +0 -1
- package/document-management/tests/ai-config-merge.test.js +0 -46
- package/document-management/tests/document-management-ai-overrides.test.d.ts +0 -1
- package/document-management/tests/document-management-ai-overrides.test.js +0 -63
- package/document-management/tests/document-management-core.test.d.ts +0 -1
- package/document-management/tests/document-management-core.test.js +0 -157
- package/document-management/tests/document-management.api.test.d.ts +0 -1
- package/document-management/tests/document-management.api.test.js +0 -101
- package/document-management/tests/document-statistics.service.test.d.ts +0 -1
- package/document-management/tests/document-statistics.service.test.js +0 -498
- package/document-management/tests/document-validation-ai-overrides.test.d.ts +0 -1
- package/document-management/tests/document-validation-ai-overrides.test.js +0 -87
- package/document-management/tests/document.service.test.d.ts +0 -1
- package/document-management/tests/document.service.test.js +0 -143
- package/document-management/tests/enum-helpers.test.d.ts +0 -1
- package/document-management/tests/enum-helpers.test.js +0 -452
- package/document-management/tests/helper.d.ts +0 -24
- package/document-management/tests/helper.js +0 -39
- package/errors/tests/format.test.d.ts +0 -1
- package/errors/tests/format.test.js +0 -84
- package/http/tests/server-timing.test.d.ts +0 -1
- package/http/tests/server-timing.test.js +0 -42
- package/injector/tests/advanced.test.d.ts +0 -1
- package/injector/tests/advanced.test.js +0 -116
- package/injector/tests/async-init.test.d.ts +0 -1
- package/injector/tests/async-init.test.js +0 -77
- package/injector/tests/basic.test.d.ts +0 -1
- package/injector/tests/basic.test.js +0 -114
- package/injector/tests/hierarchical.test.d.ts +0 -1
- package/injector/tests/hierarchical.test.js +0 -59
- package/injector/tests/leak.test.d.ts +0 -1
- package/injector/tests/leak.test.js +0 -45
- package/injector/tests/lifecycles.test.d.ts +0 -1
- package/injector/tests/lifecycles.test.js +0 -109
- package/logger/tests/pretty-print.test.d.ts +0 -1
- package/logger/tests/pretty-print.test.js +0 -60
- package/notification/tests/notification-api.test.d.ts +0 -1
- package/notification/tests/notification-api.test.js +0 -124
- package/notification/tests/notification-client.test.d.ts +0 -1
- package/notification/tests/notification-client.test.js +0 -101
- package/notification/tests/notification-flow.test.d.ts +0 -1
- package/notification/tests/notification-flow.test.js +0 -296
- package/notification/tests/notification-sse.service.test.d.ts +0 -1
- package/notification/tests/notification-sse.service.test.js +0 -43
- package/notification/tests/notification-type.service.test.d.ts +0 -1
- package/notification/tests/notification-type.service.test.js +0 -41
- package/object-storage/s3/tests/s3.object-storage.integration.test.d.ts +0 -1
- package/object-storage/s3/tests/s3.object-storage.integration.test.js +0 -303
- package/orm/tests/build-jsonb.test.d.ts +0 -1
- package/orm/tests/build-jsonb.test.js +0 -39
- package/orm/tests/data-types.test.d.ts +0 -1
- package/orm/tests/data-types.test.js +0 -39
- package/orm/tests/database-extension.test.d.ts +0 -1
- package/orm/tests/database-extension.test.js +0 -63
- package/orm/tests/database-migration.test.d.ts +0 -1
- package/orm/tests/database-migration.test.js +0 -83
- package/orm/tests/decorators.test.d.ts +0 -1
- package/orm/tests/decorators.test.js +0 -77
- package/orm/tests/encryption.test.d.ts +0 -1
- package/orm/tests/encryption.test.js +0 -31
- package/orm/tests/query-complex.test.d.ts +0 -1
- package/orm/tests/query-complex.test.js +0 -172
- package/orm/tests/query-converter-complex.test.d.ts +0 -1
- package/orm/tests/query-converter-complex.test.js +0 -131
- package/orm/tests/query-converter.test.d.ts +0 -1
- package/orm/tests/query-converter.test.js +0 -123
- package/orm/tests/repository-advanced.test.d.ts +0 -1
- package/orm/tests/repository-advanced.test.js +0 -189
- package/orm/tests/repository-attributes.test.d.ts +0 -1
- package/orm/tests/repository-attributes.test.js +0 -83
- package/orm/tests/repository-compound-primary-key.test.d.ts +0 -2
- package/orm/tests/repository-compound-primary-key.test.js +0 -226
- package/orm/tests/repository-comprehensive.test.d.ts +0 -1
- package/orm/tests/repository-comprehensive.test.js +0 -162
- package/orm/tests/repository-coverage.test.d.ts +0 -2
- package/orm/tests/repository-coverage.test.js +0 -242
- package/orm/tests/repository-cti-complex.test.d.ts +0 -1
- package/orm/tests/repository-cti-complex.test.js +0 -151
- package/orm/tests/repository-cti-embedded.test.d.ts +0 -1
- package/orm/tests/repository-cti-embedded.test.js +0 -178
- package/orm/tests/repository-cti-extensive.test.d.ts +0 -2
- package/orm/tests/repository-cti-extensive.test.js +0 -279
- package/orm/tests/repository-cti-mapping.test.d.ts +0 -2
- package/orm/tests/repository-cti-mapping.test.js +0 -108
- package/orm/tests/repository-cti-search.test.d.ts +0 -1
- package/orm/tests/repository-cti-search.test.js +0 -141
- package/orm/tests/repository-cti-soft-delete.test.d.ts +0 -2
- package/orm/tests/repository-cti-soft-delete.test.js +0 -103
- package/orm/tests/repository-cti-transactions.test.d.ts +0 -1
- package/orm/tests/repository-cti-transactions.test.js +0 -112
- package/orm/tests/repository-cti-upsert-many.test.d.ts +0 -2
- package/orm/tests/repository-cti-upsert-many.test.js +0 -115
- package/orm/tests/repository-cti.test.d.ts +0 -2
- package/orm/tests/repository-cti.test.js +0 -390
- package/orm/tests/repository-edge-cases.test.d.ts +0 -1
- package/orm/tests/repository-edge-cases.test.js +0 -178
- package/orm/tests/repository-expiration.test.d.ts +0 -2
- package/orm/tests/repository-expiration.test.js +0 -140
- package/orm/tests/repository-extra-coverage.test.d.ts +0 -2
- package/orm/tests/repository-extra-coverage.test.js +0 -402
- package/orm/tests/repository-mapping.test.d.ts +0 -2
- package/orm/tests/repository-mapping.test.js +0 -65
- package/orm/tests/repository-regression.test.d.ts +0 -1
- package/orm/tests/repository-regression.test.js +0 -288
- package/orm/tests/repository-search-coverage.test.d.ts +0 -1
- package/orm/tests/repository-search-coverage.test.js +0 -107
- package/orm/tests/repository-search.test.d.ts +0 -1
- package/orm/tests/repository-search.test.js +0 -105
- package/orm/tests/repository-soft-delete.test.d.ts +0 -1
- package/orm/tests/repository-soft-delete.test.js +0 -118
- package/orm/tests/repository-transactions-nested.test.d.ts +0 -1
- package/orm/tests/repository-transactions-nested.test.js +0 -178
- package/orm/tests/repository-types.test.d.ts +0 -1
- package/orm/tests/repository-types.test.js +0 -184
- package/orm/tests/repository-undelete.test.d.ts +0 -2
- package/orm/tests/repository-undelete.test.js +0 -201
- package/orm/tests/schema-converter.test.d.ts +0 -1
- package/orm/tests/schema-converter.test.js +0 -82
- package/orm/tests/schema-generation.test.d.ts +0 -2
- package/orm/tests/schema-generation.test.js +0 -174
- package/orm/tests/sql-helpers.test.d.ts +0 -1
- package/orm/tests/sql-helpers.test.js +0 -67
- package/orm/tests/transaction-safety.test.d.ts +0 -1
- package/orm/tests/transaction-safety.test.js +0 -81
- package/orm/tests/transactional.test.d.ts +0 -1
- package/orm/tests/transactional.test.js +0 -215
- package/orm/tests/utils.test.d.ts +0 -1
- package/orm/tests/utils.test.js +0 -70
- package/pdf/tests/utils.test.d.ts +0 -1
- package/pdf/tests/utils.test.js +0 -187
- package/process/tests/spawn.test.d.ts +0 -1
- package/process/tests/spawn.test.js +0 -182
- package/rate-limit/tests/postgres-rate-limiter.test.d.ts +0 -1
- package/rate-limit/tests/postgres-rate-limiter.test.js +0 -84
- package/renderer/tests/renderer.test.d.ts +0 -1
- package/renderer/tests/renderer.test.js +0 -88
- package/rpc/tests/rpc.integration.test.d.ts +0 -1
- package/rpc/tests/rpc.integration.test.js +0 -615
- package/signals/implementation/errors.d.ts +0 -2
- package/signals/implementation/graph.js +0 -312
- package/signals/implementation/writable-signal.d.ts +0 -48
- package/signals/implementation/writable-signal.js +0 -32
- package/task-queue/tests/coverage-branch.test.d.ts +0 -1
- package/task-queue/tests/coverage-branch.test.js +0 -395
- package/task-queue/tests/coverage-enhancement.test.d.ts +0 -1
- package/task-queue/tests/coverage-enhancement.test.js +0 -150
- package/task-queue/tests/dag.test.d.ts +0 -1
- package/task-queue/tests/dag.test.js +0 -188
- package/task-queue/tests/dependencies.test.d.ts +0 -1
- package/task-queue/tests/dependencies.test.js +0 -296
- package/task-queue/tests/enqueue-batch.test.d.ts +0 -1
- package/task-queue/tests/enqueue-batch.test.js +0 -125
- package/task-queue/tests/enqueue-item.test.d.ts +0 -1
- package/task-queue/tests/enqueue-item.test.js +0 -12
- package/task-queue/tests/fan-out-spawning.test.d.ts +0 -1
- package/task-queue/tests/fan-out-spawning.test.js +0 -94
- package/task-queue/tests/idempotent-replacement.test.d.ts +0 -1
- package/task-queue/tests/idempotent-replacement.test.js +0 -114
- package/task-queue/tests/missing-idempotent-tasks.test.d.ts +0 -1
- package/task-queue/tests/missing-idempotent-tasks.test.js +0 -39
- package/task-queue/tests/optimization-edge-cases.test.d.ts +0 -1
- package/task-queue/tests/optimization-edge-cases.test.js +0 -124
- package/task-queue/tests/queue-generic.test.d.ts +0 -1
- package/task-queue/tests/queue-generic.test.js +0 -8
- package/task-queue/tests/queue.test.d.ts +0 -1
- package/task-queue/tests/queue.test.js +0 -756
- package/task-queue/tests/shutdown.test.d.ts +0 -1
- package/task-queue/tests/shutdown.test.js +0 -41
- package/task-queue/tests/task-context.test.d.ts +0 -1
- package/task-queue/tests/task-context.test.js +0 -7
- package/task-queue/tests/task-union.test.d.ts +0 -1
- package/task-queue/tests/task-union.test.js +0 -18
- package/task-queue/tests/transactions.test.d.ts +0 -1
- package/task-queue/tests/transactions.test.js +0 -47
- package/task-queue/tests/typing.test.d.ts +0 -1
- package/task-queue/tests/typing.test.js +0 -9
- package/task-queue/tests/worker.test.d.ts +0 -1
- package/task-queue/tests/worker.test.js +0 -258
- package/task-queue/tests/zombie-parent.test.d.ts +0 -1
- package/task-queue/tests/zombie-parent.test.js +0 -45
- package/task-queue/tests/zombie-recovery.test.d.ts +0 -1
- package/task-queue/tests/zombie-recovery.test.js +0 -51
- package/utils/tests/backoff.test.d.ts +0 -1
- package/utils/tests/backoff.test.js +0 -41
- package/utils/tests/retry-with-backoff.test.d.ts +0 -1
- package/utils/tests/retry-with-backoff.test.js +0 -49
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest';
|
|
2
|
-
import { injectModel } from '../../ai/genkit/index.js';
|
|
3
|
-
import { formatInstructions } from '../../ai/prompts/index.js';
|
|
4
|
-
import { runInInjectionContext } from '../../injector/index.js';
|
|
5
|
-
import { object, string } from '../../schema/index.js';
|
|
6
|
-
import { setupIntegrationTest } from '../../testing/index.js';
|
|
7
|
-
import { isString } from '../../utils/type-guards.js';
|
|
8
|
-
import { DocumentManagementConfiguration } from '../server/module.js';
|
|
9
|
-
import { DocumentFileService } from '../server/services/document-file.service.js';
|
|
10
|
-
import { DocumentManagementAiProviderService, DocumentManagementAncillaryService } from '../server/services/index.js';
|
|
11
|
-
import { AiValidationExecutor } from '../server/validators/ai-validation-executor.js';
|
|
12
|
-
import { TestDocumentManagementAncillaryService } from './helper.js';
|
|
13
|
-
class TestAiValidationExecutor extends AiValidationExecutor {
|
|
14
|
-
identifier = 'test-validation';
|
|
15
|
-
schema = object({ valid: string() });
|
|
16
|
-
async getValidationInstructions() { return 'Test Prompt'; }
|
|
17
|
-
async getResult() { return { status: 'passed' }; }
|
|
18
|
-
executorConfig = {};
|
|
19
|
-
getAiConfiguration() { return this.executorConfig; }
|
|
20
|
-
// Expose protected method for testing
|
|
21
|
-
async publicExecute(context) {
|
|
22
|
-
return this.execute(context);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
describe('AiValidationExecutor Overrides', () => {
|
|
26
|
-
let injector;
|
|
27
|
-
let flashModel;
|
|
28
|
-
let proModel;
|
|
29
|
-
const tenantId = crypto.randomUUID();
|
|
30
|
-
const mockAiProvider = {
|
|
31
|
-
getGlobalConfiguration: vi.fn(),
|
|
32
|
-
getValidationConfiguration: vi.fn(),
|
|
33
|
-
};
|
|
34
|
-
beforeAll(async () => {
|
|
35
|
-
({ injector } = await setupIntegrationTest({
|
|
36
|
-
modules: { messageBus: true, signals: true, objectStorage: true },
|
|
37
|
-
}));
|
|
38
|
-
runInInjectionContext(injector, () => {
|
|
39
|
-
flashModel = injectModel('gemini-2.5-flash');
|
|
40
|
-
proModel = injectModel('gemini-2.5-pro');
|
|
41
|
-
});
|
|
42
|
-
injector.register(DocumentManagementAiProviderService, { useValue: mockAiProvider });
|
|
43
|
-
injector.register(DocumentManagementAncillaryService, { useToken: TestDocumentManagementAncillaryService });
|
|
44
|
-
injector.register(DocumentManagementConfiguration, { useValue: { fileObjectStorageModule: 'docs', fileUploadObjectStorageModule: 'uploads', filePreviewObjectStorageModule: 'previews' } });
|
|
45
|
-
injector.register(DocumentFileService, { useValue: { getContent: vi.fn().mockResolvedValue(new Uint8Array([1, 2, 3])) } });
|
|
46
|
-
});
|
|
47
|
-
afterAll(async () => {
|
|
48
|
-
await injector?.dispose();
|
|
49
|
-
});
|
|
50
|
-
test('AiValidationExecutor should merge configurations correctly', async () => {
|
|
51
|
-
mockAiProvider.getGlobalConfiguration.mockResolvedValue({
|
|
52
|
-
defaults: {
|
|
53
|
-
language: 'en',
|
|
54
|
-
model: flashModel,
|
|
55
|
-
prompt: { systemAddition: 'Global System', userAddition: 'Global User' },
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
mockAiProvider.getValidationConfiguration.mockResolvedValue({
|
|
59
|
-
model: proModel,
|
|
60
|
-
prompt: { systemAddition: 'Validation System', systemOverride: (base) => `OVERRIDDEN: ${isString(base) ? base : formatInstructions(base)}` },
|
|
61
|
-
});
|
|
62
|
-
await runInInjectionContext(injector, async () => {
|
|
63
|
-
const executor = new TestAiValidationExecutor();
|
|
64
|
-
executor.executorConfig = {
|
|
65
|
-
prompt: { systemAddition: 'Executor System', userAddition: 'Executor User' },
|
|
66
|
-
};
|
|
67
|
-
const generateSpy = vi.spyOn(executor.genkit, 'generate').mockResolvedValue({ output: { valid: 'yes' } });
|
|
68
|
-
const context = {
|
|
69
|
-
execution: { tenantId },
|
|
70
|
-
definition: { identifier: 'test-validation' },
|
|
71
|
-
document: { id: 'test-doc', mimeType: 'application/pdf' },
|
|
72
|
-
};
|
|
73
|
-
await executor.publicExecute(context);
|
|
74
|
-
const call = generateSpy.mock.calls[0][0];
|
|
75
|
-
const systemText = call.system.map((p) => p.text).join('\n');
|
|
76
|
-
const userText = call.prompt.map((p) => p.text).join('\n');
|
|
77
|
-
expect(call.model.name).toBe(proModel.name);
|
|
78
|
-
expect(systemText).toContain('Global System');
|
|
79
|
-
expect(systemText).toContain('Executor System');
|
|
80
|
-
expect(systemText).toContain('Validation System');
|
|
81
|
-
expect(systemText).toContain('OVERRIDDEN:');
|
|
82
|
-
expect(userText).toContain('Global User');
|
|
83
|
-
expect(userText).toContain('Executor User');
|
|
84
|
-
expect(userText).toContain('IMPORTANT: All generated text content MUST be in en.');
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { afterAll, beforeAll, beforeEach, describe, expect, test, vi } from 'vitest';
|
|
2
|
-
import { GenkitModuleOptions } from '../../ai/genkit/module.js';
|
|
3
|
-
import { runInInjectionContext } from '../../injector/index.js';
|
|
4
|
-
import { ObjectStorage } from '../../object-storage/index.js';
|
|
5
|
-
import { clearTenantData, setupIntegrationTest } from '../../testing/index.js';
|
|
6
|
-
import { DocumentWorkflowState, DocumentWorkflowStep } from '../models/document-workflow.model.js';
|
|
7
|
-
import { DocumentApproval } from '../models/document.model.js';
|
|
8
|
-
import { configureDocumentManagement } from '../server/configure.js';
|
|
9
|
-
import { DocumentManagementConfiguration } from '../server/module.js';
|
|
10
|
-
import { DocumentCollectionService } from '../server/services/document-collection.service.js';
|
|
11
|
-
import { DocumentManagementAiService } from '../server/services/document-management-ai.service.js';
|
|
12
|
-
import { DocumentWorkflowService } from '../server/services/document-workflow.service.js';
|
|
13
|
-
import { DocumentService } from '../server/services/document.service.js';
|
|
14
|
-
import { TestDocumentManagementAncillaryService, TestDocumentManagementAuthorizationService } from './helper.js';
|
|
15
|
-
describe('DocumentService', () => {
|
|
16
|
-
let injector;
|
|
17
|
-
let database;
|
|
18
|
-
let documentService;
|
|
19
|
-
let workflowService;
|
|
20
|
-
let collectionService;
|
|
21
|
-
const schema = 'document_management';
|
|
22
|
-
const tenantId = crypto.randomUUID();
|
|
23
|
-
beforeAll(async () => {
|
|
24
|
-
({ injector, database } = await setupIntegrationTest({
|
|
25
|
-
modules: { taskQueue: true, documentManagement: true },
|
|
26
|
-
orm: { schema },
|
|
27
|
-
}));
|
|
28
|
-
const mockObjectStorage = {
|
|
29
|
-
uploadObject: vi.fn(),
|
|
30
|
-
getDownloadUrl: vi.fn(),
|
|
31
|
-
getContent: vi.fn(),
|
|
32
|
-
getContentStream: vi.fn(),
|
|
33
|
-
getObject: vi.fn(),
|
|
34
|
-
exists: vi.fn(),
|
|
35
|
-
};
|
|
36
|
-
const mockAiService = {
|
|
37
|
-
extractContent: vi.fn(),
|
|
38
|
-
classifyDocumentType: vi.fn(),
|
|
39
|
-
extractData: vi.fn(),
|
|
40
|
-
findSuitableCollectionsForDocument: vi.fn(),
|
|
41
|
-
findSuitableRequestForDocument: vi.fn(),
|
|
42
|
-
};
|
|
43
|
-
injector.register(ObjectStorage, { useFactory: () => mockObjectStorage });
|
|
44
|
-
injector.register(GenkitModuleOptions, { useValue: {} });
|
|
45
|
-
injector.register(DocumentManagementAiService, { useValue: mockAiService });
|
|
46
|
-
configureDocumentManagement({
|
|
47
|
-
ancillaryService: TestDocumentManagementAncillaryService,
|
|
48
|
-
authorizationService: TestDocumentManagementAuthorizationService,
|
|
49
|
-
fileObjectStorageModule: 'documents',
|
|
50
|
-
fileUploadObjectStorageModule: 'document-uploads',
|
|
51
|
-
filePreviewObjectStorageModule: 'document-previews',
|
|
52
|
-
injector,
|
|
53
|
-
});
|
|
54
|
-
documentService = await injector.resolveAsync(DocumentService);
|
|
55
|
-
workflowService = await injector.resolveAsync(DocumentWorkflowService);
|
|
56
|
-
collectionService = await injector.resolveAsync(DocumentCollectionService);
|
|
57
|
-
});
|
|
58
|
-
afterAll(async () => {
|
|
59
|
-
await injector?.dispose();
|
|
60
|
-
});
|
|
61
|
-
beforeEach(async () => {
|
|
62
|
-
await clearTenantData(database, schema, ['collection_assignment', 'workflow', 'document', 'collection'], tenantId);
|
|
63
|
-
});
|
|
64
|
-
test('create with skipWorkflow: true should not initiate workflow and set approval', async () => {
|
|
65
|
-
await runInInjectionContext(injector, async () => {
|
|
66
|
-
const collection = await collectionService.createCollection(tenantId, null);
|
|
67
|
-
const doc = await documentService.create(tenantId, {
|
|
68
|
-
originalFileName: 'test.pdf',
|
|
69
|
-
approval: DocumentApproval.Approved,
|
|
70
|
-
assignment: { collections: [collection.id] },
|
|
71
|
-
skipWorkflow: true,
|
|
72
|
-
}, new Uint8Array([1, 2, 3]));
|
|
73
|
-
expect(doc.approval).toBe(DocumentApproval.Approved);
|
|
74
|
-
const workflows = await workflowService.loadWorkflows(tenantId, doc.id);
|
|
75
|
-
expect(workflows).toHaveLength(0);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
test('create with skipAi: true should initiate workflow with skipAi flag', async () => {
|
|
79
|
-
await runInInjectionContext(injector, async () => {
|
|
80
|
-
const collection = await collectionService.createCollection(tenantId, null);
|
|
81
|
-
const doc = await documentService.create(tenantId, {
|
|
82
|
-
originalFileName: 'test.pdf',
|
|
83
|
-
assignment: { collections: [collection.id] },
|
|
84
|
-
skipAi: true,
|
|
85
|
-
}, new Uint8Array([1, 2, 3]));
|
|
86
|
-
const workflows = await workflowService.loadWorkflows(tenantId, doc.id);
|
|
87
|
-
expect(workflows).toHaveLength(1);
|
|
88
|
-
expect(workflows[0].skipAi).toBe(true);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
test('proceedWorkflow with skipAi: true should allow manual progression from Pending', async () => {
|
|
92
|
-
await runInInjectionContext(injector, async () => {
|
|
93
|
-
const collection = await collectionService.createCollection(tenantId, null);
|
|
94
|
-
const doc = await documentService.create(tenantId, {
|
|
95
|
-
originalFileName: 'test.pdf',
|
|
96
|
-
assignment: { collections: [collection.id] },
|
|
97
|
-
skipAi: true,
|
|
98
|
-
}, new Uint8Array([1, 2, 3]));
|
|
99
|
-
let workflows = await workflowService.loadWorkflows(tenantId, doc.id);
|
|
100
|
-
expect(workflows).toHaveLength(1);
|
|
101
|
-
expect(workflows[0].step).toBe('classification');
|
|
102
|
-
expect(workflows[0].state).toBe('pending');
|
|
103
|
-
await workflowService.proceedWorkflow(tenantId, doc.id, crypto.randomUUID(), DocumentWorkflowState.Completed);
|
|
104
|
-
workflows = await workflowService.loadWorkflows(tenantId, doc.id);
|
|
105
|
-
expect(workflows).toHaveLength(2);
|
|
106
|
-
expect(workflows.find((w) => w.step == DocumentWorkflowStep.Classification)?.state).toBe('completed');
|
|
107
|
-
expect(workflows.find((w) => w.step == DocumentWorkflowStep.DataExtraction)?.state).toBe('pending');
|
|
108
|
-
expect(workflows.find((w) => w.step == DocumentWorkflowStep.DataExtraction)?.skipAi).toBe(true);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
test('proceedWorkflow with skipAi: true should allow progression to Review', async () => {
|
|
112
|
-
await runInInjectionContext(injector, async () => {
|
|
113
|
-
const collection = await collectionService.createCollection(tenantId, null);
|
|
114
|
-
const doc = await documentService.create(tenantId, {
|
|
115
|
-
originalFileName: 'test.pdf',
|
|
116
|
-
assignment: { collections: [collection.id] },
|
|
117
|
-
skipAi: true,
|
|
118
|
-
}, new Uint8Array([1, 2, 3]));
|
|
119
|
-
await workflowService.proceedWorkflow(tenantId, doc.id, crypto.randomUUID(), DocumentWorkflowState.Review);
|
|
120
|
-
const workflows = await workflowService.loadWorkflows(tenantId, doc.id);
|
|
121
|
-
expect(workflows).toHaveLength(1);
|
|
122
|
-
expect(workflows[0].step).toBe('classification');
|
|
123
|
-
expect(workflows[0].state).toBe('review');
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
test('global skipAi: true should override per-document setting', async () => {
|
|
127
|
-
await runInInjectionContext(injector, async () => {
|
|
128
|
-
// Mock configuration override
|
|
129
|
-
const config = injector.resolve(DocumentManagementConfiguration);
|
|
130
|
-
config.skipAi = true;
|
|
131
|
-
const collection = await collectionService.createCollection(tenantId, null);
|
|
132
|
-
const doc = await documentService.create(tenantId, {
|
|
133
|
-
originalFileName: 'test.pdf',
|
|
134
|
-
assignment: { collections: [collection.id] },
|
|
135
|
-
skipAi: false, // Per-document false, but global true
|
|
136
|
-
}, new Uint8Array([1, 2, 3]));
|
|
137
|
-
const workflows = await workflowService.loadWorkflows(tenantId, doc.id);
|
|
138
|
-
expect(workflows).toHaveLength(1);
|
|
139
|
-
expect(workflows[0].skipAi).toBe(true); // Global override
|
|
140
|
-
config.skipAi = false; // Reset for other tests
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|