Skip to content

Commit 4d1d3f6

Browse files
committed
test: add task with redirect
1 parent 3573165 commit 4d1d3f6

6 files changed

Lines changed: 83 additions & 34 deletions

File tree

src/pages/background/tasks/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
loadTaskRun,
1010
removeTaskRun,
1111
runTaskAndSave,
12-
} from './core';
12+
} from '../core/task';
1313

1414
export async function checkOneTask(task: Task) {
1515
const data = await loadTaskRun(task.key);

src/pages/options/utils/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ export async function createExport(arr: {
2828
Array.from(tasks)
2929
.map(x => allTasks.find(y => y.key === x))
3030
.filter(Boolean) as Task[]
31-
).map(x => [x.key, x]),
31+
).map(x => {
32+
delete x.lastRun;
33+
delete x._func;
34+
return [x.key, x];
35+
}),
3236
);
3337
}
3438
return result;

src/share/core/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,6 @@ export interface Task {
157157
// 自定义函数代码
158158
code?: string;
159159

160+
lastRun?: TaskRun;
160161
_func?: () => Promise<void>;
161162
}

tests/e2e/request.spec.mjs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ describe('Redirect', () =>
2424
const query = JSON.parse(
2525
await getPageValue(browser.browser, `get123/test${key}`),
2626
);
27-
assert.strictEqual(query['id'], '123');
28-
assert.strictEqual(query['value'], `test${key}`);
27+
assert.strictEqual(query.id, '123');
28+
assert.strictEqual(query.value, `test${key}`);
2929
} finally {
3030
await remove();
3131
}
@@ -54,7 +54,7 @@ describe('Modify Request Header', () =>
5454
try {
5555
const header = await getHeader(browser.browser);
5656

57-
assert.strictEqual(header['X_TEST_HEADER'], key);
57+
assert.strictEqual(header.X_TEST_HEADER, key);
5858
} finally {
5959
await remove();
6060
}
@@ -81,9 +81,9 @@ describe('Exclude regex', () =>
8181

8282
try {
8383
const header1 = await getHeader(browser.browser, 't123=1');
84-
assert.strictEqual(header1['X_EXCLUDE'], undefined);
84+
assert.strictEqual(header1.X_EXCLUDE, undefined);
8585
const header2 = await getHeader(browser.browser);
86-
assert.strictEqual(header2['X_EXCLUDE'], key);
86+
assert.strictEqual(header2.X_EXCLUDE, key);
8787
} finally {
8888
await remove();
8989
}
@@ -110,7 +110,7 @@ describe('Disable rule', () =>
110110

111111
const header = await getHeader(browser.browser);
112112

113-
assert.strictEqual(header['X_TEST_HEADER'], undefined);
113+
assert.strictEqual(header.X_TEST_HEADER, undefined);
114114

115115
await remove();
116116
},
@@ -198,11 +198,11 @@ describe('Disable All', () =>
198198
await setPref(browser.popup, 'disable-all', true);
199199
await sleep(100);
200200
const header1 = await getHeader(browser.browser);
201-
assert.strictEqual(header1['X_TEST_DISABLE'], undefined);
201+
assert.strictEqual(header1.X_TEST_DISABLE, undefined);
202202
await setPref(browser.popup, 'disable-all', false);
203203
await sleep(100);
204204
const header2 = await getHeader(browser.browser);
205-
assert.strictEqual(header2['X_TEST_DISABLE'], key);
205+
assert.strictEqual(header2.X_TEST_DISABLE, key);
206206
} finally {
207207
await remove();
208208
}

tests/e2e/scripts/browser.mjs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,18 @@ export async function cleanup() {
196196
}
197197
}
198198

199+
export async function runInBrowsers(keys, cb) {
200+
await Promise.all(
201+
keys.map(key => () => {
202+
const client = browserList[key];
203+
if (!client) {
204+
return Promise.resolve();
205+
}
206+
return cb(client);
207+
}),
208+
);
209+
}
210+
199211
export function runTest(keys, cb) {
200212
for (const key of keys) {
201213
it(key, () => {

tests/e2e/task.spec.mjs

Lines changed: 56 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,67 @@
11
import assert from 'node:assert';
22
import { setTimeout as sleep } from 'node:timers/promises';
33
import { getTask, runTask, saveTask } from './scripts/api.mjs';
4-
import { runTest } from './scripts/browser.mjs';
4+
import { runInBrowsers, runTest } from './scripts/browser.mjs';
55
import { randStr, testServer } from './scripts/utils.mjs';
66

7-
describe('Run task', () =>
8-
runTest(
9-
['edge_v2', 'chrome_v3', 'firefox_v2', 'firefox_v3'],
10-
async browser => {
11-
const key = `task_${randStr()}`;
12-
const value = randStr();
7+
describe('Fetch task', () => {
8+
const key = `task_${randStr()}`;
9+
const value = randStr();
10+
const removes = [];
11+
beforeAll(() =>
12+
runInBrowsers(
13+
['edge_v2', 'chrome_v3', 'firefox_v2', 'firefox_v3'],
14+
async browser => {
15+
const res = await saveTask(browser.popup, {
16+
key,
17+
name: 'test task 1',
18+
isFunction: false,
19+
fetch: {
20+
url: `${testServer}mock-json.php?value=${value}`,
21+
method: 'GET',
22+
responseType: 'json',
23+
},
24+
});
25+
removes.push(res.remove);
26+
},
27+
),
28+
);
29+
afterAll(() => removes.forEach(remove => remove()));
1330

14-
const { remove } = await saveTask(browser.popup, {
15-
key,
16-
name: 'test task 1',
17-
isFunction: false,
18-
fetch: {
19-
url: `${testServer}mock-json.php?value=${value}`,
20-
method: 'GET',
21-
responseType: 'json',
22-
},
23-
});
24-
25-
try {
31+
describe('Get task result', () =>
32+
runTest(
33+
['edge_v2', 'chrome_v3', 'firefox_v2', 'firefox_v3'],
34+
async browser => {
2635
await runTask(browser.popup, key);
2736
await sleep(100);
2837
const result = await getTask(browser.popup, key);
2938
assert.strictEqual(result.lastRun.status, 'done');
3039
assert.deepStrictEqual(result.lastRun.result, { value });
31-
} finally {
32-
await remove();
33-
}
34-
},
35-
));
40+
},
41+
));
42+
43+
describe('Use in redirect', () =>
44+
runTest(
45+
['edge_v2', 'chrome_v3', 'firefox_v2', 'firefox_v3'],
46+
async browser => {
47+
const { remove } = await saveRule(browser.popup, {
48+
name: 'test redirect',
49+
ruleType: 'redirect',
50+
pattern: `^${testServer}get(\\d+)$`,
51+
matchType: 'regexp',
52+
isFunction: false,
53+
enable: true,
54+
to: `${testServer}get-query.php?value=\${TASK.${key}.value}`,
55+
});
56+
57+
try {
58+
const query = JSON.parse(
59+
await getPageValue(browser.browser, `get123`),
60+
);
61+
assert.strictEqual(query.value, value);
62+
} finally {
63+
await remove();
64+
}
65+
},
66+
));
67+
});

0 commit comments

Comments
 (0)