Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 57 additions & 36 deletions packages/store/src/cli/services/store/execute/request.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import {prepareStoreExecuteRequest} from './request.js'
import {describe, expect, test, vi} from 'vitest'
import {fileExists, readFile} from '@shopify/cli-kit/node/fs'

vi.mock('@shopify/cli-kit/node/fs')
import {describe, expect, test} from 'vitest'
import {inTemporaryDirectory, writeFile} from '@shopify/cli-kit/node/fs'
import {joinPath} from '@shopify/cli-kit/node/path'

describe('prepareStoreExecuteRequest', () => {
test('returns a prepared request for an inline query', async () => {
Expand All @@ -21,24 +20,34 @@ describe('prepareStoreExecuteRequest', () => {
})

test('reads the query from a file', async () => {
vi.mocked(fileExists).mockResolvedValue(true)
vi.mocked(readFile).mockResolvedValueOnce('query { shop { name } }' as any)

const request = await prepareStoreExecuteRequest({
queryFile: '/tmp/operation.graphql',
await inTemporaryDirectory(async (tmpDir) => {
// Given
const queryFile = joinPath(tmpDir, 'operation.graphql')
const queryContent = 'query { shop { name } }'
await writeFile(queryFile, queryContent)

// When
const request = await prepareStoreExecuteRequest({
queryFile,
})

// Then
expect(request.query).toBe(queryContent)
})

expect(request.query).toBe('query { shop { name } }')
})

test('throws when the query file does not exist', async () => {
vi.mocked(fileExists).mockResolvedValue(false)

await expect(
prepareStoreExecuteRequest({
queryFile: '/tmp/missing.graphql',
}),
).rejects.toThrow('Query file not found')
await inTemporaryDirectory(async (tmpDir) => {
// Given
const missingFile = joinPath(tmpDir, 'missing.graphql')

// When/Then
await expect(
prepareStoreExecuteRequest({
queryFile: missingFile,
}),
).rejects.toThrow('Query file not found')
})
})

test('throws when the inline query is empty', async () => {
Expand All @@ -50,14 +59,18 @@ describe('prepareStoreExecuteRequest', () => {
})

test('throws when the query file is empty', async () => {
vi.mocked(fileExists).mockResolvedValue(true)
vi.mocked(readFile).mockResolvedValueOnce(' ' as any)

await expect(
prepareStoreExecuteRequest({
queryFile: '/tmp/operation.graphql',
}),
).rejects.toThrow('is empty')
await inTemporaryDirectory(async (tmpDir) => {
// Given
const queryFile = joinPath(tmpDir, 'operation.graphql')
await writeFile(queryFile, ' ')

// When/Then
await expect(
prepareStoreExecuteRequest({
queryFile,
}),
).rejects.toThrow('is empty')
})
})

test('throws when no query input is provided', async () => {
Expand Down Expand Up @@ -107,16 +120,24 @@ describe('prepareStoreExecuteRequest', () => {
})

test('reads variables from a file', async () => {
vi.mocked(fileExists).mockResolvedValue(true)
vi.mocked(readFile)
.mockResolvedValueOnce('query { shop { id } }' as any)
.mockResolvedValueOnce('{"id":"gid://shopify/Shop/1"}' as any)

const request = await prepareStoreExecuteRequest({
queryFile: '/tmp/operation.graphql',
variableFile: '/tmp/variables.json',
await inTemporaryDirectory(async (tmpDir) => {
// Given
const queryFile = joinPath(tmpDir, 'operation.graphql')
const variablesFile = joinPath(tmpDir, 'variables.json')
const queryContent = 'query { shop { id } }'
const variablesContent = '{"id":"gid://shopify/Shop/1"}'

await writeFile(queryFile, queryContent)
await writeFile(variablesFile, variablesContent)

// When
const request = await prepareStoreExecuteRequest({
queryFile,
variableFile: variablesFile,
})

// Then
expect(request.parsedVariables).toEqual({id: 'gid://shopify/Shop/1'})
})

expect(request.parsedVariables).toEqual({id: 'gid://shopify/Shop/1'})
})
})
Loading