@sanity/cli 6.0.0-alpha.5 → 6.0.0-alpha.6
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/dist/actions/dataset/create.d.ts +49 -0
- package/dist/actions/dataset/create.js +48 -0
- package/dist/actions/dataset/create.js.map +1 -0
- package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
- package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
- package/dist/actions/debug/gatherDebugInfo.js +15 -21
- package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
- package/dist/actions/debug/types.d.ts +0 -2
- package/dist/actions/debug/types.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +13 -0
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/init/remoteTemplate.js +1 -1
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
- package/dist/actions/manifest/extractAppManifest.js +51 -0
- package/dist/actions/manifest/extractAppManifest.js.map +1 -0
- package/dist/actions/manifest/extractManifest.js +1 -1
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/types.d.ts +6 -1
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/media/importAspects.js +2 -1
- package/dist/actions/media/importAspects.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
- package/dist/commands/dataset/create.d.ts +0 -2
- package/dist/commands/dataset/create.js +8 -54
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/debug.js +5 -9
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.js +358 -20
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/manifest/extract.js +7 -8
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +9 -0
- package/dist/prompts/init/promptForTypescript.d.ts +2 -0
- package/dist/prompts/init/promptForTypescript.js +15 -0
- package/dist/prompts/init/promptForTypescript.js.map +1 -0
- package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
- package/dist/prompts/promptForDatasetAclMode.js +27 -0
- package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
- package/dist/prompts/promptForDatasetName.d.ts +1 -1
- package/dist/prompts/promptForDatasetName.js +4 -1
- package/dist/prompts/promptForDatasetName.js.map +1 -1
- package/dist/services/organizations.d.ts +3 -1
- package/dist/services/organizations.js +2 -1
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/user.d.ts +5 -0
- package/dist/services/user.js +12 -1
- package/dist/services/user.js.map +1 -1
- package/dist/services/userApplications.d.ts +3 -1
- package/dist/services/userApplications.js +5 -1
- package/dist/services/userApplications.js.map +1 -1
- package/oclif.manifest.json +113 -113
- package/package.json +16 -12
- package/templates/app-quickstart/src/App.css +20 -0
- package/templates/app-quickstart/src/App.tsx +25 -0
- package/templates/app-quickstart/src/ExampleComponent.css +90 -0
- package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
- package/templates/app-sanity-ui/src/App.tsx +34 -0
- package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
- package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
- package/templates/blog/README.md +11 -0
- package/templates/blog/schemaTypes/author.js +50 -0
- package/templates/blog/schemaTypes/blockContent.js +67 -0
- package/templates/blog/schemaTypes/category.js +19 -0
- package/templates/blog/schemaTypes/index.js +6 -0
- package/templates/blog/schemaTypes/post.js +65 -0
- package/templates/blog/static/.gitkeep +1 -0
- package/templates/clean/README.md +9 -0
- package/templates/clean/schemaTypes/index.js +1 -0
- package/templates/clean/static/.gitkeep +1 -0
- package/templates/ecommerce/README.md +11 -0
- package/templates/ecommerce/plugins/.gitkeep +1 -0
- package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
- package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
- package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
- package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
- package/templates/ecommerce/schemaTypes/category.js +39 -0
- package/templates/ecommerce/schemaTypes/index.js +23 -0
- package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
- package/templates/ecommerce/schemaTypes/product.js +83 -0
- package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
- package/templates/ecommerce/schemaTypes/vendor.js +39 -0
- package/templates/ecommerce/static/.gitkeep +1 -0
- package/templates/get-started/README.md +9 -0
- package/templates/get-started/plugins/.gitkeep +1 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
- package/templates/get-started/schemaTypes/index.ts +1 -0
- package/templates/get-started/static/.gitkeep +1 -0
- package/templates/moviedb/README.md +10 -0
- package/templates/moviedb/schemaTypes/blockContent.js +67 -0
- package/templates/moviedb/schemaTypes/castMember.js +37 -0
- package/templates/moviedb/schemaTypes/crewMember.js +52 -0
- package/templates/moviedb/schemaTypes/index.js +22 -0
- package/templates/moviedb/schemaTypes/movie.js +85 -0
- package/templates/moviedb/schemaTypes/person.js +37 -0
- package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
- package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
- package/templates/moviedb/schemaTypes/screening.js +81 -0
- package/templates/moviedb/static/.gitkeep +1 -0
- package/templates/quickstart/README.md +9 -0
- package/templates/quickstart/schemaTypes/index.js +1 -0
- package/templates/quickstart/static/.gitkeep +1 -0
- package/templates/shared/gitignore.txt +29 -0
- package/templates/shared/tsconfig.json +17 -0
- package/templates/shopify/README.md +85 -0
- package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
- package/templates/shopify/components/icons/Shopify.tsx +20 -0
- package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
- package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
- package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
- package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
- package/templates/shopify/components/media/ColorTheme.tsx +38 -0
- package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
- package/templates/shopify/components/studio/Navbar.tsx +29 -0
- package/templates/shopify/constants.ts +61 -0
- package/templates/shopify/docs/features.md +158 -0
- package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
- package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
- package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
- package/templates/shopify/schemaTypes/documents/page.ts +70 -0
- package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
- package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
- package/templates/shopify/schemaTypes/index.ts +108 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
- package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
- package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
- package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
- package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
- package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
- package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
- package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
- package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
- package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
- package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
- package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
- package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
- package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
- package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
- package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
- package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
- package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
- package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
- package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
- package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
- package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
- package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
- package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
- package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
- package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
- package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
- package/templates/shopify/static/.gitkeep +1 -0
- package/templates/shopify/structure/collectionStructure.ts +9 -0
- package/templates/shopify/structure/colorThemeStructure.ts +9 -0
- package/templates/shopify/structure/homeStructure.ts +9 -0
- package/templates/shopify/structure/index.ts +57 -0
- package/templates/shopify/structure/pageStructure.ts +11 -0
- package/templates/shopify/structure/productStructure.ts +51 -0
- package/templates/shopify/structure/settingStructure.ts +9 -0
- package/templates/shopify/utils/blocksToText.ts +20 -0
- package/templates/shopify/utils/defineStructure.ts +11 -0
- package/templates/shopify/utils/getPriceRange.ts +24 -0
- package/templates/shopify/utils/shopifyUrls.ts +22 -0
- package/templates/shopify/utils/validateSlug.ts +18 -0
- package/templates/shopify-online-storefront/README.md +54 -0
- package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
- package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
- package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
- package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
- package/templates/shopify-online-storefront/constants.ts +18 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
- package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
- package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
- package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
- package/templates/shopify-online-storefront/structure/index.ts +37 -0
- package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
- package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
- package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
- package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
- package/dist/actions/build/__tests__/buildApp.test.js +0 -367
- package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
- package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
- package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
- package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
- package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
- package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
- package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
- package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
- package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
- package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
- package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
- package/dist/actions/media/__tests__/importMedia.test.js +0 -182
- package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
- package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
- package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
- package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
- package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
- package/dist/commands/__tests__/blueprints.test.js +0 -54
- package/dist/commands/__tests__/blueprints.test.js.map +0 -1
- package/dist/commands/__tests__/build.test.js +0 -132
- package/dist/commands/__tests__/build.test.js.map +0 -1
- package/dist/commands/__tests__/codemod.test.js +0 -271
- package/dist/commands/__tests__/codemod.test.js.map +0 -1
- package/dist/commands/__tests__/debug.test.js +0 -590
- package/dist/commands/__tests__/debug.test.js.map +0 -1
- package/dist/commands/__tests__/deploy.test.js +0 -1945
- package/dist/commands/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/__tests__/dev.test.js +0 -453
- package/dist/commands/__tests__/dev.test.js.map +0 -1
- package/dist/commands/__tests__/exec.test.js +0 -207
- package/dist/commands/__tests__/exec.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
- package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.plan.test.js +0 -279
- package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.setup.test.js +0 -335
- package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
- package/dist/commands/__tests__/install.test.js +0 -282
- package/dist/commands/__tests__/install.test.js.map +0 -1
- package/dist/commands/__tests__/learn.test.js +0 -29
- package/dist/commands/__tests__/learn.test.js.map +0 -1
- package/dist/commands/__tests__/logout.test.js +0 -91
- package/dist/commands/__tests__/logout.test.js.map +0 -1
- package/dist/commands/__tests__/manage.test.js +0 -110
- package/dist/commands/__tests__/manage.test.js.map +0 -1
- package/dist/commands/__tests__/migration.test.js +0 -119
- package/dist/commands/__tests__/migration.test.js.map +0 -1
- package/dist/commands/__tests__/preview.test.js +0 -261
- package/dist/commands/__tests__/preview.test.js.map +0 -1
- package/dist/commands/__tests__/start.test.js +0 -253
- package/dist/commands/__tests__/start.test.js.map +0 -1
- package/dist/commands/__tests__/undeploy.test.js +0 -382
- package/dist/commands/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/__tests__/versions.test.js +0 -142
- package/dist/commands/__tests__/versions.test.js.map +0 -1
- package/dist/commands/backup/__tests__/disable.test.js +0 -204
- package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/download.test.js +0 -768
- package/dist/commands/backup/__tests__/download.test.js.map +0 -1
- package/dist/commands/backup/__tests__/enable.test.js +0 -286
- package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/list.test.js +0 -330
- package/dist/commands/backup/__tests__/list.test.js.map +0 -1
- package/dist/commands/cors/__tests__/add.test.js +0 -376
- package/dist/commands/cors/__tests__/add.test.js.map +0 -1
- package/dist/commands/cors/__tests__/delete.test.js +0 -308
- package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
- package/dist/commands/cors/__tests__/list.test.js +0 -241
- package/dist/commands/cors/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/copy.test.js +0 -628
- package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/create.test.js +0 -342
- package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/delete.test.js +0 -231
- package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/export.test.js +0 -601
- package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/import.test.js +0 -53
- package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/list.test.js +0 -216
- package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
- package/dist/commands/docs/__tests__/browse.test.js +0 -29
- package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
- package/dist/commands/docs/__tests__/read.test.js +0 -78
- package/dist/commands/docs/__tests__/read.test.js.map +0 -1
- package/dist/commands/docs/__tests__/search.test.js +0 -255
- package/dist/commands/docs/__tests__/search.test.js.map +0 -1
- package/dist/commands/documents/__tests__/create.test.js +0 -1030
- package/dist/commands/documents/__tests__/create.test.js.map +0 -1
- package/dist/commands/documents/__tests__/delete.test.js +0 -300
- package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
- package/dist/commands/documents/__tests__/get.test.js +0 -182
- package/dist/commands/documents/__tests__/get.test.js.map +0 -1
- package/dist/commands/documents/__tests__/query.test.js +0 -300
- package/dist/commands/documents/__tests__/query.test.js.map +0 -1
- package/dist/commands/documents/__tests__/validate.test.js +0 -249
- package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/list.test.js +0 -240
- package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/hook/__tests__/attempt.test.js +0 -275
- package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
- package/dist/commands/hook/__tests__/create.test.js +0 -119
- package/dist/commands/hook/__tests__/create.test.js.map +0 -1
- package/dist/commands/hook/__tests__/delete.test.js +0 -233
- package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
- package/dist/commands/hook/__tests__/list.test.js +0 -145
- package/dist/commands/hook/__tests__/list.test.js.map +0 -1
- package/dist/commands/hook/__tests__/logs.test.js +0 -798
- package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
- package/dist/commands/manifest/__tests__/extract.test.js +0 -132
- package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
- package/dist/commands/mcp/__tests__/configure.test.js +0 -397
- package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
- package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/export.test.js +0 -697
- package/dist/commands/media/__tests__/export.test.js.map +0 -1
- package/dist/commands/media/__tests__/import.test.js +0 -347
- package/dist/commands/media/__tests__/import.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/get.test.js +0 -149
- package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/list.test.js +0 -113
- package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
- package/dist/commands/projects/__tests__/list.test.js +0 -154
- package/dist/commands/projects/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/delete.test.js +0 -454
- package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
- package/dist/commands/schema/__tests__/deploy.test.js +0 -348
- package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/schema/__tests__/extract.test.js +0 -121
- package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
- package/dist/commands/schema/__tests__/list.test.js +0 -399
- package/dist/commands/schema/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/validate.test.js +0 -121
- package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
- package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
- package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/status.test.js +0 -155
- package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/add.test.js +0 -435
- package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/delete.test.js +0 -405
- package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/list.test.js +0 -395
- package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
- package/dist/commands/users/__tests__/invite.test.js +0 -362
- package/dist/commands/users/__tests__/invite.test.js.map +0 -1
- package/dist/commands/users/__tests__/list.test.js +0 -407
- package/dist/commands/users/__tests__/list.test.js.map +0 -1
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
- package/dist/services/__tests__/datasetAliases.test.js +0 -131
- package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
- package/dist/services/__tests__/datasets.test.js +0 -436
- package/dist/services/__tests__/datasets.test.js.map +0 -1
- package/dist/services/__tests__/graphql.test.js +0 -43
- package/dist/services/__tests__/graphql.test.js.map +0 -1
- package/dist/services/__tests__/mediaLibraries.test.js +0 -88
- package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
- package/dist/services/__tests__/projects.test.js +0 -41
- package/dist/services/__tests__/projects.test.js.map +0 -1
- package/dist/services/__tests__/userApplications.test.js +0 -113
- package/dist/services/__tests__/userApplications.test.js.map +0 -1
- package/dist/util/__tests__/appId.test.js +0 -31
- package/dist/util/__tests__/appId.test.js.map +0 -1
- package/dist/util/__tests__/cliClient.test.js +0 -184
- package/dist/util/__tests__/cliClient.test.js.map +0 -1
- package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
- package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
- package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
- package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
- package/dist/util/__tests__/getCliVersion.test.js +0 -28
- package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
- package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
- package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
- package/dist/util/__tests__/getWorkspace.test.js +0 -37
- package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
- package/dist/util/__tests__/readPackageJson.test.js +0 -69
- package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
- package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
- package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
- package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
- package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
- package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
- package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/documents/__tests__/create.test.ts"],"sourcesContent":["import {randomUUID} from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {runCommand} from '@oclif/test'\nimport {getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {watch as chokidarWatch} from 'chokidar'\nimport {execa, execaSync} from 'execa'\nimport json5 from 'json5'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {CreateDocumentCommand} from '../create.js'\n\nvi.mock('node:fs/promises')\nvi.mock('node:os')\nvi.mock('chokidar', () => ({\n watch: vi.fn(),\n}))\nvi.mock('execa')\nvi.mock('json5')\n\nvi.mock('node:crypto', async () => {\n return {\n randomUUID: vi.fn(),\n }\n})\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockFs = vi.mocked(fs)\nconst mockOs = vi.mocked(os)\nconst mockChokidarWatch = vi.mocked(chokidarWatch)\nconst mockExeca = vi.mocked(execa)\nconst mockExecaSync = vi.mocked(execaSync)\nconst mockJson5 = vi.mocked(json5)\nconst mockRandomUUID = vi.mocked(randomUUID)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\n// Helper to set environment variable for tests\nfunction withEditorEnv(testFn: () => Promise<void>) {\n return async () => {\n vi.stubEnv('EDITOR', 'vim')\n try {\n await testFn()\n } finally {\n vi.unstubAllEnvs()\n }\n }\n}\n\n// Base configuration used across tests\nconst baseConfig = {\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n}\n\nconst defaultMocks = {\n cliConfig: baseConfig,\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\n// Helper functions\nconst setupEditorMocks = () => {\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n mockExecaSync.mockReturnValue(undefined as never)\n}\n\nconst setupWatchMocks = () => {\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n}\n\ndescribe('#documents:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create one or more documents\n\n USAGE\n $ sanity documents create [FILE] [-d <value>] [--id <value>] [--json5]\n [--missing] [--replace] [--watch]\n\n ARGUMENTS\n [FILE] JSON file to create document(s) from\n\n FLAGS\n -d, --dataset=<value> Dataset to create document(s) in (overrides config)\n --id=<value> Specify a document ID to use. Will fetch remote\n document ID and populate editor.\n --json5 Use JSON5 file type to allow a \"simplified\" version of\n JSON\n --missing On duplicate document IDs, don't modify the target\n document(s)\n --replace On duplicate document IDs, replace existing document\n with specified document(s)\n --watch Write the documents whenever the target file or buffer\n changes\n\n DESCRIPTION\n Create one or more documents\n\n EXAMPLES\n Create the document specified in \"myDocument.json\"\n\n $ sanity documents create myDocument.json\n\n Open configured $EDITOR and create the specified document(s)\n\n $ sanity documents create\n\n Fetch document with the ID \"myDocId\" and open configured $EDITOR with the\n current document content (if any). Replace document with the edited version\n when the editor closes\n\n $ sanity documents create --id myDocId --replace\n\n Open configured $EDITOR and replace the document with the given content on\n each save. Use JSON5 file extension and parser for simplified syntax.\n\n $ sanity documents create --id myDocId --watch --replace --json5\n\n \"\n `)\n })\n\n test('creates document from JSON file and displays success message', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.readFile).toHaveBeenCalledWith(\n path.resolve(process.cwd(), 'test-doc.json'),\n 'utf8',\n )\n expect(mockTransaction).toHaveBeenCalledWith([{create: mockDoc}])\n })\n\n test('creates document with replace flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--replace'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Upserted:')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{createOrReplace: mockDoc}])\n })\n\n test('creates document with missing flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--missing'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{createIfNotExists: mockDoc}])\n })\n\n test(\n 'opens editor when no file specified and creates document from editor content',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n\n const {stdout} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(mockFs.mkdir).toHaveBeenCalledWith('/tmp/sanity-cli', {\n mode: 0o700,\n recursive: true,\n })\n expect(mockExecaSync).toHaveBeenCalled()\n }),\n )\n\n test('uses custom dataset from --dataset flag instead of config', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(\n CreateDocumentCommand,\n ['test-doc.json', '--dataset', 'staging'],\n {\n mocks: {\n ...defaultMocks,\n },\n },\n )\n\n expect(stdout).toContain('Created:')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('throws error when both --replace and --missing flags are used', async () => {\n const {error} = await testCommand(\n CreateDocumentCommand,\n ['test-doc.json', '--replace', '--missing'],\n {mocks: defaultMocks},\n )\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use both --replace and --missing')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when --id and file path are both provided', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--id', 'myDocId'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use --id when specifying a file path')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n },\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n dataset: undefined,\n projectId: testProjectId,\n },\n },\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('displays error message when file cannot be read', async () => {\n mockFs.readFile.mockRejectedValue(new Error('File not found'))\n\n const {error} = await testCommand(CreateDocumentCommand, ['nonexistent.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates document has required _type property', async () => {\n const invalidDoc = {title: 'Test Post'} // Missing _type\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(invalidDoc))\n mockJson5.parse.mockReturnValue(invalidDoc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test(\n 'uses JSON5 when --json5 flag is provided',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n\n await testCommand(CreateDocumentCommand, ['--json5'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(mockJson5.stringify).toHaveBeenCalled()\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('.json5'),\n expect.any(String),\n {\n encoding: 'utf8',\n mode: 0o600,\n },\n )\n }),\n )\n\n describe('validation', () => {\n test.each([\n ['non-object document', 'not an object', 'Document must be an object'],\n [\n 'document without _type',\n {title: 'Test'},\n 'Document must have a `_type` property of type string',\n ],\n ['document with empty _type', {_type: '', title: 'Test'}, 'Document _type cannot be empty'],\n [\n 'document with invalid _type format (starts with number)',\n {_type: '1invalid', title: 'Test'},\n 'Document _type must start with a letter',\n ],\n [\n 'document with invalid _type format (special chars)',\n {_type: 'invalid@type', title: 'Test'},\n 'Document _type must start with a letter and contain only alphanumeric characters',\n ],\n [\n 'document with empty _id',\n {_id: ' ', _type: 'test', title: 'Test'},\n 'Document _id cannot be empty',\n ],\n [\n 'document with invalid _id format',\n {_id: 'invalid@id', _type: 'test', title: 'Test'},\n 'Document _id can only contain alphanumeric characters',\n ],\n [\n 'document with _id too long',\n {_id: 'a'.repeat(201), _type: 'test', title: 'Test'},\n 'Document _id cannot be longer than 200 characters',\n ],\n ])('validates %s', async (description, doc, expectedErrorSubstring) => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(doc))\n mockJson5.parse.mockReturnValue(doc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n [\n 'multiple documents with invalid first document',\n [{title: 'Invalid'}, {_type: 'valid', title: 'Valid'}],\n 'Document at index 0 must have a `_type` property of type string',\n ],\n [\n 'multiple documents with invalid second document',\n [{_type: 'valid', title: 'Valid'}, {title: 'Invalid'}],\n 'Document at index 1 must have a `_type` property of type string',\n ],\n ])('validates %s', async (description, docs, expectedErrorSubstring) => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(docs))\n mockJson5.parse.mockReturnValue(docs)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-docs.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows documents with reserved fields but logs debug warning', async () => {\n const docWithReservedFields = {\n _createdAt: '2024-01-01T00:00:00Z',\n _id: 'test-doc',\n _rev: 'some-revision',\n _type: 'post',\n _updatedAt: '2024-01-02T00:00:00Z',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(docWithReservedFields))\n mockJson5.parse.mockReturnValue(docWithReservedFields)\n\n // Should not throw error, but should proceed with document creation\n const {stdout} = await testCommand(CreateDocumentCommand, ['doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{create: docWithReservedFields}])\n })\n\n test('validates empty document array throws error', async () => {\n const emptyArray: unknown[] = []\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(emptyArray))\n mockJson5.parse.mockReturnValue(emptyArray)\n\n const {error} = await testCommand(CreateDocumentCommand, ['empty-docs.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No documents provided')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('batch operations', () => {\n test.each([\n ['create', 'create', 'Created:'],\n ['createOrReplace', 'replace', 'Upserted:'],\n ['createIfNotExists', 'missing', 'Skipped (already exists):'],\n ])('handles multiple documents with %s operation', async (operation, flag, expectedMessage) => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n ]\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n {id: 'doc2', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n ],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const args = ['docs.json']\n if (flag !== 'create') args.push(`--${flag}`)\n\n const {stdout} = await testCommand(CreateDocumentCommand, args, {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain(expectedMessage)\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc2')\n\n const expectedMutations = mockDocs.map((doc) => ({[operation]: doc}))\n expect(mockTransaction).toHaveBeenCalledWith(expectedMutations)\n })\n\n test('handles mixed results for createIfNotExists', async () => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n {_id: 'doc3', _type: 'post', title: 'Post 3'},\n ]\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'create'}, // Created\n {id: 'doc2', operation: 'update'}, // Skipped (already exists)\n {id: 'doc3', operation: 'create'}, // Created\n ],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['docs.json', '--missing'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc3')\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('doc2')\n })\n })\n\n describe('editor workflow', () => {\n test(\n 'fetches existing document with --id flag',\n withEditorEnv(async () => {\n const existingDoc = {\n _id: 'existing-doc',\n _type: 'post',\n title: 'Existing Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'existing-doc', operation: 'update'}],\n }),\n } as never)\n\n const mockGetDocument = vi.fn().mockResolvedValue(existingDoc)\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify({...existingDoc, title: 'Updated Post'}))\n mockJson5.parse.mockReturnValue({...existingDoc, title: 'Updated Post'})\n mockJson5.stringify.mockReturnValue(JSON.stringify(existingDoc, null, 2))\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--id', 'existing-doc'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(mockGetDocument).toHaveBeenCalledWith('existing-doc')\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('existing-doc.json'),\n JSON.stringify(existingDoc, null, 2),\n expect.objectContaining({mode: 0o600}),\n )\n expect(stdout).toContain('Created:')\n }),\n )\n\n test(\n 'handles no changes made in editor',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn()\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n\n // Set up a predictable UUID so the test can verify no changes were made\n const testUuid = '123e4567-e89b-12d3-a456-426614174000'\n mockRandomUUID.mockReturnValue(testUuid)\n\n const defaultDoc = {\n _id: testUuid,\n _type: 'specify-me',\n }\n\n // First mock the writeFile call for initial template\n const writeFileContent = JSON.stringify(defaultDoc, null, 2)\n mockJson5.stringify.mockReturnValue(writeFileContent)\n\n // Set up the file read to return the exact same content structure\n mockFs.readFile.mockResolvedValue(writeFileContent)\n // Return the exact same object structure that was written\n mockJson5.parse.mockReturnValue(defaultDoc)\n\n await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // The key test - transaction should not have been called since no changes were made\n expect(mockTransaction).not.toHaveBeenCalled()\n }),\n )\n\n test(\n 'handles write error with already exists hint',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockRejectedValue(new Error('Document already exists')),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {error} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to write documents: Document already exists')\n expect(error?.message).toContain('Perhaps you want to use `--replace` or `--missing`?')\n expect(error?.oclif?.exit).toBe(1)\n }),\n )\n\n test(\n 'handles file cleanup errors silently',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n // Mock unlink to throw an error (should be caught silently)\n mockFs.unlink.mockRejectedValue(new Error('Permission denied'))\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {stdout} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // Should still succeed despite file cleanup error\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.unlink).toHaveBeenCalled()\n }),\n )\n })\n\n describe('watch mode', () => {\n test(\n 'enables watch mode and logs appropriate messages',\n withEditorEnv(async () => {\n const mockWatcher = {\n on: vi.fn().mockReturnThis(),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--watch'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Watch mode:')\n expect(stdout).toContain('Will write documents on each save.')\n expect(stdout).toContain('Press Ctrl + C to cancel watch mode.')\n expect(mockWatcher.on).toHaveBeenCalledWith('change', expect.any(Function))\n expect(mockExeca).toHaveBeenCalledWith('vim', expect.any(Array), {stdio: 'inherit'})\n expect(mockChokidarWatch).toHaveBeenCalledWith(expect.stringContaining('.json'))\n }),\n )\n\n test(\n 'handles file change events in watch mode',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Updated Post',\n }\n\n let changeHandler: () => Promise<void>\n const mockWatcher = {\n on: vi.fn().mockImplementation((event: string, handler: () => Promise<void>) => {\n if (event === 'change') {\n changeHandler = handler\n }\n return mockWatcher\n }),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n // Mock file read to return different content for file change\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n await testCommand(CreateDocumentCommand, ['--watch'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // Simulate file change\n expect(changeHandler!).toBeDefined()\n await changeHandler!()\n\n expect(mockTransaction).toHaveBeenCalledWith([{create: mockDoc}])\n }),\n )\n })\n})\n"],"names":["randomUUID","fs","os","path","runCommand","getProjectCliClient","testCommand","watch","chokidarWatch","execa","execaSync","json5","afterEach","describe","expect","test","vi","NO_PROJECT_ID","CreateDocumentCommand","mock","fn","actual","importActual","mockFs","mocked","mockOs","mockChokidarWatch","mockExeca","mockExecaSync","mockJson5","mockRandomUUID","mockGetProjectCliClient","testProjectId","testDataset","withEditorEnv","testFn","stubEnv","unstubAllEnvs","baseConfig","api","dataset","projectId","defaultMocks","cliConfig","projectRoot","directory","type","token","setupEditorMocks","tmpdir","mockReturnValue","mkdir","mockResolvedValue","undefined","writeFile","unlink","setupWatchMocks","clearAllMocks","stdout","toMatchInlineSnapshot","mockDoc","_id","_type","title","mockTransaction","commit","results","id","operation","transaction","readFile","JSON","stringify","parse","mocks","toContain","toHaveBeenCalledWith","resolve","process","cwd","create","createOrReplace","createIfNotExists","getDocument","mode","recursive","toHaveBeenCalled","objectContaining","error","toBeInstanceOf","Error","message","oclif","exit","toBe","toEqual","mockRejectedValue","invalidDoc","stringContaining","any","String","encoding","each","repeat","description","doc","expectedErrorSubstring","docs","docWithReservedFields","_createdAt","_rev","_updatedAt","emptyArray","flag","expectedMessage","mockDocs","args","push","expectedMutations","map","existingDoc","mockGetDocument","testUuid","defaultDoc","writeFileContent","not","mockWatcher","on","mockReturnThis","Function","Array","stdio","changeHandler","mockImplementation","event","handler","toBeDefined"],"mappings":"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"}
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { testCommand } from '@sanity/cli-test';
|
|
3
|
-
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
4
|
-
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
5
|
-
import { DeleteDocumentCommand } from '../delete.js';
|
|
6
|
-
const testProjectId = 'test-project';
|
|
7
|
-
const testDataset = 'production';
|
|
8
|
-
const defaultMocks = {
|
|
9
|
-
cliConfig: {
|
|
10
|
-
api: {
|
|
11
|
-
dataset: testDataset,
|
|
12
|
-
projectId: testProjectId
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
projectRoot: {
|
|
16
|
-
directory: '/test/path',
|
|
17
|
-
path: '/test/path/sanity.config.ts',
|
|
18
|
-
type: 'studio'
|
|
19
|
-
},
|
|
20
|
-
token: 'test-token'
|
|
21
|
-
};
|
|
22
|
-
const mockTransaction = vi.hoisted(()=>vi.fn());
|
|
23
|
-
const mockGetProjectCliClient = vi.hoisted(()=>vi.fn().mockResolvedValue({
|
|
24
|
-
transaction: mockTransaction
|
|
25
|
-
}));
|
|
26
|
-
vi.mock('@sanity/cli-core', async ()=>{
|
|
27
|
-
const actual = await vi.importActual('@sanity/cli-core');
|
|
28
|
-
return {
|
|
29
|
-
...actual,
|
|
30
|
-
getProjectCliClient: mockGetProjectCliClient
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
describe('#documents:delete', ()=>{
|
|
34
|
-
afterEach(()=>{
|
|
35
|
-
vi.clearAllMocks();
|
|
36
|
-
});
|
|
37
|
-
test('--help works', async ()=>{
|
|
38
|
-
const { stdout } = await runCommand([
|
|
39
|
-
'documents delete',
|
|
40
|
-
'--help'
|
|
41
|
-
]);
|
|
42
|
-
expect(stdout).toMatchInlineSnapshot(`
|
|
43
|
-
"Delete one or more documents from the projects configured dataset
|
|
44
|
-
|
|
45
|
-
USAGE
|
|
46
|
-
$ sanity documents delete ID... [IDS...] [--dataset <value>]
|
|
47
|
-
|
|
48
|
-
ARGUMENTS
|
|
49
|
-
ID... Document ID to delete
|
|
50
|
-
[IDS...] Additional document IDs to delete
|
|
51
|
-
|
|
52
|
-
FLAGS
|
|
53
|
-
--dataset=<value> NAME to override dataset
|
|
54
|
-
|
|
55
|
-
DESCRIPTION
|
|
56
|
-
Delete one or more documents from the projects configured dataset
|
|
57
|
-
|
|
58
|
-
EXAMPLES
|
|
59
|
-
Delete the document with the ID "myDocId"
|
|
60
|
-
|
|
61
|
-
$ sanity documents delete myDocId
|
|
62
|
-
|
|
63
|
-
ID wrapped in double or single quote works equally well
|
|
64
|
-
|
|
65
|
-
$ sanity documents delete 'myDocId'
|
|
66
|
-
|
|
67
|
-
Delete document with ID "someDocId" from dataset "blog"
|
|
68
|
-
|
|
69
|
-
$ sanity documents delete --dataset=blog someDocId
|
|
70
|
-
|
|
71
|
-
Delete the document with ID "doc1" and "doc2"
|
|
72
|
-
|
|
73
|
-
$ sanity documents delete doc1 doc2
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
`);
|
|
77
|
-
});
|
|
78
|
-
test('deletes a single document successfully', async ()=>{
|
|
79
|
-
const mockDelete = vi.fn();
|
|
80
|
-
const mockCommit = vi.fn().mockResolvedValue({
|
|
81
|
-
results: [
|
|
82
|
-
{
|
|
83
|
-
id: 'test-doc',
|
|
84
|
-
operation: 'delete'
|
|
85
|
-
}
|
|
86
|
-
]
|
|
87
|
-
});
|
|
88
|
-
mockTransaction.mockReturnValue({
|
|
89
|
-
commit: mockCommit,
|
|
90
|
-
delete: mockDelete
|
|
91
|
-
});
|
|
92
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
93
|
-
'test-doc'
|
|
94
|
-
], {
|
|
95
|
-
mocks: defaultMocks
|
|
96
|
-
});
|
|
97
|
-
expect(stdout).toContain('Deleted 1 document');
|
|
98
|
-
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
99
|
-
expect(mockCommit).toHaveBeenCalled();
|
|
100
|
-
});
|
|
101
|
-
test('deletes multiple documents successfully', async ()=>{
|
|
102
|
-
const mockDelete = vi.fn();
|
|
103
|
-
const mockCommit = vi.fn().mockResolvedValue({
|
|
104
|
-
results: [
|
|
105
|
-
{
|
|
106
|
-
id: 'doc1',
|
|
107
|
-
operation: 'delete'
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
id: 'doc2',
|
|
111
|
-
operation: 'delete'
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
id: 'doc3',
|
|
115
|
-
operation: 'delete'
|
|
116
|
-
}
|
|
117
|
-
]
|
|
118
|
-
});
|
|
119
|
-
mockTransaction.mockReturnValue({
|
|
120
|
-
commit: mockCommit,
|
|
121
|
-
delete: mockDelete
|
|
122
|
-
});
|
|
123
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
124
|
-
'doc1',
|
|
125
|
-
'doc2',
|
|
126
|
-
'doc3'
|
|
127
|
-
], {
|
|
128
|
-
mocks: defaultMocks
|
|
129
|
-
});
|
|
130
|
-
expect(stdout).toContain('Deleted 3 documents');
|
|
131
|
-
expect(mockDelete).toHaveBeenCalledWith('doc1');
|
|
132
|
-
expect(mockDelete).toHaveBeenCalledWith('doc2');
|
|
133
|
-
expect(mockDelete).toHaveBeenCalledWith('doc3');
|
|
134
|
-
expect(mockCommit).toHaveBeenCalled();
|
|
135
|
-
});
|
|
136
|
-
test('handles documents not found', async ()=>{
|
|
137
|
-
const mockDelete = vi.fn();
|
|
138
|
-
const mockCommit = vi.fn().mockResolvedValue({
|
|
139
|
-
results: [
|
|
140
|
-
{
|
|
141
|
-
id: 'doc1',
|
|
142
|
-
operation: 'delete'
|
|
143
|
-
}
|
|
144
|
-
]
|
|
145
|
-
});
|
|
146
|
-
mockTransaction.mockReturnValue({
|
|
147
|
-
commit: mockCommit,
|
|
148
|
-
delete: mockDelete
|
|
149
|
-
});
|
|
150
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
151
|
-
'doc1',
|
|
152
|
-
'nonexistent-doc'
|
|
153
|
-
], {
|
|
154
|
-
mocks: defaultMocks
|
|
155
|
-
});
|
|
156
|
-
expect(error).toBeInstanceOf(Error);
|
|
157
|
-
expect(error?.message).toContain('Document not found: nonexistent-doc');
|
|
158
|
-
expect(mockDelete).toHaveBeenCalledWith('doc1');
|
|
159
|
-
expect(mockDelete).toHaveBeenCalledWith('nonexistent-doc');
|
|
160
|
-
expect(mockCommit).toHaveBeenCalled();
|
|
161
|
-
});
|
|
162
|
-
test('uses custom dataset when --dataset flag is provided', async ()=>{
|
|
163
|
-
const mockDelete = vi.fn();
|
|
164
|
-
const mockCommit = vi.fn().mockResolvedValue({
|
|
165
|
-
results: [
|
|
166
|
-
{
|
|
167
|
-
id: 'test-doc',
|
|
168
|
-
operation: 'delete'
|
|
169
|
-
}
|
|
170
|
-
]
|
|
171
|
-
});
|
|
172
|
-
mockTransaction.mockReturnValue({
|
|
173
|
-
commit: mockCommit,
|
|
174
|
-
delete: mockDelete
|
|
175
|
-
});
|
|
176
|
-
await testCommand(DeleteDocumentCommand, [
|
|
177
|
-
'test-doc',
|
|
178
|
-
'--dataset',
|
|
179
|
-
'staging'
|
|
180
|
-
], {
|
|
181
|
-
mocks: defaultMocks
|
|
182
|
-
});
|
|
183
|
-
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
184
|
-
// Verify that the projectApiClient was called with the staging dataset
|
|
185
|
-
expect(mockGetProjectCliClient).toHaveBeenCalledWith(expect.objectContaining({
|
|
186
|
-
dataset: 'staging',
|
|
187
|
-
projectId: testProjectId
|
|
188
|
-
}));
|
|
189
|
-
});
|
|
190
|
-
test('throws error when no project ID is configured', async ()=>{
|
|
191
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
192
|
-
'test-doc'
|
|
193
|
-
], {
|
|
194
|
-
mocks: {
|
|
195
|
-
...defaultMocks,
|
|
196
|
-
cliConfig: {
|
|
197
|
-
api: {
|
|
198
|
-
dataset: testDataset,
|
|
199
|
-
projectId: undefined
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
expect(error).toBeInstanceOf(Error);
|
|
205
|
-
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
206
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
207
|
-
});
|
|
208
|
-
test('throws error when no dataset is configured and none provided', async ()=>{
|
|
209
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
210
|
-
'test-doc'
|
|
211
|
-
], {
|
|
212
|
-
mocks: {
|
|
213
|
-
...defaultMocks,
|
|
214
|
-
cliConfig: {
|
|
215
|
-
api: {
|
|
216
|
-
dataset: undefined,
|
|
217
|
-
projectId: testProjectId
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
expect(error).toBeInstanceOf(Error);
|
|
223
|
-
expect(error?.message).toContain('No dataset specified');
|
|
224
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
225
|
-
});
|
|
226
|
-
test('handles transaction errors gracefully', async ()=>{
|
|
227
|
-
const mockDelete = vi.fn();
|
|
228
|
-
const mockCommit = vi.fn().mockRejectedValue(new Error('Transaction failed'));
|
|
229
|
-
mockTransaction.mockReturnValue({
|
|
230
|
-
commit: mockCommit,
|
|
231
|
-
delete: mockDelete
|
|
232
|
-
});
|
|
233
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
234
|
-
'test-doc'
|
|
235
|
-
], {
|
|
236
|
-
mocks: defaultMocks
|
|
237
|
-
});
|
|
238
|
-
expect(error).toBeInstanceOf(Error);
|
|
239
|
-
expect(error?.message).toContain('Failed to delete 1 document: Transaction failed');
|
|
240
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
241
|
-
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
242
|
-
});
|
|
243
|
-
test('requires document ID argument', async ()=>{
|
|
244
|
-
const { error } = await testCommand(DeleteDocumentCommand, [], {
|
|
245
|
-
mocks: defaultMocks
|
|
246
|
-
});
|
|
247
|
-
expect(error).toBeInstanceOf(Error);
|
|
248
|
-
expect(error?.message).toContain('Missing 1 required arg');
|
|
249
|
-
});
|
|
250
|
-
test('shows singular message when deleting one document', async ()=>{
|
|
251
|
-
const mockDelete = vi.fn();
|
|
252
|
-
const mockCommit = vi.fn().mockResolvedValue({
|
|
253
|
-
results: [
|
|
254
|
-
{
|
|
255
|
-
id: 'test-doc',
|
|
256
|
-
operation: 'delete'
|
|
257
|
-
}
|
|
258
|
-
]
|
|
259
|
-
});
|
|
260
|
-
mockTransaction.mockReturnValue({
|
|
261
|
-
commit: mockCommit,
|
|
262
|
-
delete: mockDelete
|
|
263
|
-
});
|
|
264
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
265
|
-
'test-doc'
|
|
266
|
-
], {
|
|
267
|
-
mocks: defaultMocks
|
|
268
|
-
});
|
|
269
|
-
expect(stdout).toContain('Deleted 1 document');
|
|
270
|
-
expect(stdout).not.toContain('documents');
|
|
271
|
-
});
|
|
272
|
-
test('shows plural message when deleting multiple documents', async ()=>{
|
|
273
|
-
const mockDelete = vi.fn();
|
|
274
|
-
const mockCommit = vi.fn().mockResolvedValue({
|
|
275
|
-
results: [
|
|
276
|
-
{
|
|
277
|
-
id: 'doc1',
|
|
278
|
-
operation: 'delete'
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
id: 'doc2',
|
|
282
|
-
operation: 'delete'
|
|
283
|
-
}
|
|
284
|
-
]
|
|
285
|
-
});
|
|
286
|
-
mockTransaction.mockReturnValue({
|
|
287
|
-
commit: mockCommit,
|
|
288
|
-
delete: mockDelete
|
|
289
|
-
});
|
|
290
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
291
|
-
'doc1',
|
|
292
|
-
'doc2'
|
|
293
|
-
], {
|
|
294
|
-
mocks: defaultMocks
|
|
295
|
-
});
|
|
296
|
-
expect(stdout).toContain('Deleted 2 documents');
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
//# sourceMappingURL=delete.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/documents/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DeleteDocumentCommand} from '../delete.js'\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: testDataset, projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\nconst mockTransaction = vi.hoisted(() => vi.fn())\nconst mockGetProjectCliClient = vi.hoisted(() =>\n vi.fn().mockResolvedValue({\n transaction: mockTransaction,\n }),\n)\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: mockGetProjectCliClient,\n }\n})\n\ndescribe('#documents:delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents delete', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete one or more documents from the projects configured dataset\n\n USAGE\n $ sanity documents delete ID... [IDS...] [--dataset <value>]\n\n ARGUMENTS\n ID... Document ID to delete\n [IDS...] Additional document IDs to delete\n\n FLAGS\n --dataset=<value> NAME to override dataset\n\n DESCRIPTION\n Delete one or more documents from the projects configured dataset\n\n EXAMPLES\n Delete the document with the ID \"myDocId\"\n\n $ sanity documents delete myDocId\n\n ID wrapped in double or single quote works equally well\n\n $ sanity documents delete 'myDocId'\n\n Delete document with ID \"someDocId\" from dataset \"blog\"\n\n $ sanity documents delete --dataset=blog someDocId\n\n Delete the document with ID \"doc1\" and \"doc2\"\n\n $ sanity documents delete doc1 doc2\n\n \"\n `)\n })\n\n test('deletes a single document successfully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 1 document')\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('deletes multiple documents successfully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n {id: 'doc3', operation: 'delete'},\n ],\n })\n\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2', 'doc3'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 3 documents')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('doc2')\n expect(mockDelete).toHaveBeenCalledWith('doc3')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('handles documents not found', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'doc1', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['doc1', 'nonexistent-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document not found: nonexistent-doc')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('nonexistent-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n await testCommand(DeleteDocumentCommand, ['test-doc', '--dataset', 'staging'], {\n mocks: defaultMocks,\n })\n\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n // Verify that the projectApiClient was called with the staging dataset\n expect(mockGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n projectId: testProjectId,\n }),\n )\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: testDataset, projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: undefined, projectId: testProjectId}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles transaction errors gracefully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockRejectedValue(new Error('Transaction failed'))\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to delete 1 document: Transaction failed')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n })\n\n test('shows singular message when deleting one document', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 1 document')\n expect(stdout).not.toContain('documents')\n })\n\n test('shows plural message when deleting multiple documents', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n ],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 2 documents')\n })\n})\n"],"names":["runCommand","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDocumentCommand","testProjectId","testDataset","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","mockTransaction","hoisted","fn","mockGetProjectCliClient","mockResolvedValue","transaction","mock","actual","importActual","getProjectCliClient","clearAllMocks","stdout","toMatchInlineSnapshot","mockDelete","mockCommit","results","id","operation","mockReturnValue","commit","delete","mocks","toContain","toHaveBeenCalledWith","toHaveBeenCalled","error","toBeInstanceOf","Error","message","objectContaining","undefined","toEqual","oclif","exit","toBe","mockRejectedValue","not"],"mappings":"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"}
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { chalk } from '@sanity/cli-core/ux';
|
|
3
|
-
import { testCommand } from '@sanity/cli-test';
|
|
4
|
-
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
5
|
-
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
6
|
-
import { GetDocumentCommand } from '../get.js';
|
|
7
|
-
const testProjectId = 'test-project';
|
|
8
|
-
const testDataset = 'production';
|
|
9
|
-
const defaultMocks = {
|
|
10
|
-
cliConfig: {
|
|
11
|
-
api: {
|
|
12
|
-
dataset: testDataset,
|
|
13
|
-
projectId: testProjectId
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
projectRoot: {
|
|
17
|
-
directory: '/test/path',
|
|
18
|
-
path: '/test/path/sanity.config.ts',
|
|
19
|
-
type: 'studio'
|
|
20
|
-
},
|
|
21
|
-
token: 'test-token'
|
|
22
|
-
};
|
|
23
|
-
const mockGetDocument = vi.hoisted(()=>vi.fn());
|
|
24
|
-
vi.mock('@sanity/cli-core', async ()=>{
|
|
25
|
-
const actual = await vi.importActual('@sanity/cli-core');
|
|
26
|
-
return {
|
|
27
|
-
...actual,
|
|
28
|
-
getProjectCliClient: vi.fn().mockResolvedValue({
|
|
29
|
-
getDocument: mockGetDocument
|
|
30
|
-
})
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
describe('#documents:get', ()=>{
|
|
34
|
-
afterEach(()=>{
|
|
35
|
-
vi.clearAllMocks();
|
|
36
|
-
});
|
|
37
|
-
test('--help works', async ()=>{
|
|
38
|
-
const { stdout } = await runCommand([
|
|
39
|
-
'documents get',
|
|
40
|
-
'--help'
|
|
41
|
-
]);
|
|
42
|
-
expect(stdout).toContain('Get and print a document by ID');
|
|
43
|
-
expect(stdout).toContain('ARGUMENTS');
|
|
44
|
-
expect(stdout).toContain('DOCUMENTID');
|
|
45
|
-
});
|
|
46
|
-
test('retrieves and displays a document successfully', async ()=>{
|
|
47
|
-
const mockDoc = {
|
|
48
|
-
_id: 'test-doc',
|
|
49
|
-
_type: 'post',
|
|
50
|
-
content: 'This is a test post',
|
|
51
|
-
title: 'Test Post'
|
|
52
|
-
};
|
|
53
|
-
mockGetDocument.mockResolvedValue(mockDoc);
|
|
54
|
-
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
55
|
-
'test-doc'
|
|
56
|
-
], {
|
|
57
|
-
mocks: defaultMocks
|
|
58
|
-
});
|
|
59
|
-
expect(stdout).toContain('"_id": "test-doc"');
|
|
60
|
-
expect(stdout).toContain('"title": "Test Post"');
|
|
61
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
62
|
-
});
|
|
63
|
-
test('displays colorized output when --pretty flag is used', async ()=>{
|
|
64
|
-
const mockDoc = {
|
|
65
|
-
_id: 'test-doc',
|
|
66
|
-
_type: 'post',
|
|
67
|
-
title: 'Test Post'
|
|
68
|
-
};
|
|
69
|
-
mockGetDocument.mockResolvedValue(mockDoc);
|
|
70
|
-
const originalChalkLevel = chalk.level;
|
|
71
|
-
// Force colorization
|
|
72
|
-
chalk.level = 3;
|
|
73
|
-
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
74
|
-
'test-doc',
|
|
75
|
-
'--pretty'
|
|
76
|
-
], {
|
|
77
|
-
capture: {
|
|
78
|
-
stripAnsi: false
|
|
79
|
-
},
|
|
80
|
-
mocks: defaultMocks
|
|
81
|
-
});
|
|
82
|
-
// Reset chalk level
|
|
83
|
-
chalk.level = originalChalkLevel;
|
|
84
|
-
// Check that the output contains the document data
|
|
85
|
-
expect(stdout).toContain('test-doc');
|
|
86
|
-
expect(stdout).toContain('Test Post');
|
|
87
|
-
expect(stdout).toContain('_id');
|
|
88
|
-
expect(stdout).toContain('_type');
|
|
89
|
-
expect(stdout).toContain('title');
|
|
90
|
-
// eslint-disable-next-line no-control-regex
|
|
91
|
-
expect(stdout).toMatch(/\u001B\[\d+m/);
|
|
92
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
93
|
-
});
|
|
94
|
-
test('uses custom dataset when --dataset flag is provided', async ()=>{
|
|
95
|
-
const mockDoc = {
|
|
96
|
-
_id: 'test-doc',
|
|
97
|
-
_type: 'post',
|
|
98
|
-
title: 'Test Post'
|
|
99
|
-
};
|
|
100
|
-
mockGetDocument.mockResolvedValue(mockDoc);
|
|
101
|
-
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
102
|
-
'test-doc',
|
|
103
|
-
'--dataset',
|
|
104
|
-
'staging'
|
|
105
|
-
], {
|
|
106
|
-
mocks: defaultMocks
|
|
107
|
-
});
|
|
108
|
-
expect(stdout).toContain('"_id": "test-doc"');
|
|
109
|
-
expect(stdout).toContain('"title": "Test Post"');
|
|
110
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
111
|
-
});
|
|
112
|
-
test('throws error when document is not found', async ()=>{
|
|
113
|
-
mockGetDocument.mockResolvedValue(null);
|
|
114
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
115
|
-
'nonexistent-doc'
|
|
116
|
-
], {
|
|
117
|
-
mocks: defaultMocks
|
|
118
|
-
});
|
|
119
|
-
expect(error).toBeInstanceOf(Error);
|
|
120
|
-
expect(error?.message).toContain('Document "nonexistent-doc" not found');
|
|
121
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
122
|
-
expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc');
|
|
123
|
-
});
|
|
124
|
-
test('throws error when no project ID is configured', async ()=>{
|
|
125
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
126
|
-
'test-doc'
|
|
127
|
-
], {
|
|
128
|
-
mocks: {
|
|
129
|
-
...defaultMocks,
|
|
130
|
-
cliConfig: {
|
|
131
|
-
api: {
|
|
132
|
-
dataset: 'production',
|
|
133
|
-
projectId: undefined
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
expect(error).toBeInstanceOf(Error);
|
|
139
|
-
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
140
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
141
|
-
});
|
|
142
|
-
test('throws error when no dataset is configured and none provided', async ()=>{
|
|
143
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
144
|
-
'test-doc'
|
|
145
|
-
], {
|
|
146
|
-
mocks: {
|
|
147
|
-
...defaultMocks,
|
|
148
|
-
cliConfig: {
|
|
149
|
-
api: {
|
|
150
|
-
dataset: undefined,
|
|
151
|
-
projectId: testProjectId
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
expect(error).toBeInstanceOf(Error);
|
|
157
|
-
expect(error?.message).toContain('No dataset specified');
|
|
158
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
159
|
-
});
|
|
160
|
-
test('handles client errors gracefully', async ()=>{
|
|
161
|
-
mockGetDocument.mockRejectedValue(new Error('Network error'));
|
|
162
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
163
|
-
'test-doc'
|
|
164
|
-
], {
|
|
165
|
-
mocks: defaultMocks
|
|
166
|
-
});
|
|
167
|
-
expect(error).toBeInstanceOf(Error);
|
|
168
|
-
expect(error?.message).toContain('Failed to fetch document');
|
|
169
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
170
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
171
|
-
});
|
|
172
|
-
test('requires document ID argument', async ()=>{
|
|
173
|
-
const { error } = await testCommand(GetDocumentCommand, [], {
|
|
174
|
-
mocks: defaultMocks
|
|
175
|
-
});
|
|
176
|
-
expect(error).toBeInstanceOf(Error);
|
|
177
|
-
expect(error?.message).toContain('Missing 1 required arg');
|
|
178
|
-
expect(error?.oclif?.exit).toBe(2);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
//# sourceMappingURL=get.test.js.map
|