@enbox/dwn-sdk-js 0.0.2 → 0.0.3
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 +52 -301
- package/dist/bundles/dwn.js +19 -21
- package/dist/esm/generated/precompiled-validators.js +2764 -1773
- package/dist/esm/generated/precompiled-validators.js.map +1 -1
- package/dist/esm/src/core/dwn-error.js +27 -3
- package/dist/esm/src/core/dwn-error.js.map +1 -1
- package/dist/esm/src/core/message.js.map +1 -1
- package/dist/esm/src/core/messages-grant-authorization.js +17 -6
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization.js +245 -69
- package/dist/esm/src/core/protocol-authorization.js.map +1 -1
- package/dist/esm/src/core/resumable-task-manager.js +4 -4
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
- package/dist/esm/src/dwn.js +10 -8
- package/dist/esm/src/dwn.js.map +1 -1
- package/dist/esm/src/enums/dwn-interface-method.js +4 -2
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
- package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -0
- package/dist/esm/src/handlers/messages-subscribe.js +1 -1
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/messages-sync.js +116 -0
- package/dist/esm/src/handlers/messages-sync.js.map +1 -0
- package/dist/esm/src/handlers/protocols-configure.js +149 -16
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
- package/dist/esm/src/handlers/protocols-query.js +2 -2
- package/dist/esm/src/handlers/protocols-query.js.map +1 -1
- package/dist/esm/src/handlers/records-count.js +143 -0
- package/dist/esm/src/handlers/records-count.js.map +1 -0
- package/dist/esm/src/handlers/records-query.js +4 -0
- package/dist/esm/src/handlers/records-query.js.map +1 -1
- package/dist/esm/src/handlers/records-read.js +4 -6
- package/dist/esm/src/handlers/records-read.js.map +1 -1
- package/dist/esm/src/handlers/records-write.js +17 -18
- package/dist/esm/src/handlers/records-write.js.map +1 -1
- package/dist/esm/src/index.js +9 -5
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/interfaces/messages-read.js +2 -7
- package/dist/esm/src/interfaces/messages-read.js.map +1 -1
- package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/{messages-query.js → messages-sync.js} +11 -12
- package/dist/esm/src/interfaces/messages-sync.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +153 -30
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
- package/dist/esm/src/interfaces/protocols-query.js +1 -0
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-count.js +91 -0
- package/dist/esm/src/interfaces/records-count.js.map +1 -0
- package/dist/esm/src/interfaces/records-read.js +15 -1
- package/dist/esm/src/interfaces/records-read.js.map +1 -1
- package/dist/esm/src/interfaces/records-write.js +64 -15
- package/dist/esm/src/interfaces/records-write.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -1
- package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
- package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
- package/dist/esm/src/protocols/permission-grant.js +30 -0
- package/dist/esm/src/protocols/permission-grant.js.map +1 -1
- package/dist/esm/src/protocols/permission-request.js +24 -0
- package/dist/esm/src/protocols/permission-request.js.map +1 -1
- package/dist/esm/src/protocols/permissions.js +1 -1
- package/dist/esm/src/protocols/permissions.js.map +1 -1
- package/dist/esm/src/schema-validator.js +0 -1
- package/dist/esm/src/schema-validator.js.map +1 -1
- package/dist/esm/src/smt/smt-store-level.js +125 -0
- package/dist/esm/src/smt/smt-store-level.js.map +1 -0
- package/dist/esm/src/smt/smt-store-memory.js +67 -0
- package/dist/esm/src/smt/smt-store-memory.js.map +1 -0
- package/dist/esm/src/smt/smt-utils.js +146 -0
- package/dist/esm/src/smt/smt-utils.js.map +1 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js +622 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -0
- package/dist/esm/src/state-index/state-index-level.js +228 -0
- package/dist/esm/src/state-index/state-index-level.js.map +1 -0
- package/dist/esm/src/store/data-store-level.js +6 -6
- package/dist/esm/src/store/data-store-level.js.map +1 -1
- package/dist/esm/src/store/index-level.js +375 -17
- package/dist/esm/src/store/index-level.js.map +1 -1
- package/dist/esm/src/store/message-store-level.js +56 -0
- package/dist/esm/src/store/message-store-level.js.map +1 -1
- package/dist/esm/src/store/storage-controller.js +19 -16
- package/dist/esm/src/store/storage-controller.js.map +1 -1
- package/dist/esm/src/types/encryption-types.js +2 -0
- package/dist/esm/src/types/encryption-types.js.map +1 -0
- package/dist/esm/src/types/message-types.js.map +1 -1
- package/dist/esm/src/types/protocols-types.js +0 -2
- package/dist/esm/src/types/protocols-types.js.map +1 -1
- package/dist/esm/src/types/records-types.js +2 -0
- package/dist/esm/src/types/records-types.js.map +1 -1
- package/dist/esm/src/types/smt-types.js +5 -0
- package/dist/esm/src/types/smt-types.js.map +1 -0
- package/dist/esm/src/types/state-index.js +2 -0
- package/dist/esm/src/types/state-index.js.map +1 -0
- package/dist/esm/src/utils/cid.js +2 -1
- package/dist/esm/src/utils/cid.js.map +1 -1
- package/dist/esm/src/utils/data-stream.js +84 -29
- package/dist/esm/src/utils/data-stream.js.map +1 -1
- package/dist/esm/src/utils/encryption.js +22 -31
- package/dist/esm/src/utils/encryption.js.map +1 -1
- package/dist/esm/src/utils/hd-key.js +3 -3
- package/dist/esm/src/utils/hd-key.js.map +1 -1
- package/dist/esm/src/utils/jws.js +4 -4
- package/dist/esm/src/utils/jws.js.map +1 -1
- package/dist/esm/src/utils/private-key-signer.js +4 -3
- package/dist/esm/src/utils/private-key-signer.js.map +1 -1
- package/dist/esm/src/utils/protocols.js +82 -9
- package/dist/esm/src/utils/protocols.js.map +1 -1
- package/dist/esm/src/utils/records.js +82 -26
- package/dist/esm/src/utils/records.js.map +1 -1
- package/dist/esm/src/utils/secp256k1.js +4 -3
- package/dist/esm/src/utils/secp256k1.js.map +1 -1
- package/dist/esm/src/utils/secp256r1.js +3 -2
- package/dist/esm/src/utils/secp256r1.js.map +1 -1
- package/dist/esm/src/utils/time.js +1 -1
- package/dist/esm/src/utils/url.js +1 -1
- package/dist/esm/src/utils/url.js.map +1 -1
- package/dist/esm/tests/core/auth.spec.js +2 -2
- package/dist/esm/tests/core/auth.spec.js.map +1 -1
- package/dist/esm/tests/core/message-reply.spec.js +3 -3
- package/dist/esm/tests/core/message-reply.spec.js.map +1 -1
- package/dist/esm/tests/core/message.spec.js +13 -13
- package/dist/esm/tests/core/message.spec.js.map +1 -1
- package/dist/esm/tests/core/protocol-authorization.spec.js +3 -3
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
- package/dist/esm/tests/dwn.spec.js +27 -37
- package/dist/esm/tests/dwn.spec.js.map +1 -1
- package/dist/esm/tests/{event-log → event-stream}/event-emitter-stream.spec.js +14 -15
- package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -0
- package/dist/esm/tests/{event-log → event-stream}/event-stream.spec.js +13 -15
- package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js +281 -135
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +57 -59
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-signature.spec.js +32 -34
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
- package/dist/esm/tests/features/permissions.spec.js +73 -95
- package/dist/esm/tests/features/permissions.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-composition.spec.js +1645 -0
- package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js +25 -27
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-delete-action.spec.js +42 -44
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-update-action.spec.js +53 -55
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune.spec.js +126 -100
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
- package/dist/esm/tests/features/records-tags.spec.js +272 -272
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
- package/dist/esm/tests/features/resumable-tasks.spec.js +35 -37
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-read.spec.js +112 -112
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +78 -76
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-sync.spec.js +528 -0
- package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js +545 -152
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-query.spec.js +70 -72
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-count.spec.js +313 -0
- package/dist/esm/tests/handlers/records-count.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-delete.spec.js +106 -109
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-query.spec.js +863 -463
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-read.spec.js +439 -209
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-subscribe.spec.js +292 -97
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-write.spec.js +481 -483
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-get.spec.js +31 -11
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js +5 -5
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +64 -134
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-query.spec.js +4 -6
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-delete.spec.js +3 -5
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-query.spec.js +9 -11
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-read.spec.js +76 -7
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-subscribe.spec.js +7 -9
- package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-write.spec.js +244 -48
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
- package/dist/esm/tests/jose/jws/general.spec.js +15 -18
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permission-grant.spec.js +114 -0
- package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permission-request.spec.js +43 -7
- package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permissions.spec.js +9 -11
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/aggregator.spec.js +90 -92
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/deleted-record.spec.js +17 -19
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +27 -29
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js +37 -39
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/subscriptions.spec.js +163 -163
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
- package/dist/esm/tests/smt/smt-store-level.spec.js +143 -0
- package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +741 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js +254 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-level.spec.js +136 -0
- package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js +29 -28
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
- package/dist/esm/tests/store/data-store-level.spec.js +23 -25
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/index-level.spec.js +544 -194
- package/dist/esm/tests/store/index-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store-level.spec.js +4 -4
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store.spec.js +147 -73
- package/dist/esm/tests/store/message-store.spec.js.map +1 -1
- package/dist/esm/tests/store-dependent-tests.spec.js +1 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
- package/dist/esm/tests/test-stores.js +5 -5
- package/dist/esm/tests/test-stores.js.map +1 -1
- package/dist/esm/tests/test-suite.js +9 -8
- package/dist/esm/tests/test-suite.js.map +1 -1
- package/dist/esm/tests/utils/cid.spec.js +8 -11
- package/dist/esm/tests/utils/cid.spec.js.map +1 -1
- package/dist/esm/tests/utils/data-stream.spec.js +167 -13
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption-callbacks.spec.js +233 -0
- package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -0
- package/dist/esm/tests/utils/encryption.spec.js +34 -85
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
- package/dist/esm/tests/utils/filters.spec.js +67 -69
- package/dist/esm/tests/utils/filters.spec.js.map +1 -1
- package/dist/esm/tests/utils/hd-key.spec.js +3 -3
- package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
- package/dist/esm/tests/utils/jws.spec.js +54 -3
- package/dist/esm/tests/utils/jws.spec.js.map +1 -1
- package/dist/esm/tests/utils/memory-cache.spec.js +6 -9
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
- package/dist/esm/tests/utils/messages.spec.js +63 -29
- package/dist/esm/tests/utils/messages.spec.js.map +1 -1
- package/dist/esm/tests/utils/object.spec.js +3 -3
- package/dist/esm/tests/utils/object.spec.js.map +1 -1
- package/dist/esm/tests/utils/poller.js +1 -1
- package/dist/esm/tests/utils/poller.js.map +1 -1
- package/dist/esm/tests/utils/private-key-signer.spec.js +6 -6
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
- package/dist/esm/tests/utils/records.spec.js +37 -5
- package/dist/esm/tests/utils/records.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256k1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256r1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
- package/dist/esm/tests/utils/test-data-generator.js +47 -28
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
- package/dist/esm/tests/utils/time.spec.js +7 -7
- package/dist/esm/tests/utils/time.spec.js.map +1 -1
- package/dist/esm/tests/utils/url.spec.js +25 -27
- package/dist/esm/tests/utils/url.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +4 -4
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +15 -3
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -8
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +8 -18
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +3 -3
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +9 -9
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +106 -0
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +18 -18
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/email.json +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +2 -4
- package/dist/esm/tests/vectors/protocol-definitions/slack.json +2 -6
- package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +2 -6
- package/dist/types/generated/precompiled-validators.d.ts +82 -64
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
- package/dist/types/src/core/dwn-error.d.ts +27 -3
- package/dist/types/src/core/dwn-error.d.ts.map +1 -1
- package/dist/types/src/core/message-reply.d.ts +1 -1
- package/dist/types/src/core/message.d.ts +3 -3
- package/dist/types/src/core/message.d.ts.map +1 -1
- package/dist/types/src/core/messages-grant-authorization.d.ts +4 -4
- package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/protocol-authorization.d.ts +43 -2
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
- package/dist/types/src/core/records-grant-authorization.d.ts +2 -2
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/resumable-task-manager.d.ts +1 -0
- package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
- package/dist/types/src/dwn.d.ts +8 -8
- package/dist/types/src/dwn.d.ts.map +1 -1
- package/dist/types/src/enums/dwn-interface-method.d.ts +5 -3
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
- package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-sync.d.ts +21 -0
- package/dist/types/src/handlers/messages-sync.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-configure.d.ts +24 -4
- package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-count.d.ts +43 -0
- package/dist/types/src/handlers/records-count.d.ts.map +1 -0
- package/dist/types/src/handlers/records-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-read.d.ts.map +1 -1
- package/dist/types/src/handlers/records-write.d.ts +5 -5
- package/dist/types/src/handlers/records-write.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +72 -37
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-read.d.ts +2 -2
- package/dist/types/src/interfaces/messages-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-sync.d.ts +16 -0
- package/dist/types/src/interfaces/messages-sync.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +22 -2
- package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/interfaces/protocols-query.d.ts +2 -2
- package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-count.d.ts +27 -0
- package/dist/types/src/interfaces/records-count.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-delete.d.ts +2 -2
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-query.d.ts +2 -2
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-read.d.ts +4 -2
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-write.d.ts +37 -15
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +5 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -1
- package/dist/types/src/jose/jws/general/builder.d.ts +3 -3
- package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-grant.d.ts +11 -0
- package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-request.d.ts +11 -0
- package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
- package/dist/types/src/protocols/permissions.d.ts +4 -4
- package/dist/types/src/protocols/permissions.d.ts.map +1 -1
- package/dist/types/src/schema-validator.d.ts +1 -1
- package/dist/types/src/schema-validator.d.ts.map +1 -1
- package/dist/types/src/smt/smt-store-level.d.ts +32 -0
- package/dist/types/src/smt/smt-store-level.d.ts.map +1 -0
- package/dist/types/src/smt/smt-store-memory.d.ts +22 -0
- package/dist/types/src/smt/smt-store-memory.d.ts.map +1 -0
- package/dist/types/src/smt/smt-utils.d.ts +58 -0
- package/dist/types/src/smt/smt-utils.d.ts.map +1 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts +124 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +1 -0
- package/dist/types/src/state-index/state-index-level.d.ts +83 -0
- package/dist/types/src/state-index/state-index-level.d.ts.map +1 -0
- package/dist/types/src/store/data-store-level.d.ts +1 -2
- package/dist/types/src/store/data-store-level.d.ts.map +1 -1
- package/dist/types/src/store/index-level.d.ts +98 -2
- package/dist/types/src/store/index-level.d.ts.map +1 -1
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
- package/dist/types/src/store/message-store-level.d.ts +5 -0
- package/dist/types/src/store/message-store-level.d.ts.map +1 -1
- package/dist/types/src/store/storage-controller.d.ts +7 -7
- package/dist/types/src/store/storage-controller.d.ts.map +1 -1
- package/dist/types/src/types/data-store.d.ts +2 -3
- package/dist/types/src/types/data-store.d.ts.map +1 -1
- package/dist/types/src/types/encryption-types.d.ts +48 -0
- package/dist/types/src/types/encryption-types.d.ts.map +1 -0
- package/dist/types/src/types/jose-types.d.ts +9 -40
- package/dist/types/src/types/jose-types.d.ts.map +1 -1
- package/dist/types/src/types/message-store.d.ts +5 -0
- package/dist/types/src/types/message-store.d.ts.map +1 -1
- package/dist/types/src/types/message-types.d.ts +19 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -1
- package/dist/types/src/types/messages-types.d.ts +16 -11
- package/dist/types/src/types/messages-types.d.ts.map +1 -1
- package/dist/types/src/types/method-handler.d.ts +1 -2
- package/dist/types/src/types/method-handler.d.ts.map +1 -1
- package/dist/types/src/types/permission-types.d.ts +2 -2
- package/dist/types/src/types/permission-types.d.ts.map +1 -1
- package/dist/types/src/types/protocols-types.d.ts +49 -5
- package/dist/types/src/types/protocols-types.d.ts.map +1 -1
- package/dist/types/src/types/records-types.d.ts +23 -7
- package/dist/types/src/types/records-types.d.ts.map +1 -1
- package/dist/types/src/types/signer.d.ts +1 -1
- package/dist/types/src/types/signer.d.ts.map +1 -1
- package/dist/types/src/types/smt-types.d.ts +81 -0
- package/dist/types/src/types/smt-types.d.ts.map +1 -0
- package/dist/types/src/types/state-index.d.ts +90 -0
- package/dist/types/src/types/state-index.d.ts.map +1 -0
- package/dist/types/src/utils/cid.d.ts +1 -2
- package/dist/types/src/utils/cid.d.ts.map +1 -1
- package/dist/types/src/utils/data-stream.d.ts +14 -7
- package/dist/types/src/utils/data-stream.d.ts.map +1 -1
- package/dist/types/src/utils/encryption.d.ts +2 -3
- package/dist/types/src/utils/encryption.d.ts.map +1 -1
- package/dist/types/src/utils/hd-key.d.ts +4 -4
- package/dist/types/src/utils/hd-key.d.ts.map +1 -1
- package/dist/types/src/utils/jws.d.ts +7 -7
- package/dist/types/src/utils/jws.d.ts.map +1 -1
- package/dist/types/src/utils/private-key-signer.d.ts +4 -4
- package/dist/types/src/utils/private-key-signer.d.ts.map +1 -1
- package/dist/types/src/utils/protocols.d.ts +46 -3
- package/dist/types/src/utils/protocols.d.ts.map +1 -1
- package/dist/types/src/utils/records.d.ts +33 -6
- package/dist/types/src/utils/records.d.ts.map +1 -1
- package/dist/types/src/utils/secp256k1.d.ts +11 -11
- package/dist/types/src/utils/secp256k1.d.ts.map +1 -1
- package/dist/types/src/utils/secp256r1.d.ts +8 -8
- package/dist/types/src/utils/secp256r1.d.ts.map +1 -1
- package/dist/types/src/utils/time.d.ts +1 -1
- package/dist/types/tests/dwn.spec.d.ts.map +1 -1
- package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-composition.spec.d.ts +5 -0
- package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
- package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-sync.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-count.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
- package/dist/types/tests/protocols/permission-grant.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permission-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
- package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -1
- package/dist/types/tests/smt/smt-store-level.spec.d.ts +2 -0
- package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +2 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +1 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts +2 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts +2 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
- package/dist/types/tests/test-stores.d.ts +4 -4
- package/dist/types/tests/test-stores.d.ts.map +1 -1
- package/dist/types/tests/test-suite.d.ts +2 -2
- package/dist/types/tests/test-suite.d.ts.map +1 -1
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts +2 -0
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/test-data-generator.d.ts +31 -28
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts.map +1 -0
- package/package.json +27 -46
- package/src/core/dwn-error.ts +27 -3
- package/src/core/message-reply.ts +1 -1
- package/src/core/message.ts +5 -5
- package/src/core/messages-grant-authorization.ts +22 -8
- package/src/core/protocol-authorization.ts +345 -68
- package/src/core/records-grant-authorization.ts +2 -2
- package/src/core/resumable-task-manager.ts +4 -5
- package/src/dwn.ts +25 -20
- package/src/enums/dwn-interface-method.ts +5 -3
- package/src/handlers/messages-subscribe.ts +1 -1
- package/src/handlers/messages-sync.ts +129 -0
- package/src/handlers/protocols-configure.ts +195 -17
- package/src/handlers/protocols-query.ts +7 -5
- package/src/handlers/records-count.ts +184 -0
- package/src/handlers/records-query.ts +4 -0
- package/src/handlers/records-read.ts +4 -8
- package/src/handlers/records-write.ts +20 -21
- package/src/index.ts +74 -37
- package/src/interfaces/messages-read.ts +6 -5
- package/src/interfaces/messages-subscribe.ts +7 -6
- package/src/interfaces/messages-sync.ts +59 -0
- package/src/interfaces/protocols-configure.ts +211 -33
- package/src/interfaces/protocols-query.ts +7 -6
- package/src/interfaces/records-count.ts +106 -0
- package/src/interfaces/records-delete.ts +2 -2
- package/src/interfaces/records-query.ts +2 -2
- package/src/interfaces/records-read.ts +26 -3
- package/src/interfaces/records-subscribe.ts +2 -2
- package/src/interfaces/records-write.ts +115 -46
- package/src/jose/algorithms/signing/ed25519.ts +13 -12
- package/src/jose/algorithms/signing/signature-algorithms.ts +6 -1
- package/src/jose/jws/general/builder.ts +3 -3
- package/src/jose/jws/general/verifier.ts +3 -3
- package/src/protocols/permission-grant.ts +51 -0
- package/src/protocols/permission-request.ts +37 -0
- package/src/protocols/permissions.ts +5 -5
- package/src/schema-validator.ts +11 -3
- package/src/smt/smt-store-level.ts +143 -0
- package/src/smt/smt-store-memory.ts +53 -0
- package/src/smt/smt-utils.ts +149 -0
- package/src/smt/sparse-merkle-tree.ts +698 -0
- package/src/state-index/state-index-level.ts +241 -0
- package/src/store/data-store-level.ts +8 -7
- package/src/store/index-level.ts +415 -19
- package/src/store/level-wrapper.ts +1 -1
- package/src/store/message-store-level.ts +62 -0
- package/src/store/storage-controller.ts +21 -19
- package/src/types/data-store.ts +2 -4
- package/src/types/encryption-types.ts +52 -0
- package/src/types/jose-types.ts +10 -42
- package/src/types/message-store.ts +11 -0
- package/src/types/message-types.ts +21 -0
- package/src/types/messages-types.ts +21 -15
- package/src/types/method-handler.ts +1 -2
- package/src/types/permission-types.ts +2 -2
- package/src/types/protocols-types.ts +55 -6
- package/src/types/records-types.ts +26 -7
- package/src/types/signer.ts +1 -1
- package/src/types/smt-types.ts +95 -0
- package/src/types/state-index.ts +100 -0
- package/src/utils/cid.ts +3 -4
- package/src/utils/data-stream.ts +75 -38
- package/src/utils/encryption.ts +24 -39
- package/src/utils/hd-key.ts +6 -6
- package/src/utils/jws.ts +9 -9
- package/src/utils/private-key-signer.ts +9 -8
- package/src/utils/protocols.ts +132 -6
- package/src/utils/records.ts +118 -29
- package/src/utils/secp256k1.ts +23 -21
- package/src/utils/secp256r1.ts +17 -15
- package/src/utils/time.ts +1 -1
- package/src/utils/url.ts +1 -1
- package/dist/cjs/index.js +0 -36749
- package/dist/cjs/package.json +0 -1
- package/dist/esm/src/event-log/event-emitter-stream.js.map +0 -1
- package/dist/esm/src/event-log/event-log-level.js +0 -63
- package/dist/esm/src/event-log/event-log-level.js.map +0 -1
- package/dist/esm/src/handlers/messages-query.js +0 -71
- package/dist/esm/src/handlers/messages-query.js.map +0 -1
- package/dist/esm/src/interfaces/messages-query.js.map +0 -1
- package/dist/esm/src/types/event-log.js +0 -2
- package/dist/esm/src/types/event-log.js.map +0 -1
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log-level.spec.js +0 -44
- package/dist/esm/tests/event-log/event-log-level.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log.spec.js +0 -236
- package/dist/esm/tests/event-log/event-log.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-stream.spec.js.map +0 -1
- package/dist/esm/tests/handlers/messages-query.spec.js +0 -349
- package/dist/esm/tests/handlers/messages-query.spec.js.map +0 -1
- package/dist/esm/tests/interfaces/messagess-query.spec.js +0 -127
- package/dist/esm/tests/interfaces/messagess-query.spec.js.map +0 -1
- package/dist/esm/tests/scenarios/messages-query.spec.js +0 -395
- package/dist/esm/tests/scenarios/messages-query.spec.js.map +0 -1
- package/dist/types/src/event-log/event-emitter-stream.d.ts.map +0 -1
- package/dist/types/src/event-log/event-log-level.d.ts +0 -35
- package/dist/types/src/event-log/event-log-level.d.ts.map +0 -1
- package/dist/types/src/handlers/messages-query.d.ts +0 -17
- package/dist/types/src/handlers/messages-query.d.ts.map +0 -1
- package/dist/types/src/interfaces/messages-query.d.ts +0 -16
- package/dist/types/src/interfaces/messages-query.d.ts.map +0 -1
- package/dist/types/src/types/event-log.d.ts +0 -52
- package/dist/types/src/types/event-log.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log-level.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/handlers/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/handlers/messages-query.spec.d.ts.map +0 -1
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts +0 -2
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +0 -1
- package/dist/types/tests/scenarios/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +0 -1
- package/src/event-log/event-log-level.ts +0 -72
- package/src/handlers/messages-query.ts +0 -67
- package/src/interfaces/messages-query.ts +0 -60
- package/src/types/event-log.ts +0 -52
- /package/dist/esm/src/{event-log → event-stream}/event-emitter-stream.js +0 -0
- /package/dist/types/src/{event-log → event-stream}/event-emitter-stream.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-emitter-stream.spec.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-stream.spec.d.ts +0 -0
- /package/src/{event-log → event-stream}/event-emitter-stream.ts +0 -0
|
@@ -7,9 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import chaiAsPromised from 'chai-as-promised';
|
|
11
10
|
import sinon from 'sinon';
|
|
12
|
-
import chai, { expect } from 'chai';
|
|
13
11
|
import { DidKey } from '@enbox/dids';
|
|
14
12
|
import { Dwn } from '../../src/dwn.js';
|
|
15
13
|
import { DwnErrorCode } from '../../src/core/dwn-error.js';
|
|
@@ -21,28 +19,28 @@ import { TestDataGenerator } from '../utils/test-data-generator.js';
|
|
|
21
19
|
import { TestEventStream } from '../test-event-stream.js';
|
|
22
20
|
import { TestStores } from '../test-stores.js';
|
|
23
21
|
import { UniversalResolver } from '@enbox/dids';
|
|
22
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'bun:test';
|
|
24
23
|
import { DwnInterfaceName, DwnMethodName, Message, Time } from '../../src/index.js';
|
|
25
|
-
chai.use(chaiAsPromised);
|
|
26
24
|
export function testRecordsTags() {
|
|
27
25
|
describe('Records Tags', () => {
|
|
28
26
|
let didResolver;
|
|
29
27
|
let messageStore;
|
|
30
28
|
let dataStore;
|
|
31
29
|
let resumableTaskStore;
|
|
32
|
-
let
|
|
30
|
+
let stateIndex;
|
|
33
31
|
let eventStream;
|
|
34
32
|
let dwn;
|
|
35
33
|
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
36
34
|
// so that different test suites can reuse the same backend store for testing
|
|
37
|
-
|
|
35
|
+
beforeAll(() => __awaiter(this, void 0, void 0, function* () {
|
|
38
36
|
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
39
37
|
const stores = TestStores.get();
|
|
40
38
|
messageStore = stores.messageStore;
|
|
41
39
|
dataStore = stores.dataStore;
|
|
42
40
|
resumableTaskStore = stores.resumableTaskStore;
|
|
43
|
-
|
|
41
|
+
stateIndex = stores.stateIndex;
|
|
44
42
|
eventStream = TestEventStream.get();
|
|
45
|
-
dwn = yield Dwn.create({ didResolver, messageStore, dataStore,
|
|
43
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventStream, resumableTaskStore });
|
|
46
44
|
}));
|
|
47
45
|
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
48
46
|
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
@@ -50,9 +48,9 @@ export function testRecordsTags() {
|
|
|
50
48
|
yield messageStore.clear();
|
|
51
49
|
yield dataStore.clear();
|
|
52
50
|
yield resumableTaskStore.clear();
|
|
53
|
-
yield
|
|
51
|
+
yield stateIndex.clear();
|
|
54
52
|
}));
|
|
55
|
-
|
|
53
|
+
afterAll(() => __awaiter(this, void 0, void 0, function* () {
|
|
56
54
|
yield dwn.close();
|
|
57
55
|
}));
|
|
58
56
|
describe('RecordsWrite with tags', () => {
|
|
@@ -109,7 +107,7 @@ export function testRecordsTags() {
|
|
|
109
107
|
protocolDefinition,
|
|
110
108
|
});
|
|
111
109
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
112
|
-
expect(configureReply.status.code).
|
|
110
|
+
expect(configureReply.status.code).toBe(202);
|
|
113
111
|
}));
|
|
114
112
|
it('should reject tags that have invalid schema definitions during create', () => __awaiter(this, void 0, void 0, function* () {
|
|
115
113
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -141,7 +139,7 @@ export function testRecordsTags() {
|
|
|
141
139
|
author: alice,
|
|
142
140
|
protocolDefinition: invalidSchemaProtocol,
|
|
143
141
|
});
|
|
144
|
-
yield expect(protocolConfigure).
|
|
142
|
+
yield expect(protocolConfigure).rejects.toThrow(DwnErrorCode.ProtocolsConfigureInvalidTagSchema);
|
|
145
143
|
}));
|
|
146
144
|
it('should reject tags that have invalid schema definitions during process', () => __awaiter(this, void 0, void 0, function* () {
|
|
147
145
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -182,9 +180,9 @@ export function testRecordsTags() {
|
|
|
182
180
|
});
|
|
183
181
|
const protocolsConfigureMessage = { descriptor, authorization };
|
|
184
182
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfigureMessage);
|
|
185
|
-
expect(protocolsConfigureReply.status.code).
|
|
186
|
-
expect(protocolsConfigureReply.status.detail).
|
|
187
|
-
expect(protocolsConfigureReply.status.detail).
|
|
183
|
+
expect(protocolsConfigureReply.status.code).toBe(400);
|
|
184
|
+
expect(protocolsConfigureReply.status.detail).toContain(DwnErrorCode.ProtocolsConfigureInvalidTagSchema);
|
|
185
|
+
expect(protocolsConfigureReply.status.detail).toContain(`foo/$tags/invalidTag/contains/minimum must be number`);
|
|
188
186
|
}));
|
|
189
187
|
describe('should reject invalid tag types', () => {
|
|
190
188
|
it('object', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -219,7 +217,7 @@ export function testRecordsTags() {
|
|
|
219
217
|
});
|
|
220
218
|
const protocolsConfigureMessage = { descriptor, authorization };
|
|
221
219
|
const objectTagsTypeConfigureReply = yield dwn.processMessage(alice.did, protocolsConfigureMessage);
|
|
222
|
-
expect(objectTagsTypeConfigureReply.status.code).
|
|
220
|
+
expect(objectTagsTypeConfigureReply.status.code).toBe(400);
|
|
223
221
|
}));
|
|
224
222
|
it('array of objects', () => __awaiter(this, void 0, void 0, function* () {
|
|
225
223
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -256,7 +254,7 @@ export function testRecordsTags() {
|
|
|
256
254
|
});
|
|
257
255
|
const protocolsConfigureMessage = { descriptor, authorization };
|
|
258
256
|
const objectArrayTagsTypeConfigureReply = yield dwn.processMessage(alice.did, protocolsConfigureMessage);
|
|
259
|
-
expect(objectArrayTagsTypeConfigureReply.status.code).
|
|
257
|
+
expect(objectArrayTagsTypeConfigureReply.status.code).toBe(400);
|
|
260
258
|
}));
|
|
261
259
|
it('array of booleans', () => __awaiter(this, void 0, void 0, function* () {
|
|
262
260
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -292,7 +290,7 @@ export function testRecordsTags() {
|
|
|
292
290
|
});
|
|
293
291
|
const protocolsConfigureMessage = { descriptor, authorization };
|
|
294
292
|
const booleanArrayTagsTypeConfigureReply = yield dwn.processMessage(alice.did, protocolsConfigureMessage);
|
|
295
|
-
expect(booleanArrayTagsTypeConfigureReply.status.code).
|
|
293
|
+
expect(booleanArrayTagsTypeConfigureReply.status.code).toBe(400);
|
|
296
294
|
}));
|
|
297
295
|
});
|
|
298
296
|
});
|
|
@@ -321,7 +319,7 @@ export function testRecordsTags() {
|
|
|
321
319
|
protocolDefinition,
|
|
322
320
|
});
|
|
323
321
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
324
|
-
expect(configureReply.status.code).
|
|
322
|
+
expect(configureReply.status.code).toBe(202);
|
|
325
323
|
// write a foo record with an `unknownTag` tag.
|
|
326
324
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
327
325
|
author: alice,
|
|
@@ -333,10 +331,10 @@ export function testRecordsTags() {
|
|
|
333
331
|
}
|
|
334
332
|
});
|
|
335
333
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
336
|
-
expect(fooRecordReply.status.code).
|
|
337
|
-
expect(fooRecordReply.status.detail).
|
|
334
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
335
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
338
336
|
// ensure the correct tag descriptor is in the error message
|
|
339
|
-
expect(fooRecordReply.status.detail).
|
|
337
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags must NOT have additional properties`);
|
|
340
338
|
// write a foo record with a `knownTag` tag.
|
|
341
339
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
342
340
|
author: alice,
|
|
@@ -349,7 +347,7 @@ export function testRecordsTags() {
|
|
|
349
347
|
});
|
|
350
348
|
// should pass
|
|
351
349
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
352
|
-
expect(validFooRecordReply.status.code).
|
|
350
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
353
351
|
}));
|
|
354
352
|
it('should reject a tag value that does not match the boolean type', () => __awaiter(this, void 0, void 0, function* () {
|
|
355
353
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -376,7 +374,7 @@ export function testRecordsTags() {
|
|
|
376
374
|
protocolDefinition
|
|
377
375
|
});
|
|
378
376
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
379
|
-
expect(configureReply.status.code).
|
|
377
|
+
expect(configureReply.status.code).toBe(202);
|
|
380
378
|
// `draft` should be a boolean type, but we are passing a string
|
|
381
379
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
382
380
|
author: alice,
|
|
@@ -388,9 +386,9 @@ export function testRecordsTags() {
|
|
|
388
386
|
}
|
|
389
387
|
});
|
|
390
388
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
391
|
-
expect(fooRecordReply.status.code).
|
|
392
|
-
expect(fooRecordReply.status.detail).
|
|
393
|
-
expect(fooRecordReply.status.detail).
|
|
389
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
390
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
391
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/draft must be boolean`);
|
|
394
392
|
// positive test with a boolean
|
|
395
393
|
const fooRecord2 = yield TestDataGenerator.generateRecordsWrite({
|
|
396
394
|
author: alice,
|
|
@@ -402,7 +400,7 @@ export function testRecordsTags() {
|
|
|
402
400
|
}
|
|
403
401
|
});
|
|
404
402
|
const fooRecord2Reply = yield dwn.processMessage(alice.did, fooRecord2.message, { dataStream: fooRecord2.dataStream });
|
|
405
|
-
expect(fooRecord2Reply.status.code).
|
|
403
|
+
expect(fooRecord2Reply.status.code).toBe(202);
|
|
406
404
|
}));
|
|
407
405
|
it('should reject a tag value that does not match the number type', () => __awaiter(this, void 0, void 0, function* () {
|
|
408
406
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -429,7 +427,7 @@ export function testRecordsTags() {
|
|
|
429
427
|
protocolDefinition
|
|
430
428
|
});
|
|
431
429
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
432
|
-
expect(configureReply.status.code).
|
|
430
|
+
expect(configureReply.status.code).toBe(202);
|
|
433
431
|
// `numberType` should be a number type, but we are passing a string
|
|
434
432
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
435
433
|
author: alice,
|
|
@@ -441,9 +439,9 @@ export function testRecordsTags() {
|
|
|
441
439
|
}
|
|
442
440
|
});
|
|
443
441
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
444
|
-
expect(fooRecordReply.status.code).
|
|
445
|
-
expect(fooRecordReply.status.detail).
|
|
446
|
-
expect(fooRecordReply.status.detail).
|
|
442
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
443
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
444
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/numberType must be number`);
|
|
447
445
|
// positive tests with an integer number
|
|
448
446
|
const fooRecord2 = yield TestDataGenerator.generateRecordsWrite({
|
|
449
447
|
author: alice,
|
|
@@ -455,7 +453,7 @@ export function testRecordsTags() {
|
|
|
455
453
|
}
|
|
456
454
|
});
|
|
457
455
|
const fooRecord2Reply = yield dwn.processMessage(alice.did, fooRecord2.message, { dataStream: fooRecord2.dataStream });
|
|
458
|
-
expect(fooRecord2Reply.status.code).
|
|
456
|
+
expect(fooRecord2Reply.status.code).toBe(202);
|
|
459
457
|
// positive tests with a decimal number
|
|
460
458
|
const fooRecord3 = yield TestDataGenerator.generateRecordsWrite({
|
|
461
459
|
author: alice,
|
|
@@ -467,7 +465,7 @@ export function testRecordsTags() {
|
|
|
467
465
|
}
|
|
468
466
|
});
|
|
469
467
|
const fooRecord3Reply = yield dwn.processMessage(alice.did, fooRecord3.message, { dataStream: fooRecord3.dataStream });
|
|
470
|
-
expect(fooRecord3Reply.status.code).
|
|
468
|
+
expect(fooRecord3Reply.status.code).toBe(202);
|
|
471
469
|
}));
|
|
472
470
|
it('should reject a tag value that does not match the integer type', () => __awaiter(this, void 0, void 0, function* () {
|
|
473
471
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -494,7 +492,7 @@ export function testRecordsTags() {
|
|
|
494
492
|
protocolDefinition
|
|
495
493
|
});
|
|
496
494
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
497
|
-
expect(configureReply.status.code).
|
|
495
|
+
expect(configureReply.status.code).toBe(202);
|
|
498
496
|
// `count` should be an integer type, but we are passing decimal number
|
|
499
497
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
500
498
|
author: alice,
|
|
@@ -506,9 +504,9 @@ export function testRecordsTags() {
|
|
|
506
504
|
}
|
|
507
505
|
});
|
|
508
506
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
509
|
-
expect(fooRecordReply.status.code).
|
|
510
|
-
expect(fooRecordReply.status.detail).
|
|
511
|
-
expect(fooRecordReply.status.detail).
|
|
507
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
508
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
509
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/count must be integer`);
|
|
512
510
|
// positive test with an integer
|
|
513
511
|
const fooRecord2 = yield TestDataGenerator.generateRecordsWrite({
|
|
514
512
|
author: alice,
|
|
@@ -520,7 +518,7 @@ export function testRecordsTags() {
|
|
|
520
518
|
}
|
|
521
519
|
});
|
|
522
520
|
const fooRecord2Reply = yield dwn.processMessage(alice.did, fooRecord2.message, { dataStream: fooRecord2.dataStream });
|
|
523
|
-
expect(fooRecord2Reply.status.code).
|
|
521
|
+
expect(fooRecord2Reply.status.code).toBe(202);
|
|
524
522
|
}));
|
|
525
523
|
it('should reject a record with a tag value that does not match a given enum in the protocol definition', () => __awaiter(this, void 0, void 0, function* () {
|
|
526
524
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -548,7 +546,7 @@ export function testRecordsTags() {
|
|
|
548
546
|
protocolDefinition,
|
|
549
547
|
});
|
|
550
548
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
551
|
-
expect(configureReply.status.code).
|
|
549
|
+
expect(configureReply.status.code).toBe(202);
|
|
552
550
|
// write a foo record with an `unknown_status` tag value.
|
|
553
551
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
554
552
|
author: alice,
|
|
@@ -560,12 +558,12 @@ export function testRecordsTags() {
|
|
|
560
558
|
}
|
|
561
559
|
});
|
|
562
560
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
563
|
-
expect(fooRecordReply.status.code).
|
|
564
|
-
expect(fooRecordReply.status.detail).
|
|
565
|
-
|
|
566
|
-
|
|
561
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
562
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
563
|
+
const expectedStatusMsg = `${protocolDefinition.protocol}/foo/$tags/status must be equal to one of the allowed values`;
|
|
564
|
+
expect(fooRecordReply.status.detail).toContain(expectedStatusMsg);
|
|
567
565
|
// ensure the correct tag descriptor path is in the error message
|
|
568
|
-
expect(fooRecordReply.status.detail).
|
|
566
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/status`);
|
|
569
567
|
// write a foo record with a valid `status` tag value.
|
|
570
568
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
571
569
|
author: alice,
|
|
@@ -578,7 +576,7 @@ export function testRecordsTags() {
|
|
|
578
576
|
});
|
|
579
577
|
// should pass
|
|
580
578
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
581
|
-
expect(validFooRecordReply.status.code).
|
|
579
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
582
580
|
}));
|
|
583
581
|
it('should reject a record with a tag value that is not within the `minimum` and `maximum` range', () => __awaiter(this, void 0, void 0, function* () {
|
|
584
582
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -607,7 +605,7 @@ export function testRecordsTags() {
|
|
|
607
605
|
protocolDefinition,
|
|
608
606
|
});
|
|
609
607
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
610
|
-
expect(configureReply.status.code).
|
|
608
|
+
expect(configureReply.status.code).toBe(202);
|
|
611
609
|
// write a foo record with an `score` value less than 0.
|
|
612
610
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
613
611
|
author: alice,
|
|
@@ -620,9 +618,9 @@ export function testRecordsTags() {
|
|
|
620
618
|
});
|
|
621
619
|
// should fail
|
|
622
620
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
623
|
-
expect(fooRecordReply.status.code).
|
|
624
|
-
expect(fooRecordReply.status.detail).
|
|
625
|
-
expect(fooRecordReply.status.detail).
|
|
621
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
622
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
623
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/score must be >= 0`);
|
|
626
624
|
// write a foo record with an `score` value greater than 100.
|
|
627
625
|
const fooRecord2 = yield TestDataGenerator.generateRecordsWrite({
|
|
628
626
|
author: alice,
|
|
@@ -635,9 +633,9 @@ export function testRecordsTags() {
|
|
|
635
633
|
});
|
|
636
634
|
// should fail
|
|
637
635
|
const fooRecord2Reply = yield dwn.processMessage(alice.did, fooRecord2.message, { dataStream: fooRecord2.dataStream });
|
|
638
|
-
expect(fooRecord2Reply.status.code).
|
|
639
|
-
expect(fooRecord2Reply.status.detail).
|
|
640
|
-
expect(fooRecord2Reply.status.detail).
|
|
636
|
+
expect(fooRecord2Reply.status.code).toBe(400);
|
|
637
|
+
expect(fooRecord2Reply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
638
|
+
expect(fooRecord2Reply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/score must be <= 100`);
|
|
641
639
|
// write a foo record with a maximum `score` of 100.
|
|
642
640
|
const validFooMaxRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
643
641
|
author: alice,
|
|
@@ -650,7 +648,7 @@ export function testRecordsTags() {
|
|
|
650
648
|
});
|
|
651
649
|
// should pass
|
|
652
650
|
const validFooMaxRecordReply = yield dwn.processMessage(alice.did, validFooMaxRecord.message, { dataStream: validFooMaxRecord.dataStream });
|
|
653
|
-
expect(validFooMaxRecordReply.status.code).
|
|
651
|
+
expect(validFooMaxRecordReply.status.code).toBe(202);
|
|
654
652
|
// write a foo record with a maximum `score` of 0.
|
|
655
653
|
const validFooMinRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
656
654
|
author: alice,
|
|
@@ -663,7 +661,7 @@ export function testRecordsTags() {
|
|
|
663
661
|
});
|
|
664
662
|
// should pass
|
|
665
663
|
const validFooMinRecordReply = yield dwn.processMessage(alice.did, validFooMinRecord.message, { dataStream: validFooMinRecord.dataStream });
|
|
666
|
-
expect(validFooMinRecordReply.status.code).
|
|
664
|
+
expect(validFooMinRecordReply.status.code).toBe(202);
|
|
667
665
|
// write a foo record within the range
|
|
668
666
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
669
667
|
author: alice,
|
|
@@ -676,7 +674,7 @@ export function testRecordsTags() {
|
|
|
676
674
|
});
|
|
677
675
|
// should pass
|
|
678
676
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
679
|
-
expect(validFooRecordReply.status.code).
|
|
677
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
680
678
|
}));
|
|
681
679
|
it('should reject a record with a tag value that is not within the `exclusiveMinimum` and `exclusiveMaximum` range', () => __awaiter(this, void 0, void 0, function* () {
|
|
682
680
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -705,7 +703,7 @@ export function testRecordsTags() {
|
|
|
705
703
|
protocolDefinition,
|
|
706
704
|
});
|
|
707
705
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
708
|
-
expect(configureReply.status.code).
|
|
706
|
+
expect(configureReply.status.code).toBe(202);
|
|
709
707
|
// write a foo record with an hour at the exclusiveMaximum
|
|
710
708
|
const exclusiveMaxRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
711
709
|
author: alice,
|
|
@@ -718,9 +716,9 @@ export function testRecordsTags() {
|
|
|
718
716
|
});
|
|
719
717
|
// should fail
|
|
720
718
|
const exclusiveMaxReply = yield dwn.processMessage(alice.did, exclusiveMaxRecord.message, { dataStream: exclusiveMaxRecord.dataStream });
|
|
721
|
-
expect(exclusiveMaxReply.status.code).
|
|
722
|
-
expect(exclusiveMaxReply.status.detail).
|
|
723
|
-
expect(exclusiveMaxReply.status.detail).
|
|
719
|
+
expect(exclusiveMaxReply.status.code).toBe(400);
|
|
720
|
+
expect(exclusiveMaxReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
721
|
+
expect(exclusiveMaxReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/hours must be < 24`);
|
|
724
722
|
// write a foo record with an hour at the exclusiveMinimum
|
|
725
723
|
const exclusiveMinRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
726
724
|
author: alice,
|
|
@@ -733,9 +731,9 @@ export function testRecordsTags() {
|
|
|
733
731
|
});
|
|
734
732
|
// should fail
|
|
735
733
|
const exclusiveMinReply = yield dwn.processMessage(alice.did, exclusiveMinRecord.message, { dataStream: exclusiveMinRecord.dataStream });
|
|
736
|
-
expect(exclusiveMinReply.status.code).
|
|
737
|
-
expect(exclusiveMinReply.status.detail).
|
|
738
|
-
expect(exclusiveMinReply.status.detail).
|
|
734
|
+
expect(exclusiveMinReply.status.code).toBe(400);
|
|
735
|
+
expect(exclusiveMinReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
736
|
+
expect(exclusiveMinReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/hours must be > 0`);
|
|
739
737
|
// write a foo record with an `hour` value within the range.
|
|
740
738
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
741
739
|
author: alice,
|
|
@@ -748,7 +746,7 @@ export function testRecordsTags() {
|
|
|
748
746
|
});
|
|
749
747
|
// should pass
|
|
750
748
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
751
|
-
expect(validFooRecordReply.status.code).
|
|
749
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
752
750
|
}));
|
|
753
751
|
it('should reject tag values that are not within the `minLength` and `maxLength` values', () => __awaiter(this, void 0, void 0, function* () {
|
|
754
752
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -777,7 +775,7 @@ export function testRecordsTags() {
|
|
|
777
775
|
protocolDefinition,
|
|
778
776
|
});
|
|
779
777
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
780
|
-
expect(configureReply.status.code).
|
|
778
|
+
expect(configureReply.status.code).toBe(202);
|
|
781
779
|
// write a foo record with a `stringWithLimit` value less than the minimum length
|
|
782
780
|
const minLengthRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
783
781
|
author: alice,
|
|
@@ -790,10 +788,10 @@ export function testRecordsTags() {
|
|
|
790
788
|
});
|
|
791
789
|
// should fail
|
|
792
790
|
const minLengthReply = yield dwn.processMessage(alice.did, minLengthRecord.message, { dataStream: minLengthRecord.dataStream });
|
|
793
|
-
expect(minLengthReply.status.code).
|
|
794
|
-
expect(minLengthReply.status.detail).
|
|
795
|
-
|
|
796
|
-
|
|
791
|
+
expect(minLengthReply.status.code).toBe(400);
|
|
792
|
+
expect(minLengthReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
793
|
+
const expectedMinMsg = `${protocolDefinition.protocol}/foo/$tags/stringWithLimit must NOT have fewer than 5 characters`;
|
|
794
|
+
expect(minLengthReply.status.detail).toContain(expectedMinMsg);
|
|
797
795
|
// write a foo record with a `stringWithLimit` value greater than the maximum length
|
|
798
796
|
const maxLengthRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
799
797
|
author: alice,
|
|
@@ -806,10 +804,10 @@ export function testRecordsTags() {
|
|
|
806
804
|
});
|
|
807
805
|
// should fail
|
|
808
806
|
const maxLengthReply = yield dwn.processMessage(alice.did, maxLengthRecord.message, { dataStream: maxLengthRecord.dataStream });
|
|
809
|
-
expect(maxLengthReply.status.code).
|
|
810
|
-
expect(maxLengthReply.status.detail).
|
|
811
|
-
|
|
812
|
-
|
|
807
|
+
expect(maxLengthReply.status.code).toBe(400);
|
|
808
|
+
expect(maxLengthReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
809
|
+
const expectedMaxMsg = `${protocolDefinition.protocol}/foo/$tags/stringWithLimit must NOT have more than 10 characters`;
|
|
810
|
+
expect(maxLengthReply.status.detail).toContain(expectedMaxMsg);
|
|
813
811
|
// write a foo record with a `stringWithLimit` value within the range
|
|
814
812
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
815
813
|
author: alice,
|
|
@@ -822,7 +820,7 @@ export function testRecordsTags() {
|
|
|
822
820
|
});
|
|
823
821
|
// should pass
|
|
824
822
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
825
|
-
expect(validFooRecordReply.status.code).
|
|
823
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
826
824
|
}));
|
|
827
825
|
it('should reject tag values that do not contain the number of items within the `minItems` and `maxItems` values', () => __awaiter(this, void 0, void 0, function* () {
|
|
828
826
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -854,7 +852,7 @@ export function testRecordsTags() {
|
|
|
854
852
|
protocolDefinition,
|
|
855
853
|
});
|
|
856
854
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
857
|
-
expect(configureReply.status.code).
|
|
855
|
+
expect(configureReply.status.code).toBe(202);
|
|
858
856
|
// write a foo record with a `numberArray` value with only 1 item, less than the `minItems` specified of 2
|
|
859
857
|
const minLengthRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
860
858
|
author: alice,
|
|
@@ -867,9 +865,9 @@ export function testRecordsTags() {
|
|
|
867
865
|
});
|
|
868
866
|
// should fail
|
|
869
867
|
const minLengthReply = yield dwn.processMessage(alice.did, minLengthRecord.message, { dataStream: minLengthRecord.dataStream });
|
|
870
|
-
expect(minLengthReply.status.code).
|
|
871
|
-
expect(minLengthReply.status.detail).
|
|
872
|
-
expect(minLengthReply.status.detail).
|
|
868
|
+
expect(minLengthReply.status.code).toBe(400);
|
|
869
|
+
expect(minLengthReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
870
|
+
expect(minLengthReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/numberArray must NOT have fewer than 2 items`);
|
|
873
871
|
// write a foo record with a `numberArray` value with 4 items, more than the `maxItems` specified of 3
|
|
874
872
|
const maxLengthRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
875
873
|
author: alice,
|
|
@@ -882,9 +880,9 @@ export function testRecordsTags() {
|
|
|
882
880
|
});
|
|
883
881
|
// should fail
|
|
884
882
|
const maxLengthReply = yield dwn.processMessage(alice.did, maxLengthRecord.message, { dataStream: maxLengthRecord.dataStream });
|
|
885
|
-
expect(maxLengthReply.status.code).
|
|
886
|
-
expect(maxLengthReply.status.detail).
|
|
887
|
-
expect(maxLengthReply.status.detail).
|
|
883
|
+
expect(maxLengthReply.status.code).toBe(400);
|
|
884
|
+
expect(maxLengthReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
885
|
+
expect(maxLengthReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/numberArray must NOT have more than 3 items`);
|
|
888
886
|
// write a foo record with a `numberArray` value with 3 items, within the range
|
|
889
887
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
890
888
|
author: alice,
|
|
@@ -897,7 +895,7 @@ export function testRecordsTags() {
|
|
|
897
895
|
});
|
|
898
896
|
// should pass
|
|
899
897
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
900
|
-
expect(validFooRecordReply.status.code).
|
|
898
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
901
899
|
}));
|
|
902
900
|
it('should reject a value within an array that should only include numbers', () => __awaiter(this, void 0, void 0, function* () {
|
|
903
901
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -927,7 +925,7 @@ export function testRecordsTags() {
|
|
|
927
925
|
protocolDefinition
|
|
928
926
|
});
|
|
929
927
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
930
|
-
expect(configureReply.status.code).
|
|
928
|
+
expect(configureReply.status.code).toBe(202);
|
|
931
929
|
// write a foo record with a `numberArray` value with a string
|
|
932
930
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
933
931
|
author: alice,
|
|
@@ -940,9 +938,9 @@ export function testRecordsTags() {
|
|
|
940
938
|
});
|
|
941
939
|
// should fail
|
|
942
940
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
943
|
-
expect(fooRecordReply.status.code).
|
|
944
|
-
expect(fooRecordReply.status.detail).
|
|
945
|
-
expect(fooRecordReply.status.detail).
|
|
941
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
942
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
943
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/numberArray/0 must be number`);
|
|
946
944
|
// write a foo record with a `numberArray` value with a number (both integer and decimal)
|
|
947
945
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
948
946
|
author: alice,
|
|
@@ -955,7 +953,7 @@ export function testRecordsTags() {
|
|
|
955
953
|
});
|
|
956
954
|
// should pass
|
|
957
955
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
958
|
-
expect(validFooRecordReply.status.code).
|
|
956
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
959
957
|
}));
|
|
960
958
|
it('should reject a value within an array that should only include integers', () => __awaiter(this, void 0, void 0, function* () {
|
|
961
959
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -985,7 +983,7 @@ export function testRecordsTags() {
|
|
|
985
983
|
protocolDefinition
|
|
986
984
|
});
|
|
987
985
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
988
|
-
expect(configureReply.status.code).
|
|
986
|
+
expect(configureReply.status.code).toBe(202);
|
|
989
987
|
// write a foo record with a `numberArray` value with a decimal
|
|
990
988
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
991
989
|
author: alice,
|
|
@@ -998,9 +996,9 @@ export function testRecordsTags() {
|
|
|
998
996
|
});
|
|
999
997
|
// should fail
|
|
1000
998
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
1001
|
-
expect(fooRecordReply.status.code).
|
|
1002
|
-
expect(fooRecordReply.status.detail).
|
|
1003
|
-
expect(fooRecordReply.status.detail).
|
|
999
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
1000
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1001
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags/numberArray/1 must be integer`);
|
|
1004
1002
|
// write a foo record with a `numberArray` value with values of integers
|
|
1005
1003
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1006
1004
|
author: alice,
|
|
@@ -1013,7 +1011,7 @@ export function testRecordsTags() {
|
|
|
1013
1011
|
});
|
|
1014
1012
|
// should pass
|
|
1015
1013
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1016
|
-
expect(validFooRecordReply.status.code).
|
|
1014
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1017
1015
|
}));
|
|
1018
1016
|
it('should reject tag values that do not contain the number of items within the `minContains` and `maxContains` values', () => __awaiter(this, void 0, void 0, function* () {
|
|
1019
1017
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1050,7 +1048,7 @@ export function testRecordsTags() {
|
|
|
1050
1048
|
protocolDefinition,
|
|
1051
1049
|
});
|
|
1052
1050
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1053
|
-
expect(configureReply.status.code).
|
|
1051
|
+
expect(configureReply.status.code).toBe(202);
|
|
1054
1052
|
// write a foo record with a `numberArray` value with only 1 item that matches contains contraint, less than the `minContains` of 2
|
|
1055
1053
|
// but additional items that would equal more than 2 items
|
|
1056
1054
|
const minLengthRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
@@ -1064,10 +1062,10 @@ export function testRecordsTags() {
|
|
|
1064
1062
|
});
|
|
1065
1063
|
// should fail
|
|
1066
1064
|
const minLengthReply = yield dwn.processMessage(alice.did, minLengthRecord.message, { dataStream: minLengthRecord.dataStream });
|
|
1067
|
-
expect(minLengthReply.status.code).
|
|
1068
|
-
expect(minLengthReply.status.detail).
|
|
1065
|
+
expect(minLengthReply.status.code).toBe(400);
|
|
1066
|
+
expect(minLengthReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1069
1067
|
expect(minLengthReply.status.detail)
|
|
1070
|
-
.
|
|
1068
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/numberArray must contain at least 2 and no more than 4 valid item(s)`);
|
|
1071
1069
|
// write a foo record with a `numberArray` value with 4 items, more than the `maxItems` specified of 3
|
|
1072
1070
|
const maxLengthRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1073
1071
|
author: alice,
|
|
@@ -1080,10 +1078,10 @@ export function testRecordsTags() {
|
|
|
1080
1078
|
});
|
|
1081
1079
|
// should fail
|
|
1082
1080
|
const maxLengthReply = yield dwn.processMessage(alice.did, maxLengthRecord.message, { dataStream: maxLengthRecord.dataStream });
|
|
1083
|
-
expect(maxLengthReply.status.code).
|
|
1084
|
-
expect(maxLengthReply.status.detail).
|
|
1081
|
+
expect(maxLengthReply.status.code).toBe(400);
|
|
1082
|
+
expect(maxLengthReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1085
1083
|
expect(maxLengthReply.status.detail)
|
|
1086
|
-
.
|
|
1084
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/numberArray must contain at least 2 and no more than 4 valid item(s)`);
|
|
1087
1085
|
// write a foo record with a `numberArray` value with 3 items, within the range
|
|
1088
1086
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1089
1087
|
author: alice,
|
|
@@ -1096,7 +1094,7 @@ export function testRecordsTags() {
|
|
|
1096
1094
|
});
|
|
1097
1095
|
// should pass
|
|
1098
1096
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1099
|
-
expect(validFooRecordReply.status.code).
|
|
1097
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1100
1098
|
}));
|
|
1101
1099
|
it('should reject tag values that do not follow the constraints of the `uniqueItems` value', () => __awaiter(this, void 0, void 0, function* () {
|
|
1102
1100
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1127,7 +1125,7 @@ export function testRecordsTags() {
|
|
|
1127
1125
|
protocolDefinition,
|
|
1128
1126
|
});
|
|
1129
1127
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1130
|
-
expect(configureReply.status.code).
|
|
1128
|
+
expect(configureReply.status.code).toBe(202);
|
|
1131
1129
|
// write a foo record with a `uniqueStrings` value with duplicate items
|
|
1132
1130
|
const duplicateItemsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1133
1131
|
author: alice,
|
|
@@ -1140,7 +1138,7 @@ export function testRecordsTags() {
|
|
|
1140
1138
|
});
|
|
1141
1139
|
// should fail
|
|
1142
1140
|
const duplicateItemsReply = yield dwn.processMessage(alice.did, duplicateItemsRecord.message, { dataStream: duplicateItemsRecord.dataStream });
|
|
1143
|
-
expect(duplicateItemsReply.status.code).
|
|
1141
|
+
expect(duplicateItemsReply.status.code).toBe(400);
|
|
1144
1142
|
// write a foo record with a `uniqueStrings` value with unique items
|
|
1145
1143
|
const uniqueItemsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1146
1144
|
author: alice,
|
|
@@ -1153,7 +1151,7 @@ export function testRecordsTags() {
|
|
|
1153
1151
|
});
|
|
1154
1152
|
// should pass
|
|
1155
1153
|
const uniqueItemsReply = yield dwn.processMessage(alice.did, uniqueItemsRecord.message, { dataStream: uniqueItemsRecord.dataStream });
|
|
1156
|
-
expect(uniqueItemsReply.status.code).
|
|
1154
|
+
expect(uniqueItemsReply.status.code).toBe(202);
|
|
1157
1155
|
}));
|
|
1158
1156
|
it('should only accept a record containing tags required by $requiredTags', () => __awaiter(this, void 0, void 0, function* () {
|
|
1159
1157
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1181,7 +1179,7 @@ export function testRecordsTags() {
|
|
|
1181
1179
|
protocolDefinition,
|
|
1182
1180
|
});
|
|
1183
1181
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1184
|
-
expect(configureReply.status.code).
|
|
1182
|
+
expect(configureReply.status.code).toBe(202);
|
|
1185
1183
|
// write a foo record without the required tag
|
|
1186
1184
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1187
1185
|
author: alice,
|
|
@@ -1190,9 +1188,9 @@ export function testRecordsTags() {
|
|
|
1190
1188
|
protocolPath: 'foo',
|
|
1191
1189
|
});
|
|
1192
1190
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
1193
|
-
expect(fooRecordReply.status.code).
|
|
1194
|
-
expect(fooRecordReply.status.detail).
|
|
1195
|
-
expect(fooRecordReply.status.detail).
|
|
1191
|
+
expect(fooRecordReply.status.code).toBe(400);
|
|
1192
|
+
expect(fooRecordReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1193
|
+
expect(fooRecordReply.status.detail).toContain(`${protocolDefinition.protocol}/foo/$tags must have required property 'someRequiredTag'`);
|
|
1196
1194
|
// write a foo record with the required tag
|
|
1197
1195
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1198
1196
|
author: alice,
|
|
@@ -1205,7 +1203,7 @@ export function testRecordsTags() {
|
|
|
1205
1203
|
});
|
|
1206
1204
|
// should pass
|
|
1207
1205
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1208
|
-
expect(validFooRecordReply.status.code).
|
|
1206
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1209
1207
|
}));
|
|
1210
1208
|
it('should accept any tag if $allowUndefinedTags is set to true', () => __awaiter(this, void 0, void 0, function* () {
|
|
1211
1209
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1233,7 +1231,7 @@ export function testRecordsTags() {
|
|
|
1233
1231
|
protocolDefinition,
|
|
1234
1232
|
});
|
|
1235
1233
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1236
|
-
expect(configureReply.status.code).
|
|
1234
|
+
expect(configureReply.status.code).toBe(202);
|
|
1237
1235
|
// write a foo record without the required tag
|
|
1238
1236
|
const fooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1239
1237
|
author: alice,
|
|
@@ -1245,7 +1243,7 @@ export function testRecordsTags() {
|
|
|
1245
1243
|
}
|
|
1246
1244
|
});
|
|
1247
1245
|
const fooRecordReply = yield dwn.processMessage(alice.did, fooRecord.message, { dataStream: fooRecord.dataStream });
|
|
1248
|
-
expect(fooRecordReply.status.code).
|
|
1246
|
+
expect(fooRecordReply.status.code).toBe(202);
|
|
1249
1247
|
}));
|
|
1250
1248
|
describe('contains', () => {
|
|
1251
1249
|
it('should reject a record tag that does not contain a value specified within the `enum` definition', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1280,7 +1278,7 @@ export function testRecordsTags() {
|
|
|
1280
1278
|
protocolDefinition,
|
|
1281
1279
|
});
|
|
1282
1280
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1283
|
-
expect(configureReply.status.code).
|
|
1281
|
+
expect(configureReply.status.code).toBe(202);
|
|
1284
1282
|
// write a foo record with a `status` value that is not represented in the `enum`
|
|
1285
1283
|
const invalidEnumRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1286
1284
|
author: alice,
|
|
@@ -1293,10 +1291,10 @@ export function testRecordsTags() {
|
|
|
1293
1291
|
});
|
|
1294
1292
|
// should fail
|
|
1295
1293
|
const invalidEnumReply = yield dwn.processMessage(alice.did, invalidEnumRecord.message, { dataStream: invalidEnumRecord.dataStream });
|
|
1296
|
-
expect(invalidEnumReply.status.code).
|
|
1297
|
-
expect(invalidEnumReply.status.detail).
|
|
1294
|
+
expect(invalidEnumReply.status.code).toBe(400);
|
|
1295
|
+
expect(invalidEnumReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1298
1296
|
expect(invalidEnumReply.status.detail)
|
|
1299
|
-
.
|
|
1297
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/status must contain at least 1 valid item(s)`);
|
|
1300
1298
|
// write a foo record that now adds a valid `status` value to the array
|
|
1301
1299
|
const validEnumRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1302
1300
|
author: alice,
|
|
@@ -1309,7 +1307,7 @@ export function testRecordsTags() {
|
|
|
1309
1307
|
});
|
|
1310
1308
|
// should pass
|
|
1311
1309
|
const validEnumReply = yield dwn.processMessage(alice.did, validEnumRecord.message, { dataStream: validEnumRecord.dataStream });
|
|
1312
|
-
expect(validEnumReply.status.code).
|
|
1310
|
+
expect(validEnumReply.status.code).toBe(202);
|
|
1313
1311
|
}));
|
|
1314
1312
|
it('should reject a record tag that does not contain a value within the `minimum` and `maximum` range ', () => __awaiter(this, void 0, void 0, function* () {
|
|
1315
1313
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1344,7 +1342,7 @@ export function testRecordsTags() {
|
|
|
1344
1342
|
protocolDefinition,
|
|
1345
1343
|
});
|
|
1346
1344
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1347
|
-
expect(configureReply.status.code).
|
|
1345
|
+
expect(configureReply.status.code).toBe(202);
|
|
1348
1346
|
// write a foo record with a `containsNumbers` value that does not have a number within the range
|
|
1349
1347
|
const minContainsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1350
1348
|
author: alice,
|
|
@@ -1357,10 +1355,10 @@ export function testRecordsTags() {
|
|
|
1357
1355
|
});
|
|
1358
1356
|
// should fail
|
|
1359
1357
|
const minContainsReply = yield dwn.processMessage(alice.did, minContainsRecord.message, { dataStream: minContainsRecord.dataStream });
|
|
1360
|
-
expect(minContainsReply.status.code).
|
|
1361
|
-
expect(minContainsReply.status.detail).
|
|
1358
|
+
expect(minContainsReply.status.code).toBe(400);
|
|
1359
|
+
expect(minContainsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1362
1360
|
expect(minContainsReply.status.detail)
|
|
1363
|
-
.
|
|
1361
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/containsNumbers must contain at least 1 valid item(s)`);
|
|
1364
1362
|
// write a foo record with a `containsNumbers` value that has a number within the range
|
|
1365
1363
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1366
1364
|
author: alice,
|
|
@@ -1373,7 +1371,7 @@ export function testRecordsTags() {
|
|
|
1373
1371
|
});
|
|
1374
1372
|
// should pass
|
|
1375
1373
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1376
|
-
expect(validFooRecordReply.status.code).
|
|
1374
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1377
1375
|
}));
|
|
1378
1376
|
it('should reject a record tag that does not contain a value within the `exclusiveMinimum` and `exclusiveMaximum` range ', () => __awaiter(this, void 0, void 0, function* () {
|
|
1379
1377
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1408,7 +1406,7 @@ export function testRecordsTags() {
|
|
|
1408
1406
|
protocolDefinition,
|
|
1409
1407
|
});
|
|
1410
1408
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1411
|
-
expect(configureReply.status.code).
|
|
1409
|
+
expect(configureReply.status.code).toBe(202);
|
|
1412
1410
|
// write a foo record with a `containsNumbers` value that does not have a number within the range
|
|
1413
1411
|
const minContainsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1414
1412
|
author: alice,
|
|
@@ -1421,10 +1419,10 @@ export function testRecordsTags() {
|
|
|
1421
1419
|
});
|
|
1422
1420
|
// should fail
|
|
1423
1421
|
const minContainsReply = yield dwn.processMessage(alice.did, minContainsRecord.message, { dataStream: minContainsRecord.dataStream });
|
|
1424
|
-
expect(minContainsReply.status.code).
|
|
1425
|
-
expect(minContainsReply.status.detail).
|
|
1422
|
+
expect(minContainsReply.status.code).toBe(400);
|
|
1423
|
+
expect(minContainsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1426
1424
|
expect(minContainsReply.status.detail)
|
|
1427
|
-
.
|
|
1425
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/containsNumbers must contain at least 1 valid item(s)`);
|
|
1428
1426
|
// write a foo record with a `containsNumbers` value that has a number within the range
|
|
1429
1427
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1430
1428
|
author: alice,
|
|
@@ -1437,7 +1435,7 @@ export function testRecordsTags() {
|
|
|
1437
1435
|
});
|
|
1438
1436
|
// should pass
|
|
1439
1437
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1440
|
-
expect(validFooRecordReply.status.code).
|
|
1438
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1441
1439
|
}));
|
|
1442
1440
|
it('should reject a record tag that does not contain a value within the `minLength` and `maxLength` range ', () => __awaiter(this, void 0, void 0, function* () {
|
|
1443
1441
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1472,7 +1470,7 @@ export function testRecordsTags() {
|
|
|
1472
1470
|
protocolDefinition,
|
|
1473
1471
|
});
|
|
1474
1472
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1475
|
-
expect(configureReply.status.code).
|
|
1473
|
+
expect(configureReply.status.code).toBe(202);
|
|
1476
1474
|
// write a foo record with a `firstName` value that does not have a string within the range
|
|
1477
1475
|
const minContainsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1478
1476
|
author: alice,
|
|
@@ -1485,10 +1483,10 @@ export function testRecordsTags() {
|
|
|
1485
1483
|
});
|
|
1486
1484
|
// should fail
|
|
1487
1485
|
const minContainsReply = yield dwn.processMessage(alice.did, minContainsRecord.message, { dataStream: minContainsRecord.dataStream });
|
|
1488
|
-
expect(minContainsReply.status.code).
|
|
1489
|
-
expect(minContainsReply.status.detail).
|
|
1490
|
-
|
|
1491
|
-
|
|
1486
|
+
expect(minContainsReply.status.code).toBe(400);
|
|
1487
|
+
expect(minContainsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1488
|
+
const expectedContainsMsg = `${protocolDefinition.protocol}/foo/$tags/nickNames must contain at least 1 valid item(s)`;
|
|
1489
|
+
expect(minContainsReply.status.detail).toContain(expectedContainsMsg);
|
|
1492
1490
|
// write a foo record with a `nickNames` value that has a string within the range
|
|
1493
1491
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1494
1492
|
author: alice,
|
|
@@ -1501,7 +1499,7 @@ export function testRecordsTags() {
|
|
|
1501
1499
|
});
|
|
1502
1500
|
// should pass
|
|
1503
1501
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1504
|
-
expect(validFooRecordReply.status.code).
|
|
1502
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1505
1503
|
}));
|
|
1506
1504
|
});
|
|
1507
1505
|
describe('items', () => {
|
|
@@ -1534,7 +1532,7 @@ export function testRecordsTags() {
|
|
|
1534
1532
|
protocolDefinition,
|
|
1535
1533
|
});
|
|
1536
1534
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1537
|
-
expect(configureReply.status.code).
|
|
1535
|
+
expect(configureReply.status.code).toBe(202);
|
|
1538
1536
|
// write a foo record with a `status` value that is not represented in the `enum`
|
|
1539
1537
|
const invalidEnumRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1540
1538
|
author: alice,
|
|
@@ -1547,10 +1545,10 @@ export function testRecordsTags() {
|
|
|
1547
1545
|
});
|
|
1548
1546
|
// should fail
|
|
1549
1547
|
const invalidEnumReply = yield dwn.processMessage(alice.did, invalidEnumRecord.message, { dataStream: invalidEnumRecord.dataStream });
|
|
1550
|
-
expect(invalidEnumReply.status.code).
|
|
1551
|
-
expect(invalidEnumReply.status.detail).
|
|
1548
|
+
expect(invalidEnumReply.status.code).toBe(400);
|
|
1549
|
+
expect(invalidEnumReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1552
1550
|
expect(invalidEnumReply.status.detail)
|
|
1553
|
-
.
|
|
1551
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/status/1 must be equal to one of the allowed values`);
|
|
1554
1552
|
// write a foo record that now includes only valid `status` values
|
|
1555
1553
|
const validEnumRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1556
1554
|
author: alice,
|
|
@@ -1563,7 +1561,7 @@ export function testRecordsTags() {
|
|
|
1563
1561
|
});
|
|
1564
1562
|
// should pass
|
|
1565
1563
|
const validEnumReply = yield dwn.processMessage(alice.did, validEnumRecord.message, { dataStream: validEnumRecord.dataStream });
|
|
1566
|
-
expect(validEnumReply.status.code).
|
|
1564
|
+
expect(validEnumReply.status.code).toBe(202);
|
|
1567
1565
|
}));
|
|
1568
1566
|
it('should reject a record tag which all items do not have a value within the `minimum` and `maximum` range ', () => __awaiter(this, void 0, void 0, function* () {
|
|
1569
1567
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1595,7 +1593,7 @@ export function testRecordsTags() {
|
|
|
1595
1593
|
protocolDefinition,
|
|
1596
1594
|
});
|
|
1597
1595
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1598
|
-
expect(configureReply.status.code).
|
|
1596
|
+
expect(configureReply.status.code).toBe(202);
|
|
1599
1597
|
// write a foo record with a `numbers` value that is less than the minimum
|
|
1600
1598
|
const minItemssRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1601
1599
|
author: alice,
|
|
@@ -1608,10 +1606,10 @@ export function testRecordsTags() {
|
|
|
1608
1606
|
});
|
|
1609
1607
|
// should fail
|
|
1610
1608
|
const minItemsReply = yield dwn.processMessage(alice.did, minItemssRecord.message, { dataStream: minItemssRecord.dataStream });
|
|
1611
|
-
expect(minItemsReply.status.code).
|
|
1612
|
-
expect(minItemsReply.status.detail).
|
|
1609
|
+
expect(minItemsReply.status.code).toBe(400);
|
|
1610
|
+
expect(minItemsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1613
1611
|
expect(minItemsReply.status.detail)
|
|
1614
|
-
.
|
|
1612
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/numbers/0 must be >= 80`);
|
|
1615
1613
|
// write a foo record with a `numbers` value that is more than the maximum
|
|
1616
1614
|
const maxItemssRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1617
1615
|
author: alice,
|
|
@@ -1624,10 +1622,10 @@ export function testRecordsTags() {
|
|
|
1624
1622
|
});
|
|
1625
1623
|
// should fail
|
|
1626
1624
|
const maxItemsReply = yield dwn.processMessage(alice.did, maxItemssRecord.message, { dataStream: maxItemssRecord.dataStream });
|
|
1627
|
-
expect(maxItemsReply.status.code).
|
|
1628
|
-
expect(maxItemsReply.status.detail).
|
|
1625
|
+
expect(maxItemsReply.status.code).toBe(400);
|
|
1626
|
+
expect(maxItemsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1629
1627
|
expect(maxItemsReply.status.detail)
|
|
1630
|
-
.
|
|
1628
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/numbers/1 must be <= 100`);
|
|
1631
1629
|
// write a foo record with a `numbers` value that are within the range
|
|
1632
1630
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1633
1631
|
author: alice,
|
|
@@ -1640,7 +1638,7 @@ export function testRecordsTags() {
|
|
|
1640
1638
|
});
|
|
1641
1639
|
// should pass
|
|
1642
1640
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1643
|
-
expect(validFooRecordReply.status.code).
|
|
1641
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1644
1642
|
}));
|
|
1645
1643
|
it('should reject a record tag which all items do not have a value within the `exclusiveMinimum` and `exclusiveMaximum` range ', () => __awaiter(this, void 0, void 0, function* () {
|
|
1646
1644
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1672,7 +1670,7 @@ export function testRecordsTags() {
|
|
|
1672
1670
|
protocolDefinition,
|
|
1673
1671
|
});
|
|
1674
1672
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1675
|
-
expect(configureReply.status.code).
|
|
1673
|
+
expect(configureReply.status.code).toBe(202);
|
|
1676
1674
|
// write a foo record with a `numbers` value that is equal to than the exclusive minimum
|
|
1677
1675
|
const minItemsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1678
1676
|
author: alice,
|
|
@@ -1685,10 +1683,10 @@ export function testRecordsTags() {
|
|
|
1685
1683
|
});
|
|
1686
1684
|
// should fail
|
|
1687
1685
|
const minItemsReply = yield dwn.processMessage(alice.did, minItemsRecord.message, { dataStream: minItemsRecord.dataStream });
|
|
1688
|
-
expect(minItemsReply.status.code).
|
|
1689
|
-
expect(minItemsReply.status.detail).
|
|
1686
|
+
expect(minItemsReply.status.code).toBe(400);
|
|
1687
|
+
expect(minItemsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1690
1688
|
expect(minItemsReply.status.detail)
|
|
1691
|
-
.
|
|
1689
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/numbers/0 must be > 80`);
|
|
1692
1690
|
// write a foo record with a `numbers` value that is equal to than the exclusive maximum
|
|
1693
1691
|
const maxContainsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1694
1692
|
author: alice,
|
|
@@ -1701,10 +1699,10 @@ export function testRecordsTags() {
|
|
|
1701
1699
|
});
|
|
1702
1700
|
// should fail
|
|
1703
1701
|
const maxItemsReply = yield dwn.processMessage(alice.did, maxContainsRecord.message, { dataStream: maxContainsRecord.dataStream });
|
|
1704
|
-
expect(maxItemsReply.status.code).
|
|
1705
|
-
expect(maxItemsReply.status.detail).
|
|
1702
|
+
expect(maxItemsReply.status.code).toBe(400);
|
|
1703
|
+
expect(maxItemsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1706
1704
|
expect(maxItemsReply.status.detail)
|
|
1707
|
-
.
|
|
1705
|
+
.toContain(`${protocolDefinition.protocol}/foo/$tags/numbers/1 must be < 100`);
|
|
1708
1706
|
// write a foo record with a `numbers` value that are within the range
|
|
1709
1707
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1710
1708
|
author: alice,
|
|
@@ -1717,7 +1715,7 @@ export function testRecordsTags() {
|
|
|
1717
1715
|
});
|
|
1718
1716
|
// should pass
|
|
1719
1717
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1720
|
-
expect(validFooRecordReply.status.code).
|
|
1718
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1721
1719
|
}));
|
|
1722
1720
|
it('should reject a record tag that does not contain a value within the `minLength` and `maxLength` range ', () => __awaiter(this, void 0, void 0, function* () {
|
|
1723
1721
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -1749,7 +1747,7 @@ export function testRecordsTags() {
|
|
|
1749
1747
|
protocolDefinition,
|
|
1750
1748
|
});
|
|
1751
1749
|
const configureReply = yield dwn.processMessage(alice.did, protocolConfigure.message);
|
|
1752
|
-
expect(configureReply.status.code).
|
|
1750
|
+
expect(configureReply.status.code).toBe(202);
|
|
1753
1751
|
// write a foo record with a `firstName` value that does not have a string within the range
|
|
1754
1752
|
const minItemsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1755
1753
|
author: alice,
|
|
@@ -1762,10 +1760,10 @@ export function testRecordsTags() {
|
|
|
1762
1760
|
});
|
|
1763
1761
|
// should fail
|
|
1764
1762
|
const minItemsReply = yield dwn.processMessage(alice.did, minItemsRecord.message, { dataStream: minItemsRecord.dataStream });
|
|
1765
|
-
expect(minItemsReply.status.code).
|
|
1766
|
-
expect(minItemsReply.status.detail).
|
|
1767
|
-
|
|
1768
|
-
|
|
1763
|
+
expect(minItemsReply.status.code).toBe(400);
|
|
1764
|
+
expect(minItemsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1765
|
+
const expectedMinItemsMsg = `${protocolDefinition.protocol}/foo/$tags/nickNames/1 must NOT have fewer than 2 characters`;
|
|
1766
|
+
expect(minItemsReply.status.detail).toContain(expectedMinItemsMsg);
|
|
1769
1767
|
// write a foo record with a `nickname` value this is too long
|
|
1770
1768
|
const maxItemsRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1771
1769
|
author: alice,
|
|
@@ -1778,10 +1776,10 @@ export function testRecordsTags() {
|
|
|
1778
1776
|
});
|
|
1779
1777
|
// should fail
|
|
1780
1778
|
const maxItemsReply = yield dwn.processMessage(alice.did, maxItemsRecord.message, { dataStream: maxItemsRecord.dataStream });
|
|
1781
|
-
expect(maxItemsReply.status.code).
|
|
1782
|
-
expect(maxItemsReply.status.detail).
|
|
1783
|
-
|
|
1784
|
-
|
|
1779
|
+
expect(maxItemsReply.status.code).toBe(400);
|
|
1780
|
+
expect(maxItemsReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema);
|
|
1781
|
+
const expectedMaxItemsMsg = `${protocolDefinition.protocol}/foo/$tags/nickNames/1 must NOT have more than 10 characters`;
|
|
1782
|
+
expect(maxItemsReply.status.detail).toContain(expectedMaxItemsMsg);
|
|
1785
1783
|
// write a foo record with a `nickNames` value that has a string within the range
|
|
1786
1784
|
const validFooRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
1787
1785
|
author: alice,
|
|
@@ -1794,7 +1792,7 @@ export function testRecordsTags() {
|
|
|
1794
1792
|
});
|
|
1795
1793
|
// should pass
|
|
1796
1794
|
const validFooRecordReply = yield dwn.processMessage(alice.did, validFooRecord.message, { dataStream: validFooRecord.dataStream });
|
|
1797
|
-
expect(validFooRecordReply.status.code).
|
|
1795
|
+
expect(validFooRecordReply.status.code).toBe(202);
|
|
1798
1796
|
}));
|
|
1799
1797
|
});
|
|
1800
1798
|
});
|
|
@@ -1819,7 +1817,7 @@ export function testRecordsTags() {
|
|
|
1819
1817
|
}
|
|
1820
1818
|
});
|
|
1821
1819
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
1822
|
-
expect(tagsRecord1Reply.status.code).
|
|
1820
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
1823
1821
|
// verify the record was written
|
|
1824
1822
|
const tagsRecord1Read = yield RecordsRead.create({
|
|
1825
1823
|
filter: {
|
|
@@ -1828,10 +1826,10 @@ export function testRecordsTags() {
|
|
|
1828
1826
|
signer: Jws.createSigner(alice)
|
|
1829
1827
|
});
|
|
1830
1828
|
const tagsRecord1ReadReply = yield dwn.processMessage(alice.did, tagsRecord1Read.message);
|
|
1831
|
-
expect(tagsRecord1ReadReply.status.code).
|
|
1832
|
-
expect(tagsRecord1ReadReply.entry.recordsWrite).
|
|
1829
|
+
expect(tagsRecord1ReadReply.status.code).toBe(200);
|
|
1830
|
+
expect(tagsRecord1ReadReply.entry.recordsWrite).toBeDefined();
|
|
1833
1831
|
expect(tagsRecord1ReadReply.entry.recordsWrite.descriptor.tags)
|
|
1834
|
-
.
|
|
1832
|
+
.toEqual({ stringTag, numberTag, booleanTag, stringArrayTag, numberArrayTag });
|
|
1835
1833
|
}));
|
|
1836
1834
|
it('should overwrite tags when updating a Record', () => __awaiter(this, void 0, void 0, function* () {
|
|
1837
1835
|
var _a, _b;
|
|
@@ -1850,7 +1848,7 @@ export function testRecordsTags() {
|
|
|
1850
1848
|
});
|
|
1851
1849
|
// write the record
|
|
1852
1850
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
1853
|
-
expect(tagsRecord1Reply.status.code).
|
|
1851
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
1854
1852
|
// verify the record was written
|
|
1855
1853
|
const tagsRecord1Read = yield RecordsRead.create({
|
|
1856
1854
|
filter: {
|
|
@@ -1859,9 +1857,9 @@ export function testRecordsTags() {
|
|
|
1859
1857
|
signer: Jws.createSigner(alice)
|
|
1860
1858
|
});
|
|
1861
1859
|
const tagsRecord1ReadReply = yield dwn.processMessage(alice.did, tagsRecord1Read.message);
|
|
1862
|
-
expect(tagsRecord1ReadReply.status.code).
|
|
1863
|
-
expect(tagsRecord1ReadReply.entry.recordsWrite).
|
|
1864
|
-
expect(tagsRecord1ReadReply.entry.recordsWrite.descriptor.tags).
|
|
1860
|
+
expect(tagsRecord1ReadReply.status.code).toBe(200);
|
|
1861
|
+
expect(tagsRecord1ReadReply.entry.recordsWrite).toBeDefined();
|
|
1862
|
+
expect(tagsRecord1ReadReply.entry.recordsWrite.descriptor.tags).toEqual({
|
|
1865
1863
|
stringTag: 'string-value',
|
|
1866
1864
|
numberTag: 54566975,
|
|
1867
1865
|
booleanTag: false,
|
|
@@ -1878,9 +1876,9 @@ export function testRecordsTags() {
|
|
|
1878
1876
|
}
|
|
1879
1877
|
});
|
|
1880
1878
|
const tagsQueryMatchReply = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
1881
|
-
expect(tagsQueryMatchReply.status.code).
|
|
1882
|
-
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
1883
|
-
expect(tagsQueryMatchReply.entries[0].recordId).
|
|
1879
|
+
expect(tagsQueryMatchReply.status.code).toBe(200);
|
|
1880
|
+
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
1881
|
+
expect(tagsQueryMatchReply.entries[0].recordId).toBe(tagsRecord1.message.recordId);
|
|
1884
1882
|
// update the record with new tags
|
|
1885
1883
|
const updatedRecord = yield TestDataGenerator.generateFromRecordsWrite({
|
|
1886
1884
|
author: alice,
|
|
@@ -1888,15 +1886,15 @@ export function testRecordsTags() {
|
|
|
1888
1886
|
tags: { newTag: 'new-value' }
|
|
1889
1887
|
});
|
|
1890
1888
|
const updatedRecordReply = yield dwn.processMessage(alice.did, updatedRecord.message, { dataStream: updatedRecord.dataStream });
|
|
1891
|
-
expect(updatedRecordReply.status.code).
|
|
1889
|
+
expect(updatedRecordReply.status.code).toBe(202, updatedRecordReply.status.detail);
|
|
1892
1890
|
const updatedRecordReadReply = yield dwn.processMessage(alice.did, tagsRecord1Read.message);
|
|
1893
|
-
expect(updatedRecordReadReply.status.code).
|
|
1894
|
-
expect(updatedRecordReadReply.entry.recordsWrite).
|
|
1895
|
-
expect(updatedRecordReadReply.entry.recordsWrite.descriptor.tags).
|
|
1891
|
+
expect(updatedRecordReadReply.status.code).toBe(200);
|
|
1892
|
+
expect(updatedRecordReadReply.entry.recordsWrite).toBeDefined();
|
|
1893
|
+
expect(updatedRecordReadReply.entry.recordsWrite.descriptor.tags).toEqual({ newTag: 'new-value' });
|
|
1896
1894
|
// Sanity: Query for the old tag value should return no results
|
|
1897
1895
|
const tagsQueryMatchReply2 = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
1898
|
-
expect(tagsQueryMatchReply2.status.code).
|
|
1899
|
-
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
1896
|
+
expect(tagsQueryMatchReply2.status.code).toBe(200);
|
|
1897
|
+
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
1900
1898
|
}));
|
|
1901
1899
|
it('should not index tags when the record is not `latestBaseState`', () => __awaiter(this, void 0, void 0, function* () {
|
|
1902
1900
|
const buildTagIndexSpy = sinon.spy(Records, 'buildTagIndexes');
|
|
@@ -1917,11 +1915,11 @@ export function testRecordsTags() {
|
|
|
1917
1915
|
});
|
|
1918
1916
|
// write the record
|
|
1919
1917
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
1920
|
-
expect(tagsRecord1Reply.status.code).
|
|
1918
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
1921
1919
|
// verify that construct Indexes was called
|
|
1922
|
-
expect(constructIndexesSpy.callCount).
|
|
1920
|
+
expect(constructIndexesSpy.callCount).toBe(1);
|
|
1923
1921
|
// verify that buildTagIndexes was called
|
|
1924
|
-
expect(buildTagIndexSpy.callCount).
|
|
1922
|
+
expect(buildTagIndexSpy.callCount).toBe(1);
|
|
1925
1923
|
// reset counters
|
|
1926
1924
|
constructIndexesSpy.resetHistory();
|
|
1927
1925
|
buildTagIndexSpy.resetHistory();
|
|
@@ -1931,11 +1929,11 @@ export function testRecordsTags() {
|
|
|
1931
1929
|
existingWrite: tagsRecord1.recordsWrite,
|
|
1932
1930
|
});
|
|
1933
1931
|
const updatedRecordReply = yield dwn.processMessage(alice.did, updatedRecord.message, { dataStream: updatedRecord.dataStream });
|
|
1934
|
-
expect(updatedRecordReply.status.code).
|
|
1932
|
+
expect(updatedRecordReply.status.code).toBe(202);
|
|
1935
1933
|
// construct Indexes should be called once for the `initialWrite` and once for the updated write
|
|
1936
|
-
expect(constructIndexesSpy.callCount).
|
|
1934
|
+
expect(constructIndexesSpy.callCount).toBe(2);
|
|
1937
1935
|
// verify that buildTagIndexes was not called at all
|
|
1938
|
-
expect(buildTagIndexSpy.callCount).
|
|
1936
|
+
expect(buildTagIndexSpy.callCount).toBe(0);
|
|
1939
1937
|
}));
|
|
1940
1938
|
});
|
|
1941
1939
|
describe('RecordsQuery filter for tags', () => {
|
|
@@ -1952,7 +1950,7 @@ export function testRecordsTags() {
|
|
|
1952
1950
|
}
|
|
1953
1951
|
});
|
|
1954
1952
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
1955
|
-
expect(tagsRecord1Reply.status.code).
|
|
1953
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
1956
1954
|
const tagsQueryMatch = yield TestDataGenerator.generateRecordsQuery({
|
|
1957
1955
|
author: alice,
|
|
1958
1956
|
filter: {
|
|
@@ -1962,9 +1960,9 @@ export function testRecordsTags() {
|
|
|
1962
1960
|
}
|
|
1963
1961
|
});
|
|
1964
1962
|
const tagsQueryMatchReply = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
1965
|
-
expect(tagsQueryMatchReply.status.code).
|
|
1966
|
-
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
1967
|
-
expect(tagsQueryMatchReply.entries[0].recordId).
|
|
1963
|
+
expect(tagsQueryMatchReply.status.code).toBe(200);
|
|
1964
|
+
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
1965
|
+
expect(tagsQueryMatchReply.entries[0].recordId).toBe(tagsRecord1.message.recordId);
|
|
1968
1966
|
// negative result same tag different value
|
|
1969
1967
|
let tagsQueryNegative = yield TestDataGenerator.generateRecordsQuery({
|
|
1970
1968
|
author: alice,
|
|
@@ -1975,8 +1973,8 @@ export function testRecordsTags() {
|
|
|
1975
1973
|
}
|
|
1976
1974
|
});
|
|
1977
1975
|
let tagsQueryNegativeReply = yield dwn.processMessage(alice.did, tagsQueryNegative.message);
|
|
1978
|
-
expect(tagsQueryNegativeReply.status.code).
|
|
1979
|
-
expect((_b = tagsQueryNegativeReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
1976
|
+
expect(tagsQueryNegativeReply.status.code).toBe(200);
|
|
1977
|
+
expect((_b = tagsQueryNegativeReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
1980
1978
|
// negative result different tag same value
|
|
1981
1979
|
tagsQueryNegative = yield TestDataGenerator.generateRecordsQuery({
|
|
1982
1980
|
author: alice,
|
|
@@ -1987,8 +1985,8 @@ export function testRecordsTags() {
|
|
|
1987
1985
|
}
|
|
1988
1986
|
});
|
|
1989
1987
|
tagsQueryNegativeReply = yield dwn.processMessage(alice.did, tagsQueryNegative.message);
|
|
1990
|
-
expect(tagsQueryNegativeReply.status.code).
|
|
1991
|
-
expect((_c = tagsQueryNegativeReply.entries) === null || _c === void 0 ? void 0 : _c.length).
|
|
1988
|
+
expect(tagsQueryNegativeReply.status.code).toBe(200);
|
|
1989
|
+
expect((_c = tagsQueryNegativeReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(0);
|
|
1992
1990
|
}));
|
|
1993
1991
|
it('should be able to filter by number match', () => __awaiter(this, void 0, void 0, function* () {
|
|
1994
1992
|
var _a, _b, _c;
|
|
@@ -2004,7 +2002,7 @@ export function testRecordsTags() {
|
|
|
2004
2002
|
}
|
|
2005
2003
|
});
|
|
2006
2004
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
2007
|
-
expect(tagsRecord1Reply.status.code).
|
|
2005
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
2008
2006
|
// do an exact match for the tag value
|
|
2009
2007
|
const tagsQueryMatch = yield TestDataGenerator.generateRecordsQuery({
|
|
2010
2008
|
author: alice,
|
|
@@ -2015,9 +2013,9 @@ export function testRecordsTags() {
|
|
|
2015
2013
|
}
|
|
2016
2014
|
});
|
|
2017
2015
|
const tagsQueryMatchReply = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2018
|
-
expect(tagsQueryMatchReply.status.code).
|
|
2019
|
-
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2020
|
-
expect(tagsQueryMatchReply.entries[0].recordId).
|
|
2016
|
+
expect(tagsQueryMatchReply.status.code).toBe(200);
|
|
2017
|
+
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
2018
|
+
expect(tagsQueryMatchReply.entries[0].recordId).toBe(tagsRecord1.message.recordId);
|
|
2021
2019
|
// negative result same tag different value
|
|
2022
2020
|
let tagsQueryNegative = yield TestDataGenerator.generateRecordsQuery({
|
|
2023
2021
|
author: alice,
|
|
@@ -2028,8 +2026,8 @@ export function testRecordsTags() {
|
|
|
2028
2026
|
}
|
|
2029
2027
|
});
|
|
2030
2028
|
let tagsQueryNegativeReply = yield dwn.processMessage(alice.did, tagsQueryNegative.message);
|
|
2031
|
-
expect(tagsQueryNegativeReply.status.code).
|
|
2032
|
-
expect((_b = tagsQueryNegativeReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2029
|
+
expect(tagsQueryNegativeReply.status.code).toBe(200);
|
|
2030
|
+
expect((_b = tagsQueryNegativeReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
2033
2031
|
// negative result different tag same value
|
|
2034
2032
|
tagsQueryNegative = yield TestDataGenerator.generateRecordsQuery({
|
|
2035
2033
|
author: alice,
|
|
@@ -2040,8 +2038,8 @@ export function testRecordsTags() {
|
|
|
2040
2038
|
}
|
|
2041
2039
|
});
|
|
2042
2040
|
tagsQueryNegativeReply = yield dwn.processMessage(alice.did, tagsQueryNegative.message);
|
|
2043
|
-
expect(tagsQueryNegativeReply.status.code).
|
|
2044
|
-
expect((_c = tagsQueryNegativeReply.entries) === null || _c === void 0 ? void 0 : _c.length).
|
|
2041
|
+
expect(tagsQueryNegativeReply.status.code).toBe(200);
|
|
2042
|
+
expect((_c = tagsQueryNegativeReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(0);
|
|
2045
2043
|
}));
|
|
2046
2044
|
it('should be able to filter by boolean match', () => __awaiter(this, void 0, void 0, function* () {
|
|
2047
2045
|
// 1. Write a record with a boolean tag `booleanTag` set to true
|
|
@@ -2061,7 +2059,7 @@ export function testRecordsTags() {
|
|
|
2061
2059
|
}
|
|
2062
2060
|
});
|
|
2063
2061
|
const tagsRecordTrueReply = yield dwn.processMessage(alice.did, tagsRecordTrue.message, { dataStream: tagsRecordTrue.dataStream });
|
|
2064
|
-
expect(tagsRecordTrueReply.status.code).
|
|
2062
|
+
expect(tagsRecordTrueReply.status.code).toBe(202);
|
|
2065
2063
|
// write a record with a false boolean value tag
|
|
2066
2064
|
const tagsRecordFalse = yield TestDataGenerator.generateRecordsWrite({
|
|
2067
2065
|
author: alice,
|
|
@@ -2072,7 +2070,7 @@ export function testRecordsTags() {
|
|
|
2072
2070
|
}
|
|
2073
2071
|
});
|
|
2074
2072
|
const tagsRecordFalseReply = yield dwn.processMessage(alice.did, tagsRecordFalse.message, { dataStream: tagsRecordFalse.dataStream });
|
|
2075
|
-
expect(tagsRecordFalseReply.status.code).
|
|
2073
|
+
expect(tagsRecordFalseReply.status.code).toBe(202);
|
|
2076
2074
|
// query for records with a `booleanTag` set to true, should return the record with the true tag
|
|
2077
2075
|
const tagsQueryMatchTrue = yield TestDataGenerator.generateRecordsQuery({
|
|
2078
2076
|
author: alice,
|
|
@@ -2083,9 +2081,9 @@ export function testRecordsTags() {
|
|
|
2083
2081
|
}
|
|
2084
2082
|
});
|
|
2085
2083
|
const tagsQueryMatchTrueReply = yield dwn.processMessage(alice.did, tagsQueryMatchTrue.message);
|
|
2086
|
-
expect(tagsQueryMatchTrueReply.status.code).
|
|
2087
|
-
expect((_a = tagsQueryMatchTrueReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2088
|
-
expect(tagsQueryMatchTrueReply.entries[0].recordId).
|
|
2084
|
+
expect(tagsQueryMatchTrueReply.status.code).toBe(200);
|
|
2085
|
+
expect((_a = tagsQueryMatchTrueReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
2086
|
+
expect(tagsQueryMatchTrueReply.entries[0].recordId).toBe(tagsRecordTrue.message.recordId);
|
|
2089
2087
|
// query for records with a `booleanTag` set to false, should return the record with the false tag
|
|
2090
2088
|
const tagsQueryMatchFalse = yield TestDataGenerator.generateRecordsQuery({
|
|
2091
2089
|
author: alice,
|
|
@@ -2096,9 +2094,9 @@ export function testRecordsTags() {
|
|
|
2096
2094
|
}
|
|
2097
2095
|
});
|
|
2098
2096
|
const tagsQueryMatchFalseReply = yield dwn.processMessage(alice.did, tagsQueryMatchFalse.message);
|
|
2099
|
-
expect(tagsQueryMatchFalseReply.status.code).
|
|
2100
|
-
expect((_b = tagsQueryMatchFalseReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2101
|
-
expect(tagsQueryMatchFalseReply.entries[0].recordId).
|
|
2097
|
+
expect(tagsQueryMatchFalseReply.status.code).toBe(200);
|
|
2098
|
+
expect((_b = tagsQueryMatchFalseReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(1);
|
|
2099
|
+
expect(tagsQueryMatchFalseReply.entries[0].recordId).toBe(tagsRecordFalse.message.recordId);
|
|
2102
2100
|
// negative result for a non existent boolean tag.
|
|
2103
2101
|
const tagsQueryNegative = yield TestDataGenerator.generateRecordsQuery({
|
|
2104
2102
|
author: alice,
|
|
@@ -2109,8 +2107,8 @@ export function testRecordsTags() {
|
|
|
2109
2107
|
}
|
|
2110
2108
|
});
|
|
2111
2109
|
const tagsQueryNegativeReply = yield dwn.processMessage(alice.did, tagsQueryNegative.message);
|
|
2112
|
-
expect(tagsQueryNegativeReply.status.code).
|
|
2113
|
-
expect((_c = tagsQueryNegativeReply.entries) === null || _c === void 0 ? void 0 : _c.length).
|
|
2110
|
+
expect(tagsQueryNegativeReply.status.code).toBe(200);
|
|
2111
|
+
expect((_c = tagsQueryNegativeReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(0);
|
|
2114
2112
|
}));
|
|
2115
2113
|
it('should be able to range filter by string value', () => __awaiter(this, void 0, void 0, function* () {
|
|
2116
2114
|
var _a, _b, _c, _d;
|
|
@@ -2149,13 +2147,13 @@ export function testRecordsTags() {
|
|
|
2149
2147
|
}
|
|
2150
2148
|
});
|
|
2151
2149
|
const aliceReply = yield dwn.processMessage(alice.did, aliceRecord.message, { dataStream: aliceRecord.dataStream });
|
|
2152
|
-
expect(aliceReply.status.code).
|
|
2150
|
+
expect(aliceReply.status.code).toBe(202);
|
|
2153
2151
|
const bobReply = yield dwn.processMessage(alice.did, bobRecord.message, { dataStream: bobRecord.dataStream });
|
|
2154
|
-
expect(bobReply.status.code).
|
|
2152
|
+
expect(bobReply.status.code).toBe(202);
|
|
2155
2153
|
const carolReply = yield dwn.processMessage(alice.did, carolRecord.message, { dataStream: carolRecord.dataStream });
|
|
2156
|
-
expect(carolReply.status.code).
|
|
2154
|
+
expect(carolReply.status.code).toBe(202);
|
|
2157
2155
|
const danielReply = yield dwn.processMessage(alice.did, danielRecord.message, { dataStream: danielRecord.dataStream });
|
|
2158
|
-
expect(danielReply.status.code).
|
|
2156
|
+
expect(danielReply.status.code).toBe(202);
|
|
2159
2157
|
// sanity query for all
|
|
2160
2158
|
const queryForAll = yield TestDataGenerator.generateRecordsQuery({
|
|
2161
2159
|
author: alice,
|
|
@@ -2164,8 +2162,8 @@ export function testRecordsTags() {
|
|
|
2164
2162
|
}
|
|
2165
2163
|
});
|
|
2166
2164
|
const queryForAllReply = yield dwn.processMessage(alice.did, queryForAll.message);
|
|
2167
|
-
expect(queryForAllReply.status.code).
|
|
2168
|
-
expect((_a = queryForAllReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2165
|
+
expect(queryForAllReply.status.code).toBe(200);
|
|
2166
|
+
expect((_a = queryForAllReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(4); // all 4 records
|
|
2169
2167
|
// query for first names that begin with 'a' and 'b'
|
|
2170
2168
|
const queryForAtoB = yield TestDataGenerator.generateRecordsQuery({
|
|
2171
2169
|
author: alice,
|
|
@@ -2177,10 +2175,10 @@ export function testRecordsTags() {
|
|
|
2177
2175
|
}
|
|
2178
2176
|
});
|
|
2179
2177
|
const queryForAtoBReply = yield dwn.processMessage(alice.did, queryForAtoB.message);
|
|
2180
|
-
expect(queryForAtoBReply.status.code).
|
|
2181
|
-
expect((_b = queryForAtoBReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2178
|
+
expect(queryForAtoBReply.status.code).toBe(200);
|
|
2179
|
+
expect((_b = queryForAtoBReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(2);
|
|
2182
2180
|
const atobRecordIds = queryForAtoBReply.entries.map(entry => entry.recordId);
|
|
2183
|
-
expect(atobRecordIds).
|
|
2181
|
+
expect(atobRecordIds).toEqual(expect.arrayContaining([aliceRecord.message.recordId, bobRecord.message.recordId]));
|
|
2184
2182
|
// query for first names greater than 'bob'(exclusive of), and less than but inclusive of 'daniel'
|
|
2185
2183
|
const queryForBtoD = yield TestDataGenerator.generateRecordsQuery({
|
|
2186
2184
|
author: alice,
|
|
@@ -2192,10 +2190,10 @@ export function testRecordsTags() {
|
|
|
2192
2190
|
}
|
|
2193
2191
|
});
|
|
2194
2192
|
const queryForBtoDReply = yield dwn.processMessage(alice.did, queryForBtoD.message);
|
|
2195
|
-
expect(queryForBtoDReply.status.code).
|
|
2196
|
-
expect((_c = queryForBtoDReply.entries) === null || _c === void 0 ? void 0 : _c.length).
|
|
2193
|
+
expect(queryForBtoDReply.status.code).toBe(200);
|
|
2194
|
+
expect((_c = queryForBtoDReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(2);
|
|
2197
2195
|
const btodRecordIds = queryForBtoDReply.entries.map(entry => entry.recordId);
|
|
2198
|
-
expect(btodRecordIds).
|
|
2196
|
+
expect(btodRecordIds).toEqual(expect.arrayContaining([carolRecord.message.recordId, danielRecord.message.recordId]));
|
|
2199
2197
|
// query for first names that begin with 'carol' onward (inclusive).
|
|
2200
2198
|
const queryForCarolOnward = yield TestDataGenerator.generateRecordsQuery({
|
|
2201
2199
|
author: alice,
|
|
@@ -2207,10 +2205,10 @@ export function testRecordsTags() {
|
|
|
2207
2205
|
}
|
|
2208
2206
|
});
|
|
2209
2207
|
const queryForCarolOnwardReply = yield dwn.processMessage(alice.did, queryForCarolOnward.message);
|
|
2210
|
-
expect(queryForCarolOnwardReply.status.code).
|
|
2211
|
-
expect((_d = queryForCarolOnwardReply.entries) === null || _d === void 0 ? void 0 : _d.length).
|
|
2208
|
+
expect(queryForCarolOnwardReply.status.code).toBe(200);
|
|
2209
|
+
expect((_d = queryForCarolOnwardReply.entries) === null || _d === void 0 ? void 0 : _d.length).toBe(2);
|
|
2212
2210
|
const onwardResults = queryForCarolOnwardReply.entries.map(entry => entry.recordId);
|
|
2213
|
-
expect(onwardResults).
|
|
2211
|
+
expect(onwardResults).toEqual(expect.arrayContaining([carolRecord.message.recordId, danielRecord.message.recordId]));
|
|
2214
2212
|
}));
|
|
2215
2213
|
it('should be able to filter by string prefix', () => __awaiter(this, void 0, void 0, function* () {
|
|
2216
2214
|
var _a, _b;
|
|
@@ -2233,9 +2231,9 @@ export function testRecordsTags() {
|
|
|
2233
2231
|
}
|
|
2234
2232
|
});
|
|
2235
2233
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
2236
|
-
expect(tagsRecord1Reply.status.code).
|
|
2234
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
2237
2235
|
const tagsRecord2Reply = yield dwn.processMessage(alice.did, tagsRecord2.message, { dataStream: tagsRecord2.dataStream });
|
|
2238
|
-
expect(tagsRecord2Reply.status.code).
|
|
2236
|
+
expect(tagsRecord2Reply.status.code).toBe(202);
|
|
2239
2237
|
// control record that has a different prefix
|
|
2240
2238
|
const tagsRecord3 = yield TestDataGenerator.generateRecordsWrite({
|
|
2241
2239
|
author: alice,
|
|
@@ -2246,7 +2244,7 @@ export function testRecordsTags() {
|
|
|
2246
2244
|
}
|
|
2247
2245
|
});
|
|
2248
2246
|
const tagsRecord3Reply = yield dwn.processMessage(alice.did, tagsRecord3.message, { dataStream: tagsRecord3.dataStream });
|
|
2249
|
-
expect(tagsRecord3Reply.status.code).
|
|
2247
|
+
expect(tagsRecord3Reply.status.code).toBe(202);
|
|
2250
2248
|
// a prefix search will return only the records matching the prefix
|
|
2251
2249
|
const tagsQueryMatch = yield TestDataGenerator.generateRecordsQuery({
|
|
2252
2250
|
author: alice,
|
|
@@ -2257,10 +2255,10 @@ export function testRecordsTags() {
|
|
|
2257
2255
|
}
|
|
2258
2256
|
});
|
|
2259
2257
|
const tagsQueryMatchReply = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2260
|
-
expect(tagsQueryMatchReply.status.code).
|
|
2261
|
-
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2258
|
+
expect(tagsQueryMatchReply.status.code).toBe(200);
|
|
2259
|
+
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(2);
|
|
2262
2260
|
const matchedRecords = tagsQueryMatchReply.entries.map(entry => entry.recordId);
|
|
2263
|
-
expect(matchedRecords).
|
|
2261
|
+
expect(matchedRecords).toEqual(expect.arrayContaining([tagsRecord1.message.recordId, tagsRecord2.message.recordId]));
|
|
2264
2262
|
// sanity/control: a regular range query will return all
|
|
2265
2263
|
// since `zaz-string` comes lexicographically after `string-` it will appear in the result set
|
|
2266
2264
|
const tagsQueryRange = yield TestDataGenerator.generateRecordsQuery({
|
|
@@ -2272,8 +2270,8 @@ export function testRecordsTags() {
|
|
|
2272
2270
|
}
|
|
2273
2271
|
});
|
|
2274
2272
|
const tagsQueryRangeReply = yield dwn.processMessage(alice.did, tagsQueryRange.message);
|
|
2275
|
-
expect(tagsQueryRangeReply.status.code).
|
|
2276
|
-
expect((_b = tagsQueryRangeReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2273
|
+
expect(tagsQueryRangeReply.status.code).toBe(200);
|
|
2274
|
+
expect((_b = tagsQueryRangeReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(3); // returned all 3 records
|
|
2277
2275
|
}));
|
|
2278
2276
|
it('should be able to range filter by number value', () => __awaiter(this, void 0, void 0, function* () {
|
|
2279
2277
|
var _a, _b, _c, _d, _e;
|
|
@@ -2316,13 +2314,13 @@ export function testRecordsTags() {
|
|
|
2316
2314
|
}
|
|
2317
2315
|
});
|
|
2318
2316
|
const aliceReply = yield dwn.processMessage(alice.did, aliceRecord.message, { dataStream: aliceRecord.dataStream });
|
|
2319
|
-
expect(aliceReply.status.code).
|
|
2317
|
+
expect(aliceReply.status.code).toBe(202);
|
|
2320
2318
|
const bobReply = yield dwn.processMessage(alice.did, bobRecord.message, { dataStream: bobRecord.dataStream });
|
|
2321
|
-
expect(bobReply.status.code).
|
|
2319
|
+
expect(bobReply.status.code).toBe(202);
|
|
2322
2320
|
const carolReply = yield dwn.processMessage(alice.did, carolRecord.message, { dataStream: carolRecord.dataStream });
|
|
2323
|
-
expect(carolReply.status.code).
|
|
2321
|
+
expect(carolReply.status.code).toBe(202);
|
|
2324
2322
|
const danielReply = yield dwn.processMessage(alice.did, danielRecord.message, { dataStream: danielRecord.dataStream });
|
|
2325
|
-
expect(danielReply.status.code).
|
|
2323
|
+
expect(danielReply.status.code).toBe(202);
|
|
2326
2324
|
// sanity query for all
|
|
2327
2325
|
const queryForAll = yield TestDataGenerator.generateRecordsQuery({
|
|
2328
2326
|
author: alice,
|
|
@@ -2331,8 +2329,8 @@ export function testRecordsTags() {
|
|
|
2331
2329
|
}
|
|
2332
2330
|
});
|
|
2333
2331
|
const queryForAllReply = yield dwn.processMessage(alice.did, queryForAll.message);
|
|
2334
|
-
expect(queryForAllReply.status.code).
|
|
2335
|
-
expect((_a = queryForAllReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2332
|
+
expect(queryForAllReply.status.code).toBe(200);
|
|
2333
|
+
expect((_a = queryForAllReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(4); // all 4 records
|
|
2336
2334
|
// query for all records that received higher than(not including) an 80
|
|
2337
2335
|
// only one record should match
|
|
2338
2336
|
const queryForHighGrade = yield TestDataGenerator.generateRecordsQuery({
|
|
@@ -2345,9 +2343,9 @@ export function testRecordsTags() {
|
|
|
2345
2343
|
}
|
|
2346
2344
|
});
|
|
2347
2345
|
const queryForHighReply = yield dwn.processMessage(alice.did, queryForHighGrade.message);
|
|
2348
|
-
expect(queryForHighReply.status.code).
|
|
2349
|
-
expect((_b = queryForHighReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2350
|
-
expect(queryForHighReply.entries[0].recordId).
|
|
2346
|
+
expect(queryForHighReply.status.code).toBe(200);
|
|
2347
|
+
expect((_b = queryForHighReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(1);
|
|
2348
|
+
expect(queryForHighReply.entries[0].recordId).toBe(danielRecord.message.recordId);
|
|
2351
2349
|
// query for all records that received higher (and including) a 75
|
|
2352
2350
|
// three records should match
|
|
2353
2351
|
const queryForPassingGrade = yield TestDataGenerator.generateRecordsQuery({
|
|
@@ -2360,10 +2358,12 @@ export function testRecordsTags() {
|
|
|
2360
2358
|
}
|
|
2361
2359
|
});
|
|
2362
2360
|
const queryForPassingGradeReply = yield dwn.processMessage(alice.did, queryForPassingGrade.message);
|
|
2363
|
-
expect(queryForPassingGradeReply.status.code).
|
|
2364
|
-
expect((_c = queryForPassingGradeReply.entries) === null || _c === void 0 ? void 0 : _c.length).
|
|
2361
|
+
expect(queryForPassingGradeReply.status.code).toBe(200);
|
|
2362
|
+
expect((_c = queryForPassingGradeReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(3);
|
|
2365
2363
|
const passingRecords = queryForPassingGradeReply.entries.map(entry => entry.recordId);
|
|
2366
|
-
expect(passingRecords).
|
|
2364
|
+
expect(passingRecords).toEqual(expect.arrayContaining([
|
|
2365
|
+
danielRecord.message.recordId, bobRecord.message.recordId, aliceRecord.message.recordId
|
|
2366
|
+
]));
|
|
2367
2367
|
// query for poorly performing grades (65 and below, inclusive)
|
|
2368
2368
|
const queryForPoorGrades = yield TestDataGenerator.generateRecordsQuery({
|
|
2369
2369
|
author: alice,
|
|
@@ -2375,9 +2375,9 @@ export function testRecordsTags() {
|
|
|
2375
2375
|
}
|
|
2376
2376
|
});
|
|
2377
2377
|
const queryForPoorGradesReply = yield dwn.processMessage(alice.did, queryForPoorGrades.message);
|
|
2378
|
-
expect(queryForPoorGradesReply.status.code).
|
|
2379
|
-
expect((_d = queryForPoorGradesReply.entries) === null || _d === void 0 ? void 0 : _d.length).
|
|
2380
|
-
expect(queryForPoorGradesReply.entries[0].recordId).
|
|
2378
|
+
expect(queryForPoorGradesReply.status.code).toBe(200);
|
|
2379
|
+
expect((_d = queryForPoorGradesReply.entries) === null || _d === void 0 ? void 0 : _d.length).toBe(1);
|
|
2380
|
+
expect(queryForPoorGradesReply.entries[0].recordId).toBe(carolRecord.message.recordId);
|
|
2381
2381
|
// query for passing grades that were not perfect scores
|
|
2382
2382
|
const queryForRange = yield TestDataGenerator.generateRecordsQuery({
|
|
2383
2383
|
author: alice,
|
|
@@ -2389,10 +2389,10 @@ export function testRecordsTags() {
|
|
|
2389
2389
|
}
|
|
2390
2390
|
});
|
|
2391
2391
|
const queryForRangeReply = yield dwn.processMessage(alice.did, queryForRange.message);
|
|
2392
|
-
expect(queryForRangeReply.status.code).
|
|
2393
|
-
expect((_e = queryForRangeReply.entries) === null || _e === void 0 ? void 0 : _e.length).
|
|
2392
|
+
expect(queryForRangeReply.status.code).toBe(200);
|
|
2393
|
+
expect((_e = queryForRangeReply.entries) === null || _e === void 0 ? void 0 : _e.length).toBe(2);
|
|
2394
2394
|
const rangeRecords = queryForRangeReply.entries.map(entry => entry.recordId);
|
|
2395
|
-
expect(rangeRecords).
|
|
2395
|
+
expect(rangeRecords).toEqual(expect.arrayContaining([bobRecord.message.recordId, aliceRecord.message.recordId]));
|
|
2396
2396
|
}));
|
|
2397
2397
|
it('should return results based on the latest tag values', () => __awaiter(this, void 0, void 0, function* () {
|
|
2398
2398
|
var _a, _b;
|
|
@@ -2406,7 +2406,7 @@ export function testRecordsTags() {
|
|
|
2406
2406
|
}
|
|
2407
2407
|
});
|
|
2408
2408
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
2409
|
-
expect(tagsRecord1Reply.status.code).
|
|
2409
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
2410
2410
|
const tagsQueryMatch = yield TestDataGenerator.generateRecordsQuery({
|
|
2411
2411
|
author: alice,
|
|
2412
2412
|
filter: {
|
|
@@ -2416,9 +2416,9 @@ export function testRecordsTags() {
|
|
|
2416
2416
|
}
|
|
2417
2417
|
});
|
|
2418
2418
|
const tagsQueryMatchReply = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2419
|
-
expect(tagsQueryMatchReply.status.code).
|
|
2420
|
-
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2421
|
-
expect(tagsQueryMatchReply.entries[0].recordId).
|
|
2419
|
+
expect(tagsQueryMatchReply.status.code).toBe(200);
|
|
2420
|
+
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
2421
|
+
expect(tagsQueryMatchReply.entries[0].recordId).toBe(tagsRecord1.message.recordId);
|
|
2422
2422
|
// update the record with new tags
|
|
2423
2423
|
const updatedRecord = yield TestDataGenerator.generateFromRecordsWrite({
|
|
2424
2424
|
author: alice,
|
|
@@ -2426,11 +2426,11 @@ export function testRecordsTags() {
|
|
|
2426
2426
|
tags: { otherTag: 'other-value' } // new tags
|
|
2427
2427
|
});
|
|
2428
2428
|
const updatedRecordReply = yield dwn.processMessage(alice.did, updatedRecord.message, { dataStream: updatedRecord.dataStream });
|
|
2429
|
-
expect(updatedRecordReply.status.code).
|
|
2429
|
+
expect(updatedRecordReply.status.code).toBe(202);
|
|
2430
2430
|
// issuing the same query should return no results
|
|
2431
2431
|
const tagsQueryMatchReply2 = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2432
|
-
expect(tagsQueryMatchReply2.status.code).
|
|
2433
|
-
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2432
|
+
expect(tagsQueryMatchReply2.status.code).toBe(200);
|
|
2433
|
+
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
2434
2434
|
}));
|
|
2435
2435
|
it('should not return results if the record was updated with empty tags', () => __awaiter(this, void 0, void 0, function* () {
|
|
2436
2436
|
var _a, _b;
|
|
@@ -2444,7 +2444,7 @@ export function testRecordsTags() {
|
|
|
2444
2444
|
}
|
|
2445
2445
|
});
|
|
2446
2446
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
2447
|
-
expect(tagsRecord1Reply.status.code).
|
|
2447
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
2448
2448
|
const tagsQueryMatch = yield TestDataGenerator.generateRecordsQuery({
|
|
2449
2449
|
author: alice,
|
|
2450
2450
|
filter: {
|
|
@@ -2454,20 +2454,20 @@ export function testRecordsTags() {
|
|
|
2454
2454
|
}
|
|
2455
2455
|
});
|
|
2456
2456
|
const tagsQueryMatchReply = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2457
|
-
expect(tagsQueryMatchReply.status.code).
|
|
2458
|
-
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2459
|
-
expect(tagsQueryMatchReply.entries[0].recordId).
|
|
2457
|
+
expect(tagsQueryMatchReply.status.code).toBe(200);
|
|
2458
|
+
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
2459
|
+
expect(tagsQueryMatchReply.entries[0].recordId).toBe(tagsRecord1.message.recordId);
|
|
2460
2460
|
// update the record without any tags
|
|
2461
2461
|
const updatedRecord = yield TestDataGenerator.generateFromRecordsWrite({
|
|
2462
2462
|
author: alice,
|
|
2463
2463
|
existingWrite: tagsRecord1.recordsWrite,
|
|
2464
2464
|
});
|
|
2465
2465
|
const updatedRecordReply = yield dwn.processMessage(alice.did, updatedRecord.message, { dataStream: updatedRecord.dataStream });
|
|
2466
|
-
expect(updatedRecordReply.status.code).
|
|
2466
|
+
expect(updatedRecordReply.status.code).toBe(202);
|
|
2467
2467
|
// issuing the same query should return no results
|
|
2468
2468
|
const tagsQueryMatchReply2 = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2469
|
-
expect(tagsQueryMatchReply2.status.code).
|
|
2470
|
-
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2469
|
+
expect(tagsQueryMatchReply2.status.code).toBe(200);
|
|
2470
|
+
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
2471
2471
|
}));
|
|
2472
2472
|
});
|
|
2473
2473
|
describe('RecordsDelete with tags', () => {
|
|
@@ -2484,7 +2484,7 @@ export function testRecordsTags() {
|
|
|
2484
2484
|
}
|
|
2485
2485
|
});
|
|
2486
2486
|
const tagsRecord1Reply = yield dwn.processMessage(alice.did, tagsRecord1.message, { dataStream: tagsRecord1.dataStream });
|
|
2487
|
-
expect(tagsRecord1Reply.status.code).
|
|
2487
|
+
expect(tagsRecord1Reply.status.code).toBe(202);
|
|
2488
2488
|
//sanity: query for the record
|
|
2489
2489
|
const tagsQueryMatch = yield TestDataGenerator.generateRecordsQuery({
|
|
2490
2490
|
author: alice,
|
|
@@ -2495,20 +2495,20 @@ export function testRecordsTags() {
|
|
|
2495
2495
|
}
|
|
2496
2496
|
});
|
|
2497
2497
|
const tagsQueryMatchReply = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2498
|
-
expect(tagsQueryMatchReply.status.code).
|
|
2499
|
-
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
2500
|
-
expect(tagsQueryMatchReply.entries[0].recordId).
|
|
2498
|
+
expect(tagsQueryMatchReply.status.code).toBe(200);
|
|
2499
|
+
expect((_a = tagsQueryMatchReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
2500
|
+
expect(tagsQueryMatchReply.entries[0].recordId).toBe(tagsRecord1.message.recordId);
|
|
2501
2501
|
// delete the record
|
|
2502
2502
|
const recordDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
2503
2503
|
author: alice,
|
|
2504
2504
|
recordId: tagsRecord1.message.recordId,
|
|
2505
2505
|
});
|
|
2506
2506
|
const recordDeleteReply = yield dwn.processMessage(alice.did, recordDelete.message);
|
|
2507
|
-
expect(recordDeleteReply.status.code).
|
|
2507
|
+
expect(recordDeleteReply.status.code).toBe(202);
|
|
2508
2508
|
// issue the the same query should return no results
|
|
2509
2509
|
const tagsQueryMatchReply2 = yield dwn.processMessage(alice.did, tagsQueryMatch.message);
|
|
2510
|
-
expect(tagsQueryMatchReply2.status.code).
|
|
2511
|
-
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
2510
|
+
expect(tagsQueryMatchReply2.status.code).toBe(200);
|
|
2511
|
+
expect((_b = tagsQueryMatchReply2.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
2512
2512
|
}));
|
|
2513
2513
|
});
|
|
2514
2514
|
});
|