create-qpq-app 0.1.26 → 0.1.27

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.
Files changed (261) hide show
  1. package/package.json +2 -2
  2. package/template/apps/qpqjs/services/test/models/src/SmokeProbeRecord.ts +3 -0
  3. package/template/apps/qpqjs/services/test/service/src/infrastructure.ts +0 -6
  4. package/template/apps/qpqjs/services/test/service/src/smoke/config/defineSmoke.ts +8 -264
  5. package/template/apps/qpqjs/services/test/service/src/smoke/harness/assert/index.ts +2 -0
  6. package/template/apps/qpqjs/services/test/service/src/smoke/harness/config/defineSmokeHarness.ts +115 -0
  7. package/template/apps/qpqjs/services/test/service/src/smoke/harness/config/index.ts +1 -0
  8. package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/index.ts +0 -2
  9. package/template/apps/qpqjs/services/test/service/src/smoke/harness/index.ts +10 -0
  10. package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askExecuteSmokeTest.ts +3 -3
  11. package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askStartSmokeRun.ts +5 -4
  12. package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/index.ts +1 -0
  13. package/template/apps/qpqjs/services/test/service/src/smoke/harness/logic/smokeRun/listSmokeTests.ts +6 -0
  14. package/template/apps/qpqjs/services/test/service/src/smoke/{models → harness/models}/SmokeTestRequestedQueueEvent.ts +1 -1
  15. package/template/apps/qpqjs/services/test/service/src/smoke/harness/models/index.ts +2 -0
  16. package/template/apps/qpqjs/services/test/service/src/smoke/harness/queue/index.ts +1 -0
  17. package/template/apps/qpqjs/services/test/service/src/smoke/harness/types/SmokeSuite.ts +13 -0
  18. package/template/apps/qpqjs/services/test/service/src/smoke/harness/types/index.ts +2 -0
  19. package/template/apps/qpqjs/services/test/service/src/smoke/index.ts +2 -12
  20. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/config/defineEmailReceiveSmoke.ts +20 -0
  21. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/config/index.ts +1 -0
  22. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/constants/SMOKE_EMAIL_RECEIVER.ts +2 -0
  23. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/constants/index.ts +1 -0
  24. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/emailReceiveSmokeSuite.ts +15 -0
  25. package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/entry/email}/index.ts +0 -1
  26. package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/entry/email}/onSmokeEmailReceived.ts +1 -1
  27. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/entry/index.ts +1 -0
  28. package/template/apps/qpqjs/services/test/service/src/smoke/suites/emailReceive/index.ts +5 -0
  29. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/emailReceive → suites/emailReceive/logic}/askRunEmailReceiveTest.ts +3 -3
  30. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/emailReceive → suites/emailReceive/logic}/index.ts +1 -0
  31. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/config/defineEncryptedResourcesSmoke.ts +29 -0
  32. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/config/index.ts +1 -0
  33. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_CRYPTO_KEY.ts +5 -0
  34. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_ENCRYPTED_PROBE_DRIVE.ts +2 -0
  35. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/SMOKE_ENCRYPTED_PROBE_STORE.ts +2 -0
  36. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/constants/index.ts +3 -0
  37. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/encryptedResourcesSmokeSuite.ts +9 -0
  38. package/template/apps/qpqjs/services/test/service/src/smoke/suites/encryptedResources/index.ts +4 -0
  39. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/encryptedResources → suites/encryptedResources/logic}/askRunEncryptedResourcesTest.ts +3 -5
  40. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/config/defineEventBusSmoke.ts +21 -0
  41. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/config/index.ts +1 -0
  42. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_BUS.ts +2 -0
  43. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_QUEUE.ts +2 -0
  44. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/SMOKE_PROBE_EVENT_TYPE.ts +2 -0
  45. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/constants/index.ts +3 -0
  46. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/entry/index.ts +1 -0
  47. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/entry/queue/index.ts +1 -0
  48. package/template/apps/qpqjs/services/test/service/src/smoke/{queue → suites/eventBus/entry/queue}/onSmokeProbeEvent.ts +1 -1
  49. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/eventBusSmokeSuite.ts +9 -0
  50. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/index.ts +6 -0
  51. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventBus → suites/eventBus/logic}/askRunEventBusTest.ts +4 -6
  52. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventBus/models/index.ts +1 -0
  53. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/config/defineEventDocSmoke.ts +44 -0
  54. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/config/index.ts +1 -0
  55. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/constants/index.ts +1 -0
  56. package/template/apps/qpqjs/services/test/service/src/smoke/{constants → suites/eventDoc/constants}/smokeEventDoc.ts +1 -1
  57. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/entry/index.ts +1 -0
  58. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/entry/queue/index.ts +1 -0
  59. package/template/apps/qpqjs/services/test/service/src/smoke/{queue → suites/eventDoc/entry/queue}/onSmokeEventDocAppend.ts +3 -3
  60. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/eventDocSmokeSuite.ts +19 -0
  61. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/index.ts +7 -0
  62. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAssertContiguousEventIds.ts +1 -1
  63. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAssertSmokeProbeDocState.ts +2 -2
  64. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askAwaitSmokeEventDocLog.ts +1 -1
  65. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askRunEventDocConcurrentAppendTest.ts +5 -5
  66. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/askRunEventDocInterleavedBatchAppendTest.ts +4 -4
  67. package/template/apps/qpqjs/services/test/service/src/smoke/suites/eventDoc/models/index.ts +2 -0
  68. package/template/apps/qpqjs/services/test/service/src/smoke/{tests → suites}/index.ts +4 -5
  69. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/index.ts +2 -0
  70. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/keyValueStoreSmokeSuite.ts +14 -0
  71. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/keyValueStore/logic}/askRunCrossServiceKeyValueStoreTest.ts +1 -1
  72. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStore → suites/keyValueStore/logic}/askRunKeyValueStoreTest.ts +1 -1
  73. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStore/logic/index.ts +2 -0
  74. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/config/defineKeyValueStoreStreamSmoke.ts +30 -0
  75. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/config/index.ts +1 -0
  76. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/constants/SMOKE_STREAM_PROBE_STORE.ts +2 -0
  77. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/constants/index.ts +1 -0
  78. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/entry/index.ts +1 -0
  79. package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/entry/kvsStream}/index.ts +0 -1
  80. package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/entry/kvsStream}/onSmokeStreamRecord.ts +6 -4
  81. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/index.ts +5 -0
  82. package/template/apps/qpqjs/services/test/service/src/smoke/suites/keyValueStoreStream/keyValueStoreStreamSmokeSuite.ts +11 -0
  83. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStoreStream → suites/keyValueStoreStream/logic}/askRunKeyValueStoreStreamTest.ts +15 -6
  84. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/keyValueStoreStream → suites/keyValueStoreStream/logic}/index.ts +1 -0
  85. package/template/apps/qpqjs/services/test/service/src/smoke/suites/noop/index.ts +2 -0
  86. package/template/apps/qpqjs/services/test/service/src/smoke/suites/noop/noopSmokeSuite.ts +7 -0
  87. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/config/defineOpenApiSmoke.ts +13 -0
  88. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/config/index.ts +1 -0
  89. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/index.ts +4 -0
  90. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/askRunEchoRoundTripTest.ts +1 -1
  91. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/askRunOpenApiDocumentTest.ts +1 -1
  92. package/template/apps/qpqjs/services/test/service/src/smoke/suites/openApi/openApiSmokeSuite.ts +13 -0
  93. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/config/defineParameterSmoke.ts +11 -0
  94. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/config/index.ts +1 -0
  95. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/SMOKE_PROBE_PARAMETER.ts +2 -0
  96. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/SMOKE_PROBE_PARAMETER_VALUE.ts +2 -0
  97. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/constants/index.ts +2 -0
  98. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/index.ts +4 -0
  99. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/parameter → suites/parameter/logic}/askRunParameterTest.ts +3 -5
  100. package/template/apps/qpqjs/services/test/service/src/smoke/suites/parameter/parameterSmokeSuite.ts +9 -0
  101. package/template/apps/qpqjs/services/test/service/src/{tick/config/defineTick.ts → smoke/suites/schedule/config/defineScheduleSmoke.ts} +1 -1
  102. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/config/index.ts +1 -0
  103. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/entry/index.ts +2 -0
  104. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/index.ts +6 -0
  105. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/schedule → suites/schedule/logic}/askRunScheduleTest.ts +4 -4
  106. package/template/apps/qpqjs/services/test/service/src/smoke/suites/schedule/scheduleSmokeSuite.ts +9 -0
  107. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/config/defineScopedKeyValueStoreSmoke.ts +19 -0
  108. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/config/index.ts +1 -0
  109. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/constants/SMOKE_SCOPED_PROBE_STORE.ts +2 -0
  110. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/constants/index.ts +1 -0
  111. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/index.ts +4 -0
  112. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/logic/askRunScopedKeyValueStoreTest.ts +256 -0
  113. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedKeyValueStore/scopedKeyValueStoreSmokeSuite.ts +11 -0
  114. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/config/defineScopedStorageDriveSmoke.ts +12 -0
  115. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/config/index.ts +1 -0
  116. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/constants/SMOKE_SCOPED_PROBE_DRIVE.ts +2 -0
  117. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/constants/index.ts +1 -0
  118. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/index.ts +4 -0
  119. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedStorageDrive → suites/scopedStorageDrive/logic}/askRunScopedStorageDriveTest.ts +2 -2
  120. package/template/apps/qpqjs/services/test/service/src/smoke/suites/scopedStorageDrive/scopedStorageDriveSmokeSuite.ts +9 -0
  121. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/config/defineSecretSmoke.ts +8 -0
  122. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/config/index.ts +1 -0
  123. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/constants/SMOKE_PROBE_SECRET.ts +2 -0
  124. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/constants/index.ts +1 -0
  125. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/index.ts +4 -0
  126. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/secret → suites/secret/logic}/askRunSecretTest.ts +2 -2
  127. package/template/apps/qpqjs/services/test/service/src/smoke/suites/secret/secretSmokeSuite.ts +9 -0
  128. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/config/defineSigningKeySmoke.ts +12 -0
  129. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/config/index.ts +1 -0
  130. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/index.ts +3 -0
  131. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/signingKey/logic}/askRunCrossServiceSigningKeyTest.ts +1 -1
  132. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/signingKey → suites/signingKey/logic}/askRunSigningKeyTest.ts +1 -1
  133. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/logic/index.ts +2 -0
  134. package/template/apps/qpqjs/services/test/service/src/smoke/suites/signingKey/signingKeySmokeSuite.ts +16 -0
  135. package/template/apps/qpqjs/services/test/service/src/smoke/suites/smokeSuites.ts +46 -0
  136. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/index.ts +2 -0
  137. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/crossService → suites/storageDrive/logic}/askRunCrossServiceStorageDriveTest.ts +1 -1
  138. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDrive → suites/storageDrive/logic}/askRunStorageDriveTest.ts +1 -1
  139. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/logic/index.ts +2 -0
  140. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDrive/storageDriveSmokeSuite.ts +14 -0
  141. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/config/defineStorageDriveEventSmoke.ts +27 -0
  142. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/config/index.ts +1 -0
  143. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/SMOKE_FILE_EVENT_DRIVE.ts +2 -0
  144. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/SMOKE_SCOPED_FILE_EVENT_DRIVE.ts +2 -0
  145. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/constants/index.ts +2 -0
  146. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/entry/index.ts +1 -0
  147. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/entry/storageDrive/index.ts +1 -0
  148. package/template/apps/qpqjs/services/test/service/src/smoke/{storageDrive → suites/storageDriveEvent/entry/storageDrive}/onSmokeFileEvent.ts +1 -1
  149. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/index.ts +5 -0
  150. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDriveEvent → suites/storageDriveEvent/logic}/askRunStorageDriveEventTest.ts +7 -9
  151. package/template/apps/qpqjs/services/test/service/src/smoke/{tests/storageDriveEvent → suites/storageDriveEvent/logic}/index.ts +1 -0
  152. package/template/apps/qpqjs/services/test/service/src/smoke/suites/storageDriveEvent/storageDriveEventSmokeSuite.ts +9 -0
  153. package/template/apps/qpqjs/services/testa/models/src/CrossServiceProbePayload.ts +1 -1
  154. package/template/apps/qpqjs/services/testa/service/src/infrastructure.ts +2 -2
  155. package/template/apps/qpqjs/services/testa/service/src/smoke/config/defineSmokeProbes.ts +16 -0
  156. package/template/apps/qpqjs/services/testa/service/src/smoke/config/index.ts +1 -0
  157. package/template/apps/qpqjs/services/{test/service/src/tick → testa/service/src/smoke}/index.ts +1 -0
  158. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/index.ts +3 -0
  159. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/config/defineKeyValueStoreSmokeProbe.ts +33 -0
  160. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/config/index.ts +1 -0
  161. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/entry/serviceFunction/index.ts +1 -0
  162. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/keyValueStore/logic/index.ts +1 -0
  163. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/config/defineSigningKeySmokeProbe.ts +28 -0
  164. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/config/index.ts +1 -0
  165. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/entry/index.ts +1 -0
  166. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/entry/serviceFunction/index.ts +1 -0
  167. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/index.ts +3 -0
  168. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/signingKey/logic/index.ts +1 -0
  169. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/config/defineStorageDriveSmokeProbe.ts +31 -0
  170. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/config/index.ts +1 -0
  171. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/entry/index.ts +1 -0
  172. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/entry/serviceFunction/index.ts +1 -0
  173. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/index.ts +3 -0
  174. package/template/apps/qpqjs/services/testa/service/src/smoke/suites/storageDrive/logic/index.ts +1 -0
  175. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-delete.md +1 -1
  176. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-get-all.md +1 -1
  177. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-get.md +1 -1
  178. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-query.md +3 -1
  179. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-scan.md +1 -1
  180. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-update.md +1 -1
  181. package/template/docusaurus/docs/actions/core/key-value-store/ask-key-value-store-upsert.md +1 -1
  182. package/template/docusaurus/docs/config/core/key-value-store.md +12 -2
  183. package/template/docusaurus/docs/config/features/event-doc.md +22 -1
  184. package/template/apps/qpqjs/services/test/service/src/echo/config/defineEcho.ts +0 -9
  185. package/template/apps/qpqjs/services/test/service/src/smoke/constants/smokeProbe.ts +0 -39
  186. package/template/apps/qpqjs/services/test/service/src/smoke/models/index.ts +0 -5
  187. package/template/apps/qpqjs/services/test/service/src/smoke/queue/index.ts +0 -3
  188. package/template/apps/qpqjs/services/test/service/src/smoke/storageDrive/index.ts +0 -4
  189. package/template/apps/qpqjs/services/test/service/src/smoke/tests/crossService/index.ts +0 -3
  190. package/template/apps/qpqjs/services/test/service/src/smoke/tests/keyValueStore/index.ts +0 -1
  191. package/template/apps/qpqjs/services/test/service/src/smoke/tests/scopedKeyValueStore/askRunScopedKeyValueStoreTest.ts +0 -102
  192. package/template/apps/qpqjs/services/test/service/src/smoke/tests/signingKey/index.ts +0 -1
  193. package/template/apps/qpqjs/services/test/service/src/smoke/tests/smokeTestRegistry.ts +0 -66
  194. package/template/apps/qpqjs/services/test/service/src/smoke/tests/storageDrive/index.ts +0 -1
  195. package/template/apps/qpqjs/services/test/service/src/tick/config/index.ts +0 -1
  196. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/config/defineCrossServiceProbe.ts +0 -68
  197. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/config/index.ts +0 -1
  198. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/entry/serviceFunction/index.ts +0 -3
  199. package/template/apps/qpqjs/services/testa/service/src/crossServiceProbe/logic/index.ts +0 -3
  200. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/assert}/askSmokeAssert.ts +0 -0
  201. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/assert}/askSmokePollForMarker.ts +0 -0
  202. /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/SMOKE_RUNS_STORE.ts +0 -0
  203. /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/githubOidc.ts +0 -0
  204. /package/template/apps/qpqjs/services/test/service/src/smoke/{constants → harness/constants}/smokeRunQueue.ts +0 -0
  205. /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/askGetSmokeRun.ts +0 -0
  206. /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/askRunSmokeTests.ts +0 -0
  207. /package/template/apps/qpqjs/services/test/service/src/smoke/{controller → harness/controller}/index.ts +0 -0
  208. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askGetSmokeRunById.ts +0 -0
  209. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askRecordSmokeTestResult.ts +0 -0
  210. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askSaveSmokeRun.ts +0 -0
  211. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/askSetSmokeRunOutcome.ts +0 -0
  212. /package/template/apps/qpqjs/services/test/service/src/smoke/{data → harness/data}/index.ts +0 -0
  213. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/github/index.ts +0 -0
  214. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/github/verifyGithubOidcToken.ts +0 -0
  215. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/index.ts +0 -0
  216. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/askFindSmokeRun.ts +0 -0
  217. /package/template/apps/qpqjs/services/test/service/src/smoke/{logic → harness/logic}/smokeRun/summarizeSmokeRun.ts +0 -0
  218. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → harness/models}/GithubOidcClaims.ts +0 -0
  219. /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/github/getGithubOidcAuthProcessors.ts +0 -0
  220. /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/github/index.ts +0 -0
  221. /package/template/apps/qpqjs/services/test/service/src/smoke/{processors → harness/processors}/index.ts +0 -0
  222. /package/template/apps/qpqjs/services/test/service/src/smoke/{queue → harness/queue}/onSmokeTestRequested.ts +0 -0
  223. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests → harness/types}/SmokeTestDefinition.ts +0 -0
  224. /package/template/apps/qpqjs/services/test/service/src/smoke/{email → suites/emailReceive/logic}/smokeEmailMarkerId.ts +0 -0
  225. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/encryptedResources → suites/encryptedResources/logic}/index.ts +0 -0
  226. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventBus → suites/eventBus/logic}/index.ts +0 -0
  227. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventBus/models}/SmokeProbeEventQueueEvent.ts +0 -0
  228. /package/template/apps/qpqjs/services/test/service/src/smoke/{eventDoc → suites/eventDoc/definition}/index.ts +0 -0
  229. /package/template/apps/qpqjs/services/test/service/src/smoke/{eventDoc → suites/eventDoc/definition}/smokeProbeDocDefinition.ts +0 -0
  230. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/eventDoc → suites/eventDoc/logic}/index.ts +0 -0
  231. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventDoc/models}/SmokeEventDocAppendQueueEvent.ts +0 -0
  232. /package/template/apps/qpqjs/services/test/service/src/smoke/{models → suites/eventDoc/models}/SmokeEventDocMark.ts +0 -0
  233. /package/template/apps/qpqjs/services/test/service/src/smoke/{kvsStream → suites/keyValueStoreStream/logic}/smokeStreamMarkerId.ts +0 -0
  234. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/noop → suites/noop/logic}/askRunNoopTest.ts +0 -0
  235. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/noop → suites/noop/logic}/index.ts +0 -0
  236. /package/template/apps/qpqjs/services/test/service/src/{echo → smoke/suites/openApi}/controller/echo.ts +0 -0
  237. /package/template/apps/qpqjs/services/test/service/src/{echo → smoke/suites/openApi}/controller/index.ts +0 -0
  238. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/openApi → suites/openApi/logic}/index.ts +0 -0
  239. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/parameter → suites/parameter/logic}/index.ts +0 -0
  240. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/index.ts +0 -0
  241. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/scheduleTickName.ts +0 -0
  242. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/constants/scheduleTickStore.ts +0 -0
  243. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/kvsStream/index.ts +0 -0
  244. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/kvsStream/onScheduleTickStream.ts +0 -0
  245. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/schedule/index.ts +0 -0
  246. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/entry/schedule/onTick.ts +0 -0
  247. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/schedule → suites/schedule/logic}/index.ts +0 -0
  248. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/models/ScheduleTickRecord.ts +0 -0
  249. /package/template/apps/qpqjs/services/test/service/src/{tick → smoke/suites/schedule}/models/index.ts +0 -0
  250. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedKeyValueStore → suites/scopedKeyValueStore/logic}/index.ts +0 -0
  251. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/scopedStorageDrive → suites/scopedStorageDrive/logic}/index.ts +0 -0
  252. /package/template/apps/qpqjs/services/test/service/src/smoke/{tests/secret → suites/secret/logic}/index.ts +0 -0
  253. /package/template/apps/qpqjs/services/test/service/src/smoke/{storageDrive → suites/storageDriveEvent/logic}/smokeFileEventMarkerId.ts +0 -0
  254. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/entry/index.ts +0 -0
  255. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/entry/serviceFunction/smokeCrossServiceKeyValueStoreProbe.ts +0 -0
  256. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/index.ts +0 -0
  257. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/keyValueStore}/logic/askProbeForeignKeyValueStore.ts +0 -0
  258. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/signingKey}/entry/serviceFunction/smokeCrossServiceSigningKeyProbe.ts +0 -0
  259. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/signingKey}/logic/askProbeForeignSigningKey.ts +0 -0
  260. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/storageDrive}/entry/serviceFunction/smokeCrossServiceStorageDriveProbe.ts +0 -0
  261. /package/template/apps/qpqjs/services/testa/service/src/{crossServiceProbe → smoke/suites/storageDrive}/logic/askProbeForeignStorageDrive.ts +0 -0
@@ -1,8 +1,8 @@
1
1
  import { askDnsResolveHosts, askEmailSendEmail, AskResponse } from 'quidproquo';
2
2
 
3
- import { smokeEmailMarkerId } from '../../email/smokeEmailMarkerId';
4
- import { askSmokeAssert } from '../askSmokeAssert';
5
- import { askSmokePollForMarker } from '../askSmokePollForMarker';
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
@@ -1 +1,2 @@
1
1
  export * from './askRunEmailReceiveTest';
2
+ export * from './smokeEmailMarkerId';
@@ -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';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The crypto key the encrypted probe drive and store name. Not 'smokeProbe':
3
+ * the signing key of that name is a KMS alias too, and the two would collide.
4
+ */
5
+ export const SMOKE_CRYPTO_KEY = 'smokeCrypto';
@@ -0,0 +1,2 @@
1
+ /** A probe drive encrypted at rest with SMOKE_CRYPTO_KEY. */
2
+ export const SMOKE_ENCRYPTED_PROBE_DRIVE = 'smoke-encrypted-probe';
@@ -0,0 +1,2 @@
1
+ /** A probe store encrypted at rest with SMOKE_CRYPTO_KEY. */
2
+ export const SMOKE_ENCRYPTED_PROBE_STORE = 'smokeEncryptedProbe';
@@ -0,0 +1,3 @@
1
+ export * from './SMOKE_CRYPTO_KEY';
2
+ export * from './SMOKE_ENCRYPTED_PROBE_DRIVE';
3
+ export * from './SMOKE_ENCRYPTED_PROBE_STORE';
@@ -0,0 +1,9 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineEncryptedResourcesSmoke } from './config/defineEncryptedResourcesSmoke';
3
+ import { askRunEncryptedResourcesTest } from './logic/askRunEncryptedResourcesTest';
4
+
5
+ /** Round trips through a drive and a store encrypted with an owned crypto key. */
6
+ export const encryptedResourcesSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineEncryptedResourcesSmoke,
8
+ tests: [{ name: 'encryptedResources', askRun: askRunEncryptedResourcesTest }],
9
+ };
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './encryptedResourcesSmokeSuite';
4
+ export * from './logic';
@@ -11,11 +11,9 @@ import {
11
11
 
12
12
  import { SmokeProbeRecord } from '@qpqjs/test-models';
13
13
 
14
- import {
15
- SMOKE_ENCRYPTED_PROBE_DRIVE,
16
- SMOKE_ENCRYPTED_PROBE_STORE,
17
- } from '../../constants/smokeProbe';
18
- import { askSmokeAssert } from '../askSmokeAssert';
14
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
15
+ import { SMOKE_ENCRYPTED_PROBE_DRIVE } from '../constants/SMOKE_ENCRYPTED_PROBE_DRIVE';
16
+ import { SMOKE_ENCRYPTED_PROBE_STORE } from '../constants/SMOKE_ENCRYPTED_PROBE_STORE';
19
17
 
20
18
  // A drive and a store encrypted with a defineCryptoKey. Deployed, every write
21
19
  // needs kms:GenerateDataKey and every read kms:Decrypt on that key through
@@ -0,0 +1,21 @@
1
+ import { defineEventBus, defineQueue, QPQConfig } from 'quidproquo';
2
+
3
+ import { SMOKE_PROBE_EVENT_BUS } from '../constants/SMOKE_PROBE_EVENT_BUS';
4
+ import { SMOKE_PROBE_EVENT_QUEUE } from '../constants/SMOKE_PROBE_EVENT_QUEUE';
5
+ import { SMOKE_PROBE_EVENT_TYPE } from '../constants/SMOKE_PROBE_EVENT_TYPE';
6
+
7
+ /** Publish to the bus, the subscribed queue's entry writes a marker into the probe store, the test polls for it. */
8
+ export const defineEventBusSmoke = (): QPQConfig => [
9
+ defineEventBus(SMOKE_PROBE_EVENT_BUS),
10
+ defineQueue(
11
+ SMOKE_PROBE_EVENT_QUEUE,
12
+ {
13
+ [SMOKE_PROBE_EVENT_TYPE]: {
14
+ basePath: __dirname,
15
+ relativePath: '../entry/queue/onSmokeProbeEvent',
16
+ functionName: 'onSmokeProbeEvent',
17
+ },
18
+ },
19
+ { eventBusSubscriptions: [SMOKE_PROBE_EVENT_BUS] }
20
+ ),
21
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineEventBusSmoke';
@@ -0,0 +1,2 @@
1
+ /** The owned event bus the eventBus test publishes to. */
2
+ export const SMOKE_PROBE_EVENT_BUS = 'smokeProbe';
@@ -0,0 +1,2 @@
1
+ /** The queue subscribed to the probe event bus; its entry writes the marker the test polls for. */
2
+ export const SMOKE_PROBE_EVENT_QUEUE = 'smokeProbeEvents';
@@ -0,0 +1,2 @@
1
+ /** The one message type that flows bus -> queue -> store marker. */
2
+ export const SMOKE_PROBE_EVENT_TYPE = 'smokeProbeEvent';
@@ -0,0 +1,3 @@
1
+ export * from './SMOKE_PROBE_EVENT_BUS';
2
+ export * from './SMOKE_PROBE_EVENT_QUEUE';
3
+ export * from './SMOKE_PROBE_EVENT_TYPE';
@@ -0,0 +1 @@
1
+ export * from './onSmokeProbeEvent';
@@ -7,7 +7,7 @@ import {
7
7
  import { SMOKE_PROBE_STORE } from '@qpqjs/constants';
8
8
  import { SmokeProbeRecord } from '@qpqjs/test-models';
9
9
 
10
- import { SmokeProbeEventQueueEvent } from '../models/SmokeProbeEventQueueEvent';
10
+ import { SmokeProbeEventQueueEvent } from '../../models/SmokeProbeEventQueueEvent';
11
11
 
12
12
  // Fan-in for the event bus test: the message published to the probe bus
13
13
  // lands here via the subscribed queue, and the marker row it writes is what
@@ -0,0 +1,9 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineEventBusSmoke } from './config/defineEventBusSmoke';
3
+ import { askRunEventBusTest } from './logic/askRunEventBusTest';
4
+
5
+ /** Publish to an owned event bus and wait for the subscribed queue's marker. */
6
+ export const eventBusSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineEventBusSmoke,
8
+ tests: [{ name: 'eventBus', askRun: askRunEventBusTest }],
9
+ };
@@ -0,0 +1,6 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './entry';
4
+ export * from './eventBusSmokeSuite';
5
+ export * from './logic';
6
+ export * from './models';
@@ -5,12 +5,10 @@ import {
5
5
  EventBusMessage,
6
6
  } from 'quidproquo';
7
7
 
8
- import {
9
- SMOKE_PROBE_EVENT_BUS,
10
- SMOKE_PROBE_EVENT_TYPE,
11
- } from '../../constants/smokeProbe';
12
- import { SmokeProbeEventPayload } from '../../models/SmokeProbeEventQueueEvent';
13
- import { askSmokePollForMarker } from '../askSmokePollForMarker';
8
+ import { askSmokePollForMarker } from '../../../harness/assert/askSmokePollForMarker';
9
+ import { SMOKE_PROBE_EVENT_BUS } from '../constants/SMOKE_PROBE_EVENT_BUS';
10
+ import { SMOKE_PROBE_EVENT_TYPE } from '../constants/SMOKE_PROBE_EVENT_TYPE';
11
+ import { SmokeProbeEventPayload } from '../models/SmokeProbeEventQueueEvent';
14
12
 
15
13
  // The full async fan-out / fan-in path: publish to the owned event bus, the
16
14
  // subscribed queue's entry (onSmokeProbeEvent) writes a marker row, and this
@@ -0,0 +1 @@
1
+ export * from './SmokeProbeEventQueueEvent';
@@ -0,0 +1,44 @@
1
+ import { defineQueue, QPQConfig } from 'quidproquo';
2
+ import { defineEventDoc } from 'quidproquo-features';
3
+
4
+ import {
5
+ SMOKE_EVENT_DOC_APPEND_MESSAGE_TYPE,
6
+ SMOKE_EVENT_DOC_APPEND_QUEUE,
7
+ SMOKE_EVENT_DOC_BASE_PATH,
8
+ } from '../constants/smokeEventDoc';
9
+ import { smokeProbeDocDefinition } from '../definition/smokeProbeDocDefinition';
10
+
11
+ /**
12
+ * A full registered event-doc collection (stores, stream projector, dynamic
13
+ * functions, routes) so the tests exercise event docs the way a real service
14
+ * does, plus the queue that fans a test's writers out one invocation each so
15
+ * their appends race across lambdas.
16
+ */
17
+ export const defineEventDocSmoke = (): QPQConfig => [
18
+ // NOTE the routes mount with no auth (the test service has no user
19
+ // directory), so the collection is world-writable; it holds nothing but
20
+ // throwaway probe docs.
21
+ defineEventDoc(
22
+ smokeProbeDocDefinition,
23
+ {
24
+ basePath: __dirname,
25
+ relativePath: '../definition/smokeProbeDocDefinition',
26
+ functionName: 'smokeProbeDocDefinition',
27
+ },
28
+ { basePath: SMOKE_EVENT_DOC_BASE_PATH }
29
+ ),
30
+ // A writer that loses the slot race past the append retry cap fails its
31
+ // message; a quick redelivery lets it land instead of vanishing, as a
32
+ // production queue should.
33
+ defineQueue(
34
+ SMOKE_EVENT_DOC_APPEND_QUEUE,
35
+ {
36
+ [SMOKE_EVENT_DOC_APPEND_MESSAGE_TYPE]: {
37
+ basePath: __dirname,
38
+ relativePath: '../entry/queue/onSmokeEventDocAppend',
39
+ functionName: 'onSmokeEventDocAppend',
40
+ },
41
+ },
42
+ { maxTries: 3, ttRetryInSeconds: 10 }
43
+ ),
44
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineEventDocSmoke';
@@ -1,7 +1,7 @@
1
1
  import { EventDocEventActor, EventDocStoreOptions } from 'quidproquo-features';
2
2
 
3
3
  // The throwaway event-doc collection the smoke tests write to, registered in full via
4
- // defineEventDoc (see ../eventDoc/smokeProbeDocDefinition): stores, stream projector,
4
+ // defineEventDoc (see ../definition/smokeProbeDocDefinition): stores, stream projector,
5
5
  // dynamic functions and routes, exactly as a real service's collection.
6
6
  export const SMOKE_EVENT_DOC_STORE = 'smokeEventDocs';
7
7
  export const SMOKE_EVENT_DOC_TYPE = 'smokeProbeDoc';
@@ -0,0 +1 @@
1
+ export * from './onSmokeEventDocAppend';
@@ -11,9 +11,9 @@ import {
11
11
  SMOKE_EVENT_DOC_MARK_EVENT,
12
12
  SMOKE_EVENT_DOC_SCHEMA_VERSION,
13
13
  SMOKE_EVENT_DOC_STORE_OPTIONS,
14
- } from '../constants/smokeEventDoc';
15
- import { SmokeEventDocAppendQueueEvent } from '../models/SmokeEventDocAppendQueueEvent';
16
- import { SmokeEventDocMark } from '../models/SmokeEventDocMark';
14
+ } from '../../constants/smokeEventDoc';
15
+ import { SmokeEventDocAppendQueueEvent } from '../../models/SmokeEventDocAppendQueueEvent';
16
+ import { SmokeEventDocMark } from '../../models/SmokeEventDocMark';
17
17
 
18
18
  // One writer in the event-doc concurrency tests. Every message is its own invocation,
19
19
  // so the writers of a test race each other for the log's next slots for real - the
@@ -0,0 +1,19 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineEventDocSmoke } from './config/defineEventDocSmoke';
3
+ import { askRunEventDocConcurrentAppendTest } from './logic/askRunEventDocConcurrentAppendTest';
4
+ import { askRunEventDocInterleavedBatchAppendTest } from './logic/askRunEventDocInterleavedBatchAppendTest';
5
+
6
+ /** Racing appends onto one event doc across lambdas must stay contiguous. */
7
+ export const eventDocSmokeSuite: SmokeSuite = {
8
+ defineConfig: defineEventDocSmoke,
9
+ tests: [
10
+ {
11
+ name: 'eventDocConcurrentAppend',
12
+ askRun: askRunEventDocConcurrentAppendTest,
13
+ },
14
+ {
15
+ name: 'eventDocInterleavedBatchAppend',
16
+ askRun: askRunEventDocInterleavedBatchAppendTest,
17
+ },
18
+ ],
19
+ };
@@ -0,0 +1,7 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './definition';
4
+ export * from './entry';
5
+ export * from './eventDocSmokeSuite';
6
+ export * from './logic';
7
+ export * from './models';
@@ -1,7 +1,7 @@
1
1
  import { AskResponse } from 'quidproquo';
2
2
  import { EventDocEvent } from 'quidproquo-features';
3
3
 
4
- import { askSmokeAssert } from '../askSmokeAssert';
4
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
5
5
 
6
6
  // The whole point of numeric event ids: an ascending list read of the log is exactly
7
7
  // 0, 1, 2, ... with no hole and no repeat, whatever order the writers raced in.
@@ -1,8 +1,8 @@
1
1
  import { AskResponse } from 'quidproquo';
2
2
  import { askEventDocDocumentStateLatest } from 'quidproquo-features';
3
3
 
4
- import { SmokeProbeDocState } from '../../eventDoc/smokeProbeDocDefinition';
5
- import { askSmokeAssert } from '../askSmokeAssert';
4
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
5
+ import { SmokeProbeDocState } from '../definition/smokeProbeDocDefinition';
6
6
 
7
7
  // The folded document, read the way the render/references routes read it: snapshot
8
8
  // seeded (whatever the stream projector has stored so far) plus the gap, through the
@@ -1,7 +1,7 @@
1
1
  import { askDelay, AskResponse } from 'quidproquo';
2
2
  import { askEventDocEventListAll, EventDocEvent } from 'quidproquo-features';
3
3
 
4
- import { askSmokeAssert } from '../askSmokeAssert';
4
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
5
5
 
6
6
  // Long enough to cover a writer's retry laps plus one queue redelivery.
7
7
  const POLL_ATTEMPTS = 45;
@@ -5,6 +5,7 @@ import {
5
5
  askEventDocSoftDelete,
6
6
  } from 'quidproquo-features';
7
7
 
8
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
8
9
  import {
9
10
  SMOKE_EVENT_DOC_ACTOR,
10
11
  SMOKE_EVENT_DOC_APPEND_MESSAGE_TYPE,
@@ -12,11 +13,10 @@ import {
12
13
  SMOKE_EVENT_DOC_MARK_EVENT,
13
14
  SMOKE_EVENT_DOC_SCHEMA_VERSION,
14
15
  SMOKE_EVENT_DOC_STORE_OPTIONS,
15
- } from '../../constants/smokeEventDoc';
16
- import { SMOKE_PROBE_DOC_WINDOW } from '../../eventDoc/smokeProbeDocDefinition';
17
- import { SmokeEventDocAppendPayload } from '../../models/SmokeEventDocAppendQueueEvent';
18
- import { SmokeEventDocMark } from '../../models/SmokeEventDocMark';
19
- import { askSmokeAssert } from '../askSmokeAssert';
16
+ } from '../constants/smokeEventDoc';
17
+ import { SMOKE_PROBE_DOC_WINDOW } from '../definition/smokeProbeDocDefinition';
18
+ import { SmokeEventDocAppendPayload } from '../models/SmokeEventDocAppendQueueEvent';
19
+ import { SmokeEventDocMark } from '../models/SmokeEventDocMark';
20
20
  import { askAssertContiguousEventIds } from './askAssertContiguousEventIds';
21
21
  import { askAssertSmokeProbeDocState } from './askAssertSmokeProbeDocState';
22
22
  import { askAwaitSmokeEventDocLog } from './askAwaitSmokeEventDocLog';
@@ -5,6 +5,7 @@ import {
5
5
  askEventDocSoftDelete,
6
6
  } from 'quidproquo-features';
7
7
 
8
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
8
9
  import {
9
10
  SMOKE_EVENT_DOC_ACTOR,
10
11
  SMOKE_EVENT_DOC_APPEND_MESSAGE_TYPE,
@@ -12,10 +13,9 @@ import {
12
13
  SMOKE_EVENT_DOC_MARK_EVENT,
13
14
  SMOKE_EVENT_DOC_SCHEMA_VERSION,
14
15
  SMOKE_EVENT_DOC_STORE_OPTIONS,
15
- } from '../../constants/smokeEventDoc';
16
- import { SmokeEventDocAppendPayload } from '../../models/SmokeEventDocAppendQueueEvent';
17
- import { SmokeEventDocMark } from '../../models/SmokeEventDocMark';
18
- import { askSmokeAssert } from '../askSmokeAssert';
16
+ } from '../constants/smokeEventDoc';
17
+ import { SmokeEventDocAppendPayload } from '../models/SmokeEventDocAppendQueueEvent';
18
+ import { SmokeEventDocMark } from '../models/SmokeEventDocMark';
19
19
  import { askAssertContiguousEventIds } from './askAssertContiguousEventIds';
20
20
  import { askAssertSmokeProbeDocState } from './askAssertSmokeProbeDocState';
21
21
  import { askAwaitSmokeEventDocLog } from './askAwaitSmokeEventDocLog';
@@ -0,0 +1,2 @@
1
+ export * from './SmokeEventDocAppendQueueEvent';
2
+ export * from './SmokeEventDocMark';
@@ -1,6 +1,3 @@
1
- export * from './askSmokeAssert';
2
- export * from './askSmokePollForMarker';
3
- export * from './crossService';
4
1
  export * from './emailReceive';
5
2
  export * from './encryptedResources';
6
3
  export * from './eventBus';
@@ -10,9 +7,11 @@ export * from './keyValueStoreStream';
10
7
  export * from './noop';
11
8
  export * from './openApi';
12
9
  export * from './parameter';
10
+ export * from './schedule';
11
+ export * from './scopedKeyValueStore';
12
+ export * from './scopedStorageDrive';
13
13
  export * from './secret';
14
14
  export * from './signingKey';
15
- export * from './SmokeTestDefinition';
16
- export * from './smokeTestRegistry';
15
+ export * from './smokeSuites';
17
16
  export * from './storageDrive';
18
17
  export * from './storageDriveEvent';
@@ -0,0 +1,2 @@
1
+ export * from './keyValueStoreSmokeSuite';
2
+ export * from './logic';
@@ -0,0 +1,14 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { askRunCrossServiceKeyValueStoreTest } from './logic/askRunCrossServiceKeyValueStoreTest';
3
+ import { askRunKeyValueStoreTest } from './logic/askRunKeyValueStoreTest';
4
+
5
+ /** Every DynamoDB action on the probe store, from this service and from testa. No config: the store belongs to the harness. */
6
+ export const keyValueStoreSmokeSuite: SmokeSuite = {
7
+ tests: [
8
+ { name: 'keyValueStore', askRun: askRunKeyValueStoreTest },
9
+ {
10
+ name: 'crossServiceKeyValueStore',
11
+ askRun: askRunCrossServiceKeyValueStoreTest,
12
+ },
13
+ ],
14
+ };
@@ -17,7 +17,7 @@ import {
17
17
  CrossServiceProbePayload,
18
18
  } from '@qpqjs/testa-models';
19
19
 
20
- import { askSmokeAssert } from '../askSmokeAssert';
20
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
21
21
 
22
22
  // testa writes a row into the store THIS service owns, through its foreign
23
23
  // (exact-ARN) DynamoDB grant. An error from inside testa is that grant; the
@@ -14,7 +14,7 @@ import {
14
14
  import { SMOKE_PROBE_STORE } from '@qpqjs/constants';
15
15
  import { SmokeProbeRecord } from '@qpqjs/test-models';
16
16
 
17
- import { askSmokeAssert } from '../askSmokeAssert';
17
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
18
18
 
19
19
  // Every DynamoDB action the owned-table grant covers (PutItem, GetItem,
20
20
  // UpdateItem, Query, DeleteItem), including a query that must be served by
@@ -0,0 +1,2 @@
1
+ export * from './askRunCrossServiceKeyValueStoreTest';
2
+ export * from './askRunKeyValueStoreTest';
@@ -0,0 +1,30 @@
1
+ import { defineKeyValueStore, QPQConfig } from 'quidproquo';
2
+
3
+ import { SmokeProbeRecord } from '@qpqjs/test-models';
4
+
5
+ import { SMOKE_STREAM_PROBE_STORE } from '../constants/SMOKE_STREAM_PROBE_STORE';
6
+
7
+ /**
8
+ * A change on this scoped store streams to the handler, which writes a marker
9
+ * into the probe store for the test to poll. The record must carry the scope
10
+ * as its own field with a raw key, and the category index's hidden copy must
11
+ * not reach the handler.
12
+ */
13
+ export const defineKeyValueStoreStreamSmoke = (): QPQConfig => [
14
+ defineKeyValueStore<SmokeProbeRecord>(
15
+ SMOKE_STREAM_PROBE_STORE,
16
+ 'probeId',
17
+ [],
18
+ {
19
+ indexes: ['category'],
20
+ scoped: true,
21
+ onStream: {
22
+ runtime: {
23
+ basePath: __dirname,
24
+ relativePath: '../entry/kvsStream/onSmokeStreamRecord',
25
+ functionName: 'onSmokeStreamRecord',
26
+ },
27
+ },
28
+ }
29
+ ),
30
+ ];
@@ -0,0 +1 @@
1
+ export * from './defineKeyValueStoreStreamSmoke';
@@ -0,0 +1,2 @@
1
+ /** A scoped store with a change stream; its handler writes the markers the kvs stream test polls for. */
2
+ export const SMOKE_STREAM_PROBE_STORE = 'smokeStreamProbe';
@@ -0,0 +1 @@
1
+ export * from './SMOKE_STREAM_PROBE_STORE';
@@ -1,2 +1 @@
1
1
  export * from './onSmokeStreamRecord';
2
- export * from './smokeStreamMarkerId';
@@ -8,12 +8,13 @@ import {
8
8
  import { SMOKE_PROBE_STORE } from '@qpqjs/constants';
9
9
  import { SmokeProbeRecord } from '@qpqjs/test-models';
10
10
 
11
- import { smokeStreamMarkerId } from './smokeStreamMarkerId';
11
+ import { smokeStreamMarkerId } from '../../logic/smokeStreamMarkerId';
12
12
 
13
13
  // Fan-in for the kvs stream test: the scoped stream store's changes land
14
- // here. The marker records the scope the record carried and the raw key, so
15
- // the test can check the stream hands back the scope as its own field with
16
- // the key stripped of it.
14
+ // here. The marker records the scope the record carried, the raw key and the
15
+ // image's attribute names, so the test can check the stream hands back the
16
+ // scope as its own field, the key stripped of it, and none of the store's
17
+ // hidden index attributes.
17
18
  export function* onSmokeStreamRecord(
18
19
  record: KvsStreamRecord<SmokeProbeRecord>
19
20
  ): AskResponse<KvsStreamEventResponse> {
@@ -25,6 +26,7 @@ export function* onSmokeStreamRecord(
25
26
  value: 1,
26
27
  scope: record.scope,
27
28
  path: key,
29
+ imageAttributes: Object.keys(record.newImage ?? record.oldImage ?? {}),
28
30
  };
29
31
 
30
32
  yield* askKeyValueStoreUpsert<SmokeProbeRecord>(SMOKE_PROBE_STORE, marker);
@@ -0,0 +1,5 @@
1
+ export * from './config';
2
+ export * from './constants';
3
+ export * from './entry';
4
+ export * from './keyValueStoreStreamSmokeSuite';
5
+ export * from './logic';
@@ -0,0 +1,11 @@
1
+ import { SmokeSuite } from '../../harness/types/SmokeSuite';
2
+ import { defineKeyValueStoreStreamSmoke } from './config/defineKeyValueStoreStreamSmoke';
3
+ import { askRunKeyValueStoreStreamTest } from './logic/askRunKeyValueStoreStreamTest';
4
+
5
+ /** A scoped store's change stream, as its handler sees it. */
6
+ export const keyValueStoreStreamSmokeSuite: SmokeSuite = {
7
+ defineConfig: defineKeyValueStoreStreamSmoke,
8
+ tests: [
9
+ { name: 'keyValueStoreStream', askRun: askRunKeyValueStoreStreamTest },
10
+ ],
11
+ };
@@ -8,15 +8,17 @@ import {
8
8
 
9
9
  import { SmokeProbeRecord } from '@qpqjs/test-models';
10
10
 
11
- import { SMOKE_STREAM_PROBE_STORE } from '../../constants/smokeProbe';
12
- import { smokeStreamMarkerId } from '../../kvsStream/smokeStreamMarkerId';
13
- import { askSmokeAssert } from '../askSmokeAssert';
14
- import { askSmokePollForMarker } from '../askSmokePollForMarker';
11
+ import { askSmokeAssert } from '../../../harness/assert/askSmokeAssert';
12
+ import { askSmokePollForMarker } from '../../../harness/assert/askSmokePollForMarker';
13
+ import { SMOKE_STREAM_PROBE_STORE } from '../constants/SMOKE_STREAM_PROBE_STORE';
14
+ import { smokeStreamMarkerId } from './smokeStreamMarkerId';
15
15
 
16
16
  // The kvs stream path end to end on a scoped store: an upsert streams an
17
17
  // Insert and a delete streams a Remove to the handler. On dynamo the scope is
18
- // composed into the stored partition key, so the record must hand it back as
19
- // its own field with the key stripped, the same as the dev server does.
18
+ // composed into the stored partition key and into a hidden copy of the
19
+ // category GSI key, so the record must hand the scope back as its own field
20
+ // with the key stripped and the hidden copy dropped, the same as the dev
21
+ // server does.
20
22
  export function* askRunKeyValueStoreStreamTest(): AskResponse<void> {
21
23
  const probeId = yield* askNewGuid();
22
24
  const scope = `smoke-st-${probeId}`;
@@ -44,6 +46,13 @@ export function* askRunKeyValueStoreStreamTest(): AskResponse<void> {
44
46
  inserted.path === probeId,
45
47
  `stream insert key [${inserted.path}] was not the raw key`
46
48
  );
49
+ yield* askSmokeAssert(
50
+ !!inserted.imageAttributes?.includes('category') &&
51
+ inserted.imageAttributes.every(
52
+ (attribute) => !attribute.includes('@@QPQ')
53
+ ),
54
+ `stream insert image attributes [${inserted.imageAttributes}] missed category or leaked a reserved @@QPQ attribute`
55
+ );
47
56
 
48
57
  yield* askKeyValueStoreDelete(SMOKE_STREAM_PROBE_STORE, probeId, undefined, {
49
58
  scope,
@@ -1 +1,2 @@
1
1
  export * from './askRunKeyValueStoreStreamTest';
2
+ export * from './smokeStreamMarkerId';
@@ -0,0 +1,2 @@
1
+ export * from './logic';
2
+ export * from './noopSmokeSuite';