Skip to content

Commit 259e4ef

Browse files
author
rocketraccoon
committed
feat: saveState improvements
1 parent d1573d0 commit 259e4ef

File tree

7 files changed

+42
-3
lines changed

7 files changed

+42
-3
lines changed

src/browser/commands/restoreState/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
import { getActivePuppeteerPage } from "../../existing-browser";
1616
import { Cookie } from "@testplane/wdio-protocols";
1717

18-
export type RestoreStateOptions = SaveStateOptions & {
18+
export type RestoreStateOptions = Omit<SaveStateOptions, "keepFile"> & {
1919
data?: SaveStateData;
2020
refresh?: boolean;
2121
};

src/browser/commands/saveState/index.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ExistingBrowser, getActivePuppeteerPage } from "../../existing-browser"
77
import * as logger from "../../../utils/logger";
88
import { Cookie } from "../../../types";
99
import type { Browser } from "../../types";
10+
import { MasterEvents } from "../../../events";
1011

1112
export type SaveStateOptions = {
1213
path?: string;
@@ -16,6 +17,7 @@ export type SaveStateOptions = {
1617
sessionStorage?: boolean;
1718

1819
cookieFilter?: (cookie: Cookie) => boolean;
20+
keepFile?: boolean;
1921
};
2022

2123
export type FrameData = StorageData;
@@ -29,6 +31,7 @@ export const defaultOptions = {
2931
cookies: true,
3032
localStorage: true,
3133
sessionStorage: true,
34+
keepFile: false,
3235
};
3336

3437
// in case when we use webdriver protocol, bidi and isolation
@@ -178,8 +181,21 @@ export default (browser: ExistingBrowser): void => {
178181
data.cookies = data.cookies.filter(options.cookieFilter);
179182
}
180183

181-
if (options && options.path) {
182-
await fs.writeJson(options.path, data, { spaces: 2 });
184+
const dataIsEmpty = data.cookies?.length === 0 && _.isEmpty(data.framesData);
185+
186+
if (options && options.path && !dataIsEmpty) {
187+
await fs.outputJson(options.path, data, { spaces: 2 });
188+
189+
if (options.keepFile) {
190+
logger.warn(
191+
"\x1b[31mPlease be aware that the file containing authorization data will not be automatically deleted after the tests are completed!!!\x1b[0m",
192+
);
193+
} else if (process.send) {
194+
process.send({
195+
event: MasterEvents.ADD_FILE_TO_REMOVE,
196+
data: options.path,
197+
});
198+
}
183199
}
184200

185201
return data;

src/events/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export const RunnerSyncEvents = {
4444

4545
DOM_SNAPSHOTS: "domSnapshots",
4646

47+
ADD_FILE_TO_REMOVE: "addFileToRemove",
48+
4749
TEST_DEPENDENCIES: "testDependencies",
4850
} as const;
4951

src/runner/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ export class MainRunner extends RunnableEmitter {
7575
MasterEvents.NEW_WORKER_PROCESS,
7676
MasterEvents.ERROR,
7777
MasterEvents.DOM_SNAPSHOTS,
78+
MasterEvents.ADD_FILE_TO_REMOVE,
7879
MasterEvents.TEST_DEPENDENCIES,
7980
]);
8081

src/testplane.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,28 @@ export class Testplane extends BaseTestplane {
7777
protected runner: MainRunner | null;
7878
protected viteServer: ViteServer | null;
7979

80+
private _filesToRemove: string[];
81+
8082
constructor(config?: string | ConfigInput) {
8183
super(config);
8284

8385
this.failed = false;
8486
this.failedList = [];
8587
this.runner = null;
8688
this.viteServer = null;
89+
90+
this._filesToRemove = [];
8791
}
8892

8993
extendCli(parser: Command): void {
9094
this.emit(MasterEvents.CLI, parser);
9195
}
9296

97+
addFileToRemove(path: string): void {
98+
this._filesToRemove.push(path);
99+
}
100+
101+
93102
protected async _init(): Promise<void> {
94103
await initDevServer({
95104
testplane: this,
@@ -155,6 +164,8 @@ export class Testplane extends BaseTestplane {
155164

156165
this.on(MasterEvents.RUNNER_END, async () => await this._saveFailed());
157166

167+
this.on(MasterEvents.ADD_FILE_TO_REMOVE, this.addFileToRemove);
168+
158169
await initReporters(reporters, this);
159170

160171
eventsUtils.passthroughEvent(this.runner, this, _.values(MasterSyncEvents));
@@ -189,6 +200,10 @@ export class Testplane extends BaseTestplane {
189200
await this.config.afterAll.call({ config: this.config }, { config: this.config });
190201
}
191202

203+
if (this._filesToRemove.length > 0) {
204+
await Promise.all(this._filesToRemove.map(path => fs.remove(path)));
205+
}
206+
192207
return !this.isFailed();
193208
}
194209

src/types/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ export type MasterEventHandler<T extends BaseTestplane> = {
258258
(event: Events["ERROR"], callback: (err: Error) => void): T;
259259

260260
(event: Events["UPDATE_REFERENCE"], callback: (data: { state: string; refImg: RefImageInfo }) => void): T;
261+
(event: Events["ADD_FILE_TO_REMOVE"], callback: (path: string) => void): T;
261262
(event: Events["NEW_BROWSER"], callback: SyncSessionEventCallback): T;
262263
};
263264

src/utils/workers-registry.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ module.exports = class WorkersRegistry extends EventEmitter {
139139
this.emit(MasterEvents.DOM_SNAPSHOTS, data.context, data.data);
140140
break;
141141
}
142+
case MasterEvents.ADD_FILE_TO_REMOVE: {
143+
this.emit(MasterEvents.ADD_FILE_TO_REMOVE, data.data);
144+
break;
145+
}
142146
case MasterEvents.TEST_DEPENDENCIES: {
143147
this.emit(MasterEvents.TEST_DEPENDENCIES, data.context, data.data);
144148
break;

0 commit comments

Comments
 (0)