Skip to content
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import { describe, it, expect } from 'vitest';
import { DeprecatedFontsOnSettingsData } from './index';
import { runJSONCheck } from '../../test';

describe('Module: DeprecatedFontsOnSettingsData', () => {
it('reports a warning when settings_data.json has a deprecated font in current settings', async () => {
const sourceCode = JSON.stringify({
current: {
heading_font: 'helvetica_n4',
body_font: 'alegreya_n4',
},
});

const offenses = await runJSONCheck(
DeprecatedFontsOnSettingsData,
sourceCode,
'config/settings_data.json',
);

expect(offenses).toHaveLength(1);
expect(offenses[0].message).toEqual('The font "helvetica_n4" is deprecated');
});

it('reports warnings for deprecated fonts in presets', async () => {
const sourceCode = JSON.stringify({
current: {},
presets: {
Default: {
heading_font: 'helvetica_n4',
body_font: 'agmena_n4',
},
},
});

const offenses = await runJSONCheck(
DeprecatedFontsOnSettingsData,
sourceCode,
'config/settings_data.json',
);

expect(offenses).toHaveLength(2);
expect(offenses.map((o) => o.message)).toContain('The font "helvetica_n4" is deprecated');
expect(offenses.map((o) => o.message)).toContain('The font "agmena_n4" is deprecated');
});

it('reports no warning when settings_data.json has no deprecated fonts', async () => {
const sourceCode = JSON.stringify({
current: {
heading_font: 'alegreya_n4',
body_font: 'bitter_n4',
},
});

const offenses = await runJSONCheck(
DeprecatedFontsOnSettingsData,
sourceCode,
'config/settings_data.json',
);

expect(offenses).toHaveLength(0);
});

it('reports no warning for non-string values', async () => {
const sourceCode = JSON.stringify({
current: {
show_header: true,
items_per_page: 12,
colors_body_bg: '#ffffff',
},
});

const offenses = await runJSONCheck(
DeprecatedFontsOnSettingsData,
sourceCode,
'config/settings_data.json',
);

expect(offenses).toHaveLength(0);
});

it('does not run check on files other than settings_data.json', async () => {
const sourceCode = JSON.stringify({
current: {
heading_font: 'helvetica_n4',
},
});

const offenses = await runJSONCheck(
DeprecatedFontsOnSettingsData,
sourceCode,
'config/settings_schema.json',
);

expect(offenses).toHaveLength(0);
});

it('reports warnings for deprecated fonts deeply nested in preset blocks', async () => {
const sourceCode = JSON.stringify({
current: {
blocks: {
'block-id-1': {
type: 'header',
settings: {
heading_font: 'helvetica_n4',
},
},
},
},
});

const offenses = await runJSONCheck(
DeprecatedFontsOnSettingsData,
sourceCode,
'config/settings_data.json',
);

expect(offenses).toHaveLength(1);
expect(offenses[0].message).toEqual('The font "helvetica_n4" is deprecated');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { JSONCheckDefinition, Severity, SourceCodeType } from '../../types';
import { getLocStart, getLocEnd } from '../../json';
import { DEPRECATED_FONT_HANDLES } from '../deprecated-fonts-on-sections-and-blocks/deprecated-fonts-data';

export const DeprecatedFontsOnSettingsData: JSONCheckDefinition = {
meta: {
code: 'DeprecatedFontsOnSettingsData',
name: 'Check for deprecated fonts in settings_data settings values',
docs: {
description: 'Warns on deprecated fonts in settings_data settings values.',
recommended: true,
url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/deprecated-fonts-on-settings-data',
},
type: SourceCodeType.JSON,
severity: Severity.WARNING,
schema: {},
targets: [],
},

create(context) {
const relativePath = context.toRelativePath(context.file.uri);
if (relativePath !== 'config/settings_data.json') return {};

return {
async Property(node) {
if (
node.value.type === 'Literal' &&
typeof node.value.value === 'string' &&
DEPRECATED_FONT_HANDLES.has(node.value.value)
) {
context.report({
message: `The font "${node.value.value}" is deprecated`,
startIndex: getLocStart(node.value),
endIndex: getLocEnd(node.value),
});
}
},
};
},
};
2 changes: 2 additions & 0 deletions packages/theme-check-common/src/checks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { DeprecateBgsizes } from './deprecate-bgsizes';
import { DeprecateLazysizes } from './deprecate-lazysizes';
import { DeprecatedFilter } from './deprecated-filter';
import { DeprecatedFontsOnSectionsAndBlocks } from './deprecated-fonts-on-sections-and-blocks';
import { DeprecatedFontsOnSettingsData } from './deprecated-fonts-on-settings-data';
import { DeprecatedFontsOnSettingsSchema } from './deprecated-fonts-on-settings-schema';
import { DeprecatedTag } from './deprecated-tag';
import { DuplicateRenderSnippetArguments } from './duplicate-render-snippet-arguments';
Expand Down Expand Up @@ -81,6 +82,7 @@ export const allChecks: (LiquidCheckDefinition | JSONCheckDefinition)[] = [
DeprecateLazysizes,
DeprecatedFilter,
DeprecatedFontsOnSectionsAndBlocks,
DeprecatedFontsOnSettingsData,
DeprecatedFontsOnSettingsSchema,
DeprecatedTag,
DuplicateContentForArguments,
Expand Down
Loading