@testim/testim-cli 3.223.0 → 3.226.0

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.
@@ -1,3 +1,5 @@
1
+ /* eslint-disable camelcase */
2
+
1
3
  'use strict';
2
4
 
3
5
  const crypto = require('crypto');
@@ -123,7 +125,7 @@ function readFileToBase64(fileLocation) {
123
125
  return fs.readFileSync(fileLocation, { encoding: 'base64' });
124
126
  }
125
127
 
126
- function setCustomExtension(customExtensionLocalLocation = '', extensions, lambdatestService) {
128
+ function setCustomExtension(customExtensionLocalLocation, extensions, lambdatestService) {
127
129
  if (lambdatestService && lambdatestService.isLambdatestRun() && utils.isURL(customExtensionLocalLocation)) {
128
130
  return;
129
131
  }
@@ -176,6 +178,9 @@ function _buildChromiumOptions(opts, browserOptions, testRunConfig, customExtens
176
178
  'profile.default_content_setting_values.automatic_downloads': CONTENT_SETTING.CONTENT_SETTING_ALLOW,
177
179
  // disable pdf viewer
178
180
  'plugins.always_open_pdf_externally': true,
181
+ // unintuitively stops download protection ("Dangerous file blocked")
182
+ // if needed in the future, consider adding --safebrowsing-disable-download-protection or --safebrowsing-disable-extension-blacklist to the chrome flags
183
+ 'safebrowsing.enabled': true,
179
184
  'profile.content_settings.exceptions.clipboard': {
180
185
  '[*.],*': { last_modified: Date.now(), setting: 1 },
181
186
  },
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "3.223.0",
3
+ "version": "3.226.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@testim/testim-cli",
9
- "version": "3.223.0",
9
+ "version": "3.226.0",
10
10
  "license": "Proprietary",
11
11
  "dependencies": {
12
12
  "@applitools/eyes-sdk-core": "13.0.0",
@@ -103,9 +103,9 @@
103
103
  }
104
104
  },
105
105
  "node_modules/@ampproject/remapping": {
106
- "version": "2.1.1",
107
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz",
108
- "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==",
106
+ "version": "2.1.2",
107
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
108
+ "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
109
109
  "dev": true,
110
110
  "dependencies": {
111
111
  "@jridgewell/trace-mapping": "^0.3.0"
@@ -500,20 +500,20 @@
500
500
  }
501
501
  },
502
502
  "node_modules/@babel/core": {
503
- "version": "7.17.2",
504
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz",
505
- "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==",
503
+ "version": "7.17.5",
504
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
505
+ "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
506
506
  "dev": true,
507
507
  "dependencies": {
508
- "@ampproject/remapping": "^2.0.0",
508
+ "@ampproject/remapping": "^2.1.0",
509
509
  "@babel/code-frame": "^7.16.7",
510
- "@babel/generator": "^7.17.0",
510
+ "@babel/generator": "^7.17.3",
511
511
  "@babel/helper-compilation-targets": "^7.16.7",
512
512
  "@babel/helper-module-transforms": "^7.16.7",
513
513
  "@babel/helpers": "^7.17.2",
514
- "@babel/parser": "^7.17.0",
514
+ "@babel/parser": "^7.17.3",
515
515
  "@babel/template": "^7.16.7",
516
- "@babel/traverse": "^7.17.0",
516
+ "@babel/traverse": "^7.17.3",
517
517
  "@babel/types": "^7.17.0",
518
518
  "convert-source-map": "^1.7.0",
519
519
  "debug": "^4.1.0",
@@ -548,9 +548,9 @@
548
548
  }
549
549
  },
550
550
  "node_modules/@babel/generator": {
551
- "version": "7.17.0",
552
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz",
553
- "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==",
551
+ "version": "7.17.3",
552
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
553
+ "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
554
554
  "dev": true,
555
555
  "dependencies": {
556
556
  "@babel/types": "^7.17.0",
@@ -651,9 +651,9 @@
651
651
  }
652
652
  },
653
653
  "node_modules/@babel/helper-module-transforms": {
654
- "version": "7.16.7",
655
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
656
- "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
654
+ "version": "7.17.6",
655
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz",
656
+ "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==",
657
657
  "dev": true,
658
658
  "dependencies": {
659
659
  "@babel/helper-environment-visitor": "^7.16.7",
@@ -662,8 +662,8 @@
662
662
  "@babel/helper-split-export-declaration": "^7.16.7",
663
663
  "@babel/helper-validator-identifier": "^7.16.7",
664
664
  "@babel/template": "^7.16.7",
665
- "@babel/traverse": "^7.16.7",
666
- "@babel/types": "^7.16.7"
665
+ "@babel/traverse": "^7.17.3",
666
+ "@babel/types": "^7.17.0"
667
667
  },
668
668
  "engines": {
669
669
  "node": ">=6.9.0"
@@ -794,9 +794,9 @@
794
794
  }
795
795
  },
796
796
  "node_modules/@babel/parser": {
797
- "version": "7.17.0",
798
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz",
799
- "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==",
797
+ "version": "7.17.3",
798
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz",
799
+ "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==",
800
800
  "dev": true,
801
801
  "bin": {
802
802
  "parser": "bin/babel-parser.js"
@@ -831,18 +831,18 @@
831
831
  }
832
832
  },
833
833
  "node_modules/@babel/traverse": {
834
- "version": "7.17.0",
835
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz",
836
- "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==",
834
+ "version": "7.17.3",
835
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
836
+ "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
837
837
  "dev": true,
838
838
  "dependencies": {
839
839
  "@babel/code-frame": "^7.16.7",
840
- "@babel/generator": "^7.17.0",
840
+ "@babel/generator": "^7.17.3",
841
841
  "@babel/helper-environment-visitor": "^7.16.7",
842
842
  "@babel/helper-function-name": "^7.16.7",
843
843
  "@babel/helper-hoist-variables": "^7.16.7",
844
844
  "@babel/helper-split-export-declaration": "^7.16.7",
845
- "@babel/parser": "^7.17.0",
845
+ "@babel/parser": "^7.17.3",
846
846
  "@babel/types": "^7.17.0",
847
847
  "debug": "^4.1.0",
848
848
  "globals": "^11.1.0"
@@ -1812,6 +1812,14 @@
1812
1812
  "node": ">= 0.6"
1813
1813
  }
1814
1814
  },
1815
+ "node_modules/accepts/node_modules/mime-db": {
1816
+ "version": "1.51.0",
1817
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
1818
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
1819
+ "engines": {
1820
+ "node": ">= 0.6"
1821
+ }
1822
+ },
1815
1823
  "node_modules/accepts/node_modules/mime-types": {
1816
1824
  "version": "2.1.34",
1817
1825
  "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
@@ -1874,9 +1882,9 @@
1874
1882
  }
1875
1883
  },
1876
1884
  "node_modules/agentkeepalive": {
1877
- "version": "4.2.0",
1878
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz",
1879
- "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==",
1885
+ "version": "4.2.1",
1886
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
1887
+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
1880
1888
  "dependencies": {
1881
1889
  "debug": "^4.1.0",
1882
1890
  "depd": "^1.1.2",
@@ -2899,15 +2907,15 @@
2899
2907
  "dev": true
2900
2908
  },
2901
2909
  "node_modules/browserslist": {
2902
- "version": "4.19.1",
2903
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
2904
- "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
2910
+ "version": "4.19.3",
2911
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz",
2912
+ "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==",
2905
2913
  "dev": true,
2906
2914
  "dependencies": {
2907
- "caniuse-lite": "^1.0.30001286",
2908
- "electron-to-chromium": "^1.4.17",
2915
+ "caniuse-lite": "^1.0.30001312",
2916
+ "electron-to-chromium": "^1.4.71",
2909
2917
  "escalade": "^3.1.1",
2910
- "node-releases": "^2.0.1",
2918
+ "node-releases": "^2.0.2",
2911
2919
  "picocolors": "^1.0.0"
2912
2920
  },
2913
2921
  "bin": {
@@ -4591,14 +4599,14 @@
4591
4599
  }
4592
4600
  },
4593
4601
  "node_modules/degenerator": {
4594
- "version": "3.0.1",
4595
- "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz",
4596
- "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==",
4602
+ "version": "3.0.2",
4603
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz",
4604
+ "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==",
4597
4605
  "dependencies": {
4598
4606
  "ast-types": "^0.13.2",
4599
4607
  "escodegen": "^1.8.1",
4600
4608
  "esprima": "^4.0.0",
4601
- "vm2": "^3.9.3"
4609
+ "vm2": "^3.9.8"
4602
4610
  },
4603
4611
  "engines": {
4604
4612
  "node": ">= 6"
@@ -4831,9 +4839,9 @@
4831
4839
  }
4832
4840
  },
4833
4841
  "node_modules/electron-to-chromium": {
4834
- "version": "1.4.68",
4835
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz",
4836
- "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==",
4842
+ "version": "1.4.73",
4843
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz",
4844
+ "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==",
4837
4845
  "dev": true
4838
4846
  },
4839
4847
  "node_modules/emoji-regex": {
@@ -5773,9 +5781,9 @@
5773
5781
  "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
5774
5782
  },
5775
5783
  "node_modules/follow-redirects": {
5776
- "version": "1.14.8",
5777
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
5778
- "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==",
5784
+ "version": "1.14.9",
5785
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
5786
+ "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
5779
5787
  "funding": [
5780
5788
  {
5781
5789
  "type": "individual",
@@ -6353,9 +6361,9 @@
6353
6361
  }
6354
6362
  },
6355
6363
  "node_modules/globule/node_modules/minimatch": {
6356
- "version": "3.0.7",
6357
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.7.tgz",
6358
- "integrity": "sha512-pYjbG0o9W2Wb3KVBuV6s7R/bzS/iS3HPiHcFcDee5GGiN1M5MErXqgS4jGn8pwVwTZAoy7B8bYb/+AqQU0NhZA==",
6364
+ "version": "3.0.8",
6365
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
6366
+ "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
6359
6367
  "dependencies": {
6360
6368
  "brace-expansion": "^1.1.7"
6361
6369
  },
@@ -8404,9 +8412,9 @@
8404
8412
  }
8405
8413
  },
8406
8414
  "node_modules/marky": {
8407
- "version": "1.2.2",
8408
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz",
8409
- "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ=="
8415
+ "version": "1.2.4",
8416
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.4.tgz",
8417
+ "integrity": "sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w=="
8410
8418
  },
8411
8419
  "node_modules/matchdep": {
8412
8420
  "version": "2.0.0",
@@ -8615,9 +8623,9 @@
8615
8623
  }
8616
8624
  },
8617
8625
  "node_modules/mime-db": {
8618
- "version": "1.51.0",
8619
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
8620
- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
8626
+ "version": "1.52.0",
8627
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
8628
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
8621
8629
  "engines": {
8622
8630
  "node": ">= 0.6"
8623
8631
  }
@@ -8658,9 +8666,9 @@
8658
8666
  }
8659
8667
  },
8660
8668
  "node_modules/minimatch": {
8661
- "version": "3.1.1",
8662
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.1.tgz",
8663
- "integrity": "sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==",
8669
+ "version": "3.1.2",
8670
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
8671
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
8664
8672
  "dependencies": {
8665
8673
  "brace-expansion": "^1.1.7"
8666
8674
  },
@@ -14546,9 +14554,9 @@
14546
14554
  }
14547
14555
  },
14548
14556
  "node_modules/socket.io-parser": {
14549
- "version": "4.1.1",
14550
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz",
14551
- "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==",
14557
+ "version": "4.1.2",
14558
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz",
14559
+ "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==",
14552
14560
  "dependencies": {
14553
14561
  "@socket.io/component-emitter": "~3.0.0",
14554
14562
  "debug": "~4.3.1"
@@ -15012,7 +15020,7 @@
15012
15020
  "version": "3.8.3",
15013
15021
  "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
15014
15022
  "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
15015
- "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>. Thanks to @shadowgate15, @spence-s, and @niftylettuce. Superagent is sponsored by Forward Email at <https://forwardemail.net>.",
15023
+ "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>.",
15016
15024
  "dependencies": {
15017
15025
  "component-emitter": "^1.2.0",
15018
15026
  "cookiejar": "^2.1.0",
@@ -16135,9 +16143,9 @@
16135
16143
  }
16136
16144
  },
16137
16145
  "node_modules/vm2": {
16138
- "version": "3.9.7",
16139
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.7.tgz",
16140
- "integrity": "sha512-g/GZ7V0Mlmch3eDVOATvAXr1GsJNg6kQ5PjvYy3HbJMCRn5slNbo/u73Uy7r5yUej1cRa3ZjtoVwcWSQuQ/fow==",
16146
+ "version": "3.9.9",
16147
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz",
16148
+ "integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==",
16141
16149
  "dependencies": {
16142
16150
  "acorn": "^8.7.0",
16143
16151
  "acorn-walk": "^8.2.0"
@@ -16732,9 +16740,9 @@
16732
16740
  },
16733
16741
  "dependencies": {
16734
16742
  "@ampproject/remapping": {
16735
- "version": "2.1.1",
16736
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz",
16737
- "integrity": "sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==",
16743
+ "version": "2.1.2",
16744
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
16745
+ "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
16738
16746
  "dev": true,
16739
16747
  "requires": {
16740
16748
  "@jridgewell/trace-mapping": "^0.3.0"
@@ -17045,20 +17053,20 @@
17045
17053
  "dev": true
17046
17054
  },
17047
17055
  "@babel/core": {
17048
- "version": "7.17.2",
17049
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz",
17050
- "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==",
17056
+ "version": "7.17.5",
17057
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
17058
+ "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
17051
17059
  "dev": true,
17052
17060
  "requires": {
17053
- "@ampproject/remapping": "^2.0.0",
17061
+ "@ampproject/remapping": "^2.1.0",
17054
17062
  "@babel/code-frame": "^7.16.7",
17055
- "@babel/generator": "^7.17.0",
17063
+ "@babel/generator": "^7.17.3",
17056
17064
  "@babel/helper-compilation-targets": "^7.16.7",
17057
17065
  "@babel/helper-module-transforms": "^7.16.7",
17058
17066
  "@babel/helpers": "^7.17.2",
17059
- "@babel/parser": "^7.17.0",
17067
+ "@babel/parser": "^7.17.3",
17060
17068
  "@babel/template": "^7.16.7",
17061
- "@babel/traverse": "^7.17.0",
17069
+ "@babel/traverse": "^7.17.3",
17062
17070
  "@babel/types": "^7.17.0",
17063
17071
  "convert-source-map": "^1.7.0",
17064
17072
  "debug": "^4.1.0",
@@ -17085,9 +17093,9 @@
17085
17093
  }
17086
17094
  },
17087
17095
  "@babel/generator": {
17088
- "version": "7.17.0",
17089
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz",
17090
- "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==",
17096
+ "version": "7.17.3",
17097
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
17098
+ "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
17091
17099
  "dev": true,
17092
17100
  "requires": {
17093
17101
  "@babel/types": "^7.17.0",
@@ -17163,9 +17171,9 @@
17163
17171
  }
17164
17172
  },
17165
17173
  "@babel/helper-module-transforms": {
17166
- "version": "7.16.7",
17167
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
17168
- "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
17174
+ "version": "7.17.6",
17175
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz",
17176
+ "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==",
17169
17177
  "dev": true,
17170
17178
  "requires": {
17171
17179
  "@babel/helper-environment-visitor": "^7.16.7",
@@ -17174,8 +17182,8 @@
17174
17182
  "@babel/helper-split-export-declaration": "^7.16.7",
17175
17183
  "@babel/helper-validator-identifier": "^7.16.7",
17176
17184
  "@babel/template": "^7.16.7",
17177
- "@babel/traverse": "^7.16.7",
17178
- "@babel/types": "^7.16.7"
17185
+ "@babel/traverse": "^7.17.3",
17186
+ "@babel/types": "^7.17.0"
17179
17187
  }
17180
17188
  },
17181
17189
  "@babel/helper-simple-access": {
@@ -17275,9 +17283,9 @@
17275
17283
  }
17276
17284
  },
17277
17285
  "@babel/parser": {
17278
- "version": "7.17.0",
17279
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz",
17280
- "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==",
17286
+ "version": "7.17.3",
17287
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz",
17288
+ "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==",
17281
17289
  "dev": true
17282
17290
  },
17283
17291
  "@babel/runtime": {
@@ -17300,18 +17308,18 @@
17300
17308
  }
17301
17309
  },
17302
17310
  "@babel/traverse": {
17303
- "version": "7.17.0",
17304
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz",
17305
- "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==",
17311
+ "version": "7.17.3",
17312
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
17313
+ "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
17306
17314
  "dev": true,
17307
17315
  "requires": {
17308
17316
  "@babel/code-frame": "^7.16.7",
17309
- "@babel/generator": "^7.17.0",
17317
+ "@babel/generator": "^7.17.3",
17310
17318
  "@babel/helper-environment-visitor": "^7.16.7",
17311
17319
  "@babel/helper-function-name": "^7.16.7",
17312
17320
  "@babel/helper-hoist-variables": "^7.16.7",
17313
17321
  "@babel/helper-split-export-declaration": "^7.16.7",
17314
- "@babel/parser": "^7.17.0",
17322
+ "@babel/parser": "^7.17.3",
17315
17323
  "@babel/types": "^7.17.0",
17316
17324
  "debug": "^4.1.0",
17317
17325
  "globals": "^11.1.0"
@@ -18099,6 +18107,11 @@
18099
18107
  "negotiator": "0.6.3"
18100
18108
  },
18101
18109
  "dependencies": {
18110
+ "mime-db": {
18111
+ "version": "1.51.0",
18112
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
18113
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
18114
+ },
18102
18115
  "mime-types": {
18103
18116
  "version": "2.1.34",
18104
18117
  "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
@@ -18144,9 +18157,9 @@
18144
18157
  }
18145
18158
  },
18146
18159
  "agentkeepalive": {
18147
- "version": "4.2.0",
18148
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz",
18149
- "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==",
18160
+ "version": "4.2.1",
18161
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
18162
+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
18150
18163
  "requires": {
18151
18164
  "debug": "^4.1.0",
18152
18165
  "depd": "^1.1.2",
@@ -18973,15 +18986,15 @@
18973
18986
  "dev": true
18974
18987
  },
18975
18988
  "browserslist": {
18976
- "version": "4.19.1",
18977
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
18978
- "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
18989
+ "version": "4.19.3",
18990
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz",
18991
+ "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==",
18979
18992
  "dev": true,
18980
18993
  "requires": {
18981
- "caniuse-lite": "^1.0.30001286",
18982
- "electron-to-chromium": "^1.4.17",
18994
+ "caniuse-lite": "^1.0.30001312",
18995
+ "electron-to-chromium": "^1.4.71",
18983
18996
  "escalade": "^3.1.1",
18984
- "node-releases": "^2.0.1",
18997
+ "node-releases": "^2.0.2",
18985
18998
  "picocolors": "^1.0.0"
18986
18999
  }
18987
19000
  },
@@ -20353,14 +20366,14 @@
20353
20366
  }
20354
20367
  },
20355
20368
  "degenerator": {
20356
- "version": "3.0.1",
20357
- "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz",
20358
- "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==",
20369
+ "version": "3.0.2",
20370
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz",
20371
+ "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==",
20359
20372
  "requires": {
20360
20373
  "ast-types": "^0.13.2",
20361
20374
  "escodegen": "^1.8.1",
20362
20375
  "esprima": "^4.0.0",
20363
- "vm2": "^3.9.3"
20376
+ "vm2": "^3.9.8"
20364
20377
  },
20365
20378
  "dependencies": {
20366
20379
  "escodegen": {
@@ -20550,9 +20563,9 @@
20550
20563
  }
20551
20564
  },
20552
20565
  "electron-to-chromium": {
20553
- "version": "1.4.68",
20554
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz",
20555
- "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==",
20566
+ "version": "1.4.73",
20567
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz",
20568
+ "integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==",
20556
20569
  "dev": true
20557
20570
  },
20558
20571
  "emoji-regex": {
@@ -21332,9 +21345,9 @@
21332
21345
  "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
21333
21346
  },
21334
21347
  "follow-redirects": {
21335
- "version": "1.14.8",
21336
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
21337
- "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA=="
21348
+ "version": "1.14.9",
21349
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
21350
+ "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w=="
21338
21351
  },
21339
21352
  "for-in": {
21340
21353
  "version": "1.0.2",
@@ -21785,9 +21798,9 @@
21785
21798
  },
21786
21799
  "dependencies": {
21787
21800
  "minimatch": {
21788
- "version": "3.0.7",
21789
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.7.tgz",
21790
- "integrity": "sha512-pYjbG0o9W2Wb3KVBuV6s7R/bzS/iS3HPiHcFcDee5GGiN1M5MErXqgS4jGn8pwVwTZAoy7B8bYb/+AqQU0NhZA==",
21801
+ "version": "3.0.8",
21802
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
21803
+ "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
21791
21804
  "requires": {
21792
21805
  "brace-expansion": "^1.1.7"
21793
21806
  }
@@ -23405,9 +23418,9 @@
23405
23418
  }
23406
23419
  },
23407
23420
  "marky": {
23408
- "version": "1.2.2",
23409
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz",
23410
- "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ=="
23421
+ "version": "1.2.4",
23422
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.4.tgz",
23423
+ "integrity": "sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w=="
23411
23424
  },
23412
23425
  "matchdep": {
23413
23426
  "version": "2.0.0",
@@ -23580,9 +23593,9 @@
23580
23593
  "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
23581
23594
  },
23582
23595
  "mime-db": {
23583
- "version": "1.51.0",
23584
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
23585
- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
23596
+ "version": "1.52.0",
23597
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
23598
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
23586
23599
  },
23587
23600
  "mime-types": {
23588
23601
  "version": "2.1.27",
@@ -23613,9 +23626,9 @@
23613
23626
  }
23614
23627
  },
23615
23628
  "minimatch": {
23616
- "version": "3.1.1",
23617
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.1.tgz",
23618
- "integrity": "sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==",
23629
+ "version": "3.1.2",
23630
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
23631
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
23619
23632
  "requires": {
23620
23633
  "brace-expansion": "^1.1.7"
23621
23634
  }
@@ -28001,9 +28014,9 @@
28001
28014
  }
28002
28015
  },
28003
28016
  "socket.io-parser": {
28004
- "version": "4.1.1",
28005
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz",
28006
- "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==",
28017
+ "version": "4.1.2",
28018
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz",
28019
+ "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==",
28007
28020
  "requires": {
28008
28021
  "@socket.io/component-emitter": "~3.0.0",
28009
28022
  "debug": "~4.3.1"
@@ -29284,9 +29297,9 @@
29284
29297
  }
29285
29298
  },
29286
29299
  "vm2": {
29287
- "version": "3.9.7",
29288
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.7.tgz",
29289
- "integrity": "sha512-g/GZ7V0Mlmch3eDVOATvAXr1GsJNg6kQ5PjvYy3HbJMCRn5slNbo/u73Uy7r5yUej1cRa3ZjtoVwcWSQuQ/fow==",
29300
+ "version": "3.9.9",
29301
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz",
29302
+ "integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==",
29290
29303
  "requires": {
29291
29304
  "acorn": "^8.7.0",
29292
29305
  "acorn-walk": "^8.2.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "3.223.0",
3
+ "version": "3.226.0",
4
4
  "description": "Command line interface for running Testing on your CI",
5
5
  "author": "Oren Rubin",
6
6
  "contributors": [{
@@ -25,11 +25,12 @@ DebugReporter.prototype.onTestStarted = function (test, workerId) {
25
25
  };
26
26
 
27
27
  DebugReporter.prototype.onTestFinished = function (test, workerId) {
28
- const provider = this.options.gridData.provider;
29
- const host = this.options.gridData.host;
30
- const gridId = this.options.gridData.gridId;
31
- const gridType = this.options.gridData.type;
32
- const failedGetBrowserAttempts = this.options.gridData.failedGetBrowserAttempts;
28
+ const gridData = this.options.gridData || {};
29
+ const provider = gridData.provider;
30
+ const host = gridData.host;
31
+ const gridId = gridData.gridId;
32
+ const gridType = gridData.type;
33
+ const failedGetBrowserAttempts = gridData.failedGetBrowserAttempts;
33
34
  logger.info('Test Finished', {
34
35
  testId: test.testId,
35
36
  testName: test.name,
package/runner.js CHANGED
@@ -223,7 +223,7 @@ function runRunner(options, customExtensionLocalLocation) {
223
223
  }
224
224
 
225
225
  function showFreeGridRunWarningIfNeeded(options) {
226
- if (featureAvailabilityService.shouldShowFreeGridRunWarning(options.gridData.type)) {
226
+ if (featureAvailabilityService.shouldShowFreeGridRunWarning(options.gridData && options.gridData.type)) {
227
227
  const CYAN = '\x1b[36m';
228
228
  const UNDERSCORE = '\x1b[4m';
229
229
  const RESET = '\x1b[0m';
@@ -11,6 +11,7 @@ const testimServicesApi = require('../commons/testimServicesApi');
11
11
  const testimCustomToken = require('../commons/testimCustomToken');
12
12
  const TestRunStatus = require('../testRunStatus');
13
13
  const analyticsService = require('../services/analyticsService');
14
+ const gridService = require('../services/gridService');
14
15
  const branchService = require('../services/branchService');
15
16
  const config = require('../commons/config');
16
17
  const ParallelWorkerManager = require('./ParallelWorkerManager');
@@ -258,6 +259,9 @@ class TestPlanRunner {
258
259
  delete tpOptions.gridId;
259
260
  }
260
261
 
262
+
263
+ tpOptions.gridData = await gridService.getTestPlanGridData(options, testPlan);
264
+
261
265
  const testPlanName = tpOptions.overrideExecutionName || testPlan.name;
262
266
  return await Promise.all(testPlansData[id].map(async testPlanTests => {
263
267
  const res = await this.runTestPlan(testPlanTests.beforeTests, testPlanTests.tests, testPlanTests.afterTests, tpOptions, testPlanName, id, branchToUse);
@@ -235,16 +235,27 @@ function getOptionGrid(options) {
235
235
  return Promise.resolve({ host, port, path, protocol, type, user, key });
236
236
  }
237
237
 
238
- async function getTestPlanGridData(options) {
239
- const testPlanDatas = await servicesApi.getTestPlan(options.project, options.testPlan);
240
- if (testPlanDatas.length === 0) {
241
- throw new ArgError(`no test plan to run ${options.testPlan}`);
242
- }
243
- const testPlanGrids = testPlanDatas.map(testPlanData => options.allGrids.find(grid => grid._id === testPlanData.gridId));
244
- if (testPlanGrids.includes(undefined)) {
245
- throw new ArgError('failed to find one of the test plan defined grid');
238
+ async function getTestPlanGridData(options, testPlanData) {
239
+ const companyId = options.company.companyId;
240
+ try {
241
+ return await getGridDataByGridId(companyId, testPlanData.gridId, options.allGrids);
242
+ } catch (err) {
243
+ if (err instanceof ArgError) {
244
+ // this is a fallback to an old behavior that is wrong,
245
+ // we should remove it in the future
246
+ const testPlanDatas = await servicesApi.getTestPlan(options.project, options.testPlan);
247
+ if (testPlanDatas.length === 0) {
248
+ throw new ArgError(`no test plan to run ${options.testPlan}`);
249
+ }
250
+ const testPlanGrids = testPlanDatas.map(d => options.allGrids.find(grid => grid._id === d.gridId));
251
+ if (testPlanGrids.includes(undefined)) {
252
+ throw new ArgError('failed to find one of the test plan defined grid');
253
+ }
254
+ logger.warn('getTestPlanGridData used fallback and might cause test plans run on a unintended grid', { companyId });
255
+ return getSerializableObject(_.first(testPlanGrids));
256
+ }
257
+ throw err;
246
258
  }
247
- return getSerializableObject(_.first(testPlanGrids));
248
259
  }
249
260
 
250
261
  async function getGridData(options) {
@@ -253,10 +264,10 @@ async function getGridData(options) {
253
264
  host, useLocalChromeDriver, useChromeLauncher, gridId, grid,
254
265
  } = options;
255
266
  if (useLocalChromeDriver || useChromeLauncher) {
256
- return Promise.resolve({ mode: 'local' });
267
+ return { mode: 'local' };
257
268
  }
258
269
  if (host) {
259
- return Promise.resolve(getOptionGrid(options));
270
+ return getOptionGrid(options);
260
271
  }
261
272
  const companyId = company.companyId;
262
273
  if (gridId) {
@@ -266,7 +277,8 @@ async function getGridData(options) {
266
277
  return getGridDataByGridName(companyId, grid, allGrids);
267
278
  }
268
279
  if (hasTestPlanFlag(options)) {
269
- return getTestPlanGridData(options);
280
+ logger.info('skipping getting grid, as it is set on test plan', { companyId });
281
+ return undefined;
270
282
  }
271
283
 
272
284
  throw new GridError('Missing host or grid configuration');
@@ -300,7 +312,7 @@ async function _getGridSlot(browser, executionId, testResultId, onGridSlot, opti
300
312
  return gridInfo;
301
313
  }
302
314
 
303
- const handleHybridOrVendorIfNeeded = async (runnerOptions = { }, gridInfo = {}, testRunConfig = {}, lambdatestService, retryConfig = {}) => {
315
+ const handleHybridOrVendorIfNeeded = async (runnerOptions = { }, gridInfo = {}, testRunConfig = {}, lambdatestService = {}, retryConfig = {}) => {
304
316
  const { company = {} } = runnerOptions;
305
317
  const companyId = company.companyId;
306
318
  const { gridId, type } = gridInfo;
@@ -337,6 +349,7 @@ module.exports = {
337
349
  getGridSlot,
338
350
  releaseGridSlot,
339
351
  getGridData,
352
+ getTestPlanGridData,
340
353
  addItemToGridCache,
341
354
  keepAlive: {
342
355
  start: startKeepAlive,
@@ -150,21 +150,14 @@ describe('gridService', () => {
150
150
  .to.eventually.be.rejectedWith('Failed to find grid name: gridName');
151
151
  });
152
152
 
153
- it('should get grid by id when passing test plan id', async () => {
154
- const grid = await gridService.getGridData({ testPlan: 'testPlan', company: { companyId: 'companyId' }, allGrids: [{ _id: 'gridId', type: 'gridId' }] });
155
- expect(grid).to.shallowDeepEqual({ type: 'gridId', gridId: 'gridId' });
156
- sinon.assert.calledOnce(getTestPlanStub);
157
- });
158
-
159
- it('should handle grid not found error when passing test plan', async () => {
160
- await expect(gridService.getGridData({ testPlan: 'testPlan', company: { companyId: 'companyId' }, allGrids: [] }))
161
- .to.eventually.be.rejectedWith('failed to find one of the test plan defined grid');
153
+ it('should not assign a grid when using a test plan', async () => {
154
+ const grid = await gridService.getGridData({ testPlan: ['testPlan'], company: { companyId: 'companyId' }, allGrids: [{ _id: 'gridId', type: 'gridId' }] });
155
+ expect(grid).to.be.undefined;
162
156
  });
163
157
 
164
- it('should handle empty test plan list', async () => {
165
- getTestPlanStub.resolves([]);
166
- await expect(gridService.getGridData({ testPlan: 'testPlan', company: { companyId: 'companyId' } }))
167
- .to.eventually.be.rejectedWith('no test plan to run testPlan');
158
+ it('should not assign a grid when using a test plan id', async () => {
159
+ const grid = await gridService.getGridData({ testPlanIds: ['testPlan'], company: { companyId: 'companyId' }, allGrids: [{ _id: 'gridId', type: 'gridId' }] });
160
+ expect(grid).to.be.undefined;
168
161
  });
169
162
 
170
163
  it('should throw when no grid selected', async () => {
package/testRunStatus.js CHANGED
@@ -63,7 +63,7 @@ const RunStatus = function (testInfoList, options, testPlanId, branchToUse) {
63
63
  testPlanId,
64
64
  testPlans: options.testPlan,
65
65
  testLabels: options.label,
66
- testSuites: _.uniq(_.flatten(testInfoList.map(test => test.testSuites))),
66
+ testSuites: _.uniq(testInfoList.flatMap(test => test.testSuites)),
67
67
  testNames: options.name,
68
68
  testIds: options.testId,
69
69
  testConfigs: options.testConfigNames,
@@ -173,10 +173,12 @@ RunStatus.prototype.testStartReport = function (test, executionId, testRetryKey)
173
173
  return Promise.resolve();
174
174
  }
175
175
  return runHook(this.options.beforeTest, Object.assign({}, test, { exportsGlobal: this.exportsGlobal }), this.options.userData.loginData.token)
176
- .then(params => {
176
+ .then(async params => {
177
177
  this.options.runParams[test.resultId] = test.config.testData = Object.assign({}, test.config.testData, this.exportsGlobal, this.fileUserParamsData, this.beforeSuiteParams, params);
178
178
  test.startTime = Date.now();
179
- return this.updateTestStatusRunning(test, executionId, testRetryKey);
179
+ await this.updateTestStatusRunning(test, executionId, testRetryKey);
180
+
181
+ return test;
180
182
  }).catch(err => {
181
183
  logger.error('Failed to start test', { err });
182
184
  throw err;
@@ -141,8 +141,7 @@ class BaseWorker {
141
141
  const player = this.initPlayer(testRunHandler);
142
142
  try {
143
143
  gridInfo = await gridService.handleHybridOrVendorIfNeeded(
144
- this.options, gridInfo, this.testRunConfig, this.lambdatestService,
145
- { maxRetries: getBrowserRetriesNumber, currentRetry: failedGetBrowserAttempts + 1 },
144
+ this.options, gridInfo, this.testRunConfig, this.lambdatestService, { maxRetries: getBrowserRetriesNumber, currentRetry: failedGetBrowserAttempts + 1 },
146
145
  );
147
146
  this.options.gridData.provider = gridInfo.provider;
148
147
  this.options.gridData.host = gridInfo.host;
@@ -192,9 +191,10 @@ class BaseWorker {
192
191
  }
193
192
 
194
193
  perf.log('before runTest onTestStarted');
195
- await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
196
- const testPlayer = await this.getTestPlayer(testRunHandler, customExtensionLocalLocation);
194
+ const test = await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
195
+ testRunHandler._baseUrl = test.config.baseUrl;
197
196
 
197
+ const testPlayer = await this.getTestPlayer(testRunHandler, customExtensionLocalLocation);
198
198
  try {
199
199
  return await this.runTestOnce(testRunHandler, testPlayer);
200
200
  } finally {
@@ -276,13 +276,13 @@ class BaseWorker {
276
276
  }
277
277
 
278
278
  const msg = err instanceof Error ? err.message : err;
279
- if (msg.indexOf(GET_BROWSER_TIMEOUT_MSG) > -1) {
279
+ if (msg.includes(GET_BROWSER_TIMEOUT_MSG)) {
280
280
  return { errorType: SETUP_TIMEOUT, reason: "Test couldn't get browser" };
281
281
  }
282
- if (msg.indexOf(TEST_START_TIMEOUT_MSG) > -1) {
282
+ if (msg.includes(TEST_START_TIMEOUT_MSG)) {
283
283
  return { errorType: SETUP_TIMEOUT, reason: "Test couldn't be started" };
284
284
  }
285
- if (msg.indexOf(TEST_COMPLETE_TIMEOUT_MSG) > -1) {
285
+ if (msg.includes(TEST_COMPLETE_TIMEOUT_MSG)) {
286
286
  if (!this.testRunTimeout) {
287
287
  return { errorType: SETUP_TIMEOUT, reason: 'Test timeout reached: test is too long' };
288
288
  }
@@ -1,21 +1,32 @@
1
+ const proxyquire = require('proxyquire');
2
+
1
3
  const { expect, sinon } = require('../../test/utils/testUtils');
2
- const BaseWorker = require('./BaseWorker');
3
4
  const gridService = require('../services/gridService');
4
5
  const reporter = require('../reports/reporter');
5
6
  const Bluebird = require('bluebird');
6
7
  const { PageNotAvailableError, GridError, GetBrowserError } = require('../errors');
7
8
  const servicesApi = require('../commons/testimServicesApi');
9
+ const { releasePlayer } = require('./workerUtils');
10
+
8
11
 
9
12
  describe('BaseWorker', () => {
10
13
  let worker;
11
14
  let handleHybridStub;
12
15
  let getGridSlotStub;
13
- const sandbox = sinon.createSandbox();
16
+ let runTestOnceStub = sinon.stub();
14
17
  let testRunHandlerMock;
15
18
  let testPlayerMock;
19
+ const onTestStartedStub = sinon.stub();
20
+ const sandbox = sinon.createSandbox();
16
21
 
17
22
  beforeEach(() => {
18
- worker = new BaseWorker(null, {});
23
+ const BaseWorker = proxyquire.noCallThru()('./BaseWorker', {
24
+ './workerUtils': {
25
+ releasePlayer: () => sinon.stub().resolves({}),
26
+ },
27
+ });
28
+
29
+ worker = new BaseWorker(null, {}, null, null, onTestStartedStub);
19
30
  worker.userData = {};
20
31
  worker.options = { gridData: {}, browser: 'chrome', company: { companyId: 'companyId' }, getBrowserTimeout: 1000, getSessionTimeout: 100, getBrowserRetries: 10 };
21
32
  worker.testRunConfig = {};
@@ -25,6 +36,7 @@ describe('BaseWorker', () => {
25
36
 
26
37
  sinon.stub(worker, 'initPlayer').returns(testPlayerMock);
27
38
  sinon.stub(worker, 'getBrowserOnce').returns({});
39
+ runTestOnceStub = sinon.stub(worker, 'runTestOnce');
28
40
  handleHybridStub = sinon.stub(gridService, 'handleHybridOrVendorIfNeeded').callThrough();
29
41
  getGridSlotStub = sinon.stub(gridService, 'getGridSlot').resolves({});
30
42
 
@@ -154,5 +166,27 @@ describe('BaseWorker', () => {
154
166
  expect(worker.getBrowserOnce.getCall(2).args[3]).to.shallowDeepEqual({ type: 'testimHybrid', gridId: 'gridId', provider: 'a', host: 'google.com', user: undefined, key: undefined, port: 4444 });
155
167
  });
156
168
  });
169
+
170
+ describe('runTest', () => {
171
+ it('should call the runTestOnc with the base url of the test object we acquired from onTestStarted', async () => {
172
+ const testRunHandler = {
173
+ _baseUrl: 'https://testim.io',
174
+ getTestStatus: () => sinon.stub().returns(42),
175
+ getTestId: () => sinon.stub().returns(42),
176
+ getTestResultId: () => sinon.stub().returns(42),
177
+ getRetryKey: () => sinon.stub().returns(42),
178
+ getExecutionId: () => sinon.stub().returns(42),
179
+ testRunHandler: () => sinon.stub().returns(42),
180
+ clearTestResult: () => sinon.stub().returns(42),
181
+ };
182
+ onTestStartedStub.returns({
183
+ config: {
184
+ baseUrl: 'http://demo.testim.io/',
185
+ },
186
+ });
187
+ await worker.runTest(testRunHandler);
188
+ expect(runTestOnceStub.firstCall.firstArg._baseUrl).to.equals('http://demo.testim.io/');
189
+ });
190
+ });
157
191
  });
158
192
  });
@@ -45,7 +45,8 @@ class WorkerExtensionSingleBrowser extends WorkerExtension {
45
45
  }
46
46
 
47
47
  perf.log('before runTest onTestStarted single browser');
48
- await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
48
+ const test = await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
49
+ testRunHandler._baseUrl = test.config.baseUrl;
49
50
  const testPlayer = await this.getTestPlayer(testRunHandler, customExtensionLocalLocation);
50
51
 
51
52
  testRunHandler.markClearBrowser();