@@ -3,11 +3,16 @@ import { useThemeStore, WebThemeConfigType } from '../../../../src/composables/p
33import { mockDeep } from 'vitest-mock-extended'
44import { createPinia , setActivePinia } from 'pinia'
55import { ref , computed } from 'vue'
6+ import { useVault } from '../../../../src/composables/vault'
67
78vi . mock ( '@vueuse/core' , ( ) => {
89 return { useLocalStorage : vi . fn ( ( ) => ref ( '' ) ) , usePreferredDark : vi . fn ( ( ) => ref ( false ) ) }
910} )
1011
12+ vi . mock ( '../../../../src/composables/vault' , ( ) => {
13+ return { useVault : vi . fn ( ( ) => ( { isInVault : false } ) ) }
14+ } )
15+
1116describe ( 'useThemeStore' , ( ) => {
1217 beforeEach ( ( ) => {
1318 setActivePinia ( createPinia ( ) )
@@ -69,5 +74,62 @@ describe('useThemeStore', () => {
6974 expect ( store . currentTheme . name ) . toEqual ( 'light' )
7075 } )
7176 } )
77+
78+ describe ( 'availableThemes' , ( ) => {
79+ it ( 'returns regular themes if not in vault' , ( ) => {
80+ vi . mocked ( useVault ) . mockReturnValue ( { isInVault : false } )
81+
82+ const themeConfig = mockDeep < WebThemeConfigType > ( )
83+ themeConfig . themes = [
84+ { name : 'light' , designTokens : { } , isDark : false , mode : 'regular' } ,
85+ { name : 'dark' , designTokens : { } , isDark : true , mode : 'regular' } ,
86+ { name : 'light' , designTokens : { } , isDark : false , mode : 'vault' } ,
87+ { name : 'dark' , designTokens : { } , isDark : true , mode : 'vault' }
88+ ]
89+
90+ const store = useThemeStore ( )
91+ store . initializeThemes ( themeConfig )
92+
93+ for ( const theme of store . availableThemes ) {
94+ expect ( theme . mode ) . toBe ( 'regular' )
95+ }
96+ } )
97+ it ( 'returns vault themes if in vault' , ( ) => {
98+ vi . mocked ( useVault ) . mockReturnValue ( { isInVault : true } )
99+
100+ const themeConfig = mockDeep < WebThemeConfigType > ( )
101+ themeConfig . themes = [
102+ { name : 'light' , designTokens : { } , isDark : false , mode : 'regular' } ,
103+ { name : 'dark' , designTokens : { } , isDark : true , mode : 'regular' } ,
104+ { name : 'light' , designTokens : { } , isDark : false , mode : 'vault' } ,
105+ { name : 'dark' , designTokens : { } , isDark : true , mode : 'vault' }
106+ ]
107+
108+ const store = useThemeStore ( )
109+ store . initializeThemes ( themeConfig )
110+
111+ for ( const theme of store . availableThemes ) {
112+ expect ( theme . mode ) . toBe ( 'vault' )
113+ }
114+ } )
115+ it ( 'treats themes without mode as regular themes' , ( ) => {
116+ vi . mocked ( useVault ) . mockReturnValue ( { isInVault : false } )
117+
118+ const themeConfig = mockDeep < WebThemeConfigType > ( )
119+ themeConfig . themes = [
120+ { name : 'light' , designTokens : { } , isDark : false , mode : 'regular' } ,
121+ { name : 'dark' , designTokens : { } , isDark : true } ,
122+ { name : 'light' , designTokens : { } , isDark : false , mode : 'vault' } ,
123+ { name : 'dark' , designTokens : { } , isDark : true , mode : 'vault' }
124+ ]
125+
126+ const store = useThemeStore ( )
127+ store . initializeThemes ( themeConfig )
128+ expect ( store . availableThemes . length ) . toBe ( 2 )
129+ for ( const theme of store . availableThemes ) {
130+ expect ( theme . mode ) . not . toBe ( 'vault' )
131+ }
132+ } )
133+ } )
72134 } )
73135} )
0 commit comments