Skip to content

Commit d749bd6

Browse files
committed
Fix version
1 parent 81d7cf8 commit d749bd6

File tree

5 files changed

+68
-49
lines changed

5 files changed

+68
-49
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- uses: actions/checkout@v6
2525
- uses: oven-sh/setup-bun@v2
2626
with:
27-
bun-version: 1.3.9
27+
bun-version: latest
2828
- name: Install dependencies
2929
run: bun install
3030
- name: Lint

src/commands/devup/utils/__tests__/download-devup-xlsx.test.ts

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test'
1+
import { describe, expect, mock, test } from 'bun:test'
22
import { downloadDevupXlsx } from '../download-devup-xlsx'
33

44
describe('downloadDevupXlsx', () => {
5-
let showUIMock: ReturnType<typeof mock>
6-
let postMessageMock: ReturnType<typeof mock>
7-
let onmessageHandler: ((message: unknown) => void) | null = null
8-
9-
beforeEach(() => {
10-
showUIMock = mock(() => {})
11-
postMessageMock = mock(() => {})
12-
onmessageHandler = null
5+
function createMockFigma() {
6+
const showUIMock = mock(() => {})
7+
const postMessageMock = mock(() => {})
8+
let onmessageHandler: ((message: unknown) => void) | null = null
139

1410
const uiObj: {
1511
onmessage?: (message: unknown) => void
@@ -26,18 +22,26 @@ describe('downloadDevupXlsx', () => {
2622

2723
uiObj.postMessage = postMessageMock
2824

29-
;(globalThis as { figma?: unknown }).figma = {
25+
const ctx = {
3026
showUI: showUIMock,
3127
ui: uiObj,
3228
} as unknown as typeof figma
33-
})
3429

35-
afterEach(() => {
36-
;(globalThis as { figma?: unknown }).figma = undefined
37-
})
30+
return {
31+
ctx,
32+
showUIMock,
33+
postMessageMock,
34+
getHandler: () => onmessageHandler,
35+
}
36+
}
3837

3938
test('should call showUI with correct HTML string and visible false', () => {
40-
downloadDevupXlsx('test.xlsx', '{"theme":{"colors":{},"typography":{}}}')
39+
const { ctx, showUIMock } = createMockFigma()
40+
downloadDevupXlsx(
41+
'test.xlsx',
42+
'{"theme":{"colors":{},"typography":{}}}',
43+
ctx,
44+
)
4145
expect(showUIMock).toHaveBeenCalledWith(
4246
expect.stringContaining('xlsx-0.20.3'),
4347
{ visible: false },
@@ -49,8 +53,13 @@ describe('downloadDevupXlsx', () => {
4953
})
5054

5155
test('should set onmessage handler and post message', () => {
52-
downloadDevupXlsx('test.xlsx', '{"theme":{"colors":{},"typography":{}}}')
53-
expect(onmessageHandler).not.toBeNull()
56+
const { ctx, getHandler, postMessageMock } = createMockFigma()
57+
downloadDevupXlsx(
58+
'test.xlsx',
59+
'{"theme":{"colors":{},"typography":{}}}',
60+
ctx,
61+
)
62+
expect(getHandler()).not.toBeNull()
5463
expect(postMessageMock).toHaveBeenCalledWith({
5564
type: 'download',
5665
fileName: 'test.xlsx',
@@ -59,26 +68,31 @@ describe('downloadDevupXlsx', () => {
5968
})
6069

6170
test('should return a promise that resolves when onmessage is called', async () => {
71+
const { ctx, getHandler, postMessageMock } = createMockFigma()
6272
const promise = downloadDevupXlsx(
6373
'test.xlsx',
6474
'{"theme":{"colors":{},"typography":{}}}',
75+
ctx,
6576
)
6677

6778
// Simulate message from UI
68-
if (onmessageHandler) {
69-
onmessageHandler(undefined)
79+
const handler = getHandler()
80+
if (handler) {
81+
handler(undefined)
7082
}
7183

7284
await promise
7385
expect(postMessageMock).toHaveBeenCalled()
7486
})
7587

7688
test('should handle different file names and data', () => {
89+
const { ctx, postMessageMock } = createMockFigma()
7790
downloadDevupXlsx(
7891
'devup.xlsx',
7992
JSON.stringify({
8093
theme: { colors: { light: { primary: '#000' } }, typography: {} },
8194
}),
95+
ctx,
8296
)
8397
expect(postMessageMock).toHaveBeenCalledWith({
8498
type: 'download',

src/commands/devup/utils/__tests__/upload-devup-xlsx.test.ts

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test'
1+
import { describe, expect, mock, test } from 'bun:test'
22
import type { Devup } from '../../types'
33
import { uploadDevupXlsx } from '../upload-devup-xlsx'
44

55
describe('uploadDevupXlsx', () => {
6-
let showUIMock: ReturnType<typeof mock>
7-
let closeMock: ReturnType<typeof mock>
8-
let onmessageHandler: ((message: string) => void) | null = null
9-
10-
beforeEach(() => {
11-
showUIMock = mock(() => {})
12-
closeMock = mock(() => {})
13-
onmessageHandler = null
6+
function createMockFigma() {
7+
const showUIMock = mock(() => {})
8+
const closeMock = mock(() => {})
9+
let onmessageHandler: ((message: string) => void) | null = null
1410

1511
const uiObj: {
1612
onmessage?: (message: string) => void
@@ -27,18 +23,17 @@ describe('uploadDevupXlsx', () => {
2723

2824
uiObj.close = closeMock
2925

30-
;(globalThis as { figma?: unknown }).figma = {
26+
const ctx = {
3127
showUI: showUIMock,
3228
ui: uiObj,
3329
} as unknown as typeof figma
34-
})
3530

36-
afterEach(() => {
37-
;(globalThis as { figma?: unknown }).figma = undefined
38-
})
31+
return { ctx, showUIMock, closeMock, getHandler: () => onmessageHandler }
32+
}
3933

4034
test('should call showUI with correct HTML string', () => {
41-
uploadDevupXlsx()
35+
const { ctx, showUIMock } = createMockFigma()
36+
uploadDevupXlsx(ctx)
4237
expect(showUIMock).toHaveBeenCalledWith(
4338
expect.stringContaining('accept=".xlsx"'),
4439
)
@@ -48,12 +43,14 @@ describe('uploadDevupXlsx', () => {
4843
})
4944

5045
test('should resolve with parsed JSON when message is received', async () => {
46+
const { ctx, closeMock, getHandler } = createMockFigma()
5147
const testData = { theme: { colors: {}, typography: {} } }
52-
const promise = uploadDevupXlsx()
48+
const promise = uploadDevupXlsx(ctx)
5349

5450
// Simulate message from UI
55-
if (onmessageHandler) {
56-
onmessageHandler(JSON.stringify(testData))
51+
const handler = getHandler()
52+
if (handler) {
53+
handler(JSON.stringify(testData))
5754
}
5855

5956
const result = await promise
@@ -62,6 +59,7 @@ describe('uploadDevupXlsx', () => {
6259
})
6360

6461
test('should handle message with colors and typography', async () => {
62+
const { ctx, getHandler } = createMockFigma()
6563
const testData = {
6664
theme: {
6765
colors: {
@@ -77,10 +75,11 @@ describe('uploadDevupXlsx', () => {
7775
},
7876
},
7977
}
80-
const promise = uploadDevupXlsx()
78+
const promise = uploadDevupXlsx(ctx)
8179

82-
if (onmessageHandler) {
83-
onmessageHandler(JSON.stringify(testData))
80+
const handler = getHandler()
81+
if (handler) {
82+
handler(JSON.stringify(testData))
8483
}
8584

8685
const result = await promise

src/commands/devup/utils/download-devup-xlsx.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
* @param fileName
44
* @param data
55
*/
6-
export async function downloadDevupXlsx(fileName: string, data: string) {
7-
figma.showUI(downloadFileUi(), {
6+
export async function downloadDevupXlsx(
7+
fileName: string,
8+
data: string,
9+
ctx: typeof figma = figma,
10+
) {
11+
ctx.showUI(downloadFileUi(), {
812
visible: false,
913
})
1014

1115
const pro = new Promise((resolve) => {
12-
figma.ui.onmessage = resolve
16+
ctx.ui.onmessage = resolve
1317
})
1418

15-
figma.ui.postMessage({
19+
ctx.ui.postMessage({
1620
type: 'download',
1721
fileName,
1822
data,

src/commands/devup/utils/upload-devup-xlsx.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import type { Devup } from '../types'
55
* @param fileName
66
* @param data
77
*/
8-
export async function uploadDevupXlsx(): Promise<Devup> {
9-
figma.showUI(uploadFileUi('.xlsx'))
8+
export async function uploadDevupXlsx(
9+
ctx: typeof figma = figma,
10+
): Promise<Devup> {
11+
ctx.showUI(uploadFileUi('.xlsx'))
1012
return new Promise((resolve) => {
11-
figma.ui.onmessage = (message) => {
12-
figma.ui.close()
13+
ctx.ui.onmessage = (message) => {
14+
ctx.ui.close()
1315
resolve(JSON.parse(message))
1416
}
1517
})

0 commit comments

Comments
 (0)