@digigov/cli-app 1.0.0-rc.2 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +11 -4
- package/lib/test/init.js +59 -19
- package/package.json +4 -4
package/index.js
CHANGED
|
@@ -56,19 +56,26 @@ module.exports = class App extends DigigovCommand {
|
|
|
56
56
|
.option('pagesPath', {
|
|
57
57
|
alias: 'p',
|
|
58
58
|
describe: 'The directory where the pages are located relative to the project folder',
|
|
59
|
+
default: 'pages'
|
|
60
|
+
})
|
|
61
|
+
.option('screenSizes', {
|
|
62
|
+
alias: 's',
|
|
63
|
+
choices: ['xs', 'lg'],
|
|
64
|
+
describe: 'The screen sizes for viewport',
|
|
59
65
|
})
|
|
60
66
|
.help()
|
|
61
67
|
.argv;
|
|
62
68
|
|
|
63
69
|
if (test_args.init) {
|
|
64
|
-
const { baseUrl, pagesPath } = test_args;
|
|
65
|
-
console.log(`Generating test files for pagesPath "${pagesPath}" with baseUrl "${baseUrl}"`);
|
|
70
|
+
const { baseUrl, pagesPath, screenSizes } = test_args;
|
|
71
|
+
console.log(`Generating test files for pagesPath "${pagesPath}" with baseUrl "${baseUrl}" for screen sizes "${screenSizes}"`);
|
|
66
72
|
const projectFolder = process.cwd();
|
|
67
|
-
generatePagesTestFile(projectFolder, pagesPath, baseUrl);
|
|
73
|
+
generatePagesTestFile(projectFolder, pagesPath, baseUrl, screenSizes);
|
|
68
74
|
} else {
|
|
69
|
-
console.log('Usage: digigov app test --init --baseUrl [baseUrl] --pagesPath [pagesPath]');
|
|
75
|
+
console.log('Usage: digigov app test --init --baseUrl [baseUrl] --pagesPath [pagesPath] --screenSizes [screenSizes]');
|
|
70
76
|
console.log('baseUrl: the base url of the running project (default: http://localhost:3000)');
|
|
71
77
|
console.log('pagesPath: the directory where the pages are located (default: pages, src/pages)');
|
|
78
|
+
console.log('screenSizes: the screen sizes for viewport (default: lg)');
|
|
72
79
|
}
|
|
73
80
|
break;
|
|
74
81
|
default:
|
package/lib/test/init.js
CHANGED
|
@@ -4,53 +4,93 @@ const glob = require('glob');
|
|
|
4
4
|
|
|
5
5
|
const FILE_EXTENSIONS = ['js', 'jsx', 'ts', 'tsx'];
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
const SCREEN_SIZES = {
|
|
8
|
+
'xs': { width: 375, height: 667, deviceScaleFactor: 1 },
|
|
9
|
+
'lg': { width: 1280, height: 720, deviceScaleFactor: 2 }
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const appendTestFile = (fileRelativePath, testFile, screenSizes) => {
|
|
13
|
+
screenSizes.forEach((screenSize) => {
|
|
14
|
+
testFile += `\ntest('${fileRelativePath.replace('index', '')} screen-${screenSize}', async () => {
|
|
15
|
+
await page${screenSize.toUpperCase()}.goto(\`\${baseUrl}${fileRelativePath.replace('index', '')}\`);
|
|
16
|
+
await delay(SCREENSHOT_DELAY);
|
|
17
|
+
await page${screenSize.toUpperCase()}.waitForLoadState('domcontentloaded');
|
|
18
|
+
const screenshot = await page${screenSize.toUpperCase()}.screenshot({ fullPage: true });
|
|
19
|
+
expect(screenshot).toMatchSnapshot();
|
|
20
|
+
});\n`;
|
|
21
|
+
});
|
|
13
22
|
return testFile;
|
|
14
23
|
}
|
|
15
24
|
|
|
16
|
-
const
|
|
25
|
+
const generateBrowserContexts = (screenSizes) => {
|
|
26
|
+
let viewportSizes = '';
|
|
27
|
+
screenSizes.forEach((screenSize) => {
|
|
28
|
+
viewportSizes += `\n// Create a context with "${screenSize}" screen size
|
|
29
|
+
const context${screenSize.toUpperCase()} = await browser.newContext({
|
|
30
|
+
viewport: { width: ${SCREEN_SIZES[screenSize].width}, height: ${SCREEN_SIZES[screenSize].height} },
|
|
31
|
+
deviceScaleFactor: ${SCREEN_SIZES[screenSize].deviceScaleFactor},
|
|
32
|
+
});\n`;
|
|
33
|
+
});
|
|
34
|
+
return viewportSizes;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const initializePages = (screenSizes) => {
|
|
38
|
+
let initializePages = '';
|
|
39
|
+
screenSizes.forEach((screenSize) => {
|
|
40
|
+
initializePages += `let page${screenSize.toUpperCase()};\n`;
|
|
41
|
+
});
|
|
42
|
+
return initializePages;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const generateNewPages = (screenSizes) => {
|
|
46
|
+
let newPages = '';
|
|
47
|
+
screenSizes.forEach((screenSize) => {
|
|
48
|
+
newPages += `page${screenSize.toUpperCase()} = await context${screenSize.toUpperCase()}.newPage();\n`;
|
|
49
|
+
});
|
|
50
|
+
return newPages;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const generatePagesTestFile = (projectFolder, pagesPath = 'pages', baseUrl = 'http://localhost:3000', testFileName = 'index.spec.ts', screenSizes=['xs', 'lg']) => {
|
|
17
54
|
let pagesFullPath = '';
|
|
18
|
-
if (pagesPath) {
|
|
55
|
+
if (fs.existsSync(path.join(projectFolder, pagesPath))) {
|
|
19
56
|
pagesFullPath = path.join(projectFolder, pagesPath);
|
|
20
57
|
}
|
|
21
|
-
else {
|
|
22
|
-
|
|
23
|
-
pagesFullPath = path.join(projectFolder, 'pages');
|
|
24
|
-
}
|
|
25
|
-
else if (fs.existsSync(path.join(projectFolder, 'src', 'pages'))) {
|
|
26
|
-
pagesFullPath = path.join(projectFolder, 'src/pages');
|
|
27
|
-
}
|
|
58
|
+
else if (fs.existsSync(path.join(projectFolder, 'src', pagesPath))) {
|
|
59
|
+
pagesFullPath = path.join(projectFolder, `src/${pagesPath}`);
|
|
28
60
|
}
|
|
29
61
|
let testFile = `import { test, expect } from '@playwright/test';
|
|
30
62
|
import { chromium } from 'playwright';
|
|
31
63
|
|
|
32
64
|
const baseUrl = '${baseUrl}';
|
|
65
|
+
const SCREENSHOT_DELAY = 2000;
|
|
33
66
|
|
|
34
|
-
test.describe('
|
|
67
|
+
test.describe('/pages', () => {
|
|
35
68
|
let browser;
|
|
36
|
-
|
|
69
|
+
${initializePages(screenSizes)}
|
|
70
|
+
|
|
71
|
+
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
37
72
|
|
|
38
73
|
test.beforeAll(async () => {
|
|
74
|
+
// Wait until yarn start is loaded
|
|
75
|
+
test.setTimeout(60000);
|
|
76
|
+
await delay(30000);
|
|
39
77
|
browser = await chromium.launch();
|
|
40
|
-
|
|
78
|
+
${generateBrowserContexts(screenSizes)}
|
|
79
|
+
${generateNewPages(screenSizes)}
|
|
41
80
|
});
|
|
42
81
|
|
|
43
82
|
test.afterAll(async () => {
|
|
44
83
|
await browser.close();
|
|
45
84
|
});
|
|
46
85
|
`;
|
|
86
|
+
|
|
47
87
|
const pagesPathRegex = new RegExp(`.*${pagesFullPath.replace('/', '\\/')}(.*)`);
|
|
48
88
|
glob.sync(`${pagesFullPath}/**/*.@(${FILE_EXTENSIONS.join('|')})`).forEach((fileFullPath) => {
|
|
49
89
|
const fileRelativePath = fileFullPath.replace(pagesPathRegex, '$1');
|
|
50
90
|
const pageFileName = fileRelativePath.substring(fileRelativePath.lastIndexOf('/') + 1);
|
|
51
91
|
// Check of the file starts with letter or digit
|
|
52
92
|
if(/^[a-zA-Z0-9]/.test(pageFileName)) {
|
|
53
|
-
testFile = appendTestFile(fileRelativePath.replace(/\.[^/.]+$/, ''),
|
|
93
|
+
testFile = appendTestFile(fileRelativePath.replace(/\.[^/.]+$/, ''), testFile, screenSizes);
|
|
54
94
|
}
|
|
55
95
|
});
|
|
56
96
|
testFile += '\n});';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digigov/cli-app",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.4",
|
|
4
4
|
"description": "@digigov developer cli tool",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": "GRNET Developers <devs@lists.grnet.gr>",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"express": "4.17.1",
|
|
11
11
|
"http-proxy-middleware": "1.0.3",
|
|
12
12
|
"next-images": "1.3.0",
|
|
13
|
-
"@digigov/cli-build": "1.0.0-rc.
|
|
13
|
+
"@digigov/cli-build": "1.0.0-rc.4",
|
|
14
14
|
"url-loader": "4.1.1",
|
|
15
15
|
"next": "10.0.9",
|
|
16
16
|
"publint": "0.1.8",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"rimraf": "3.0.2",
|
|
23
23
|
"execa": "5.0.0",
|
|
24
|
-
"@digigov/cli": "1.0.0-rc.
|
|
24
|
+
"@digigov/cli": "1.0.0-rc.4",
|
|
25
25
|
"typescript": "4.2.3",
|
|
26
26
|
"@types/node": "16.6.2",
|
|
27
27
|
"@types/react": "16.9.56",
|
|
28
28
|
"autoprefixer": "10.4.16",
|
|
29
29
|
"postcss": "8.4.4",
|
|
30
|
-
"@digigov/css": "1.0.0-rc.
|
|
30
|
+
"@digigov/css": "1.0.0-rc.4",
|
|
31
31
|
"tailwindcss": "3.3.5"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|