@@ -86,4 +86,110 @@ describe('MigrationV3ToV4', () => {
86
86
// expect(migratedData.state.topics).toEqual(outputV3DataFromV1.state.topics);
87
87
// expect(migratedData.state.messages).toEqual(outputV3DataFromV1.state.messages);
88
88
} ) ;
89
+
90
+ describe ( 'Edge Case' , ( ) => {
91
+ it ( 'should handle undefined settings or languageModel' , ( ) => {
92
+ const data : MigrationData = {
93
+ version : 3 ,
94
+ state : {
95
+ // settings undefined
96
+ } ,
97
+ } ;
98
+
99
+ const migratedData = versionController . migrate ( data ) ;
100
+
101
+ expect ( migratedData . version ) . toEqual ( 4 ) ;
102
+ expect ( migratedData . state . settings ) . toBeUndefined ( ) ;
103
+ } ) ;
104
+
105
+ it ( 'should handle undefined languageModel' , ( ) => {
106
+ const data : MigrationData = {
107
+ version : 3 ,
108
+ state : {
109
+ settings : {
110
+ // languageModel undefined
111
+ } ,
112
+ } ,
113
+ } ;
114
+
115
+ const migratedData = versionController . migrate ( data ) ;
116
+
117
+ expect ( migratedData . version ) . toEqual ( 4 ) ;
118
+ expect ( migratedData . state . settings . languageModel ) . toBeUndefined ( ) ;
119
+ } ) ;
120
+
121
+ it ( 'should handle missing provider configurations' , ( ) => {
122
+ const data : MigrationData = {
123
+ version : 3 ,
124
+ state : {
125
+ settings : {
126
+ languageModel : {
127
+ // missing togetherai、openrouter 、 ollama
128
+ openAI : {
129
+ // openAI
130
+ } ,
131
+ } ,
132
+ } ,
133
+ } ,
134
+ } ;
135
+
136
+ const migratedData = versionController . migrate ( data ) ;
137
+
138
+ expect ( migratedData . version ) . toEqual ( 4 ) ;
139
+ expect ( migratedData . state . settings . languageModel . togetherai ) . toBeUndefined ( ) ;
140
+ expect ( migratedData . state . settings . languageModel . openrouter ) . toBeUndefined ( ) ;
141
+ expect ( migratedData . state . settings . languageModel . ollama ) . toBeUndefined ( ) ;
142
+ } ) ;
143
+
144
+ it ( 'should success for invalid data format' , ( ) => {
145
+ const data : MigrationData = {
146
+ version : 3 ,
147
+ state : {
148
+ settings : {
149
+ languageModel : {
150
+ openAI : 'invalid-config' , // 错误的配置格式
151
+ } ,
152
+ } ,
153
+ } ,
154
+ } ;
155
+
156
+ const migratedData = versionController . migrate ( data ) ;
157
+
158
+ expect ( migratedData . version ) . toEqual ( 4 ) ;
159
+ expect ( migratedData . state . settings . languageModel . openai ) . toEqual ( { enabled : true } ) ;
160
+ expect ( migratedData . state . settings . languageModel . togetherai ) . toBeUndefined ( ) ;
161
+ expect ( migratedData . state . settings . languageModel . openrouter ) . toBeUndefined ( ) ;
162
+ expect ( migratedData . state . settings . languageModel . ollama ) . toBeUndefined ( ) ;
163
+ } ) ;
164
+
165
+ it ( 'should handle empty strings and empty objects' , ( ) => {
166
+ const data : MigrationData = {
167
+ version : 3 ,
168
+ state : {
169
+ settings : {
170
+ languageModel : {
171
+ openAI : undefined ,
172
+ togetherai : {
173
+ apiKey : '' ,
174
+ endpoint : '' ,
175
+ customModelName : '' ,
176
+ } ,
177
+ } ,
178
+ } ,
179
+ } ,
180
+ } ;
181
+
182
+ const migratedData = versionController . migrate ( data ) ;
183
+
184
+ expect ( migratedData . version ) . toEqual ( 4 ) ;
185
+ expect ( migratedData . state . settings . languageModel . openai ) . toEqual ( {
186
+ apiKey : '' ,
187
+ enabled : true ,
188
+ } ) ;
189
+
190
+ expect ( migratedData . state . settings . languageModel . togetherai . apiKey ) . toEqual ( '' ) ;
191
+ expect ( migratedData . state . settings . languageModel . togetherai . endpoint ) . toEqual ( '' ) ;
192
+ expect ( migratedData . state . settings . languageModel . togetherai . customModelCards ) . toBeUndefined ( ) ;
193
+ } ) ;
194
+ } ) ;
89
195
} ) ;
0 commit comments