@@ -11,21 +11,31 @@ import {
1111import * as downloadFileModule from '../../utils/download-file'
1212import { exportComponents } from '../exportComponents'
1313
14+ const zipFileMock = mock (
15+ ( _name : string , _data : unknown , _options ?: unknown ) => { } ,
16+ )
17+ const zipGenerateAsyncMock = mock ( ( _options ?: unknown ) =>
18+ Promise . resolve ( new Uint8Array ( [ 1 , 2 , 3 ] ) ) ,
19+ )
20+
1421// mock jszip
1522mock . module ( 'jszip' , ( ) => ( {
1623 default : class JSZipMock {
1724 files : Record < string , unknown > = { }
18- file ( name : string , data : unknown ) {
25+ file ( name : string , data : unknown , options ?: unknown ) {
26+ zipFileMock ( name , data , options )
1927 this . files [ name ] = data
2028 }
21- async generateAsync ( ) {
22- return new Uint8Array ( [ 1 , 2 , 3 ] )
29+ async generateAsync ( options ?: unknown ) {
30+ return zipGenerateAsyncMock ( options )
2331 }
2432 } ,
2533} ) )
2634
2735const runMock = mock ( ( ) => Promise . resolve ( ) )
28- const getComponentsCodesMock = mock ( ( ) => ( { } ) )
36+ const getComponentsCodesMock = mock (
37+ ( ) : ReadonlyArray < readonly [ string , string ] > => [ ] ,
38+ )
2939
3040mock . module ( '../codegen/Codegen' , ( ) => ( {
3141 Codegen : class {
@@ -127,6 +137,8 @@ describe('exportComponents', () => {
127137 downloadFileMock . mockClear ( )
128138 runMock . mockClear ( )
129139 getComponentsCodesMock . mockClear ( )
140+ zipFileMock . mockClear ( )
141+ zipGenerateAsyncMock . mockClear ( )
130142 } )
131143
132144 test ( 'should notify and return if no components found' , async ( ) => {
@@ -137,7 +149,7 @@ describe('exportComponents', () => {
137149 ( globalThis as { figma ?: { currentPage ?: { selection ?: SceneNode [ ] } } } )
138150 . figma ?. currentPage as { selection : SceneNode [ ] }
139151 ) . selection = [ node ]
140- getComponentsCodesMock . mockReturnValueOnce ( { } )
152+ getComponentsCodesMock . mockReturnValueOnce ( [ ] )
141153 await exportComponents ( )
142154 expect ( notifyMock ) . toHaveBeenCalledWith ( 'No components found' )
143155 } )
@@ -156,7 +168,7 @@ describe('exportComponents', () => {
156168 ( globalThis as { figma ?: { currentPage ?: { selection ?: SceneNode [ ] } } } )
157169 . figma ?. currentPage as { selection : SceneNode [ ] }
158170 ) . selection = [ node ]
159- getComponentsCodesMock . mockReturnValueOnce ( { } )
171+ getComponentsCodesMock . mockReturnValueOnce ( [ ] )
160172 await exportComponents ( )
161173 expect ( downloadFileMock ) . not . toHaveBeenCalled ( )
162174 } )
@@ -192,14 +204,25 @@ describe('exportComponents', () => {
192204 ( globalThis as { figma ?: { currentPage ?: { selection ?: SceneNode [ ] } } } )
193205 . figma ?. currentPage as { selection : SceneNode [ ] }
194206 ) . selection = [ node ]
195- getComponentsCodesMock . mockReturnValueOnce ( {
196- Component : [ [ 'Component.tsx' , '<Component />' ] ] ,
197- } )
207+ getComponentsCodesMock . mockReturnValueOnce ( [
208+ [ 'Component.tsx' , '<Component />' ] ,
209+ ] )
198210 await exportComponents ( )
199211 expect ( downloadFileMock ) . toHaveBeenCalledWith (
200212 'TestPage.zip' ,
201213 expect . any ( Uint8Array ) ,
202214 )
215+ expect ( zipFileMock ) . toHaveBeenCalledWith (
216+ expect . any ( String ) ,
217+ expect . any ( String ) ,
218+ { compression : 'DEFLATE' } ,
219+ )
220+ expect ( zipGenerateAsyncMock ) . toHaveBeenCalledWith ( {
221+ type : 'uint8array' ,
222+ compression : 'DEFLATE' ,
223+ compressionOptions : { level : 1 } ,
224+ streamFiles : true ,
225+ } )
203226 expect ( notifyMock ) . toHaveBeenCalledWith (
204227 'Components exported' ,
205228 expect . any ( Object ) ,
0 commit comments