create-qpq-app 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/lib/commonjs/cli/runCreateQpqApp.js +15 -1
- package/lib/commonjs/cli/runCreateQpqApp.js.map +1 -1
- package/lib/commonjs/lib/index.d.ts +1 -1
- package/lib/commonjs/lib/index.js +1 -1
- package/lib/commonjs/lib/index.js.map +1 -1
- package/lib/commonjs/lib/promptText.d.ts +1 -0
- package/lib/commonjs/lib/promptText.js +53 -0
- package/lib/commonjs/lib/promptText.js.map +1 -0
- package/lib/commonjs/steps/005_applyAppIdentity.js +6 -5
- package/lib/commonjs/steps/005_applyAppIdentity.js.map +1 -1
- package/lib/commonjs/steps/006_applyDomain.js +11 -6
- package/lib/commonjs/steps/006_applyDomain.js.map +1 -1
- package/lib/commonjs/steps/007_applyDockerHost.d.ts +2 -0
- package/lib/commonjs/steps/007_applyDockerHost.js +40 -0
- package/lib/commonjs/steps/007_applyDockerHost.js.map +1 -0
- package/lib/commonjs/steps/{007_pinRegistryVersions.js → 008_pinRegistryVersions.js} +1 -1
- package/lib/commonjs/steps/{007_pinRegistryVersions.js.map → 008_pinRegistryVersions.js.map} +1 -1
- package/lib/commonjs/steps/{008_transpileToJavaScript.js → 009_transpileToJavaScript.js} +1 -1
- package/lib/commonjs/steps/{008_transpileToJavaScript.js.map → 009_transpileToJavaScript.js.map} +1 -1
- package/lib/commonjs/steps/{009_restoreGitignore.js → 010_restoreGitignore.js} +1 -1
- package/lib/commonjs/steps/{009_restoreGitignore.js.map → 010_restoreGitignore.js.map} +1 -1
- package/lib/commonjs/steps/{010_gitInit.js → 011_gitInit.js} +1 -1
- package/lib/commonjs/steps/{010_gitInit.js.map → 011_gitInit.js.map} +1 -1
- package/lib/commonjs/steps/{011_npmInstall.js → 012_npmInstall.js} +1 -1
- package/lib/commonjs/steps/{011_npmInstall.js.map → 012_npmInstall.js.map} +1 -1
- package/lib/commonjs/steps/{012_buildWorkspaces.js → 013_buildWorkspaces.js} +1 -1
- package/lib/commonjs/steps/{012_buildWorkspaces.js.map → 013_buildWorkspaces.js.map} +1 -1
- package/lib/commonjs/steps/{013_printNextSteps.js → 014_printNextSteps.js} +6 -3
- package/lib/commonjs/steps/014_printNextSteps.js.map +1 -0
- package/lib/commonjs/steps/index.d.ts +9 -8
- package/lib/commonjs/steps/index.js +25 -22
- package/lib/commonjs/steps/index.js.map +1 -1
- package/lib/commonjs/types/CreateQpqAppAnswers.d.ts +2 -0
- package/lib/commonjs/types/CreateQpqAppAnswers.js.map +1 -1
- package/lib/esm/cli/runCreateQpqApp.js +15 -1
- package/lib/esm/cli/runCreateQpqApp.js.map +1 -1
- package/lib/esm/lib/index.d.ts +1 -1
- package/lib/esm/lib/index.js +1 -1
- package/lib/esm/lib/index.js.map +1 -1
- package/lib/esm/lib/promptText.d.ts +1 -0
- package/lib/esm/lib/promptText.js +7 -0
- package/lib/esm/lib/promptText.js.map +1 -0
- package/lib/esm/steps/005_applyAppIdentity.js +6 -5
- package/lib/esm/steps/005_applyAppIdentity.js.map +1 -1
- package/lib/esm/steps/006_applyDomain.js +11 -6
- package/lib/esm/steps/006_applyDomain.js.map +1 -1
- package/lib/esm/steps/007_applyDockerHost.d.ts +2 -0
- package/lib/esm/steps/007_applyDockerHost.js +30 -0
- package/lib/esm/steps/007_applyDockerHost.js.map +1 -0
- package/lib/esm/steps/{007_pinRegistryVersions.js → 008_pinRegistryVersions.js} +1 -1
- package/lib/esm/steps/{007_pinRegistryVersions.js.map → 008_pinRegistryVersions.js.map} +1 -1
- package/lib/esm/steps/{008_transpileToJavaScript.js → 009_transpileToJavaScript.js} +1 -1
- package/lib/esm/steps/{008_transpileToJavaScript.js.map → 009_transpileToJavaScript.js.map} +1 -1
- package/lib/esm/steps/{009_restoreGitignore.js → 010_restoreGitignore.js} +1 -1
- package/lib/esm/steps/{009_restoreGitignore.js.map → 010_restoreGitignore.js.map} +1 -1
- package/lib/esm/steps/{010_gitInit.js → 011_gitInit.js} +1 -1
- package/lib/esm/steps/{010_gitInit.js.map → 011_gitInit.js.map} +1 -1
- package/lib/esm/steps/{011_npmInstall.js → 012_npmInstall.js} +1 -1
- package/lib/esm/steps/{011_npmInstall.js.map → 012_npmInstall.js.map} +1 -1
- package/lib/esm/steps/{012_buildWorkspaces.js → 013_buildWorkspaces.js} +1 -1
- package/lib/esm/steps/{012_buildWorkspaces.js.map → 013_buildWorkspaces.js.map} +1 -1
- package/lib/esm/steps/014_printNextSteps.js +24 -0
- package/lib/esm/steps/014_printNextSteps.js.map +1 -0
- package/lib/esm/steps/index.d.ts +9 -8
- package/lib/esm/steps/index.js +10 -8
- package/lib/esm/steps/index.js.map +1 -1
- package/lib/esm/types/CreateQpqAppAnswers.d.ts +2 -0
- package/lib/esm/types/CreateQpqAppAnswers.js.map +1 -1
- package/package.json +2 -2
- package/template/README.md +4 -3
- package/template/apps/qpqjs/bootstrap.qpq.ts +3 -2
- package/template/apps/qpqjs/deploy.config.json +42 -9
- package/template/apps/qpqjs/devServer.config.ts +13 -0
- package/template/apps/qpqjs/packages/constants/src/index.ts +0 -1
- package/template/apps/qpqjs/packages/service-utils/src/defineQpqjsService.ts +12 -29
- package/template/apps/qpqjs/services/admin/service/src/infrastructure.ts +1 -1
- package/template/apps/qpqjs/services/admin/views/src/app/app.tsx +9 -19
- package/template/apps/qpqjs/services/design/service/src/infrastructure.ts +1 -1
- package/template/apps/qpqjs/services/design/views/src/components/LandingPage/components/NavBar.tsx +2 -10
- package/template/apps/qpqjs/services/design/views/src/components/WelcomeScreen/WelcomeScreen.tsx +3 -11
- package/template/apps/qpqjs/services/shell/service/src/infrastructure.ts +5 -1
- package/template/apps/qpqjs/services/test/models/src/SmokeProbeRecord.ts +3 -0
- package/template/apps/qpqjs/services/test/service/src/infrastructure.ts +1 -7
- package/template/apps/qpqjs/services/test/service/src/smoke/config/defineSmoke.ts +8 -264
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/assert/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/config/defineSmokeHarness.ts +115 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/index.ts +0 -2
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/index.ts +10 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askExecuteSmokeTest.ts +3 -3
- package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askStartSmokeRun.ts +5 -4
- package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/logic/smokeRun/listSmokeTests.ts +6 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{models → harness/models}/SmokeTestRequestedQueueEvent.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/models/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/queue/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/types/SmokeSuite.ts +13 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/harness/types/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/index.ts +2 -12
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/config/defineEmailReceiveSmoke.ts +20 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/constants/SMOKE_EMAIL_RECEIVER.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/constants/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/emailReceiveSmokeSuite.ts +15 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/entry/email}/index.ts +0 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/entry/email}/onSmokeEmailReceived.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/entry/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/index.ts +5 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/emailReceive → suites/emailReceive/logic}/askRunEmailReceiveTest.ts +3 -3
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/emailReceive → suites/emailReceive/logic}/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/config/defineEncryptedResourcesSmoke.ts +29 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_CRYPTO_KEY.ts +5 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_ENCRYPTED_PROBE_DRIVE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_ENCRYPTED_PROBE_STORE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/index.ts +3 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/encryptedResourcesSmokeSuite.ts +9 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/index.ts +4 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/encryptedResources → suites/encryptedResources/logic}/askRunEncryptedResourcesTest.ts +3 -5
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/config/defineEventBusSmoke.ts +21 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_BUS.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_QUEUE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_TYPE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/index.ts +3 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/entry/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/entry/queue/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{queue → suites/eventBus/entry/queue}/onSmokeProbeEvent.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/eventBusSmokeSuite.ts +9 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/index.ts +6 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventBus → suites/eventBus/logic}/askRunEventBusTest.ts +4 -6
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/models/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/config/defineEventDocSmoke.ts +44 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/constants/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{constants → suites/eventDoc/constants}/smokeEventDoc.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/entry/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/entry/queue/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{queue → suites/eventDoc/entry/queue}/onSmokeEventDocAppend.ts +3 -3
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/eventDocSmokeSuite.ts +19 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/index.ts +7 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAssertContiguousEventIds.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAssertSmokeProbeDocState.ts +2 -2
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAwaitSmokeEventDocLog.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askRunEventDocConcurrentAppendTest.ts +5 -5
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askRunEventDocInterleavedBatchAppendTest.ts +4 -4
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/models/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests → suites}/index.ts +4 -5
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/keyValueStoreSmokeSuite.ts +14 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/keyValueStore/logic}/askRunCrossServiceKeyValueStoreTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStore → suites/keyValueStore/logic}/askRunKeyValueStoreTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/logic/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/config/defineKeyValueStoreStreamSmoke.ts +30 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/constants/SMOKE_STREAM_PROBE_STORE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/constants/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/entry/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/entry/kvsStream}/index.ts +0 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/entry/kvsStream}/onSmokeStreamRecord.ts +6 -4
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/index.ts +5 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/keyValueStoreStreamSmokeSuite.ts +11 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStoreStream → suites/keyValueStoreStream/logic}/askRunKeyValueStoreStreamTest.ts +15 -6
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStoreStream → suites/keyValueStoreStream/logic}/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/noop/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/noop/noopSmokeSuite.ts +7 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/config/defineOpenApiSmoke.ts +13 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/index.ts +4 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/askRunEchoRoundTripTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/askRunOpenApiDocumentTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/openApiSmokeSuite.ts +13 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/config/defineParameterSmoke.ts +11 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/SMOKE_PROBE_PARAMETER.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/SMOKE_PROBE_PARAMETER_VALUE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/index.ts +4 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/parameter → suites/parameter/logic}/askRunParameterTest.ts +3 -5
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/parameterSmokeSuite.ts +9 -0
- package/template/apps/qpqjs/services/test/service/src/{tick/config/defineTick.ts → smoke/suites/schedule/config/defineScheduleSmoke.ts} +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/entry/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/index.ts +6 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/schedule → suites/schedule/logic}/askRunScheduleTest.ts +4 -4
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/scheduleSmokeSuite.ts +9 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/config/defineScopedKeyValueStoreSmoke.ts +19 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/constants/SMOKE_SCOPED_PROBE_STORE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/constants/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/index.ts +4 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/logic/askRunScopedKeyValueStoreTest.ts +256 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/scopedKeyValueStoreSmokeSuite.ts +11 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/config/defineScopedStorageDriveSmoke.ts +12 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/constants/SMOKE_SCOPED_PROBE_DRIVE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/constants/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/index.ts +4 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedStorageDrive → suites/scopedStorageDrive/logic}/askRunScopedStorageDriveTest.ts +2 -2
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/scopedStorageDriveSmokeSuite.ts +9 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/config/defineSecretSmoke.ts +8 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/constants/SMOKE_PROBE_SECRET.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/constants/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/index.ts +4 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/secret → suites/secret/logic}/askRunSecretTest.ts +2 -2
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/secretSmokeSuite.ts +9 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/config/defineSigningKeySmoke.ts +12 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/index.ts +3 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/signingKey/logic}/askRunCrossServiceSigningKeyTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/signingKey → suites/signingKey/logic}/askRunSigningKeyTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/logic/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/signingKeySmokeSuite.ts +16 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/smokeSuites.ts +46 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/storageDrive/logic}/askRunCrossServiceStorageDriveTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDrive → suites/storageDrive/logic}/askRunStorageDriveTest.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/logic/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/storageDriveSmokeSuite.ts +14 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/config/defineStorageDriveEventSmoke.ts +27 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/config/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/SMOKE_FILE_EVENT_DRIVE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/SMOKE_SCOPED_FILE_EVENT_DRIVE.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/index.ts +2 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/entry/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/entry/storageDrive/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{storageDrive → suites/storageDriveEvent/entry/storageDrive}/onSmokeFileEvent.ts +1 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/index.ts +5 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDriveEvent → suites/storageDriveEvent/logic}/askRunStorageDriveEventTest.ts +7 -9
- package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDriveEvent → suites/storageDriveEvent/logic}/index.ts +1 -0
- package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/storageDriveEventSmokeSuite.ts +9 -0
- package/template/apps/qpqjs/services/testa/models/src/CrossServiceProbePayload.ts +1 -1
- package/template/apps/qpqjs/services/testa/service/src/infrastructure.ts +3 -3
- package/template/apps/qpqjs/services/testa/service/src/smoke/config/defineSmokeProbes.ts +16 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/config/index.ts +1 -0
- package/template/apps/qpqjs/services/{test/service/src/tick → testa/service/src/smoke}/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/index.ts +3 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/config/defineKeyValueStoreSmokeProbe.ts +33 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/config/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/entry/serviceFunction/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/logic/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/config/defineSigningKeySmokeProbe.ts +28 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/config/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/entry/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/entry/serviceFunction/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/index.ts +3 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/logic/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/config/defineStorageDriveSmokeProbe.ts +31 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/config/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/entry/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/entry/serviceFunction/index.ts +1 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/index.ts +3 -0
- package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/logic/index.ts +1 -0
- package/template/apps/todo/deploy.config.json +13 -4
- package/template/apps/todo/packages/constants/src/index.ts +0 -1
- package/template/apps/todo/packages/service-utils/src/defineTodoService.ts +9 -7
- package/template/apps/todo/services/admin/service/src/infrastructure.ts +1 -1
- package/template/apps/todo/services/admin/views/src/app/app.tsx +9 -19
- package/template/apps/todo/services/auth/service/src/infrastructure.ts +1 -1
- package/template/apps/todo/services/design/service/src/infrastructure.ts +1 -1
- package/template/apps/todo/services/shell/service/src/infrastructure.ts +1 -1
- package/template/apps/todo/services/todo/service/src/infrastructure.ts +1 -1
- package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-delete.md +1 -1
- package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-get-all.md +1 -1
- package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-get.md +1 -1
- package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-query.md +3 -1
- package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-scan.md +1 -1
- package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-update.md +1 -1
- package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-upsert.md +1 -1
- package/template/docusaurus/docs/config/core/key-value-store.md +12 -2
- package/template/docusaurus/docs/config/features/event-doc.md +22 -1
- package/template/docusaurus/docs/getting-started.md +5 -5
- package/template/scripts/deployedSmoke.mjs +27 -22
- package/template/scripts/localSmoke.mjs +7 -7
- package/lib/commonjs/lib/replaceInFileExact.d.ts +0 -1
- package/lib/commonjs/lib/replaceInFileExact.js +0 -18
- package/lib/commonjs/lib/replaceInFileExact.js.map +0 -1
- package/lib/commonjs/steps/013_printNextSteps.js.map +0 -1
- package/lib/esm/lib/replaceInFileExact.d.ts +0 -1
- package/lib/esm/lib/replaceInFileExact.js +0 -11
- package/lib/esm/lib/replaceInFileExact.js.map +0 -1
- package/lib/esm/steps/013_printNextSteps.js +0 -21
- package/lib/esm/steps/013_printNextSteps.js.map +0 -1
- package/template/apps/qpqjs/packages/constants/src/domain.ts +0 -3
- package/template/apps/qpqjs/services/test/service/src/echo/config/defineEcho.ts +0 -9
- package/template/apps/qpqjs/services/test/service/src/smoke/constants/smokeProbe.ts +0 -39
- package/template/apps/qpqjs/services/test/service/src/smoke/models/index.ts +0 -5
- package/template/apps/qpqjs/services/test/service/src/smoke/queue/index.ts +0 -3
- package/template/apps/qpqjs/services/test/service/src/smoke/storageDrive/index.ts +0 -4
- package/template/apps/qpqjs/services/test/service/src/smoke/tests/crossService/index.ts +0 -3
- package/template/apps/qpqjs/services/test/service/src/smoke/tests/keyValueStore/index.ts +0 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/tests/scopedKeyValueStore/askRunScopedKeyValueStoreTest.ts +0 -102
- package/template/apps/qpqjs/services/test/service/src/smoke/tests/signingKey/index.ts +0 -1
- package/template/apps/qpqjs/services/test/service/src/smoke/tests/smokeTestRegistry.ts +0 -66
- package/template/apps/qpqjs/services/test/service/src/smoke/tests/storageDrive/index.ts +0 -1
- package/template/apps/qpqjs/services/test/service/src/tick/config/index.ts +0 -1
- package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/config/defineCrossServiceProbe.ts +0 -68
- package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/config/index.ts +0 -1
- package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/entry/serviceFunction/index.ts +0 -3
- package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/logic/index.ts +0 -3
- package/template/apps/todo/packages/constants/src/domain.ts +0 -2
- /package/lib/commonjs/steps/{007_pinRegistryVersions.d.ts → 008_pinRegistryVersions.d.ts} +0 -0
- /package/lib/commonjs/steps/{008_transpileToJavaScript.d.ts → 009_transpileToJavaScript.d.ts} +0 -0
- /package/lib/commonjs/steps/{009_restoreGitignore.d.ts → 010_restoreGitignore.d.ts} +0 -0
- /package/lib/commonjs/steps/{010_gitInit.d.ts → 011_gitInit.d.ts} +0 -0
- /package/lib/commonjs/steps/{011_npmInstall.d.ts → 012_npmInstall.d.ts} +0 -0
- /package/lib/commonjs/steps/{012_buildWorkspaces.d.ts → 013_buildWorkspaces.d.ts} +0 -0
- /package/lib/commonjs/steps/{013_printNextSteps.d.ts → 014_printNextSteps.d.ts} +0 -0
- /package/lib/esm/steps/{007_pinRegistryVersions.d.ts → 008_pinRegistryVersions.d.ts} +0 -0
- /package/lib/esm/steps/{008_transpileToJavaScript.d.ts → 009_transpileToJavaScript.d.ts} +0 -0
- /package/lib/esm/steps/{009_restoreGitignore.d.ts → 010_restoreGitignore.d.ts} +0 -0
- /package/lib/esm/steps/{010_gitInit.d.ts → 011_gitInit.d.ts} +0 -0
- /package/lib/esm/steps/{011_npmInstall.d.ts → 012_npmInstall.d.ts} +0 -0
- /package/lib/esm/steps/{012_buildWorkspaces.d.ts → 013_buildWorkspaces.d.ts} +0 -0
- /package/lib/esm/steps/{013_printNextSteps.d.ts → 014_printNextSteps.d.ts} +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/assert}/askSmokeAssert.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/assert}/askSmokePollForMarker.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/SMOKE_RUNS_STORE.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/githubOidc.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/smokeRunQueue.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/askGetSmokeRun.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/askRunSmokeTests.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askGetSmokeRunById.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askRecordSmokeTestResult.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askSaveSmokeRun.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askSetSmokeRunOutcome.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/github/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/github/verifyGithubOidcToken.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askFindSmokeRun.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/summarizeSmokeRun.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{models → harness/models}/GithubOidcClaims.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/github/getGithubOidcAuthProcessors.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/github/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{queue → harness/queue}/onSmokeTestRequested.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/types}/SmokeTestDefinition.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/logic}/smokeEmailMarkerId.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/encryptedResources → suites/encryptedResources/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventBus → suites/eventBus/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventBus/models}/SmokeProbeEventQueueEvent.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{eventDoc → suites/eventDoc/definition}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{eventDoc → suites/eventDoc/definition}/smokeProbeDocDefinition.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventDoc/models}/SmokeEventDocAppendQueueEvent.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventDoc/models}/SmokeEventDocMark.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/logic}/smokeStreamMarkerId.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/noop → suites/noop/logic}/askRunNoopTest.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/noop → suites/noop/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{echo → smoke/suites/openApi}/controller/echo.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{echo → smoke/suites/openApi}/controller/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/parameter → suites/parameter/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/scheduleTickName.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/scheduleTickStore.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/kvsStream/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/kvsStream/onScheduleTickStream.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/schedule/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/schedule/onTick.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/schedule → suites/schedule/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/models/ScheduleTickRecord.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/models/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedKeyValueStore → suites/scopedKeyValueStore/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedStorageDrive → suites/scopedStorageDrive/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/secret → suites/secret/logic}/index.ts +0 -0
- /package/template/apps/qpqjs/services/test/service/src/smoke/{storageDrive → suites/storageDriveEvent/logic}/smokeFileEventMarkerId.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/entry/index.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/entry/serviceFunction/smokeCrossServiceKeyValueStoreProbe.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/index.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/logic/askProbeForeignKeyValueStore.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/signingKey}/entry/serviceFunction/smokeCrossServiceSigningKeyProbe.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/signingKey}/logic/askProbeForeignSigningKey.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/storageDrive}/entry/serviceFunction/smokeCrossServiceStorageDriveProbe.ts +0 -0
- /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/storageDrive}/logic/askProbeForeignStorageDrive.ts +0 -0
|
@@ -1,266 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
defineCryptoKey,
|
|
3
|
-
defineEmailReceiver,
|
|
4
|
-
defineEmailSender,
|
|
5
|
-
defineEventBus,
|
|
6
|
-
defineKeyValueStore,
|
|
7
|
-
defineParameter,
|
|
8
|
-
defineQueue,
|
|
9
|
-
defineRoute,
|
|
10
|
-
defineSecret,
|
|
11
|
-
defineSigningKey,
|
|
12
|
-
defineStorageDrive,
|
|
13
|
-
QPQConfig,
|
|
14
|
-
QpqFunctionRuntime,
|
|
15
|
-
} from 'quidproquo';
|
|
16
|
-
import { defineEventDoc } from 'quidproquo-features';
|
|
1
|
+
import { QPQConfig } from 'quidproquo';
|
|
17
2
|
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
SMOKE_PROBE_DRIVE,
|
|
21
|
-
SMOKE_PROBE_SIGNING_KEY,
|
|
22
|
-
SMOKE_PROBE_STORE,
|
|
23
|
-
} from '@qpqjs/constants';
|
|
24
|
-
import {
|
|
25
|
-
SmokeProbeRecord,
|
|
26
|
-
SmokeRunStartedSchema,
|
|
27
|
-
SmokeRunWithSummarySchema,
|
|
28
|
-
} from '@qpqjs/test-models';
|
|
3
|
+
import { defineSmokeHarness } from '../harness/config/defineSmokeHarness';
|
|
4
|
+
import { smokeSuites } from '../suites/smokeSuites';
|
|
29
5
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
} from '../constants/smokeEventDoc';
|
|
36
|
-
import {
|
|
37
|
-
SMOKE_CRYPTO_KEY,
|
|
38
|
-
SMOKE_EMAIL_RECEIVER,
|
|
39
|
-
SMOKE_ENCRYPTED_PROBE_DRIVE,
|
|
40
|
-
SMOKE_ENCRYPTED_PROBE_STORE,
|
|
41
|
-
SMOKE_FILE_EVENT_DRIVE,
|
|
42
|
-
SMOKE_PROBE_EVENT_BUS,
|
|
43
|
-
SMOKE_PROBE_EVENT_QUEUE,
|
|
44
|
-
SMOKE_PROBE_EVENT_TYPE,
|
|
45
|
-
SMOKE_PROBE_PARAMETER,
|
|
46
|
-
SMOKE_PROBE_PARAMETER_VALUE,
|
|
47
|
-
SMOKE_PROBE_SECRET,
|
|
48
|
-
SMOKE_SCOPED_PROBE_DRIVE,
|
|
49
|
-
SMOKE_SCOPED_PROBE_STORE,
|
|
50
|
-
SMOKE_STREAM_PROBE_STORE,
|
|
51
|
-
} from '../constants/smokeProbe';
|
|
52
|
-
import {
|
|
53
|
-
SMOKE_RUN_QUEUE,
|
|
54
|
-
SMOKE_TEST_REQUESTED_MESSAGE_TYPE,
|
|
55
|
-
} from '../constants/smokeRunQueue';
|
|
56
|
-
import { smokeProbeDocDefinition } from '../eventDoc/smokeProbeDocDefinition';
|
|
57
|
-
|
|
58
|
-
// Everything the smoke feature needs: the run store, the queue runs execute
|
|
59
|
-
// on, and the two routes. Runtimes are located relative to this file, so the
|
|
60
|
-
// module can move as a unit.
|
|
61
|
-
//
|
|
62
|
-
// The routes look public (no user directory, no api keys) but carry a
|
|
63
|
-
// per-runtime action processor override that swaps the route auth decode for
|
|
64
|
-
// the GitHub OIDC validator - so ONLY a GitHub Actions run of our repo,
|
|
65
|
-
// holding an OIDC token with the qpq-smoke audience and matching pinned
|
|
66
|
-
// claims, gets past the preamble. Everything else 401s, tokenless included.
|
|
67
|
-
export const defineSmoke = (): QPQConfig => {
|
|
68
|
-
const githubOidcAuth: QpqFunctionRuntime[] = [
|
|
69
|
-
{
|
|
70
|
-
basePath: __dirname,
|
|
71
|
-
relativePath: '../processors/github/getGithubOidcAuthProcessors',
|
|
72
|
-
functionName: 'getGithubOidcAuthProcessors',
|
|
73
|
-
},
|
|
74
|
-
];
|
|
75
|
-
|
|
76
|
-
const onSmokeFileEvent: QpqFunctionRuntime = {
|
|
77
|
-
basePath: __dirname,
|
|
78
|
-
relativePath: '../storageDrive/onSmokeFileEvent',
|
|
79
|
-
functionName: 'onSmokeFileEvent',
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
return [
|
|
83
|
-
// One record per run, keyed by runId; the queue workers each write their
|
|
84
|
-
// own test's entry as it completes and the GET route polls it.
|
|
85
|
-
defineKeyValueStore(SMOKE_RUNS_STORE, 'runId'),
|
|
86
|
-
|
|
87
|
-
// One message per test per run. Not FIFO and no concurrency cap, so the
|
|
88
|
-
// tests of a run fan out and execute in parallel.
|
|
89
|
-
defineQueue(SMOKE_RUN_QUEUE, {
|
|
90
|
-
[SMOKE_TEST_REQUESTED_MESSAGE_TYPE]: {
|
|
91
|
-
basePath: __dirname,
|
|
92
|
-
relativePath: '../queue/onSmokeTestRequested',
|
|
93
|
-
functionName: 'onSmokeTestRequested',
|
|
94
|
-
},
|
|
95
|
-
}),
|
|
96
|
-
|
|
97
|
-
// Throwaway probe resources, one per kind of owned resource the tag-based
|
|
98
|
-
// IAM grants cover. The store's `category` index is what the KVS test
|
|
99
|
-
// queries through, proving the `table/*/index/*` half of the grant.
|
|
100
|
-
defineKeyValueStore<SmokeProbeRecord>(SMOKE_PROBE_STORE, 'probeId', [], {
|
|
101
|
-
indexes: ['category'],
|
|
102
|
-
}),
|
|
103
|
-
defineParameter(SMOKE_PROBE_PARAMETER, {
|
|
104
|
-
value: SMOKE_PROBE_PARAMETER_VALUE,
|
|
105
|
-
}),
|
|
106
|
-
defineSecret(SMOKE_PROBE_SECRET),
|
|
107
|
-
defineStorageDrive(SMOKE_PROBE_DRIVE),
|
|
108
|
-
// An owned RSA signing key: kms:Sign + kms:GetPublicKey through the
|
|
109
|
-
// alias-conditioned grant. testa declares the same key foreign (see
|
|
110
|
-
// defineCrossServiceProbe) for the cross-service verify test.
|
|
111
|
-
defineSigningKey(SMOKE_PROBE_SIGNING_KEY),
|
|
112
|
-
|
|
113
|
-
// Scoped probe resources: the scope gate in both directions (a scoped
|
|
114
|
-
// resource refuses an unscoped call, an unscoped one refuses a scope) and
|
|
115
|
-
// partition isolation between two scopes.
|
|
116
|
-
defineKeyValueStore<SmokeProbeRecord>(
|
|
117
|
-
SMOKE_SCOPED_PROBE_STORE,
|
|
118
|
-
'probeId',
|
|
119
|
-
[],
|
|
120
|
-
{ indexes: ['category'], scoped: true }
|
|
121
|
-
),
|
|
122
|
-
defineStorageDrive(SMOKE_SCOPED_PROBE_DRIVE, {
|
|
123
|
-
scoped: true,
|
|
124
|
-
onEvent: { create: onSmokeFileEvent, delete: onSmokeFileEvent },
|
|
125
|
-
}),
|
|
126
|
-
|
|
127
|
-
// File event test path: a write or delete on either drive fires the
|
|
128
|
-
// handler, which writes a marker into the probe store; the test polls for
|
|
129
|
-
// it. The scoped drive's events must arrive with the scope split off.
|
|
130
|
-
defineStorageDrive(SMOKE_FILE_EVENT_DRIVE, {
|
|
131
|
-
onEvent: { create: onSmokeFileEvent, delete: onSmokeFileEvent },
|
|
132
|
-
}),
|
|
133
|
-
|
|
134
|
-
// Kvs stream test path: a change on this scoped store streams to the
|
|
135
|
-
// handler, which writes a marker into the probe store; the test polls for
|
|
136
|
-
// it. The record must carry the scope as its own field with a raw key.
|
|
137
|
-
defineKeyValueStore<SmokeProbeRecord>(
|
|
138
|
-
SMOKE_STREAM_PROBE_STORE,
|
|
139
|
-
'probeId',
|
|
140
|
-
[],
|
|
141
|
-
{
|
|
142
|
-
scoped: true,
|
|
143
|
-
onStream: {
|
|
144
|
-
runtime: {
|
|
145
|
-
basePath: __dirname,
|
|
146
|
-
relativePath: '../kvsStream/onSmokeStreamRecord',
|
|
147
|
-
functionName: 'onSmokeStreamRecord',
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
}
|
|
151
|
-
),
|
|
152
|
-
|
|
153
|
-
// Encrypted probe resources: a drive and a store encrypted with an owned
|
|
154
|
-
// crypto key, so the test proves the role's KMS grant covers data at rest.
|
|
155
|
-
defineCryptoKey(SMOKE_CRYPTO_KEY),
|
|
156
|
-
defineKeyValueStore<SmokeProbeRecord>(
|
|
157
|
-
SMOKE_ENCRYPTED_PROBE_STORE,
|
|
158
|
-
'probeId',
|
|
159
|
-
[],
|
|
160
|
-
{ cryptoKeyName: SMOKE_CRYPTO_KEY }
|
|
161
|
-
),
|
|
162
|
-
defineStorageDrive(SMOKE_ENCRYPTED_PROBE_DRIVE, {
|
|
163
|
-
cryptoKeyName: SMOKE_CRYPTO_KEY,
|
|
164
|
-
}),
|
|
165
|
-
|
|
166
|
-
// Inbound email test path: the test sends to its own receiving domain, the
|
|
167
|
-
// receiver hands the parsed message to onSmokeEmailReceived, which writes a
|
|
168
|
-
// marker into the probe store, and the test polls for it. The sender is what
|
|
169
|
-
// lets the test send; the receiving domain is a verified identity, so the
|
|
170
|
-
// SES sandbox allows it.
|
|
171
|
-
defineEmailSender(),
|
|
172
|
-
defineEmailReceiver(SMOKE_EMAIL_RECEIVER, {
|
|
173
|
-
onEmail: {
|
|
174
|
-
basePath: __dirname,
|
|
175
|
-
relativePath: '../email/onSmokeEmailReceived',
|
|
176
|
-
functionName: 'onSmokeEmailReceived',
|
|
177
|
-
},
|
|
178
|
-
}),
|
|
179
|
-
|
|
180
|
-
// Event bus test path: publish to the bus, the subscribed queue's entry
|
|
181
|
-
// writes a marker into the probe store, the test polls for it.
|
|
182
|
-
defineEventBus(SMOKE_PROBE_EVENT_BUS),
|
|
183
|
-
defineQueue(
|
|
184
|
-
SMOKE_PROBE_EVENT_QUEUE,
|
|
185
|
-
{
|
|
186
|
-
[SMOKE_PROBE_EVENT_TYPE]: {
|
|
187
|
-
basePath: __dirname,
|
|
188
|
-
relativePath: '../queue/onSmokeProbeEvent',
|
|
189
|
-
functionName: 'onSmokeProbeEvent',
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
{ eventBusSubscriptions: [SMOKE_PROBE_EVENT_BUS] }
|
|
193
|
-
),
|
|
194
|
-
|
|
195
|
-
// The event-doc probe collection: a full registered collection (stores, stream
|
|
196
|
-
// projector, dynamic functions, routes) so the smoke tests exercise event docs the
|
|
197
|
-
// way a real service does. NOTE the routes mount with no auth - the test service
|
|
198
|
-
// has no user directory - so the collection is world-writable; it holds nothing
|
|
199
|
-
// but throwaway probe docs. The queue fans a test's writers out one invocation
|
|
200
|
-
// each, so their appends race across lambdas.
|
|
201
|
-
defineEventDoc(
|
|
202
|
-
smokeProbeDocDefinition,
|
|
203
|
-
{
|
|
204
|
-
basePath: __dirname,
|
|
205
|
-
relativePath: '../eventDoc/smokeProbeDocDefinition',
|
|
206
|
-
functionName: 'smokeProbeDocDefinition',
|
|
207
|
-
},
|
|
208
|
-
{ basePath: SMOKE_EVENT_DOC_BASE_PATH }
|
|
209
|
-
),
|
|
210
|
-
// A writer that loses the slot race past the append retry cap fails its message; a
|
|
211
|
-
// quick redelivery lets it land instead of vanishing, as a production queue should.
|
|
212
|
-
defineQueue(
|
|
213
|
-
SMOKE_EVENT_DOC_APPEND_QUEUE,
|
|
214
|
-
{
|
|
215
|
-
[SMOKE_EVENT_DOC_APPEND_MESSAGE_TYPE]: {
|
|
216
|
-
basePath: __dirname,
|
|
217
|
-
relativePath: '../queue/onSmokeEventDocAppend',
|
|
218
|
-
functionName: 'onSmokeEventDocAppend',
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
{ maxTries: 3, ttRetryInSeconds: 10 }
|
|
222
|
-
),
|
|
223
|
-
|
|
224
|
-
// The zod models double as the routes' published contract, flattened to
|
|
225
|
-
// JSON Schema here for the OpenAPI document at /v1/docs.
|
|
226
|
-
defineRoute(
|
|
227
|
-
'POST',
|
|
228
|
-
'/smoke/run',
|
|
229
|
-
{
|
|
230
|
-
basePath: __dirname,
|
|
231
|
-
relativePath: '../controller/askRunSmokeTests',
|
|
232
|
-
functionName: 'askRunSmokeTests',
|
|
233
|
-
actionProcessors: githubOidcAuth,
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
schema: {
|
|
237
|
-
summary: 'Start a smoke run',
|
|
238
|
-
description:
|
|
239
|
-
'Queues every registered smoke test and returns the run id to poll. Requires a GitHub Actions OIDC token for this repo.',
|
|
240
|
-
tags: ['smoke'],
|
|
241
|
-
responseJsonSchema: z.toJSONSchema(SmokeRunStartedSchema),
|
|
242
|
-
},
|
|
243
|
-
}
|
|
244
|
-
),
|
|
245
|
-
|
|
246
|
-
defineRoute(
|
|
247
|
-
'GET',
|
|
248
|
-
'/smoke/run/{runId}',
|
|
249
|
-
{
|
|
250
|
-
basePath: __dirname,
|
|
251
|
-
relativePath: '../controller/askGetSmokeRun',
|
|
252
|
-
functionName: 'askGetSmokeRun',
|
|
253
|
-
actionProcessors: githubOidcAuth,
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
schema: {
|
|
257
|
-
summary: 'Get a smoke run',
|
|
258
|
-
description:
|
|
259
|
-
'The stored run plus pass/fail counts. Poll until status leaves running.',
|
|
260
|
-
tags: ['smoke'],
|
|
261
|
-
responseJsonSchema: z.toJSONSchema(SmokeRunWithSummarySchema),
|
|
262
|
-
},
|
|
263
|
-
}
|
|
264
|
-
),
|
|
265
|
-
];
|
|
266
|
-
};
|
|
6
|
+
/** The whole smoke feature: the harness plus the resources of every registered suite. */
|
|
7
|
+
export const defineSmoke = (): QPQConfig => [
|
|
8
|
+
defineSmokeHarness(),
|
|
9
|
+
smokeSuites.map((suite) => suite.defineConfig?.() ?? []),
|
|
10
|
+
];
|
package/template/apps/qpqjs/services/test/service/src/smoke/harness/config/defineSmokeHarness.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineKeyValueStore,
|
|
3
|
+
defineQueue,
|
|
4
|
+
defineRoute,
|
|
5
|
+
defineStorageDrive,
|
|
6
|
+
QPQConfig,
|
|
7
|
+
QpqFunctionRuntime,
|
|
8
|
+
} from 'quidproquo';
|
|
9
|
+
|
|
10
|
+
import { z } from 'zod/v4';
|
|
11
|
+
import { SMOKE_PROBE_DRIVE, SMOKE_PROBE_STORE } from '@qpqjs/constants';
|
|
12
|
+
import {
|
|
13
|
+
SmokeProbeRecord,
|
|
14
|
+
SmokeRunStartedSchema,
|
|
15
|
+
SmokeRunWithSummarySchema,
|
|
16
|
+
} from '@qpqjs/test-models';
|
|
17
|
+
|
|
18
|
+
import { SMOKE_RUNS_STORE } from '../constants/SMOKE_RUNS_STORE';
|
|
19
|
+
import {
|
|
20
|
+
SMOKE_RUN_QUEUE,
|
|
21
|
+
SMOKE_TEST_REQUESTED_MESSAGE_TYPE,
|
|
22
|
+
} from '../constants/smokeRunQueue';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The part of the smoke feature every suite relies on: the run store, the
|
|
26
|
+
* queue runs execute on, the shared probe store and drive, and the two
|
|
27
|
+
* routes. Knows nothing about individual suites; defineSmoke adds theirs
|
|
28
|
+
* alongside.
|
|
29
|
+
*
|
|
30
|
+
* The routes look public (no user directory, no api keys) but carry a
|
|
31
|
+
* per-runtime action processor override that swaps the route auth decode for
|
|
32
|
+
* the GitHub OIDC validator, so ONLY a GitHub Actions run of our repo holding
|
|
33
|
+
* an OIDC token with the qpq-smoke audience and matching pinned claims gets
|
|
34
|
+
* past the preamble. Everything else 401s, tokenless included.
|
|
35
|
+
*/
|
|
36
|
+
export const defineSmokeHarness = (): QPQConfig => {
|
|
37
|
+
const githubOidcAuth: QpqFunctionRuntime[] = [
|
|
38
|
+
{
|
|
39
|
+
basePath: __dirname,
|
|
40
|
+
relativePath: '../processors/github/getGithubOidcAuthProcessors',
|
|
41
|
+
functionName: 'getGithubOidcAuthProcessors',
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
return [
|
|
46
|
+
// One record per run, keyed by runId; the queue workers each write their
|
|
47
|
+
// own test's entry as it completes and the GET route polls it.
|
|
48
|
+
defineKeyValueStore(SMOKE_RUNS_STORE, 'runId'),
|
|
49
|
+
|
|
50
|
+
// One message per test per run. Not FIFO and no concurrency cap, so the
|
|
51
|
+
// tests of a run fan out and execute in parallel.
|
|
52
|
+
defineQueue(SMOKE_RUN_QUEUE, {
|
|
53
|
+
[SMOKE_TEST_REQUESTED_MESSAGE_TYPE]: {
|
|
54
|
+
basePath: __dirname,
|
|
55
|
+
relativePath: '../queue/onSmokeTestRequested',
|
|
56
|
+
functionName: 'onSmokeTestRequested',
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
|
|
60
|
+
// Every async suite's handler writes its marker here for
|
|
61
|
+
// askSmokePollForMarker. The keyValueStore suite queries its `category`
|
|
62
|
+
// index, proving the `table/*/index/*` half of the tag-conditioned grant,
|
|
63
|
+
// and testa reaches it cross-service.
|
|
64
|
+
defineKeyValueStore<SmokeProbeRecord>(SMOKE_PROBE_STORE, 'probeId', [], {
|
|
65
|
+
indexes: ['category'],
|
|
66
|
+
}),
|
|
67
|
+
|
|
68
|
+
// The unscoped probe drive: the storageDrive suite's subject, testa's
|
|
69
|
+
// cross-service target, and the drive the scopedStorageDrive suite proves
|
|
70
|
+
// refuses a scope.
|
|
71
|
+
defineStorageDrive(SMOKE_PROBE_DRIVE),
|
|
72
|
+
|
|
73
|
+
// The zod models double as the routes' published contract, flattened to
|
|
74
|
+
// JSON Schema here for the OpenAPI document at /v1/docs.
|
|
75
|
+
defineRoute(
|
|
76
|
+
'POST',
|
|
77
|
+
'/smoke/run',
|
|
78
|
+
{
|
|
79
|
+
basePath: __dirname,
|
|
80
|
+
relativePath: '../controller/askRunSmokeTests',
|
|
81
|
+
functionName: 'askRunSmokeTests',
|
|
82
|
+
actionProcessors: githubOidcAuth,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
schema: {
|
|
86
|
+
summary: 'Start a smoke run',
|
|
87
|
+
description:
|
|
88
|
+
'Queues every registered smoke test and returns the run id to poll. Requires a GitHub Actions OIDC token for this repo.',
|
|
89
|
+
tags: ['smoke'],
|
|
90
|
+
responseJsonSchema: z.toJSONSchema(SmokeRunStartedSchema),
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
),
|
|
94
|
+
|
|
95
|
+
defineRoute(
|
|
96
|
+
'GET',
|
|
97
|
+
'/smoke/run/{runId}',
|
|
98
|
+
{
|
|
99
|
+
basePath: __dirname,
|
|
100
|
+
relativePath: '../controller/askGetSmokeRun',
|
|
101
|
+
functionName: 'askGetSmokeRun',
|
|
102
|
+
actionProcessors: githubOidcAuth,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
schema: {
|
|
106
|
+
summary: 'Get a smoke run',
|
|
107
|
+
description:
|
|
108
|
+
'The stored run plus pass/fail counts. Poll until status leaves running.',
|
|
109
|
+
tags: ['smoke'],
|
|
110
|
+
responseJsonSchema: z.toJSONSchema(SmokeRunWithSummarySchema),
|
|
111
|
+
},
|
|
112
|
+
}
|
|
113
|
+
),
|
|
114
|
+
];
|
|
115
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './defineSmokeHarness';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './assert';
|
|
2
|
+
export * from './config';
|
|
3
|
+
export * from './constants';
|
|
4
|
+
export * from './controller';
|
|
5
|
+
export * from './data';
|
|
6
|
+
export * from './logic';
|
|
7
|
+
export * from './models';
|
|
8
|
+
export * from './processors';
|
|
9
|
+
export * from './queue';
|
|
10
|
+
export * from './types';
|
|
@@ -16,8 +16,8 @@ import {
|
|
|
16
16
|
import { askGetSmokeRunById } from '../../data/askGetSmokeRunById';
|
|
17
17
|
import { askRecordSmokeTestResult } from '../../data/askRecordSmokeTestResult';
|
|
18
18
|
import { askSetSmokeRunOutcome } from '../../data/askSetSmokeRunOutcome';
|
|
19
|
-
import { SmokeTestDefinition } from '../../
|
|
20
|
-
import {
|
|
19
|
+
import { SmokeTestDefinition } from '../../types/SmokeTestDefinition';
|
|
20
|
+
import { listSmokeTests } from './listSmokeTests';
|
|
21
21
|
|
|
22
22
|
// Runs one registered test, returning its completed result entry.
|
|
23
23
|
function* askRunSmokeTest(
|
|
@@ -53,7 +53,7 @@ export function* askExecuteSmokeTest(
|
|
|
53
53
|
runId: string,
|
|
54
54
|
testName: string
|
|
55
55
|
): AskResponse<SmokeRun> {
|
|
56
|
-
const test =
|
|
56
|
+
const test = listSmokeTests().find((t) => t.name === testName);
|
|
57
57
|
if (!test) {
|
|
58
58
|
return yield* askThrowError(
|
|
59
59
|
ErrorTypeEnum.NotFound,
|
|
@@ -20,8 +20,8 @@ import {
|
|
|
20
20
|
} from '../../constants/smokeRunQueue';
|
|
21
21
|
import { askSaveSmokeRun } from '../../data/askSaveSmokeRun';
|
|
22
22
|
import { SmokeTestRequestedPayload } from '../../models/SmokeTestRequestedQueueEvent';
|
|
23
|
-
import { SmokeTestDefinition } from '../../
|
|
24
|
-
import {
|
|
23
|
+
import { SmokeTestDefinition } from '../../types/SmokeTestDefinition';
|
|
24
|
+
import { listSmokeTests } from './listSmokeTests';
|
|
25
25
|
|
|
26
26
|
const createInitialResult = (
|
|
27
27
|
test: SmokeTestDefinition,
|
|
@@ -57,7 +57,8 @@ export function* askStartSmokeRun(): AskResponse<SmokeRun> {
|
|
|
57
57
|
const shouldSkip = (test: SmokeTestDefinition): boolean =>
|
|
58
58
|
!!test.deployedOnly && platformName === 'devServer';
|
|
59
59
|
|
|
60
|
-
const
|
|
60
|
+
const smokeTests = listSmokeTests();
|
|
61
|
+
const queued = smokeTests.filter((test) => !shouldSkip(test));
|
|
61
62
|
|
|
62
63
|
const smokeRun: SmokeRun = {
|
|
63
64
|
runId,
|
|
@@ -65,7 +66,7 @@ export function* askStartSmokeRun(): AskResponse<SmokeRun> {
|
|
|
65
66
|
queued.length === 0 ? SmokeRunStatus.passed : SmokeRunStatus.running,
|
|
66
67
|
startedAt,
|
|
67
68
|
finishedAt: queued.length === 0 ? startedAt : null,
|
|
68
|
-
tests:
|
|
69
|
+
tests: smokeTests.map((test, index) =>
|
|
69
70
|
createInitialResult(test, index, shouldSkip(test))
|
|
70
71
|
),
|
|
71
72
|
};
|
package/template/apps/qpqjs/services/test/service/src/smoke/harness/logic/smokeRun/listSmokeTests.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { smokeSuites } from '../../../suites/smokeSuites';
|
|
2
|
+
import { SmokeTestDefinition } from '../../types/SmokeTestDefinition';
|
|
3
|
+
|
|
4
|
+
/** Every registered test across all suites, in list order; a test's 1-based position is its run record id. */
|
|
5
|
+
export const listSmokeTests = (): SmokeTestDefinition[] =>
|
|
6
|
+
smokeSuites.flatMap((suite) => suite.tests);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { QueueEvent, QueueMessage } from 'quidproquo';
|
|
2
2
|
|
|
3
|
-
// One registered test of one run. `testName` is the
|
|
3
|
+
// One registered test of one run. `testName` is the test's stable key,
|
|
4
4
|
// never the positional id.
|
|
5
5
|
export type SmokeTestRequestedPayload = {
|
|
6
6
|
runId: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './onSmokeTestRequested';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { QPQConfig } from 'quidproquo';
|
|
2
|
+
|
|
3
|
+
import { SmokeTestDefinition } from './SmokeTestDefinition';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* One folder under suites/: its tests plus the resources and handlers only
|
|
7
|
+
* they use. Tests that share a resource belong in the same suite, so deleting
|
|
8
|
+
* a suite's folder and its line in smokeSuites removes it completely.
|
|
9
|
+
*/
|
|
10
|
+
export type SmokeSuite = {
|
|
11
|
+
tests: SmokeTestDefinition[];
|
|
12
|
+
defineConfig?: () => QPQConfig;
|
|
13
|
+
};
|
|
@@ -1,13 +1,3 @@
|
|
|
1
1
|
export * from './config';
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './data';
|
|
5
|
-
export * from './email';
|
|
6
|
-
export * from './eventDoc';
|
|
7
|
-
export * from './kvsStream';
|
|
8
|
-
export * from './logic';
|
|
9
|
-
export * from './models';
|
|
10
|
-
export * from './processors';
|
|
11
|
-
export * from './queue';
|
|
12
|
-
export * from './storageDrive';
|
|
13
|
-
export * from './tests';
|
|
2
|
+
export * from './harness';
|
|
3
|
+
export * from './suites';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineEmailReceiver, defineEmailSender, QPQConfig } from 'quidproquo';
|
|
2
|
+
|
|
3
|
+
import { SMOKE_EMAIL_RECEIVER } from '../constants/SMOKE_EMAIL_RECEIVER';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The test sends to its own receiving domain, the receiver hands the parsed
|
|
7
|
+
* message to onSmokeEmailReceived, which writes a marker into the probe store,
|
|
8
|
+
* and the test polls for it. The sender is what lets the test send; the
|
|
9
|
+
* receiving domain is a verified identity, so the SES sandbox allows it.
|
|
10
|
+
*/
|
|
11
|
+
export const defineEmailReceiveSmoke = (): QPQConfig => [
|
|
12
|
+
defineEmailSender(),
|
|
13
|
+
defineEmailReceiver(SMOKE_EMAIL_RECEIVER, {
|
|
14
|
+
onEmail: {
|
|
15
|
+
basePath: __dirname,
|
|
16
|
+
relativePath: '../entry/email/onSmokeEmailReceived',
|
|
17
|
+
functionName: 'onSmokeEmailReceived',
|
|
18
|
+
},
|
|
19
|
+
}),
|
|
20
|
+
];
|
package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/config/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './defineEmailReceiveSmoke';
|
package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/constants/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SMOKE_EMAIL_RECEIVER';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SmokeSuite } from '../../harness/types/SmokeSuite';
|
|
2
|
+
import { defineEmailReceiveSmoke } from './config/defineEmailReceiveSmoke';
|
|
3
|
+
import { askRunEmailReceiveTest } from './logic/askRunEmailReceiveTest';
|
|
4
|
+
|
|
5
|
+
/** Inbound email to our own receiving domain. Deployed only. */
|
|
6
|
+
export const emailReceiveSmokeSuite: SmokeSuite = {
|
|
7
|
+
defineConfig: defineEmailReceiveSmoke,
|
|
8
|
+
tests: [
|
|
9
|
+
{
|
|
10
|
+
name: 'emailReceive',
|
|
11
|
+
askRun: askRunEmailReceiveTest,
|
|
12
|
+
deployedOnly: true,
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
};
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import { SMOKE_PROBE_STORE } from '@qpqjs/constants';
|
|
9
9
|
import { SmokeProbeRecord } from '@qpqjs/test-models';
|
|
10
10
|
|
|
11
|
-
import { smokeEmailMarkerId } from '
|
|
11
|
+
import { smokeEmailMarkerId } from '../../logic/smokeEmailMarkerId';
|
|
12
12
|
|
|
13
13
|
// The smoke receiver's onEmail: one marker per delivered recipient, carrying
|
|
14
14
|
// the subject and the provider's SPF/DKIM verdicts so the test can check the
|
package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/entry/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './email';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { askDnsResolveHosts, askEmailSendEmail, AskResponse } from 'quidproquo';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
|
|
4
|
+
import { askSmokePollForMarker } from '../../../harness/assert/askSmokePollForMarker';
|
|
5
|
+
import { smokeEmailMarkerId } from './smokeEmailMarkerId';
|
|
6
6
|
|
|
7
7
|
// The inbound email path end to end: send to this app's own receiving domain
|
|
8
8
|
// with its own sender, SES receives it through the account rule set and the
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineCryptoKey,
|
|
3
|
+
defineKeyValueStore,
|
|
4
|
+
defineStorageDrive,
|
|
5
|
+
QPQConfig,
|
|
6
|
+
} from 'quidproquo';
|
|
7
|
+
|
|
8
|
+
import { SmokeProbeRecord } from '@qpqjs/test-models';
|
|
9
|
+
|
|
10
|
+
import { SMOKE_CRYPTO_KEY } from '../constants/SMOKE_CRYPTO_KEY';
|
|
11
|
+
import { SMOKE_ENCRYPTED_PROBE_DRIVE } from '../constants/SMOKE_ENCRYPTED_PROBE_DRIVE';
|
|
12
|
+
import { SMOKE_ENCRYPTED_PROBE_STORE } from '../constants/SMOKE_ENCRYPTED_PROBE_STORE';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* A drive and a store encrypted with an owned crypto key, so the test proves
|
|
16
|
+
* the role's KMS grant covers data at rest.
|
|
17
|
+
*/
|
|
18
|
+
export const defineEncryptedResourcesSmoke = (): QPQConfig => [
|
|
19
|
+
defineCryptoKey(SMOKE_CRYPTO_KEY),
|
|
20
|
+
defineKeyValueStore<SmokeProbeRecord>(
|
|
21
|
+
SMOKE_ENCRYPTED_PROBE_STORE,
|
|
22
|
+
'probeId',
|
|
23
|
+
[],
|
|
24
|
+
{ cryptoKeyName: SMOKE_CRYPTO_KEY }
|
|
25
|
+
),
|
|
26
|
+
defineStorageDrive(SMOKE_ENCRYPTED_PROBE_DRIVE, {
|
|
27
|
+
cryptoKeyName: SMOKE_CRYPTO_KEY,
|
|
28
|
+
}),
|
|
29
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './defineEncryptedResourcesSmoke';
|