|
@@ -1,9 +1,127 @@
|
|
|
import { graphql } from 'gql.tada';
|
|
import { graphql } from 'gql.tada';
|
|
|
-import { parse } from 'graphql';
|
|
|
|
|
-import { describe, it, expect } from 'vitest';
|
|
|
|
|
|
|
+import { describe, expect, it, vi } from 'vitest';
|
|
|
|
|
|
|
|
import { getListQueryFields } from './get-document-structure.js';
|
|
import { getListQueryFields } from './get-document-structure.js';
|
|
|
|
|
|
|
|
|
|
+vi.mock('virtual:admin-api-schema', () => {
|
|
|
|
|
+ return {
|
|
|
|
|
+ schemaInfo: {
|
|
|
|
|
+ types: {
|
|
|
|
|
+ Query: {
|
|
|
|
|
+ products: ['ProductList', false, false, true],
|
|
|
|
|
+ product: ['Product', false, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+ Mutation: {},
|
|
|
|
|
+
|
|
|
|
|
+ Product: {
|
|
|
|
|
+ channels: ['Channel', false, true, false],
|
|
|
|
|
+ id: ['ID', false, false, false],
|
|
|
|
|
+ createdAt: ['DateTime', false, false, false],
|
|
|
|
|
+ updatedAt: ['DateTime', false, false, false],
|
|
|
|
|
+ languageCode: ['LanguageCode', false, false, false],
|
|
|
|
|
+ name: ['String', false, false, false],
|
|
|
|
|
+ slug: ['String', false, false, false],
|
|
|
|
|
+ description: ['String', false, false, false],
|
|
|
|
|
+ enabled: ['Boolean', false, false, false],
|
|
|
|
|
+ featuredAsset: ['Asset', true, false, false],
|
|
|
|
|
+ assets: ['Asset', false, true, false],
|
|
|
|
|
+ variants: ['ProductVariant', false, true, false],
|
|
|
|
|
+ variantList: ['ProductVariantList', false, false, true],
|
|
|
|
|
+ optionGroups: ['ProductOptionGroup', false, true, false],
|
|
|
|
|
+ facetValues: ['FacetValue', false, true, false],
|
|
|
|
|
+ translations: ['ProductTranslation', false, true, false],
|
|
|
|
|
+ collections: ['Collection', false, true, false],
|
|
|
|
|
+ reviews: ['ProductReviewList', false, false, true],
|
|
|
|
|
+ reviewsHistogram: ['ProductReviewHistogramItem', false, true, false],
|
|
|
|
|
+ customFields: ['ProductCustomFields', true, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+ ProductVariantPrice: {
|
|
|
|
|
+ currencyCode: ['CurrencyCode', false, false, false],
|
|
|
|
|
+ price: ['Money', false, false, false],
|
|
|
|
|
+ customFields: ['JSON', true, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+ ProductVariant: {
|
|
|
|
|
+ enabled: ['Boolean', false, false, false],
|
|
|
|
|
+ trackInventory: ['GlobalFlag', false, false, false],
|
|
|
|
|
+ stockOnHand: ['Int', false, false, false],
|
|
|
|
|
+ stockAllocated: ['Int', false, false, false],
|
|
|
|
|
+ outOfStockThreshold: ['Int', false, false, false],
|
|
|
|
|
+ useGlobalOutOfStockThreshold: ['Boolean', false, false, false],
|
|
|
|
|
+ prices: ['ProductVariantPrice', false, true, false],
|
|
|
|
|
+ stockLevels: ['StockLevel', false, true, false],
|
|
|
|
|
+ stockMovements: ['StockMovementList', false, false, false],
|
|
|
|
|
+ channels: ['Channel', false, true, false],
|
|
|
|
|
+ id: ['ID', false, false, false],
|
|
|
|
|
+ product: ['Product', false, false, false],
|
|
|
|
|
+ productId: ['ID', false, false, false],
|
|
|
|
|
+ createdAt: ['DateTime', false, false, false],
|
|
|
|
|
+ updatedAt: ['DateTime', false, false, false],
|
|
|
|
|
+ languageCode: ['LanguageCode', false, false, false],
|
|
|
|
|
+ sku: ['String', false, false, false],
|
|
|
|
|
+ name: ['String', false, false, false],
|
|
|
|
|
+ featuredAsset: ['Asset', true, false, false],
|
|
|
|
|
+ assets: ['Asset', false, true, false],
|
|
|
|
|
+ price: ['Money', false, false, false],
|
|
|
|
|
+ currencyCode: ['CurrencyCode', false, false, false],
|
|
|
|
|
+ priceWithTax: ['Money', false, false, false],
|
|
|
|
|
+ stockLevel: ['String', false, false, false],
|
|
|
|
|
+ taxRateApplied: ['TaxRate', false, false, false],
|
|
|
|
|
+ taxCategory: ['TaxCategory', false, false, false],
|
|
|
|
|
+ options: ['ProductOption', false, true, false],
|
|
|
|
|
+ facetValues: ['FacetValue', false, true, false],
|
|
|
|
|
+ translations: ['ProductVariantTranslation', false, true, false],
|
|
|
|
|
+ customFields: ['JSON', true, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+ ProductCustomFields: {
|
|
|
|
|
+ custom1: ['String', false, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ Asset: {
|
|
|
|
|
+ id: ['ID', false, false, false],
|
|
|
|
|
+ createdAt: ['DateTime', false, false, false],
|
|
|
|
|
+ updatedAt: ['DateTime', false, false, false],
|
|
|
|
|
+ name: ['String', false, false, false],
|
|
|
|
|
+ type: ['AssetType', false, false, false],
|
|
|
|
|
+ fileSize: ['Int', false, false, false],
|
|
|
|
|
+ mimeType: ['String', false, false, false],
|
|
|
|
|
+ width: ['Int', false, false, false],
|
|
|
|
|
+ height: ['Int', false, false, false],
|
|
|
|
|
+ source: ['String', false, false, false],
|
|
|
|
|
+ preview: ['String', false, false, false],
|
|
|
|
|
+ focalPoint: ['Coordinate', true, false, false],
|
|
|
|
|
+ tags: ['Tag', false, true, false],
|
|
|
|
|
+ customFields: ['JSON', true, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+ ProductTranslation: {
|
|
|
|
|
+ id: ['ID', false, false, false],
|
|
|
|
|
+ createdAt: ['DateTime', false, false, false],
|
|
|
|
|
+ updatedAt: ['DateTime', false, false, false],
|
|
|
|
|
+ languageCode: ['LanguageCode', false, false, false],
|
|
|
|
|
+ name: ['String', false, false, false],
|
|
|
|
|
+ slug: ['String', false, false, false],
|
|
|
|
|
+ description: ['String', false, false, false],
|
|
|
|
|
+ customFields: ['ProductTranslationCustomFields', true, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+ ProductList: {
|
|
|
|
|
+ items: ['Product', false, true, false],
|
|
|
|
|
+ totalItems: ['Int', false, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ ProductVariantTranslation: {
|
|
|
|
|
+ id: ['ID', false, false, false],
|
|
|
|
|
+ createdAt: ['DateTime', false, false, false],
|
|
|
|
|
+ updatedAt: ['DateTime', false, false, false],
|
|
|
|
|
+ languageCode: ['LanguageCode', false, false, false],
|
|
|
|
|
+ name: ['String', false, false, false],
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ inputs: {},
|
|
|
|
|
+ scalars: ['ID', 'String', 'Int', 'Boolean', 'Float', 'JSON', 'DateTime', 'Upload', 'Money'],
|
|
|
|
|
+ enums: {},
|
|
|
|
|
+ },
|
|
|
|
|
+ };
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
describe('getListQueryFields', () => {
|
|
describe('getListQueryFields', () => {
|
|
|
it('should extract fields from a simple paginated list query', () => {
|
|
it('should extract fields from a simple paginated list query', () => {
|
|
|
const doc = graphql(`
|
|
const doc = graphql(`
|