Skip to content

Commit faf602e

Browse files
Use options for discovery as well
1 parent 39e135e commit faf602e

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

src/lib/processSnapshot.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Snapshot, Context, ProcessedSnapshot } from "../types.js";
2-
import { scrollToBottomAndBackToTop, getRenderViewports } from "./utils.js"
2+
import { scrollToBottomAndBackToTop, getRenderViewports, getRenderViewportsForOptions } from "./utils.js"
33
import { chromium, Locator } from "@playwright/test"
44
import constants from "./constants.js";
55
import { updateLogContext } from '../lib/logger.js'
@@ -241,7 +241,14 @@ export default async function processSnapshot(snapshot: Snapshot, ctx: Context):
241241
// process for every viewport
242242
let navigated: boolean = false;
243243
let previousDeviceType: string | null = null;
244-
let renderViewports = getRenderViewports(ctx);
244+
245+
let renderViewports;
246+
247+
if((snapshot.options && snapshot.options.web) || (snapshot.options && snapshot.options.mobile)){
248+
renderViewports = getRenderViewportsForOptions(snapshot.options)
249+
} else {
250+
renderViewports = getRenderViewports(ctx);
251+
}
245252

246253
for (const { viewport, viewportString, fullPage, device } of renderViewports) {
247254

src/lib/utils.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,33 @@ export function getWebRenderViewports(ctx: Context): Array<Record<string,any>> {
9393
return webRenderViewports
9494
}
9595

96+
export function getWebRenderViewportsForOptions(options: any): Array<Record<string,any>> {
97+
let webRenderViewports: Array<Record<string,any>> = [];
98+
99+
if (options.web && Array.isArray(options.web.viewports)) {
100+
for (const viewport of options.web.viewports) {
101+
if (Array.isArray(viewport) && viewport.length > 0) {
102+
let viewportObj: { width: number; height?: number } = {
103+
width: viewport[0]
104+
};
105+
106+
if (viewport.length > 1) {
107+
viewportObj.height = viewport[1];
108+
}
109+
110+
webRenderViewports.push({
111+
viewport: viewportObj,
112+
viewportString: `${viewport[0]}${viewport[1] ? 'x'+viewport[1] : ''}`,
113+
fullPage: viewport.length === 1,
114+
device: false
115+
});
116+
}
117+
}
118+
}
119+
120+
return webRenderViewports;
121+
}
122+
96123
export function getMobileRenderViewports(ctx: Context): Record<string,any> {
97124
let mobileRenderViewports: Record<string, Array<Record<string, any>>> = {}
98125
mobileRenderViewports[constants.MOBILE_OS_IOS] = [];
@@ -117,10 +144,50 @@ export function getMobileRenderViewports(ctx: Context): Record<string,any> {
117144
return mobileRenderViewports
118145
}
119146

147+
export function getMobileRenderViewportsForOptions(options: any): Record<string,any> {
148+
let mobileRenderViewports: Record<string, Array<Record<string, any>>> = {}
149+
mobileRenderViewports[constants.MOBILE_OS_IOS] = [];
150+
mobileRenderViewports[constants.MOBILE_OS_ANDROID] = [];
151+
152+
if (options.mobile) {
153+
for (const device of options.mobile.devices) {
154+
let os = constants.SUPPORTED_MOBILE_DEVICES[device].os;
155+
let { width, height } = constants.SUPPORTED_MOBILE_DEVICES[device].viewport;
156+
let orientation = options.mobile.orientation || constants.MOBILE_ORIENTATION_PORTRAIT;
157+
let portrait = (orientation === constants.MOBILE_ORIENTATION_PORTRAIT);
158+
159+
// Check if fullPage is specified, otherwise use default
160+
let fullPage = options.mobile.fullPage !== undefined ? options.mobile.fullPage : true;
161+
162+
mobileRenderViewports[os]?.push({
163+
viewport: { width: portrait ? width : height, height: portrait ? height : width },
164+
viewportString: `${device} (${orientation})`,
165+
fullPage: fullPage,
166+
device: true,
167+
os: os
168+
})
169+
}
170+
}
171+
172+
return mobileRenderViewports
173+
}
174+
120175
export function getRenderViewports(ctx: Context): Array<Record<string,any>> {
121176
let mobileRenderViewports = getMobileRenderViewports(ctx);
122177
let webRenderViewports = getWebRenderViewports(ctx);
123178

179+
// Combine arrays ensuring web viewports are first
180+
return [
181+
...webRenderViewports,
182+
...mobileRenderViewports[constants.MOBILE_OS_IOS],
183+
...mobileRenderViewports[constants.MOBILE_OS_ANDROID]
184+
];
185+
}
186+
187+
export function getRenderViewportsForOptions(options: any): Array<Record<string,any>> {
188+
let mobileRenderViewports = getMobileRenderViewportsForOptions(options);
189+
let webRenderViewports = getWebRenderViewportsForOptions(options);
190+
124191
// Combine arrays ensuring web viewports are first
125192
return [
126193
...webRenderViewports,

0 commit comments

Comments
 (0)