Skip to content
Merged
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
89 changes: 53 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,33 @@ 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 queryPath = joinPath(tmpDir, 'operation.graphql')
await writeFile(queryPath, 'query { shop { name } }')

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

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

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 queryPath = joinPath(tmpDir, 'missing.graphql')

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

test('throws when the inline query is empty', async () => {
Expand All @@ -50,14 +58,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 queryPath = joinPath(tmpDir, 'operation.graphql')
await writeFile(queryPath, ' ')

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

test('throws when no query input is provided', async () => {
Expand Down Expand Up @@ -107,16 +119,21 @@ 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 queryPath = joinPath(tmpDir, 'operation.graphql')
const variablesPath = joinPath(tmpDir, 'variables.json')
await writeFile(queryPath, 'query { shop { id } }')
await writeFile(variablesPath, '{"id":"gid://shopify/Shop/1"}')

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

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

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