@sanity/cli 6.0.0-alpha.4 → 6.0.0-alpha.5
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/dev/startStudioDevServer.js +3 -8
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/dev/types.d.ts +1 -3
- package/dist/actions/dev/types.js.map +1 -1
- package/dist/actions/documents/validate.d.ts +0 -2
- package/dist/actions/documents/validate.js +21 -1
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/exec/execScript.js +1 -1
- package/dist/actions/exec/execScript.js.map +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +1 -4
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
- package/dist/actions/schema/deleteSchemaAction.js +12 -17
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.d.ts +15 -0
- package/dist/actions/schema/deploySchemas.js +98 -0
- package/dist/actions/schema/deploySchemas.js.map +1 -0
- package/dist/actions/schema/listSchemas.d.ts +12 -0
- package/dist/actions/schema/listSchemas.js +119 -0
- package/dist/actions/schema/listSchemas.js.map +1 -0
- package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
- package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
- package/dist/actions/schema/utils/debug.d.ts +2 -0
- package/dist/actions/schema/utils/debug.js +5 -0
- package/dist/actions/schema/utils/debug.js.map +1 -0
- package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
- package/dist/actions/schema/utils/manifestExtractor.js +12 -17
- package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
- package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
- package/dist/actions/schema/utils/manifestReader.js +6 -12
- package/dist/actions/schema/utils/manifestReader.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
- package/dist/actions/schema/utils/schemaStoreValidation.js +38 -125
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
- package/dist/actions/users/getMembersForProject.d.ts +1 -3
- package/dist/actions/users/getMembersForProject.js +6 -17
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/types.d.ts +0 -11
- package/dist/actions/users/types.js.map +1 -1
- package/dist/commands/__tests__/debug.test.js +113 -220
- package/dist/commands/__tests__/debug.test.js.map +1 -1
- package/dist/commands/__tests__/deploy.test.js +325 -293
- package/dist/commands/__tests__/deploy.test.js.map +1 -1
- package/dist/commands/__tests__/dev.test.js +62 -19
- package/dist/commands/__tests__/dev.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +40 -27
- package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.create-new-project.test.js +84 -85
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.plan.test.js +103 -44
- package/dist/commands/__tests__/init/init.plan.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.setup.test.js +85 -29
- package/dist/commands/__tests__/init/init.setup.test.js.map +1 -1
- package/dist/commands/__tests__/install.test.js +46 -22
- package/dist/commands/__tests__/install.test.js.map +1 -1
- package/dist/commands/__tests__/logout.test.js +8 -5
- package/dist/commands/__tests__/logout.test.js.map +1 -1
- package/dist/commands/__tests__/manage.test.js +29 -24
- package/dist/commands/__tests__/manage.test.js.map +1 -1
- package/dist/commands/__tests__/versions.test.js +22 -14
- package/dist/commands/__tests__/versions.test.js.map +1 -1
- package/dist/commands/backup/__tests__/disable.test.js +72 -75
- package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/download.test.js +166 -77
- package/dist/commands/backup/__tests__/download.test.js.map +1 -1
- package/dist/commands/backup/__tests__/enable.test.js +109 -140
- package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/list.test.js +84 -75
- package/dist/commands/backup/__tests__/list.test.js.map +1 -1
- package/dist/commands/backup/disable.js +5 -11
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/enable.js +5 -11
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +7 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/cors/__tests__/add.test.js +68 -38
- package/dist/commands/cors/__tests__/add.test.js.map +1 -1
- package/dist/commands/cors/__tests__/delete.test.js +52 -37
- package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
- package/dist/commands/cors/__tests__/list.test.js +80 -57
- package/dist/commands/cors/__tests__/list.test.js.map +1 -1
- package/dist/commands/cors/add.js +5 -13
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +7 -15
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +2 -10
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/__tests__/copy.test.js +197 -89
- package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/create.test.js +147 -117
- package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/delete.test.js +75 -68
- package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/export.test.js +123 -83
- package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/list.test.js +107 -65
- package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
- package/dist/commands/dataset/export.js +4 -4
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
- package/dist/commands/dev.js +0 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs/__tests__/search.test.js +8 -7
- package/dist/commands/docs/__tests__/search.test.js.map +1 -1
- package/dist/commands/documents/__tests__/create.test.js +328 -265
- package/dist/commands/documents/__tests__/create.test.js.map +1 -1
- package/dist/commands/documents/__tests__/delete.test.js +119 -87
- package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
- package/dist/commands/documents/__tests__/get.test.js +68 -95
- package/dist/commands/documents/__tests__/get.test.js.map +1 -1
- package/dist/commands/documents/__tests__/query.test.js +84 -189
- package/dist/commands/documents/__tests__/query.test.js.map +1 -1
- package/dist/commands/documents/__tests__/validate.test.js +52 -29
- package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
- package/dist/commands/documents/create.d.ts +1 -0
- package/dist/commands/documents/create.js +10 -9
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +2 -3
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +2 -3
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +2 -3
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +0 -20
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/__tests__/list.test.js +57 -45
- package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
- package/dist/commands/graphql/list.js +2 -2
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +4 -9
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/__tests__/attempt.test.js +48 -33
- package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
- package/dist/commands/hook/__tests__/create.test.js +49 -51
- package/dist/commands/hook/__tests__/create.test.js.map +1 -1
- package/dist/commands/hook/__tests__/delete.test.js +43 -30
- package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
- package/dist/commands/hook/__tests__/list.test.js +38 -31
- package/dist/commands/hook/__tests__/list.test.js.map +1 -1
- package/dist/commands/hook/__tests__/logs.test.js +68 -40
- package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
- package/dist/commands/hook/create.js +2 -6
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +5 -17
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +2 -8
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/manifest/__tests__/extract.test.js +22 -13
- package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
- package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/export.test.js +365 -66
- package/dist/commands/media/__tests__/export.test.js.map +1 -1
- package/dist/commands/media/__tests__/import.test.js +171 -105
- package/dist/commands/media/__tests__/import.test.js.map +1 -1
- package/dist/commands/media/export.js +2 -2
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +2 -2
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/projects/__tests__/list.test.js +5 -4
- package/dist/commands/projects/__tests__/list.test.js.map +1 -1
- package/dist/commands/projects/list.js +2 -6
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/__tests__/delete.test.js +396 -151
- package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
- package/dist/commands/schema/__tests__/deploy.test.js +348 -0
- package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
- package/dist/commands/schema/__tests__/extract.test.js +19 -11
- package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
- package/dist/commands/schema/__tests__/list.test.js +399 -0
- package/dist/commands/schema/__tests__/list.test.js.map +1 -0
- package/dist/commands/schema/__tests__/validate.test.js +27 -10
- package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
- package/dist/commands/schema/delete.d.ts +1 -1
- package/dist/commands/schema/delete.js +20 -23
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.d.ts +16 -0
- package/dist/commands/schema/deploy.js +98 -0
- package/dist/commands/schema/deploy.js.map +1 -0
- package/dist/commands/schema/list.d.ts +15 -0
- package/dist/commands/schema/list.js +104 -0
- package/dist/commands/schema/list.js.map +1 -0
- package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/status.test.js +7 -5
- package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/add.test.js +55 -40
- package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/delete.test.js +72 -42
- package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/list.test.js +87 -60
- package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
- package/dist/commands/tokens/add.js +3 -5
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/users/__tests__/invite.test.js +100 -79
- package/dist/commands/users/__tests__/invite.test.js.map +1 -1
- package/dist/commands/users/__tests__/list.test.js +186 -180
- package/dist/commands/users/__tests__/list.test.js.map +1 -1
- package/dist/commands/users/invite.js +6 -17
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +4 -7
- package/dist/commands/users/list.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +4 -4
- package/dist/services/backup.d.ts +8 -0
- package/dist/services/backup.js +19 -0
- package/dist/services/backup.js.map +1 -1
- package/dist/services/cors.d.ts +23 -0
- package/dist/services/cors.js +38 -0
- package/dist/services/cors.js.map +1 -0
- package/dist/services/graphql.d.ts +7 -0
- package/dist/services/graphql.js +11 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/hooks.d.ts +2 -0
- package/dist/services/hooks.js +19 -0
- package/dist/services/hooks.js.map +1 -1
- package/dist/services/organizations.d.ts +1 -1
- package/dist/services/organizations.js +1 -1
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/projects.d.ts +11 -0
- package/dist/services/projects.js +41 -0
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.d.ts +4 -0
- package/dist/services/schemas.js +40 -0
- package/dist/services/schemas.js.map +1 -0
- package/dist/services/user.d.ts +8 -0
- package/dist/services/user.js +15 -2
- package/dist/services/user.js.map +1 -1
- package/dist/util/__tests__/getCliVersion.test.js +2 -2
- package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
- package/dist/util/errorMessages.d.ts +1 -0
- package/dist/util/errorMessages.js +1 -0
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/readPackageJson.d.ts +1 -15
- package/dist/util/readPackageJson.js +1 -1
- package/dist/util/readPackageJson.js.map +1 -1
- package/dist/util/uniqBy.d.ts +1 -0
- package/dist/util/uniqBy.js +14 -0
- package/dist/util/uniqBy.js.map +1 -0
- package/oclif.manifest.json +172 -27
- package/package.json +27 -28
- package/dist/actions/cors/constants.d.ts +0 -1
- package/dist/actions/cors/constants.js +0 -3
- package/dist/actions/cors/constants.js.map +0 -1
- package/dist/actions/cors/types.d.ts +0 -9
- package/dist/actions/cors/types.js +0 -3
- package/dist/actions/cors/types.js.map +0 -1
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
- package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
- package/dist/actions/schema/schemaStoreConstants.js +0 -4
- package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
- package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
- package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
- package/dist/actions/schema/utils/schemaApiClient.js +0 -17
- package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
- package/dist/actions/users/apiVersion.d.ts +0 -6
- package/dist/actions/users/apiVersion.js +0 -7
- package/dist/actions/users/apiVersion.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/documents/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DeleteDocumentCommand} from '../delete.js'\n\n// Mock the config functions\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\n// Mock the project API client\nconst mockTransaction = vi.fn()\nconst mockCommit = vi.fn()\nconst mockDelete = vi.fn()\n\n// Get the mocked functions\nconst mockedGetCliConfig = vi.mocked(getCliConfig)\nconst mockedGetProjectCliClient = vi.mocked(getProjectCliClient)\n\ndescribe('documents delete', () => {\n beforeEach(() => {\n // Setup transaction chain\n mockDelete.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n mockedGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n })\n\n afterEach(() => {\n vi.clearAllMocks()\n mockTransaction.mockReset()\n mockCommit.mockReset()\n mockDelete.mockReset()\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 mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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 mockCommit.mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n {id: 'doc3', operation: 'delete'},\n ],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2', 'doc3'])\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 mockCommit.mockResolvedValue({\n results: [{id: 'doc1', operation: 'delete'}],\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['doc1', 'nonexistent-doc'])\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 mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n await testCommand(DeleteDocumentCommand, ['test-doc', '--dataset', 'staging'])\n\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n // Verify that the getProjectCliClient was called with the staging dataset\n expect(mockedGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n projectId: 'test-project',\n }),\n )\n })\n\n test('throws error when no project ID is configured', async () => {\n mockedGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n\n // Restore the original mock for other tests\n mockedGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: 'test-project',\n },\n })\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n mockedGetCliConfig.mockResolvedValueOnce({\n api: {\n dataset: undefined,\n projectId: 'test-project',\n },\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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 mockCommit.mockRejectedValue(new Error('Transaction failed'))\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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, [])\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 mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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 mockCommit.mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n ],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2'])\n\n expect(stdout).toContain('Deleted 2 documents')\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","testCommand","afterEach","beforeEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDocumentCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","dataset","projectId","getCliToken","mockTransaction","mockCommit","mockDelete","mockedGetCliConfig","mocked","mockedGetProjectCliClient","mockReturnValue","commit","delete","transaction","clearAllMocks","mockReset","stdout","toMatchInlineSnapshot","results","id","operation","toContain","toHaveBeenCalledWith","toHaveBeenCalled","error","toBeInstanceOf","Error","message","objectContaining","undefined","toEqual","oclif","exit","toBe","mockResolvedValueOnce","mockRejectedValue","not"],"mappings":"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"}
|
|
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,31 +1,35 @@
|
|
|
1
1
|
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
|
|
3
2
|
import { chalk } from '@sanity/cli-core/ux';
|
|
4
3
|
import { testCommand } from '@sanity/cli-test';
|
|
5
4
|
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
6
5
|
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
7
6
|
import { GetDocumentCommand } from '../get.js';
|
|
8
|
-
// Mock the config functions
|
|
9
|
-
vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
|
|
10
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
11
|
-
directory: '/test/path',
|
|
12
|
-
root: '/test/path',
|
|
13
|
-
type: 'studio'
|
|
14
|
-
})
|
|
15
|
-
}));
|
|
16
|
-
vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
|
|
17
|
-
getCliConfig: vi.fn()
|
|
18
|
-
}));
|
|
19
|
-
vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
20
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
21
|
-
}));
|
|
22
|
-
vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
|
|
23
|
-
getProjectCliClient: vi.fn()
|
|
24
|
-
}));
|
|
25
|
-
const mockGetCliConfig = vi.mocked(getCliConfig);
|
|
26
|
-
const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
|
|
27
7
|
const testProjectId = 'test-project';
|
|
28
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
|
+
});
|
|
29
33
|
describe('#documents:get', ()=>{
|
|
30
34
|
afterEach(()=>{
|
|
31
35
|
vi.clearAllMocks();
|
|
@@ -46,20 +50,12 @@ describe('#documents:get', ()=>{
|
|
|
46
50
|
content: 'This is a test post',
|
|
47
51
|
title: 'Test Post'
|
|
48
52
|
};
|
|
49
|
-
|
|
50
|
-
api: {
|
|
51
|
-
dataset: testDataset,
|
|
52
|
-
projectId: testProjectId
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
// Mock the getProjectApiClient to return a mock client with getDocument
|
|
56
|
-
const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
|
|
57
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
58
|
-
getDocument: mockGetDocument
|
|
59
|
-
});
|
|
53
|
+
mockGetDocument.mockResolvedValue(mockDoc);
|
|
60
54
|
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
61
55
|
'test-doc'
|
|
62
|
-
]
|
|
56
|
+
], {
|
|
57
|
+
mocks: defaultMocks
|
|
58
|
+
});
|
|
63
59
|
expect(stdout).toContain('"_id": "test-doc"');
|
|
64
60
|
expect(stdout).toContain('"title": "Test Post"');
|
|
65
61
|
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
@@ -70,17 +66,7 @@ describe('#documents:get', ()=>{
|
|
|
70
66
|
_type: 'post',
|
|
71
67
|
title: 'Test Post'
|
|
72
68
|
};
|
|
73
|
-
|
|
74
|
-
api: {
|
|
75
|
-
dataset: testDataset,
|
|
76
|
-
projectId: testProjectId
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
// Mock the getProjectApiClient to return a mock client with getDocument
|
|
80
|
-
const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
|
|
81
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
82
|
-
getDocument: mockGetDocument
|
|
83
|
-
});
|
|
69
|
+
mockGetDocument.mockResolvedValue(mockDoc);
|
|
84
70
|
const originalChalkLevel = chalk.level;
|
|
85
71
|
// Force colorization
|
|
86
72
|
chalk.level = 3;
|
|
@@ -90,7 +76,8 @@ describe('#documents:get', ()=>{
|
|
|
90
76
|
], {
|
|
91
77
|
capture: {
|
|
92
78
|
stripAnsi: false
|
|
93
|
-
}
|
|
79
|
+
},
|
|
80
|
+
mocks: defaultMocks
|
|
94
81
|
});
|
|
95
82
|
// Reset chalk level
|
|
96
83
|
chalk.level = originalChalkLevel;
|
|
@@ -110,96 +97,82 @@ describe('#documents:get', ()=>{
|
|
|
110
97
|
_type: 'post',
|
|
111
98
|
title: 'Test Post'
|
|
112
99
|
};
|
|
113
|
-
|
|
114
|
-
api: {
|
|
115
|
-
dataset: testDataset,
|
|
116
|
-
projectId: testProjectId
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
// Mock the getProjectApiClient to return a mock client with getDocument
|
|
120
|
-
const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
|
|
121
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
122
|
-
getDocument: mockGetDocument
|
|
123
|
-
});
|
|
100
|
+
mockGetDocument.mockResolvedValue(mockDoc);
|
|
124
101
|
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
125
102
|
'test-doc',
|
|
126
103
|
'--dataset',
|
|
127
104
|
'staging'
|
|
128
|
-
]
|
|
105
|
+
], {
|
|
106
|
+
mocks: defaultMocks
|
|
107
|
+
});
|
|
129
108
|
expect(stdout).toContain('"_id": "test-doc"');
|
|
130
109
|
expect(stdout).toContain('"title": "Test Post"');
|
|
131
110
|
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
132
111
|
});
|
|
133
112
|
test('throws error when document is not found', async ()=>{
|
|
134
|
-
|
|
135
|
-
api: {
|
|
136
|
-
dataset: testDataset,
|
|
137
|
-
projectId: testProjectId
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
// Mock the getProjectApiClient to return a mock client with getDocument returning null
|
|
141
|
-
const mockGetDocument = vi.fn().mockResolvedValue(null);
|
|
142
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
143
|
-
getDocument: mockGetDocument
|
|
144
|
-
});
|
|
113
|
+
mockGetDocument.mockResolvedValue(null);
|
|
145
114
|
const { error } = await testCommand(GetDocumentCommand, [
|
|
146
115
|
'nonexistent-doc'
|
|
147
|
-
]
|
|
116
|
+
], {
|
|
117
|
+
mocks: defaultMocks
|
|
118
|
+
});
|
|
148
119
|
expect(error).toBeInstanceOf(Error);
|
|
149
120
|
expect(error?.message).toContain('Document "nonexistent-doc" not found');
|
|
150
121
|
expect(error?.oclif?.exit).toBe(1);
|
|
151
122
|
expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc');
|
|
152
123
|
});
|
|
153
124
|
test('throws error when no project ID is configured', async ()=>{
|
|
154
|
-
mockGetCliConfig.mockResolvedValue({
|
|
155
|
-
api: {
|
|
156
|
-
dataset: 'production',
|
|
157
|
-
projectId: undefined
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
125
|
const { error } = await testCommand(GetDocumentCommand, [
|
|
161
126
|
'test-doc'
|
|
162
|
-
]
|
|
127
|
+
], {
|
|
128
|
+
mocks: {
|
|
129
|
+
...defaultMocks,
|
|
130
|
+
cliConfig: {
|
|
131
|
+
api: {
|
|
132
|
+
dataset: 'production',
|
|
133
|
+
projectId: undefined
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
});
|
|
163
138
|
expect(error).toBeInstanceOf(Error);
|
|
164
139
|
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
165
140
|
expect(error?.oclif?.exit).toBe(1);
|
|
166
141
|
});
|
|
167
142
|
test('throws error when no dataset is configured and none provided', async ()=>{
|
|
168
|
-
mockGetCliConfig.mockResolvedValue({
|
|
169
|
-
api: {
|
|
170
|
-
dataset: undefined,
|
|
171
|
-
projectId: testProjectId
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
143
|
const { error } = await testCommand(GetDocumentCommand, [
|
|
175
144
|
'test-doc'
|
|
176
|
-
]
|
|
145
|
+
], {
|
|
146
|
+
mocks: {
|
|
147
|
+
...defaultMocks,
|
|
148
|
+
cliConfig: {
|
|
149
|
+
api: {
|
|
150
|
+
dataset: undefined,
|
|
151
|
+
projectId: testProjectId
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
177
156
|
expect(error).toBeInstanceOf(Error);
|
|
178
157
|
expect(error?.message).toContain('No dataset specified');
|
|
179
158
|
expect(error?.oclif?.exit).toBe(1);
|
|
180
159
|
});
|
|
181
160
|
test('handles client errors gracefully', async ()=>{
|
|
182
|
-
|
|
183
|
-
api: {
|
|
184
|
-
dataset: testDataset,
|
|
185
|
-
projectId: testProjectId
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
// Mock the getProjectApiClient to return a mock client with getDocument throwing an error
|
|
189
|
-
const mockGetDocument = vi.fn().mockRejectedValue(new Error('Network error'));
|
|
190
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
191
|
-
getDocument: mockGetDocument
|
|
192
|
-
});
|
|
161
|
+
mockGetDocument.mockRejectedValue(new Error('Network error'));
|
|
193
162
|
const { error } = await testCommand(GetDocumentCommand, [
|
|
194
163
|
'test-doc'
|
|
195
|
-
]
|
|
164
|
+
], {
|
|
165
|
+
mocks: defaultMocks
|
|
166
|
+
});
|
|
196
167
|
expect(error).toBeInstanceOf(Error);
|
|
197
168
|
expect(error?.message).toContain('Failed to fetch document');
|
|
198
169
|
expect(error?.oclif?.exit).toBe(1);
|
|
199
170
|
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
200
171
|
});
|
|
201
172
|
test('requires document ID argument', async ()=>{
|
|
202
|
-
const { error } = await testCommand(GetDocumentCommand, []
|
|
173
|
+
const { error } = await testCommand(GetDocumentCommand, [], {
|
|
174
|
+
mocks: defaultMocks
|
|
175
|
+
});
|
|
203
176
|
expect(error).toBeInstanceOf(Error);
|
|
204
177
|
expect(error?.message).toContain('Missing 1 required arg');
|
|
205
178
|
expect(error?.oclif?.exit).toBe(2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/documents/__tests__/get.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {GetDocumentCommand} from '../get.js'\n\n// Mock the config functions\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\ndescribe('#documents:get', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents get', '--help'])\n\n expect(stdout).toContain('Get and print a document by ID')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('DOCUMENTID')\n })\n\n test('retrieves and displays a document successfully', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n content: 'This is a test post',\n title: 'Test Post',\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument\n const mockGetDocument = vi.fn().mockResolvedValue(mockDoc)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc'])\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('displays colorized output when --pretty flag is used', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument\n const mockGetDocument = vi.fn().mockResolvedValue(mockDoc)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const originalChalkLevel = chalk.level\n // Force colorization\n chalk.level = 3\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--pretty'], {\n capture: {\n stripAnsi: false,\n },\n })\n\n // Reset chalk level\n chalk.level = originalChalkLevel\n\n // Check that the output contains the document data\n expect(stdout).toContain('test-doc')\n expect(stdout).toContain('Test Post')\n expect(stdout).toContain('_id')\n expect(stdout).toContain('_type')\n expect(stdout).toContain('title')\n\n // eslint-disable-next-line no-control-regex\n expect(stdout).toMatch(/\\u001B\\[\\d+m/)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument\n const mockGetDocument = vi.fn().mockResolvedValue(mockDoc)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--dataset', 'staging'])\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('throws error when document is not found', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument returning null\n const mockGetDocument = vi.fn().mockResolvedValue(null)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {error} = await testCommand(GetDocumentCommand, ['nonexistent-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document \"nonexistent-doc\" not found')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc')\n })\n\n test('throws error when no project ID is configured', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'])\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 mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: undefined,\n projectId: testProjectId,\n },\n })\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'])\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 client errors gracefully', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument throwing an error\n const mockGetDocument = vi.fn().mockRejectedValue(new Error('Network error'))\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch document')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(GetDocumentCommand, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n expect(error?.oclif?.exit).toBe(2)\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","chalk","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","GetDocumentCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","getCliToken","mockGetCliConfig","mocked","mockGetProjectCliClient","testProjectId","testDataset","clearAllMocks","stdout","toContain","mockDoc","_id","_type","content","title","api","dataset","projectId","mockGetDocument","getDocument","toHaveBeenCalledWith","originalChalkLevel","level","capture","stripAnsi","toMatch","error","toBeInstanceOf","Error","message","oclif","exit","toBe","undefined","toEqual","mockRejectedValue"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,YAAY,EAAEC,mBAAmB,QAAO,mBAAkB;AAClE,SAAQC,KAAK,QAAO,sBAAqB;AACzC,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,aAAa,QAAO,iCAAgC;AAC5D,SAAQC,kBAAkB,QAAO,YAAW;AAE5C,4BAA4B;AAC5BF,GAAGG,IAAI,CAAC,yDAAyD,IAAO,CAAA;QACtEC,iBAAiBJ,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;YACzCC,WAAW;YACXC,MAAM;YACNC,MAAM;QACR;IACF,CAAA;AAEAT,GAAGG,IAAI,CAAC,0DAA0D,IAAO,CAAA;QACvEX,cAAcQ,GAAGK,EAAE;IACrB,CAAA;AAEAL,GAAGG,IAAI,CAAC,uDAAuD,IAAO,CAAA;QACpEO,aAAaV,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;IACzC,CAAA;AAEAN,GAAGG,IAAI,CAAC,qDAAqD,IAAO,CAAA;QAClEV,qBAAqBO,GAAGK,EAAE;IAC5B,CAAA;AAEA,MAAMM,mBAAmBX,GAAGY,MAAM,CAACpB;AACnC,MAAMqB,0BAA0Bb,GAAGY,MAAM,CAACnB;AAC1C,MAAMqB,gBAAgB;AACtB,MAAMC,cAAc;AAEpBlB,SAAS,kBAAkB;IACzBD,UAAU;QACRI,GAAGgB,aAAa;IAClB;IAEAjB,KAAK,gBAAgB;QACnB,MAAM,EAACkB,MAAM,EAAC,GAAG,MAAM1B,WAAW;YAAC;YAAiB;SAAS;QAE7DO,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;IAC3B;IAEAnB,KAAK,kDAAkD;QACrD,MAAMoB,UAAU;YACdC,KAAK;YACLC,OAAO;YACPC,SAAS;YACTC,OAAO;QACT;QAEAZ,iBAAiBL,iBAAiB,CAAC;YACjCkB,KAAK;gBACHC,SAASV;gBACTW,WAAWZ;YACb;QACF;QAEA,wEAAwE;QACxE,MAAMa,kBAAkB3B,GAAGK,EAAE,GAAGC,iBAAiB,CAACa;QAClDN,wBAAwBP,iBAAiB,CAAC;YACxCsB,aAAaD;QACf;QAEA,MAAM,EAACV,MAAM,EAAC,GAAG,MAAMtB,YAAYO,oBAAoB;YAAC;SAAW;QAEnEJ,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAO6B,iBAAiBE,oBAAoB,CAAC;IAC/C;IAEA9B,KAAK,wDAAwD;QAC3D,MAAMoB,UAAU;YACdC,KAAK;YACLC,OAAO;YACPE,OAAO;QACT;QAEAZ,iBAAiBL,iBAAiB,CAAC;YACjCkB,KAAK;gBACHC,SAASV;gBACTW,WAAWZ;YACb;QACF;QAEA,wEAAwE;QACxE,MAAMa,kBAAkB3B,GAAGK,EAAE,GAAGC,iBAAiB,CAACa;QAClDN,wBAAwBP,iBAAiB,CAAC;YACxCsB,aAAaD;QACf;QAEA,MAAMG,qBAAqBpC,MAAMqC,KAAK;QACtC,qBAAqB;QACrBrC,MAAMqC,KAAK,GAAG;QAEd,MAAM,EAACd,MAAM,EAAC,GAAG,MAAMtB,YAAYO,oBAAoB;YAAC;YAAY;SAAW,EAAE;YAC/E8B,SAAS;gBACPC,WAAW;YACb;QACF;QAEA,oBAAoB;QACpBvC,MAAMqC,KAAK,GAAGD;QAEd,mDAAmD;QACnDhC,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;QAEzB,4CAA4C;QAC5CpB,OAAOmB,QAAQiB,OAAO,CAAC;QACvBpC,OAAO6B,iBAAiBE,oBAAoB,CAAC;IAC/C;IAEA9B,KAAK,uDAAuD;QAC1D,MAAMoB,UAAU;YACdC,KAAK;YACLC,OAAO;YACPE,OAAO;QACT;QAEAZ,iBAAiBL,iBAAiB,CAAC;YACjCkB,KAAK;gBACHC,SAASV;gBACTW,WAAWZ;YACb;QACF;QAEA,wEAAwE;QACxE,MAAMa,kBAAkB3B,GAAGK,EAAE,GAAGC,iBAAiB,CAACa;QAClDN,wBAAwBP,iBAAiB,CAAC;YACxCsB,aAAaD;QACf;QAEA,MAAM,EAACV,MAAM,EAAC,GAAG,MAAMtB,YAAYO,oBAAoB;YAAC;YAAY;YAAa;SAAU;QAE3FJ,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAOmB,QAAQC,SAAS,CAAC;QACzBpB,OAAO6B,iBAAiBE,oBAAoB,CAAC;IAC/C;IAEA9B,KAAK,2CAA2C;QAC9CY,iBAAiBL,iBAAiB,CAAC;YACjCkB,KAAK;gBACHC,SAASV;gBACTW,WAAWZ;YACb;QACF;QAEA,uFAAuF;QACvF,MAAMa,kBAAkB3B,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;QAClDO,wBAAwBP,iBAAiB,CAAC;YACxCsB,aAAaD;QACf;QAEA,MAAM,EAACQ,KAAK,EAAC,GAAG,MAAMxC,YAAYO,oBAAoB;YAAC;SAAkB;QAEzEJ,OAAOqC,OAAOC,cAAc,CAACC;QAC7BvC,OAAOqC,OAAOG,SAASpB,SAAS,CAAC;QACjCpB,OAAOqC,OAAOI,OAAOC,MAAMC,IAAI,CAAC;QAChC3C,OAAO6B,iBAAiBE,oBAAoB,CAAC;IAC/C;IAEA9B,KAAK,iDAAiD;QACpDY,iBAAiBL,iBAAiB,CAAC;YACjCkB,KAAK;gBACHC,SAAS;gBACTC,WAAWgB;YACb;QACF;QAEA,MAAM,EAACP,KAAK,EAAC,GAAG,MAAMxC,YAAYO,oBAAoB;YAAC;SAAW;QAElEJ,OAAOqC,OAAOC,cAAc,CAACC;QAC7BvC,OAAOqC,OAAOG,SAASK,OAAO,CAAC1C;QAC/BH,OAAOqC,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA1C,KAAK,gEAAgE;QACnEY,iBAAiBL,iBAAiB,CAAC;YACjCkB,KAAK;gBACHC,SAASiB;gBACThB,WAAWZ;YACb;QACF;QAEA,MAAM,EAACqB,KAAK,EAAC,GAAG,MAAMxC,YAAYO,oBAAoB;YAAC;SAAW;QAElEJ,OAAOqC,OAAOC,cAAc,CAACC;QAC7BvC,OAAOqC,OAAOG,SAASpB,SAAS,CAAC;QACjCpB,OAAOqC,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA1C,KAAK,oCAAoC;QACvCY,iBAAiBL,iBAAiB,CAAC;YACjCkB,KAAK;gBACHC,SAASV;gBACTW,WAAWZ;YACb;QACF;QAEA,0FAA0F;QAC1F,MAAMa,kBAAkB3B,GAAGK,EAAE,GAAGuC,iBAAiB,CAAC,IAAIP,MAAM;QAC5DxB,wBAAwBP,iBAAiB,CAAC;YACxCsB,aAAaD;QACf;QAEA,MAAM,EAACQ,KAAK,EAAC,GAAG,MAAMxC,YAAYO,oBAAoB;YAAC;SAAW;QAElEJ,OAAOqC,OAAOC,cAAc,CAACC;QAC7BvC,OAAOqC,OAAOG,SAASpB,SAAS,CAAC;QACjCpB,OAAOqC,OAAOI,OAAOC,MAAMC,IAAI,CAAC;QAChC3C,OAAO6B,iBAAiBE,oBAAoB,CAAC;IAC/C;IAEA9B,KAAK,iCAAiC;QACpC,MAAM,EAACoC,KAAK,EAAC,GAAG,MAAMxC,YAAYO,oBAAoB,EAAE;QAExDJ,OAAOqC,OAAOC,cAAc,CAACC;QAC7BvC,OAAOqC,OAAOG,SAASpB,SAAS,CAAC;QACjCpB,OAAOqC,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/documents/__tests__/get.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {GetDocumentCommand} from '../get.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 mockGetDocument = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n getDocument: mockGetDocument,\n }),\n }\n})\n\ndescribe('#documents:get', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents get', '--help'])\n\n expect(stdout).toContain('Get and print a document by ID')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('DOCUMENTID')\n })\n\n test('retrieves and displays a document successfully', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n content: 'This is a test post',\n title: 'Test Post',\n }\n\n mockGetDocument.mockResolvedValue(mockDoc)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('displays colorized output when --pretty flag is used', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetDocument.mockResolvedValue(mockDoc)\n\n const originalChalkLevel = chalk.level\n // Force colorization\n chalk.level = 3\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--pretty'], {\n capture: {\n stripAnsi: false,\n },\n mocks: defaultMocks,\n })\n\n // Reset chalk level\n chalk.level = originalChalkLevel\n\n // Check that the output contains the document data\n expect(stdout).toContain('test-doc')\n expect(stdout).toContain('Test Post')\n expect(stdout).toContain('_id')\n expect(stdout).toContain('_type')\n expect(stdout).toContain('title')\n\n // eslint-disable-next-line no-control-regex\n expect(stdout).toMatch(/\\u001B\\[\\d+m/)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetDocument.mockResolvedValue(mockDoc)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--dataset', 'staging'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('throws error when document is not found', async () => {\n mockGetDocument.mockResolvedValue(null)\n\n const {error} = await testCommand(GetDocumentCommand, ['nonexistent-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document \"nonexistent-doc\" not found')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc')\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: 'production', 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(GetDocumentCommand, ['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 client errors gracefully', async () => {\n mockGetDocument.mockRejectedValue(new Error('Network error'))\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch document')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(GetDocumentCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n expect(error?.oclif?.exit).toBe(2)\n })\n})\n"],"names":["runCommand","chalk","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","GetDocumentCommand","testProjectId","testDataset","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","mockGetDocument","hoisted","fn","mock","actual","importActual","getProjectCliClient","mockResolvedValue","getDocument","clearAllMocks","stdout","toContain","mockDoc","_id","_type","content","title","mocks","toHaveBeenCalledWith","originalChalkLevel","level","capture","stripAnsi","toMatch","error","toBeInstanceOf","Error","message","oclif","exit","toBe","undefined","toEqual","mockRejectedValue"],"mappings":"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"}
|