@@ -3,26 +3,33 @@ import {linkedAppContext} from '../../../services/app-context.js'
33import { validateApp } from '../../../services/validate.js'
44import { testAppLinked } from '../../../models/app/app.test-data.js'
55import { Project } from '../../../models/project/project.js'
6+ import { selectActiveConfig } from '../../../models/project/active-config.js'
7+ import { errorsForConfig } from '../../../models/project/config-selection.js'
68import { outputResult } from '@shopify/cli-kit/node/output'
9+ import { TomlFile } from '@shopify/cli-kit/node/toml/toml-file'
710import { describe , expect , test , vi } from 'vitest'
811
912vi . mock ( '../../../services/app-context.js' )
1013vi . mock ( '../../../services/validate.js' )
1114vi . mock ( '../../../models/project/project.js' )
15+ vi . mock ( '../../../models/project/active-config.js' )
16+ vi . mock ( '../../../models/project/config-selection.js' )
1217vi . mock ( '@shopify/cli-kit/node/output' , async ( importOriginal ) => {
1318 const actual = await importOriginal < typeof import ( '@shopify/cli-kit/node/output' ) > ( )
1419 return { ...actual , outputResult : vi . fn ( ) }
1520} )
1621vi . mock ( '@shopify/cli-kit/node/ui' )
1722
18- function mockProjectWithNoErrors ( ) {
23+ function mockHealthyProject ( ) {
1924 vi . mocked ( Project . load ) . mockResolvedValue ( { errors : [ ] } as unknown as Project )
25+ vi . mocked ( selectActiveConfig ) . mockResolvedValue ( { file : new TomlFile ( 'shopify.app.toml' , { } ) } as any )
26+ vi . mocked ( errorsForConfig ) . mockReturnValue ( [ ] )
2027}
2128
2229describe ( 'app config validate command' , ( ) => {
2330 test ( 'calls validateApp with json: false by default' , async ( ) => {
2431 const app = testAppLinked ( )
25- mockProjectWithNoErrors ( )
32+ mockHealthyProject ( )
2633 vi . mocked ( linkedAppContext ) . mockResolvedValue ( { app} as Awaited < ReturnType < typeof linkedAppContext > > )
2734 vi . mocked ( validateApp ) . mockResolvedValue ( )
2835
@@ -33,7 +40,7 @@ describe('app config validate command', () => {
3340
3441 test ( 'calls validateApp with json: true when --json flag is passed' , async ( ) => {
3542 const app = testAppLinked ( )
36- mockProjectWithNoErrors ( )
43+ mockHealthyProject ( )
3744 vi . mocked ( linkedAppContext ) . mockResolvedValue ( { app} as Awaited < ReturnType < typeof linkedAppContext > > )
3845 vi . mocked ( validateApp ) . mockResolvedValue ( )
3946
@@ -44,7 +51,7 @@ describe('app config validate command', () => {
4451
4552 test ( 'calls validateApp with json: true when -j flag is passed' , async ( ) => {
4653 const app = testAppLinked ( )
47- mockProjectWithNoErrors ( )
54+ mockHealthyProject ( )
4855 vi . mocked ( linkedAppContext ) . mockResolvedValue ( { app} as Awaited < ReturnType < typeof linkedAppContext > > )
4956 vi . mocked ( validateApp ) . mockResolvedValue ( )
5057
@@ -53,10 +60,12 @@ describe('app config validate command', () => {
5360 expect ( validateApp ) . toHaveBeenCalledWith ( app , { json : true } )
5461 } )
5562
56- test ( 'outputs JSON issues when project has TOML parse errors' , async ( ) => {
57- vi . mocked ( Project . load ) . mockResolvedValue ( {
58- errors : [ { path : '/app/shopify.app.toml' , message : 'Unexpected character at row 1, col 5' } ] ,
59- } as unknown as Project )
63+ test ( 'outputs JSON issues when active config has TOML parse errors' , async ( ) => {
64+ vi . mocked ( Project . load ) . mockResolvedValue ( { errors : [ ] } as unknown as Project )
65+ vi . mocked ( selectActiveConfig ) . mockResolvedValue ( { file : new TomlFile ( 'shopify.app.toml' , { } ) } as any )
66+ vi . mocked ( errorsForConfig ) . mockReturnValue ( [
67+ { path : '/app/shopify.app.toml' , message : 'Unexpected character at row 1, col 5' } as any ,
68+ ] )
6069
6170 await expect ( Validate . run ( [ '--json' ] , import . meta. url ) ) . rejects . toThrow ( )
6271
0 commit comments