11import { afterEach , describe , expect , it , vi } from 'vitest'
2+ import type { Theme } from 'vitepress'
23
34vi . mock ( 'virtual:i18n-micro/config' , ( ) => ( {
45 config : {
@@ -26,35 +27,43 @@ afterEach(() => {
2627 vi . restoreAllMocks ( )
2728} )
2829
30+ function makeApp ( ) {
31+ const app = {
32+ use : vi . fn ( ( plugin : { global : { getLocale : ( ) => string } } ) => {
33+ app . _i18n = plugin . global
34+ } ) ,
35+ provide : vi . fn ( ) ,
36+ config : { globalProperties : { } as Record < string , unknown > } ,
37+ component : vi . fn ( ) ,
38+ _i18n : undefined as { getLocale : ( ) => string } | undefined ,
39+ }
40+ return app
41+ }
42+
43+ function makeRouter ( path : string ) {
44+ let after : ( ( to : string ) => unknown ) | undefined
45+ return {
46+ route : { path } ,
47+ go : vi . fn ( ) ,
48+ set onAfterRouteChange ( fn : ( ( to : string ) => unknown ) | undefined ) {
49+ after = fn
50+ } ,
51+ get onAfterRouteChange ( ) {
52+ return after
53+ } ,
54+ }
55+ }
56+
2957describe ( 'defineI18nTheme' , ( ) => {
3058 it ( 'maps VitePress locale key to i18n code on first enhanceApp' , async ( ) => {
3159 const { defineI18nTheme } = await import ( '../src/define-theme' )
3260
3361 const theme = defineI18nTheme ( {
3462 Layout : { } as never ,
35- } )
63+ } as Theme )
3664
37- const app = {
38- use : vi . fn ( ( plugin : { global : { getLocale : ( ) => string } } ) => {
39- ; ( app as { _i18n ?: { getLocale : ( ) => string } } ) . _i18n = plugin . global
40- } ) ,
41- provide : vi . fn ( ) ,
42- config : { globalProperties : { } as Record < string , unknown > } ,
43- component : vi . fn ( ) ,
44- _i18n : undefined as { getLocale : ( ) => string } | undefined ,
45- }
46-
47- let after : ( ( to : string ) => unknown ) | undefined
48- const router = {
49- route : { path : '/fr/guide/' } ,
50- go : vi . fn ( ) ,
51- set onAfterRouteChange ( fn : ( to : string ) => unknown ) {
52- after = fn
53- } ,
54- get onAfterRouteChange ( ) {
55- return after
56- } ,
57- }
65+ const app = makeApp ( )
66+ const router = makeRouter ( '/fr/guide/' )
5867
5968 await theme . enhanceApp ! ( {
6069 app : app as never ,
@@ -74,37 +83,18 @@ describe('defineI18nTheme', () => {
7483 async enhanceApp ( { router } ) {
7584 router . onAfterRouteChange = baseHook
7685 } ,
77- } )
78-
79- const app = {
80- use : vi . fn ( ( plugin : { global : { getLocale : ( ) => string } } ) => {
81- ; ( app as { _i18n ?: { getLocale : ( ) => string } } ) . _i18n = plugin . global
82- } ) ,
83- provide : vi . fn ( ) ,
84- config : { globalProperties : { } as Record < string , unknown > } ,
85- component : vi . fn ( ) ,
86- _i18n : undefined as { getLocale : ( ) => string } | undefined ,
87- }
86+ } as Theme )
8887
89- let after : ( ( to : string ) => unknown ) | undefined
90- const router = {
91- route : { path : '/' } ,
92- go : vi . fn ( ) ,
93- set onAfterRouteChange ( fn : ( to : string ) => unknown ) {
94- after = fn
95- } ,
96- get onAfterRouteChange ( ) {
97- return after
98- } ,
99- }
88+ const app = makeApp ( )
89+ const router = makeRouter ( '/' )
10090
10191 await theme . enhanceApp ! ( {
10292 app : app as never ,
10393 router : router as never ,
10494 siteData : { } as never ,
10595 } )
10696
107- await after ?.( '/fr/' )
97+ await router . onAfterRouteChange ?.( '/fr/' )
10898 expect ( baseHook ) . toHaveBeenCalledWith ( '/fr/' )
10999 expect ( app . _i18n ?. getLocale ( ) ) . toBe ( 'fr-FR' )
110100 } )
0 commit comments