@osdk/client 2.5.0-beta.1 → 2.5.0-beta.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/CHANGELOG.md +43 -0
- package/build/browser/Client.js +1 -1
- package/build/browser/Client.js.map +1 -1
- package/build/browser/createClient.js +4 -1
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/fetchMetadata.test.js +11 -0
- package/build/browser/fetchMetadata.test.js.map +1 -1
- package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
- package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
- package/build/browser/intellisense.test.js +14 -4
- package/build/browser/intellisense.test.js.map +1 -1
- package/build/browser/object/Cache.js +1 -1
- package/build/browser/object/Cache.js.map +1 -1
- package/build/browser/object/SimpleCache.js +1 -1
- package/build/browser/object/SimpleCache.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.js +4 -0
- package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +12 -0
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/object/fetchPage.js +30 -4
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/object/geotimeseriesreference.test.js +0 -2
- package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSet.test.js +6 -0
- package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +3 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/observable/LinkPayload.js +2 -0
- package/build/browser/observable/LinkPayload.js.map +1 -0
- package/build/browser/observable/ObjectPayload.js.map +1 -1
- package/build/browser/observable/ObservableClient/ObserveLink.js +17 -0
- package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -0
- package/build/browser/observable/ObservableClient/common.js +2 -0
- package/build/browser/observable/ObservableClient/common.js.map +1 -0
- package/build/browser/observable/ObservableClient.js +20 -0
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/Unsubscribable.js +2 -0
- package/build/browser/observable/Unsubscribable.js.map +1 -0
- package/build/browser/observable/internal/AbstractHelper.js +50 -0
- package/build/browser/observable/internal/AbstractHelper.js.map +1 -0
- package/build/browser/observable/internal/BaseCollectionQuery.js +2 -0
- package/build/browser/observable/internal/BaseCollectionQuery.js.map +1 -0
- package/build/browser/observable/internal/BulkObjectLoader.js +3 -3
- package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/browser/observable/internal/CacheKeys.js +17 -2
- package/build/browser/observable/internal/CacheKeys.js.map +1 -1
- package/build/browser/observable/internal/Changes.js +6 -0
- package/build/browser/observable/internal/Changes.js.map +1 -1
- package/build/browser/observable/internal/KnownCacheKey.js +2 -0
- package/build/browser/observable/internal/KnownCacheKey.js.map +1 -0
- package/build/browser/observable/internal/Layer.js.map +1 -1
- package/build/browser/observable/internal/ListCacheKey.js +2 -0
- package/build/browser/observable/internal/ListCacheKey.js.map +1 -0
- package/build/browser/observable/internal/ListQuery.js +399 -161
- package/build/browser/observable/internal/ListQuery.js.map +1 -1
- package/build/browser/observable/internal/ObjectQuery.js +27 -2
- package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
- package/build/browser/observable/internal/ObservableClientImpl.js +42 -2
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/OptimisticJob.js +12 -3
- package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
- package/build/browser/observable/internal/Query.js +17 -3
- package/build/browser/observable/internal/Query.js.map +1 -1
- package/build/browser/observable/internal/QuerySubscription.js +41 -0
- package/build/browser/observable/internal/QuerySubscription.js.map +1 -0
- package/build/browser/observable/internal/Store.invalidation.test.js +481 -0
- package/build/browser/observable/internal/Store.invalidation.test.js.map +1 -0
- package/build/browser/observable/internal/Store.js +38 -91
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +318 -63
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/UnsubscribableWrapper.js +30 -0
- package/build/browser/observable/internal/UnsubscribableWrapper.js.map +1 -0
- package/build/browser/observable/internal/createCollectionConnectable.js +50 -0
- package/build/browser/observable/internal/createCollectionConnectable.js.map +1 -0
- package/build/browser/observable/internal/createCollectionConnectable.test.js +599 -0
- package/build/browser/observable/internal/createCollectionConnectable.test.js.map +1 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js +216 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
- package/build/browser/observable/internal/isObjectInstance.js +23 -0
- package/build/browser/observable/internal/isObjectInstance.js.map +1 -0
- package/build/browser/observable/internal/links/LinksHelper.js +37 -0
- package/build/browser/observable/internal/links/LinksHelper.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js +2 -0
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkQuery.js +185 -0
- package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -0
- package/build/browser/observable/internal/list/ListsHelper.js +49 -0
- package/build/browser/observable/internal/list/ListsHelper.js.map +1 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js +34 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -0
- package/build/browser/observable/internal/removeDuplicates.js +36 -0
- package/build/browser/observable/internal/removeDuplicates.js.map +1 -0
- package/build/browser/observable/internal/sorting/SortingStrategy.js +78 -0
- package/build/browser/observable/internal/sorting/SortingStrategy.js.map +1 -0
- package/build/browser/observable/internal/testUtils/invalidateList.js +23 -0
- package/build/browser/observable/internal/testUtils/invalidateList.js.map +1 -0
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
- package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
- package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
- package/build/browser/observable/internal/testUtils.js +70 -7
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/public/unstable-do-not-use.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/streamutils.js +1 -1
- package/build/browser/util/streamutils.js.map +1 -1
- package/build/cjs/{chunk-URDXPIRU.cjs → chunk-AOGMSVFN.cjs} +61 -54
- package/build/cjs/chunk-AOGMSVFN.cjs.map +1 -0
- package/build/cjs/{chunk-BJYCRD5Y.cjs → chunk-BL56QBYG.cjs} +44 -19
- package/build/cjs/chunk-BL56QBYG.cjs.map +1 -0
- package/build/cjs/index.cjs +7 -7
- package/build/cjs/public/internal.cjs +8 -8
- package/build/cjs/public/unstable-do-not-use.cjs +779 -268
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +161 -12
- package/build/esm/Client.js +1 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/createClient.js +4 -1
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/fetchMetadata.test.js +11 -0
- package/build/esm/fetchMetadata.test.js.map +1 -1
- package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
- package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
- package/build/esm/intellisense.test.js +14 -4
- package/build/esm/intellisense.test.js.map +1 -1
- package/build/esm/object/Cache.js +1 -1
- package/build/esm/object/Cache.js.map +1 -1
- package/build/esm/object/SimpleCache.js +1 -1
- package/build/esm/object/SimpleCache.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.js +4 -0
- package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +12 -0
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/object/fetchPage.js +30 -4
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/object/geotimeseriesreference.test.js +0 -2
- package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSet.test.js +6 -0
- package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +3 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/observable/LinkPayload.js +2 -0
- package/build/esm/observable/LinkPayload.js.map +1 -0
- package/build/esm/observable/ObjectPayload.js.map +1 -1
- package/build/esm/observable/ObservableClient/ObserveLink.js +17 -0
- package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -0
- package/build/esm/observable/ObservableClient/common.js +2 -0
- package/build/esm/observable/ObservableClient/common.js.map +1 -0
- package/build/esm/observable/ObservableClient.js +20 -0
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/Unsubscribable.js +2 -0
- package/build/esm/observable/Unsubscribable.js.map +1 -0
- package/build/esm/observable/internal/AbstractHelper.js +50 -0
- package/build/esm/observable/internal/AbstractHelper.js.map +1 -0
- package/build/esm/observable/internal/BaseCollectionQuery.js +2 -0
- package/build/esm/observable/internal/BaseCollectionQuery.js.map +1 -0
- package/build/esm/observable/internal/BulkObjectLoader.js +3 -3
- package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/esm/observable/internal/CacheKeys.js +17 -2
- package/build/esm/observable/internal/CacheKeys.js.map +1 -1
- package/build/esm/observable/internal/Changes.js +6 -0
- package/build/esm/observable/internal/Changes.js.map +1 -1
- package/build/esm/observable/internal/KnownCacheKey.js +2 -0
- package/build/esm/observable/internal/KnownCacheKey.js.map +1 -0
- package/build/esm/observable/internal/Layer.js.map +1 -1
- package/build/esm/observable/internal/ListCacheKey.js +2 -0
- package/build/esm/observable/internal/ListCacheKey.js.map +1 -0
- package/build/esm/observable/internal/ListQuery.js +399 -161
- package/build/esm/observable/internal/ListQuery.js.map +1 -1
- package/build/esm/observable/internal/ObjectQuery.js +27 -2
- package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
- package/build/esm/observable/internal/ObservableClientImpl.js +42 -2
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/OptimisticJob.js +12 -3
- package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
- package/build/esm/observable/internal/Query.js +17 -3
- package/build/esm/observable/internal/Query.js.map +1 -1
- package/build/esm/observable/internal/QuerySubscription.js +41 -0
- package/build/esm/observable/internal/QuerySubscription.js.map +1 -0
- package/build/esm/observable/internal/Store.invalidation.test.js +481 -0
- package/build/esm/observable/internal/Store.invalidation.test.js.map +1 -0
- package/build/esm/observable/internal/Store.js +38 -91
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +318 -63
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/UnsubscribableWrapper.js +30 -0
- package/build/esm/observable/internal/UnsubscribableWrapper.js.map +1 -0
- package/build/esm/observable/internal/createCollectionConnectable.js +50 -0
- package/build/esm/observable/internal/createCollectionConnectable.js.map +1 -0
- package/build/esm/observable/internal/createCollectionConnectable.test.js +599 -0
- package/build/esm/observable/internal/createCollectionConnectable.test.js.map +1 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js +216 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
- package/build/esm/observable/internal/isObjectInstance.js +23 -0
- package/build/esm/observable/internal/isObjectInstance.js.map +1 -0
- package/build/esm/observable/internal/links/LinksHelper.js +37 -0
- package/build/esm/observable/internal/links/LinksHelper.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js +2 -0
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkQuery.js +185 -0
- package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -0
- package/build/esm/observable/internal/list/ListsHelper.js +49 -0
- package/build/esm/observable/internal/list/ListsHelper.js.map +1 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js +34 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -0
- package/build/esm/observable/internal/removeDuplicates.js +36 -0
- package/build/esm/observable/internal/removeDuplicates.js.map +1 -0
- package/build/esm/observable/internal/sorting/SortingStrategy.js +78 -0
- package/build/esm/observable/internal/sorting/SortingStrategy.js.map +1 -0
- package/build/esm/observable/internal/testUtils/invalidateList.js +23 -0
- package/build/esm/observable/internal/testUtils/invalidateList.js.map +1 -0
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
- package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
- package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
- package/build/esm/observable/internal/testUtils.js +70 -7
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/public/unstable-do-not-use.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/streamutils.js +1 -1
- package/build/esm/util/streamutils.js.map +1 -1
- package/build/types/Client.d.ts +1 -1
- package/build/types/createClient.d.ts.map +1 -1
- package/build/types/object/fetchPage.d.ts.map +1 -1
- package/build/types/observable/LinkPayload.d.ts +9 -0
- package/build/types/observable/LinkPayload.d.ts.map +1 -0
- package/build/types/observable/ObjectPayload.d.ts +4 -0
- package/build/types/observable/ObjectPayload.d.ts.map +1 -1
- package/build/types/observable/ObservableClient/ObserveLink.d.ts +32 -0
- package/build/types/observable/ObservableClient/ObserveLink.d.ts.map +1 -0
- package/build/types/observable/ObservableClient/common.d.ts +67 -0
- package/build/types/observable/ObservableClient/common.d.ts.map +1 -0
- package/build/types/observable/ObservableClient.d.ts +82 -15
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/Unsubscribable.d.ts +3 -0
- package/build/types/observable/Unsubscribable.d.ts.map +1 -0
- package/build/types/observable/internal/AbstractHelper.d.ts +15 -0
- package/build/types/observable/internal/AbstractHelper.d.ts.map +1 -0
- package/build/types/observable/internal/BaseCollectionQuery.d.ts +64 -0
- package/build/types/observable/internal/BaseCollectionQuery.d.ts.map +1 -0
- package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
- package/build/types/observable/internal/CacheKeys.d.ts +10 -4
- package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
- package/build/types/observable/internal/Changes.d.ts +7 -4
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/KnownCacheKey.d.ts +4 -0
- package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/Layer.d.ts +7 -7
- package/build/types/observable/internal/Layer.d.ts.map +1 -1
- package/build/types/observable/internal/ListCacheKey.d.ts +7 -0
- package/build/types/observable/internal/ListCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/ListQuery.d.ts +160 -21
- package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/ObjectQuery.d.ts +3 -1
- package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
- package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
- package/build/types/observable/internal/Query.d.ts +6 -5
- package/build/types/observable/internal/Query.d.ts.map +1 -1
- package/build/types/observable/internal/QuerySubscription.d.ts +1 -0
- package/build/types/observable/internal/QuerySubscription.d.ts.map +1 -0
- package/build/types/observable/internal/Store.d.ts +34 -31
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/build/types/observable/internal/Store.invalidation.test.d.ts +1 -0
- package/build/types/observable/internal/Store.invalidation.test.d.ts.map +1 -0
- package/build/types/observable/internal/Store.test.d.ts +4 -1
- package/build/types/observable/internal/Store.test.d.ts.map +1 -1
- package/build/types/observable/internal/UnsubscribableWrapper.d.ts +1 -0
- package/build/types/observable/internal/UnsubscribableWrapper.d.ts.map +1 -0
- package/build/types/observable/internal/createCollectionConnectable.d.ts +38 -0
- package/build/types/observable/internal/createCollectionConnectable.d.ts.map +1 -0
- package/build/types/observable/internal/createCollectionConnectable.test.d.ts +1 -0
- package/build/types/observable/internal/createCollectionConnectable.test.d.ts.map +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts +9 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts.map +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts.map +1 -0
- package/build/types/observable/internal/isObjectInstance.d.ts +5 -0
- package/build/types/observable/internal/isObjectInstance.d.ts.map +1 -0
- package/build/types/observable/internal/links/LinksHelper.d.ts +29 -0
- package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +17 -0
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +45 -0
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts +17 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts +11 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -0
- package/build/types/observable/internal/removeDuplicates.d.ts +11 -0
- package/build/types/observable/internal/removeDuplicates.d.ts.map +1 -0
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts +41 -0
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/invalidateList.d.ts +9 -0
- package/build/types/observable/internal/testUtils/invalidateList.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts +46 -0
- package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts +26 -0
- package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils.d.ts +25 -3
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/public/unstable-do-not-use.d.ts +4 -2
- package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
- package/package.json +10 -10
- package/build/cjs/chunk-BJYCRD5Y.cjs.map +0 -1
- package/build/cjs/chunk-URDXPIRU.cjs.map +0 -1
|
@@ -14,21 +14,29 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { editTodo, Employee, FooInterface, Todo } from "@osdk/client.test.ontology";
|
|
17
|
+
import { editTodo, Employee, FooInterface, Office, Todo } from "@osdk/client.test.ontology";
|
|
18
18
|
import { FauxFoundry, ontologies, startNodeApiServer, stubData, TypeHelpers } from "@osdk/shared.test";
|
|
19
19
|
import chalk from "chalk";
|
|
20
|
+
import { inspect } from "node:util";
|
|
20
21
|
import invariant from "tiny-invariant";
|
|
21
|
-
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi
|
|
22
|
+
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
22
23
|
import { ActionValidationError } from "../../actions/ActionValidationError.js";
|
|
23
24
|
import { createClient } from "../../createClient.js";
|
|
24
25
|
import { TestLogger } from "../../logger/TestLogger.js";
|
|
25
26
|
import { createOptimisticId } from "./OptimisticId.js";
|
|
26
27
|
import { runOptimisticJob } from "./OptimisticJob.js";
|
|
27
|
-
import {
|
|
28
|
-
import { applyCustomMatchers, createClientMockHelper, createDefer, expectNoMoreCalls, expectSingleListCallAndClear, expectSingleObjectCallAndClear, getObject, mockListSubCallback, mockSingleSubCallback, objectPayloadContaining, updateList, updateObject, waitForCall } from "./testUtils.js";
|
|
28
|
+
import { Store } from "./Store.js";
|
|
29
|
+
import { applyCustomMatchers, createClientMockHelper, createDefer, expectNoMoreCalls, expectSingleLinkCallAndClear, expectSingleListCallAndClear, expectSingleObjectCallAndClear, getObject, mockListSubCallback, mockSingleSubCallback, objectPayloadContaining, updateList, updateObject, waitForCall } from "./testUtils.js";
|
|
30
|
+
import { invalidateList } from "./testUtils/invalidateList.js";
|
|
31
|
+
import { expectStandardObserveLink } from "./testUtils/observeLink/expectStandardObserveLink.js";
|
|
32
|
+
import { expectStandardObserveObject } from "./testUtils/observeObject/expectStandardObserveObject.js";
|
|
29
33
|
const JOHN_DOE_ID = 50030;
|
|
30
34
|
const defer = createDefer();
|
|
31
|
-
const logger = new TestLogger(
|
|
35
|
+
const logger = new TestLogger({}, {
|
|
36
|
+
level: "debug"
|
|
37
|
+
});
|
|
38
|
+
inspect.defaultOptions.depth = 9;
|
|
39
|
+
inspect.defaultOptions.colors = true;
|
|
32
40
|
beforeAll(() => {
|
|
33
41
|
vi.setConfig({
|
|
34
42
|
fakeTimers: {
|
|
@@ -75,10 +83,10 @@ function setupOntology(fauxFoundry) {
|
|
|
75
83
|
}
|
|
76
84
|
function setupSomeEmployees(fauxFoundry) {
|
|
77
85
|
const dataStore = fauxFoundry.getDefaultDataStore();
|
|
78
|
-
dataStore.registerObject(Employee, {
|
|
86
|
+
const emp1 = dataStore.registerObject(Employee, {
|
|
79
87
|
employeeId: 1
|
|
80
88
|
});
|
|
81
|
-
dataStore.registerObject(Employee, {
|
|
89
|
+
const emp2 = dataStore.registerObject(Employee, {
|
|
82
90
|
employeeId: 2
|
|
83
91
|
});
|
|
84
92
|
dataStore.registerObject(Employee, {
|
|
@@ -89,13 +97,210 @@ function setupSomeEmployees(fauxFoundry) {
|
|
|
89
97
|
$apiName: "Employee",
|
|
90
98
|
employeeId: 4
|
|
91
99
|
});
|
|
92
|
-
dataStore.registerObject(Employee, {
|
|
100
|
+
const johnDoe = dataStore.registerObject(Employee, {
|
|
93
101
|
$apiName: "Employee",
|
|
94
102
|
employeeId: JOHN_DOE_ID,
|
|
95
103
|
fullName: "John Doe"
|
|
96
104
|
});
|
|
105
|
+
dataStore.registerLink(emp1, "peeps", johnDoe, "lead");
|
|
106
|
+
|
|
107
|
+
// Create offices
|
|
108
|
+
const office1 = dataStore.registerObject(Office, {
|
|
109
|
+
officeId: "101",
|
|
110
|
+
name: "Office 1"
|
|
111
|
+
});
|
|
112
|
+
const office2 = dataStore.registerObject(Office, {
|
|
113
|
+
officeId: "102",
|
|
114
|
+
name: "Office 2"
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Link employees to offices (Employee->Office: officeLink, Office->Employee: occupants)
|
|
118
|
+
dataStore.registerLink(emp1, "officeLink", office1, "occupants");
|
|
119
|
+
dataStore.registerLink(emp2, "officeLink", office2, "occupants");
|
|
97
120
|
}
|
|
98
121
|
describe(Store, () => {
|
|
122
|
+
describe("observeLinks", () => {
|
|
123
|
+
let client;
|
|
124
|
+
let cache;
|
|
125
|
+
let fauxFoundry;
|
|
126
|
+
beforeAll(async () => {
|
|
127
|
+
// Set up the mock environment and client
|
|
128
|
+
const testSetup = startNodeApiServer(new FauxFoundry("https://stack.palantir.com/"), createClient, {
|
|
129
|
+
logger
|
|
130
|
+
});
|
|
131
|
+
({
|
|
132
|
+
client,
|
|
133
|
+
fauxFoundry
|
|
134
|
+
} = testSetup);
|
|
135
|
+
|
|
136
|
+
// Use the existing setup function that adds Employee objects
|
|
137
|
+
setupOntology(fauxFoundry);
|
|
138
|
+
setupSomeEmployees(fauxFoundry);
|
|
139
|
+
return () => {
|
|
140
|
+
testSetup.apiServer.close();
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
beforeEach(() => {
|
|
144
|
+
cache = new Store(client);
|
|
145
|
+
return () => {
|
|
146
|
+
cache = undefined;
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
const objectLikeJohnDoe = expect.objectContaining({
|
|
150
|
+
$apiName: "Employee",
|
|
151
|
+
$primaryKey: JOHN_DOE_ID
|
|
152
|
+
});
|
|
153
|
+
expect.objectContaining({
|
|
154
|
+
$apiName: "Employee",
|
|
155
|
+
$primaryKey: 2
|
|
156
|
+
});
|
|
157
|
+
it("removing link updates", async () => {
|
|
158
|
+
const {
|
|
159
|
+
payload: emp1Payload,
|
|
160
|
+
subFn
|
|
161
|
+
} = await expectStandardObserveObject({
|
|
162
|
+
cache,
|
|
163
|
+
type: Employee,
|
|
164
|
+
primaryKey: 1
|
|
165
|
+
});
|
|
166
|
+
const emp1 = emp1Payload?.object;
|
|
167
|
+
!emp1 ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
168
|
+
|
|
169
|
+
// Set up mock callback for observing links
|
|
170
|
+
const {
|
|
171
|
+
payload,
|
|
172
|
+
linkSubFn
|
|
173
|
+
} = await expectStandardObserveLink({
|
|
174
|
+
store: cache,
|
|
175
|
+
srcObject: emp1,
|
|
176
|
+
srcLinkName: "peeps",
|
|
177
|
+
targetType: Employee,
|
|
178
|
+
expected: [objectLikeJohnDoe]
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
// Unregister the link "in the backend"
|
|
182
|
+
fauxFoundry.getDefaultDataStore().unregisterLink(asBsoStub(emp1), "peeps", {
|
|
183
|
+
__apiName: "Employee",
|
|
184
|
+
__primaryKey: JOHN_DOE_ID
|
|
185
|
+
}, "lead");
|
|
186
|
+
testStage("Observing Employee 1's peeps");
|
|
187
|
+
|
|
188
|
+
// Invalidate the employee cache
|
|
189
|
+
const invalidateEmployeePromise = cache.invalidateObjectType("Employee", undefined);
|
|
190
|
+
await waitForCall(linkSubFn);
|
|
191
|
+
// Initially go to an invalidated loading state
|
|
192
|
+
expectSingleLinkCallAndClear(linkSubFn, [objectLikeJohnDoe], {
|
|
193
|
+
status: "loading"
|
|
194
|
+
});
|
|
195
|
+
await invalidateEmployeePromise;
|
|
196
|
+
|
|
197
|
+
// Should have no peeps now
|
|
198
|
+
expectSingleLinkCallAndClear(linkSubFn, [], {
|
|
199
|
+
status: "loaded"
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
it("invalidating Employee type only invalidates links, not Office objects", async () => {
|
|
203
|
+
// Get an Office object that has Employee occupants
|
|
204
|
+
const {
|
|
205
|
+
payload: office1Payload,
|
|
206
|
+
subFn: officeSubFn
|
|
207
|
+
} = await expectStandardObserveObject({
|
|
208
|
+
cache,
|
|
209
|
+
type: Office,
|
|
210
|
+
primaryKey: "101"
|
|
211
|
+
});
|
|
212
|
+
const office1 = office1Payload?.object;
|
|
213
|
+
!office1 ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
214
|
+
expect(await office1.$link.occupants.fetchPage()).toMatchInlineSnapshot(`
|
|
215
|
+
{
|
|
216
|
+
"data": [
|
|
217
|
+
{
|
|
218
|
+
"$apiName": "Employee",
|
|
219
|
+
"$objectSpecifier": "Employee:1",
|
|
220
|
+
"$objectType": "Employee",
|
|
221
|
+
"$primaryKey": 1,
|
|
222
|
+
"$title": undefined,
|
|
223
|
+
"employeeId": 1,
|
|
224
|
+
"office": "101",
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
"nextPageToken": undefined,
|
|
228
|
+
"totalCount": undefined,
|
|
229
|
+
}
|
|
230
|
+
`);
|
|
231
|
+
testStage("Observing Employee 1");
|
|
232
|
+
|
|
233
|
+
// Get an Employee object linked to the office
|
|
234
|
+
const {
|
|
235
|
+
payload: emp1Payload,
|
|
236
|
+
subFn: empSubFn
|
|
237
|
+
} = await expectStandardObserveObject({
|
|
238
|
+
cache,
|
|
239
|
+
type: Employee,
|
|
240
|
+
primaryKey: 1
|
|
241
|
+
});
|
|
242
|
+
const emp1 = emp1Payload?.object;
|
|
243
|
+
!emp1 ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
244
|
+
testStage("Observing Office 101's occupants");
|
|
245
|
+
|
|
246
|
+
// Set up observation of occupants link
|
|
247
|
+
const {
|
|
248
|
+
linkSubFn: occupantsLinkSubFn
|
|
249
|
+
} = await expectStandardObserveLink({
|
|
250
|
+
store: cache,
|
|
251
|
+
srcObject: office1,
|
|
252
|
+
srcLinkName: "occupants",
|
|
253
|
+
targetType: Employee,
|
|
254
|
+
expected: [expect.objectContaining({
|
|
255
|
+
$primaryKey: 1
|
|
256
|
+
})]
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
// Clear any initial calls
|
|
260
|
+
officeSubFn.next.mockClear();
|
|
261
|
+
empSubFn.next.mockClear();
|
|
262
|
+
occupantsLinkSubFn.next.mockClear();
|
|
263
|
+
testStage("Invalidating Employee object type");
|
|
264
|
+
|
|
265
|
+
// Invalidate the Employee object type
|
|
266
|
+
// This should cause:
|
|
267
|
+
// - any object query for Employee to be invalidated
|
|
268
|
+
// - any object list query for Employee to be invalidated
|
|
269
|
+
// - any link queries where the source is an Employee to be invalidated
|
|
270
|
+
// - any link queries where the target is an Employee to be invalidated
|
|
271
|
+
const invalidateEmployeePromise = cache.invalidateObjectType(Employee, undefined);
|
|
272
|
+
|
|
273
|
+
// The link should be invalidated (loading state)
|
|
274
|
+
await waitForCall(occupantsLinkSubFn, 1);
|
|
275
|
+
expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {
|
|
276
|
+
status: "loading"
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
// The employee should be invalidated (loading state)
|
|
280
|
+
await waitForCall(empSubFn, 1);
|
|
281
|
+
expectSingleObjectCallAndClear(empSubFn, emp1, "loading");
|
|
282
|
+
|
|
283
|
+
// The link should be revalidated (loaded state)
|
|
284
|
+
await waitForCall(occupantsLinkSubFn, 1);
|
|
285
|
+
expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {
|
|
286
|
+
status: "loaded"
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
// the Employee object should also be invalidated (loading state)
|
|
290
|
+
await waitForCall(empSubFn, 1);
|
|
291
|
+
expectSingleObjectCallAndClear(empSubFn, emp1, "loaded");
|
|
292
|
+
|
|
293
|
+
// The Office object should NOT have any calls
|
|
294
|
+
// This is the key verification - no calls should be made to the office subscription
|
|
295
|
+
expect(officeSubFn.next).not.toHaveBeenCalled();
|
|
296
|
+
await invalidateEmployeePromise;
|
|
297
|
+
|
|
298
|
+
// ensure at the end of invalidation there are no new calls
|
|
299
|
+
expect(occupantsLinkSubFn.next).not.toHaveBeenCalled();
|
|
300
|
+
expect(empSubFn.next).not.toHaveBeenCalled();
|
|
301
|
+
expect(officeSubFn.next).not.toHaveBeenCalled();
|
|
302
|
+
});
|
|
303
|
+
});
|
|
99
304
|
describe("with mock server", () => {
|
|
100
305
|
let client;
|
|
101
306
|
let cache;
|
|
@@ -149,7 +354,9 @@ describe(Store, () => {
|
|
|
149
354
|
updateObject(cache, emp); // pre-seed the cache with the "real" value
|
|
150
355
|
|
|
151
356
|
const subFn = mockSingleSubCallback();
|
|
152
|
-
defer(cache.
|
|
357
|
+
defer(cache.objects.observe({
|
|
358
|
+
apiName: Employee,
|
|
359
|
+
pk: emp.$primaryKey,
|
|
153
360
|
mode: "offline"
|
|
154
361
|
}, subFn));
|
|
155
362
|
expectSingleObjectCallAndClear(subFn, emp, "loaded");
|
|
@@ -177,12 +384,14 @@ describe(Store, () => {
|
|
|
177
384
|
}, employeesAsServerReturns);
|
|
178
385
|
const emp = employeesAsServerReturns[0];
|
|
179
386
|
const empSubFn = mockSingleSubCallback();
|
|
180
|
-
defer(cache.
|
|
387
|
+
defer(cache.objects.observe({
|
|
388
|
+
apiName: Employee,
|
|
389
|
+
pk: emp.$primaryKey,
|
|
181
390
|
mode: "offline"
|
|
182
391
|
}, empSubFn));
|
|
183
392
|
expectSingleObjectCallAndClear(empSubFn, emp, "loaded");
|
|
184
393
|
const listSubFn = mockListSubCallback();
|
|
185
|
-
defer(cache.
|
|
394
|
+
defer(cache.lists.observe({
|
|
186
395
|
type: Employee,
|
|
187
396
|
mode: "offline"
|
|
188
397
|
}, listSubFn));
|
|
@@ -240,7 +449,9 @@ describe(Store, () => {
|
|
|
240
449
|
updateObject(cache, emp); // pre-seed the cache with the "real" value
|
|
241
450
|
|
|
242
451
|
const subFn = mockSingleSubCallback();
|
|
243
|
-
defer(cache.
|
|
452
|
+
defer(cache.objects.observe({
|
|
453
|
+
apiName: Employee,
|
|
454
|
+
pk: emp.$primaryKey,
|
|
244
455
|
mode: "offline"
|
|
245
456
|
}, subFn));
|
|
246
457
|
expectSingleObjectCallAndClear(subFn, emp, "loaded");
|
|
@@ -276,12 +487,14 @@ describe(Store, () => {
|
|
|
276
487
|
orderBy: {}
|
|
277
488
|
}, [emp]);
|
|
278
489
|
const subFn = mockSingleSubCallback();
|
|
279
|
-
defer(cache.
|
|
490
|
+
defer(cache.objects.observe({
|
|
491
|
+
apiName: Employee,
|
|
492
|
+
pk: emp.$primaryKey,
|
|
280
493
|
mode: "offline"
|
|
281
494
|
}, subFn));
|
|
282
495
|
expectSingleObjectCallAndClear(subFn, emp);
|
|
283
496
|
const subListFn = mockListSubCallback();
|
|
284
|
-
defer(cache.
|
|
497
|
+
defer(cache.lists.observe({
|
|
285
498
|
type: Employee,
|
|
286
499
|
mode: "offline"
|
|
287
500
|
}, subListFn));
|
|
@@ -316,7 +529,9 @@ describe(Store, () => {
|
|
|
316
529
|
});
|
|
317
530
|
updateObject(cache, staleEmp);
|
|
318
531
|
const subFn = mockSingleSubCallback();
|
|
319
|
-
defer(cache.
|
|
532
|
+
defer(cache.objects.observe({
|
|
533
|
+
apiName: Employee,
|
|
534
|
+
pk: emp.$primaryKey,
|
|
320
535
|
mode: "offline"
|
|
321
536
|
}, subFn));
|
|
322
537
|
expectSingleObjectCallAndClear(subFn, staleEmp, "loaded");
|
|
@@ -331,12 +546,6 @@ describe(Store, () => {
|
|
|
331
546
|
});
|
|
332
547
|
});
|
|
333
548
|
describe(".invalidateList", () => {
|
|
334
|
-
beforeEach(() => {
|
|
335
|
-
vi.useFakeTimers({});
|
|
336
|
-
});
|
|
337
|
-
afterEach(() => {
|
|
338
|
-
vi.useRealTimers();
|
|
339
|
-
});
|
|
340
549
|
it("triggers an update", async () => {
|
|
341
550
|
const emp = employeesAsServerReturns[0];
|
|
342
551
|
const staleEmp = emp.$clone({
|
|
@@ -348,12 +557,14 @@ describe(Store, () => {
|
|
|
348
557
|
orderBy: {}
|
|
349
558
|
}, [staleEmp]);
|
|
350
559
|
const subFn = mockSingleSubCallback();
|
|
351
|
-
defer(cache.
|
|
560
|
+
defer(cache.objects.observe({
|
|
561
|
+
apiName: Employee,
|
|
562
|
+
pk: emp.$primaryKey,
|
|
352
563
|
mode: "offline"
|
|
353
564
|
}, subFn));
|
|
354
565
|
expectSingleObjectCallAndClear(subFn, staleEmp);
|
|
355
566
|
const subListFn = mockListSubCallback();
|
|
356
|
-
defer(cache.
|
|
567
|
+
defer(cache.lists.observe({
|
|
357
568
|
type: Employee,
|
|
358
569
|
mode: "offline"
|
|
359
570
|
}, subListFn));
|
|
@@ -399,12 +610,14 @@ describe(Store, () => {
|
|
|
399
610
|
orderBy: {}
|
|
400
611
|
}, [staleEmp]);
|
|
401
612
|
const subFn = mockSingleSubCallback();
|
|
402
|
-
defer(cache.
|
|
613
|
+
defer(cache.objects.observe({
|
|
614
|
+
apiName: Employee,
|
|
615
|
+
pk: emp.$primaryKey,
|
|
403
616
|
mode: "offline"
|
|
404
617
|
}, subFn));
|
|
405
618
|
expectSingleObjectCallAndClear(subFn, staleEmp);
|
|
406
619
|
const subListFn = mockListSubCallback();
|
|
407
|
-
defer(cache.
|
|
620
|
+
defer(cache.lists.observe({
|
|
408
621
|
type: Employee,
|
|
409
622
|
where: {},
|
|
410
623
|
orderBy: {},
|
|
@@ -422,8 +635,19 @@ describe(Store, () => {
|
|
|
422
635
|
});
|
|
423
636
|
await waitForCall(subListFn, 1);
|
|
424
637
|
expectSingleListCallAndClear(subListFn, employeesAsServerReturns);
|
|
425
|
-
|
|
426
|
-
|
|
638
|
+
testStage("Check invalidation call for single sub");
|
|
639
|
+
await waitForCall(subFn, 2);
|
|
640
|
+
// First call is for loading state
|
|
641
|
+
expect(subFn.next).toHaveBeenNthCalledWith(1, objectPayloadContaining({
|
|
642
|
+
status: "loading",
|
|
643
|
+
object: staleEmp
|
|
644
|
+
}));
|
|
645
|
+
// Second call is for loaded state with fresh data
|
|
646
|
+
expect(subFn.next).toHaveBeenNthCalledWith(2, objectPayloadContaining({
|
|
647
|
+
status: "loaded",
|
|
648
|
+
object: emp
|
|
649
|
+
}));
|
|
650
|
+
subFn.next.mockClear();
|
|
427
651
|
|
|
428
652
|
// we don't need this value to control the test but we want to make sure we don't have
|
|
429
653
|
// any unhandled exceptions upon test completion
|
|
@@ -446,7 +670,9 @@ describe(Store, () => {
|
|
|
446
670
|
fullName: "John Doe"
|
|
447
671
|
});
|
|
448
672
|
it("fetches and updates twice", async () => {
|
|
449
|
-
defer(cache.
|
|
673
|
+
defer(cache.objects.observe({
|
|
674
|
+
apiName: Employee,
|
|
675
|
+
pk: JOHN_DOE_ID,
|
|
450
676
|
mode: "force"
|
|
451
677
|
}, subFn1));
|
|
452
678
|
expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(objectPayloadContaining({
|
|
@@ -462,7 +688,9 @@ describe(Store, () => {
|
|
|
462
688
|
}));
|
|
463
689
|
const firstLoad = subFn1.next.mock.lastCall?.[0];
|
|
464
690
|
subFn1.next.mockClear();
|
|
465
|
-
defer(cache.
|
|
691
|
+
defer(cache.objects.observe({
|
|
692
|
+
apiName: Employee,
|
|
693
|
+
pk: JOHN_DOE_ID,
|
|
466
694
|
mode: "force"
|
|
467
695
|
}, subFn2));
|
|
468
696
|
expectSingleObjectCallAndClear(subFn1, likeEmployee50030, "loading");
|
|
@@ -489,7 +717,9 @@ describe(Store, () => {
|
|
|
489
717
|
subFn.complete.mockClear();
|
|
490
718
|
subFn.next.mockClear();
|
|
491
719
|
subFn.error.mockClear();
|
|
492
|
-
sub = defer(cache.
|
|
720
|
+
sub = defer(cache.objects.observe({
|
|
721
|
+
apiName: Employee,
|
|
722
|
+
pk: JOHN_DOE_ID,
|
|
493
723
|
mode: "offline"
|
|
494
724
|
}, subFn));
|
|
495
725
|
expectSingleObjectCallAndClear(subFn, undefined, "init");
|
|
@@ -535,11 +765,10 @@ describe(Store, () => {
|
|
|
535
765
|
}));
|
|
536
766
|
});
|
|
537
767
|
});
|
|
538
|
-
describe(".
|
|
768
|
+
describe(".lists.observe", () => {
|
|
539
769
|
const listSub1 = mockListSubCallback();
|
|
540
770
|
const ifaceSub = mockListSubCallback();
|
|
541
771
|
beforeEach(() => {
|
|
542
|
-
vi.useFakeTimers({});
|
|
543
772
|
vi.mocked(listSub1.next).mockReset();
|
|
544
773
|
vi.mocked(listSub1.error).mockReset();
|
|
545
774
|
vi.mocked(listSub1.complete).mockReset();
|
|
@@ -547,22 +776,18 @@ describe(Store, () => {
|
|
|
547
776
|
vi.mocked(ifaceSub.error).mockReset();
|
|
548
777
|
vi.mocked(ifaceSub.complete).mockReset();
|
|
549
778
|
});
|
|
550
|
-
afterEach(() => {
|
|
551
|
-
vi.useRealTimers();
|
|
552
|
-
});
|
|
553
779
|
describe("mode=force", () => {
|
|
554
780
|
it("initial load", async () => {
|
|
555
|
-
defer(cache.
|
|
781
|
+
defer(cache.lists.observe({
|
|
556
782
|
type: Employee,
|
|
557
783
|
orderBy: {},
|
|
558
784
|
mode: "force"
|
|
559
785
|
}, listSub1));
|
|
560
|
-
defer(cache.
|
|
786
|
+
defer(cache.lists.observe({
|
|
561
787
|
type: FooInterface,
|
|
562
788
|
orderBy: {},
|
|
563
789
|
mode: "force"
|
|
564
790
|
}, ifaceSub));
|
|
565
|
-
vitest.runOnlyPendingTimers();
|
|
566
791
|
await waitForCall(listSub1);
|
|
567
792
|
await waitForCall(ifaceSub);
|
|
568
793
|
expectSingleListCallAndClear(listSub1, [], {
|
|
@@ -593,7 +818,7 @@ describe(Store, () => {
|
|
|
593
818
|
where: {},
|
|
594
819
|
orderBy: {}
|
|
595
820
|
}, mutatedEmployees);
|
|
596
|
-
defer(cache.
|
|
821
|
+
defer(cache.lists.observe({
|
|
597
822
|
type: Employee,
|
|
598
823
|
mode: "force"
|
|
599
824
|
}, listSub1));
|
|
@@ -611,19 +836,18 @@ describe(Store, () => {
|
|
|
611
836
|
});
|
|
612
837
|
describe("mode = offline", () => {
|
|
613
838
|
it("updates with list updates", async () => {
|
|
614
|
-
defer(cache.
|
|
839
|
+
defer(cache.lists.observe({
|
|
615
840
|
type: Employee,
|
|
616
841
|
where: {},
|
|
617
842
|
orderBy: {},
|
|
618
843
|
mode: "offline"
|
|
619
844
|
}, listSub1));
|
|
620
|
-
expect(listSub1.next).toHaveBeenCalledTimes(0);
|
|
621
845
|
updateList(cache, {
|
|
622
846
|
type: Employee,
|
|
623
847
|
where: {},
|
|
624
848
|
orderBy: {}
|
|
625
849
|
}, employeesAsServerReturns);
|
|
626
|
-
|
|
850
|
+
await waitForCall(listSub1);
|
|
627
851
|
expectSingleListCallAndClear(listSub1, employeesAsServerReturns);
|
|
628
852
|
|
|
629
853
|
// list is just now one object
|
|
@@ -632,23 +856,22 @@ describe(Store, () => {
|
|
|
632
856
|
where: {},
|
|
633
857
|
orderBy: {}
|
|
634
858
|
}, [employeesAsServerReturns[0]]);
|
|
635
|
-
|
|
859
|
+
await waitForCall(listSub1);
|
|
636
860
|
expectSingleListCallAndClear(listSub1, [employeesAsServerReturns[0]]);
|
|
637
861
|
});
|
|
638
862
|
it("updates with different list updates", async () => {
|
|
639
|
-
defer(cache.
|
|
863
|
+
defer(cache.lists.observe({
|
|
640
864
|
type: Employee,
|
|
641
865
|
where: {},
|
|
642
866
|
orderBy: {},
|
|
643
867
|
mode: "offline"
|
|
644
868
|
}, listSub1));
|
|
645
|
-
expect(listSub1.next).toHaveBeenCalledTimes(0);
|
|
646
869
|
updateList(cache, {
|
|
647
870
|
type: Employee,
|
|
648
871
|
where: {},
|
|
649
872
|
orderBy: {}
|
|
650
873
|
}, employeesAsServerReturns);
|
|
651
|
-
|
|
874
|
+
await waitForCall(listSub1);
|
|
652
875
|
expectSingleListCallAndClear(listSub1, employeesAsServerReturns);
|
|
653
876
|
|
|
654
877
|
// new where === different list
|
|
@@ -661,9 +884,9 @@ describe(Store, () => {
|
|
|
661
884
|
},
|
|
662
885
|
orderBy: {}
|
|
663
886
|
}, mutatedEmployees);
|
|
664
|
-
vitest.runOnlyPendingTimers();
|
|
665
887
|
|
|
666
888
|
// original list updates still
|
|
889
|
+
await waitForCall(listSub1);
|
|
667
890
|
expectSingleListCallAndClear(listSub1, mutatedEmployees);
|
|
668
891
|
});
|
|
669
892
|
});
|
|
@@ -677,14 +900,13 @@ describe(Store, () => {
|
|
|
677
900
|
});
|
|
678
901
|
it("works in the solo case", async () => {
|
|
679
902
|
const listSub = mockListSubCallback();
|
|
680
|
-
defer(cache.
|
|
903
|
+
defer(cache.lists.observe({
|
|
681
904
|
type: Employee,
|
|
682
905
|
where: {},
|
|
683
906
|
orderBy: {},
|
|
684
907
|
mode: "force",
|
|
685
908
|
pageSize: 1
|
|
686
909
|
}, listSub));
|
|
687
|
-
expect(listSub.next).not.toHaveBeenCalled();
|
|
688
910
|
await waitForCall(listSub, 1);
|
|
689
911
|
expectSingleListCallAndClear(listSub, [], {
|
|
690
912
|
status: "loading"
|
|
@@ -740,15 +962,22 @@ describe(Store, () => {
|
|
|
740
962
|
|
|
741
963
|
// ignores unhandled rejection, like one we will get from fire-and-forget metadata call
|
|
742
964
|
process.on("unhandledRejection", () => {});
|
|
743
|
-
store.
|
|
965
|
+
store.lists.observe({
|
|
744
966
|
type: {
|
|
745
967
|
apiName: "notReal",
|
|
746
968
|
type: "object"
|
|
747
969
|
},
|
|
748
970
|
orderBy: {}
|
|
749
971
|
}, sub);
|
|
750
|
-
await waitForCall(sub.
|
|
751
|
-
|
|
972
|
+
await waitForCall(sub.next);
|
|
973
|
+
|
|
974
|
+
// initial loading state
|
|
975
|
+
expect(sub.next).toHaveBeenCalledOnce();
|
|
976
|
+
expectSingleListCallAndClear(sub, [], {
|
|
977
|
+
status: "loading"
|
|
978
|
+
});
|
|
979
|
+
await waitForCall(sub.error);
|
|
980
|
+
expect(sub.error).toHaveBeenCalledOnce();
|
|
752
981
|
expect(sub.next).not.toHaveBeenCalled();
|
|
753
982
|
});
|
|
754
983
|
describe("batching", () => {
|
|
@@ -763,8 +992,14 @@ describe(Store, () => {
|
|
|
763
992
|
});
|
|
764
993
|
const a = mockSingleSubCallback();
|
|
765
994
|
const b = mockSingleSubCallback();
|
|
766
|
-
defer(store.
|
|
767
|
-
|
|
995
|
+
defer(store.objects.observe({
|
|
996
|
+
apiName: Employee,
|
|
997
|
+
pk: 0
|
|
998
|
+
}, a));
|
|
999
|
+
defer(store.objects.observe({
|
|
1000
|
+
apiName: Employee,
|
|
1001
|
+
pk: 1
|
|
1002
|
+
}, b));
|
|
768
1003
|
await a.expectLoadingAndLoaded({
|
|
769
1004
|
loading: objectPayloadContaining({
|
|
770
1005
|
status: "loading",
|
|
@@ -800,7 +1035,10 @@ describe(Store, () => {
|
|
|
800
1035
|
text: "og title"
|
|
801
1036
|
});
|
|
802
1037
|
const todoSubFn = mockSingleSubCallback();
|
|
803
|
-
defer(store.
|
|
1038
|
+
defer(store.objects.observe({
|
|
1039
|
+
apiName: Todo,
|
|
1040
|
+
pk: 0
|
|
1041
|
+
}, todoSubFn));
|
|
804
1042
|
await todoSubFn.expectLoadingAndLoaded({
|
|
805
1043
|
loading: objectPayloadContaining({
|
|
806
1044
|
status: "loading",
|
|
@@ -842,7 +1080,10 @@ describe(Store, () => {
|
|
|
842
1080
|
text: "does not matter"
|
|
843
1081
|
});
|
|
844
1082
|
const todoSubFn = mockSingleSubCallback();
|
|
845
|
-
defer(store.
|
|
1083
|
+
defer(store.objects.observe({
|
|
1084
|
+
apiName: Todo,
|
|
1085
|
+
pk: 0
|
|
1086
|
+
}, todoSubFn));
|
|
846
1087
|
await todoSubFn.expectLoadingAndLoaded({
|
|
847
1088
|
loading: objectPayloadContaining({
|
|
848
1089
|
status: "loading",
|
|
@@ -915,19 +1156,27 @@ describe(Store, () => {
|
|
|
915
1156
|
text: "asc"
|
|
916
1157
|
}
|
|
917
1158
|
};
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
beforeEach(() => {
|
|
921
|
-
|
|
1159
|
+
let subListUnordered = mockListSubCallback();
|
|
1160
|
+
let subListOrdered = mockListSubCallback();
|
|
1161
|
+
beforeEach(async () => {
|
|
1162
|
+
subListUnordered = mockListSubCallback();
|
|
1163
|
+
subListOrdered = mockListSubCallback();
|
|
1164
|
+
defer(store.lists.observe({
|
|
922
1165
|
...noWhereNoOrderBy,
|
|
923
1166
|
mode: "offline"
|
|
924
1167
|
}, subListUnordered));
|
|
925
|
-
|
|
926
|
-
|
|
1168
|
+
await waitForCall(subListUnordered);
|
|
1169
|
+
expectSingleListCallAndClear(subListUnordered, [], {
|
|
1170
|
+
status: "init"
|
|
1171
|
+
});
|
|
1172
|
+
defer(store.lists.observe({
|
|
927
1173
|
...noWhereOrderByText,
|
|
928
1174
|
mode: "offline"
|
|
929
1175
|
}, subListOrdered));
|
|
930
|
-
|
|
1176
|
+
await waitForCall(subListOrdered);
|
|
1177
|
+
expectSingleListCallAndClear(subListOrdered, [], {
|
|
1178
|
+
status: "init"
|
|
1179
|
+
});
|
|
931
1180
|
});
|
|
932
1181
|
it("invalidates the correct lists", async () => {
|
|
933
1182
|
// for whatever reason, the first list is loaded as [B, A]
|
|
@@ -1171,4 +1420,10 @@ describe(Store, () => {
|
|
|
1171
1420
|
});
|
|
1172
1421
|
});
|
|
1173
1422
|
});
|
|
1423
|
+
export function asBsoStub(x) {
|
|
1424
|
+
return {
|
|
1425
|
+
__apiName: x.$apiName,
|
|
1426
|
+
__primaryKey: x.$primaryKey
|
|
1427
|
+
};
|
|
1428
|
+
}
|
|
1174
1429
|
//# sourceMappingURL=Store.test.js.map
|