|
1 |
| -'use strict'; |
| 1 | +"use strict"; |
2 | 2 | const os = require("os");
|
3 | 3 | const path = require("path");
|
4 | 4 | const fs = require("fs");
|
5 | 5 |
|
6 |
| -const usageReporting = require('./usageReporting'), |
7 |
| - logger = require('./logger').winstonLogger, |
8 |
| - Constants = require('./constants'); |
| 6 | +const usageReporting = require("./usageReporting"), |
| 7 | + logger = require("./logger").winstonLogger, |
| 8 | + Constants = require("./constants"); |
9 | 9 |
|
10 | 10 | exports.validateBstackJson = (bsConfigPath) => {
|
11 | 11 | return new Promise(function (resolve, reject) {
|
12 | 12 | try {
|
13 | 13 | logger.info(`Reading config from ${bsConfigPath}`);
|
14 | 14 | let bsConfig = require(bsConfigPath);
|
15 | 15 | resolve(bsConfig);
|
16 |
| - } |
17 |
| - catch (e) { |
18 |
| - reject("Couldn't find the browserstack.json file at \"" + bsConfigPath + "\". Please use --config-file <path to browserstack.json>."); |
| 16 | + } catch (e) { |
| 17 | + reject( |
| 18 | + e.code === "MODULE_NOT_FOUND" |
| 19 | + ? "Couldn't find the browserstack.json file at \"" + |
| 20 | + bsConfigPath + |
| 21 | + '". Please use --config-file <path to browserstack.json>.' |
| 22 | + : `Invalid browserstack.json file. Error : ${e.message}` |
| 23 | + ); |
19 | 24 | }
|
20 | 25 | });
|
21 |
| -} |
| 26 | +}; |
22 | 27 |
|
23 | 28 | exports.getErrorCodeFromMsg = (errMsg) => {
|
24 | 29 | let errorCode = null;
|
@@ -51,71 +56,89 @@ exports.getErrorCodeFromMsg = (errMsg) => {
|
51 | 56 | errorCode = "invalid_directory_structure";
|
52 | 57 | break;
|
53 | 58 | }
|
54 |
| - if (errMsg.includes("Please use --config-file <path to browserstack.json>.")) { |
| 59 | + if ( |
| 60 | + errMsg.includes("Please use --config-file <path to browserstack.json>.") |
| 61 | + ) { |
55 | 62 | errorCode = "bstack_json_path_invalid";
|
| 63 | + } else if (errMsg.includes("Invalid browserstack.json file.")) { |
| 64 | + errorCode = "bstack_json_invalid"; |
56 | 65 | }
|
57 | 66 | return errorCode;
|
58 |
| -} |
| 67 | +}; |
59 | 68 |
|
60 | 69 | exports.getErrorCodeFromErr = (err) => {
|
61 | 70 | let errorCode = null;
|
62 |
| - if (err.code === 'SyntaxError') { |
63 |
| - errorCode = 'bstack_json_parse_error'; |
64 |
| - } else if (err.code === 'EACCES') { |
65 |
| - errorCode = 'bstack_json_no_permission'; |
| 71 | + if (err.code === "SyntaxError") { |
| 72 | + errorCode = "bstack_json_parse_error"; |
| 73 | + } else if (err.code === "EACCES") { |
| 74 | + errorCode = "bstack_json_no_permission"; |
66 | 75 | } else {
|
67 |
| - errorCode = 'bstack_json_invalid_unknown'; |
| 76 | + errorCode = "bstack_json_invalid_unknown"; |
68 | 77 | }
|
69 |
| - return errorCode |
70 |
| -} |
| 78 | + return errorCode; |
| 79 | +}; |
71 | 80 |
|
72 |
| -exports.sendUsageReport = (bsConfig, args, message, message_type, error_code) => { |
| 81 | +exports.sendUsageReport = ( |
| 82 | + bsConfig, |
| 83 | + args, |
| 84 | + message, |
| 85 | + message_type, |
| 86 | + error_code |
| 87 | +) => { |
73 | 88 | usageReporting.send({
|
74 | 89 | cli_args: args,
|
75 | 90 | message: message,
|
76 | 91 | message_type: message_type,
|
77 | 92 | error_code: error_code,
|
78 |
| - bstack_config: bsConfig |
| 93 | + bstack_config: bsConfig, |
79 | 94 | });
|
80 |
| -} |
| 95 | +}; |
81 | 96 |
|
82 | 97 | exports.setUsageReportingFlag = (bsConfig, disableUsageReporting) => {
|
83 |
| - if (disableUsageReporting === undefined && bsConfig && bsConfig['disable_usage_reporting'] != undefined) { |
84 |
| - process.env.DISABLE_USAGE_REPORTING = bsConfig['disable_usage_reporting']; |
| 98 | + if ( |
| 99 | + disableUsageReporting === undefined && |
| 100 | + bsConfig && |
| 101 | + bsConfig["disable_usage_reporting"] != undefined |
| 102 | + ) { |
| 103 | + process.env.DISABLE_USAGE_REPORTING = bsConfig["disable_usage_reporting"]; |
85 | 104 | } else {
|
86 | 105 | process.env.DISABLE_USAGE_REPORTING = disableUsageReporting;
|
87 | 106 | }
|
88 |
| -} |
| 107 | +}; |
89 | 108 |
|
90 | 109 | exports.setParallels = (bsConfig, args) => {
|
91 | 110 | if (!this.isUndefined(args.parallels)) {
|
92 |
| - bsConfig['run_settings']['parallels'] = args.parallels; |
| 111 | + bsConfig["run_settings"]["parallels"] = args.parallels; |
93 | 112 | }
|
94 |
| -} |
| 113 | +}; |
95 | 114 |
|
96 | 115 | exports.setUsername = (bsConfig, args) => {
|
97 | 116 | if (!this.isUndefined(args.username)) {
|
98 |
| - bsConfig['auth']['username'] = args.username; |
| 117 | + bsConfig["auth"]["username"] = args.username; |
99 | 118 | } else if (!this.isUndefined(process.env.BROWSERSTACK_USERNAME)) {
|
100 |
| - bsConfig['auth']['username'] = process.env.BROWSERSTACK_USERNAME; |
101 |
| - logger.info("Reading username from the environment variable BROWSERSTACK_USERNAME"); |
| 119 | + bsConfig["auth"]["username"] = process.env.BROWSERSTACK_USERNAME; |
| 120 | + logger.info( |
| 121 | + "Reading username from the environment variable BROWSERSTACK_USERNAME" |
| 122 | + ); |
102 | 123 | }
|
103 |
| -} |
| 124 | +}; |
104 | 125 |
|
105 | 126 | exports.setAccessKey = (bsConfig, args) => {
|
106 | 127 | if (!this.isUndefined(args.key)) {
|
107 |
| - bsConfig['auth']['access_key'] = args.key; |
| 128 | + bsConfig["auth"]["access_key"] = args.key; |
108 | 129 | } else if (!this.isUndefined(process.env.BROWSERSTACK_ACCESS_KEY)) {
|
109 |
| - bsConfig['auth']['access_key'] = process.env.BROWSERSTACK_ACCESS_KEY; |
110 |
| - logger.info("Reading access key from the environment variable BROWSERSTACK_ACCESS_KEY"); |
| 130 | + bsConfig["auth"]["access_key"] = process.env.BROWSERSTACK_ACCESS_KEY; |
| 131 | + logger.info( |
| 132 | + "Reading access key from the environment variable BROWSERSTACK_ACCESS_KEY" |
| 133 | + ); |
111 | 134 | }
|
112 |
| -} |
| 135 | +}; |
113 | 136 |
|
114 | 137 | exports.setBuildName = (bsConfig, args) => {
|
115 |
| - if (!this.isUndefined(args['build-name'])) { |
116 |
| - bsConfig['run_settings']['build_name'] = args['build-name']; |
| 138 | + if (!this.isUndefined(args["build-name"])) { |
| 139 | + bsConfig["run_settings"]["build_name"] = args["build-name"]; |
117 | 140 | }
|
118 |
| -} |
| 141 | +}; |
119 | 142 |
|
120 | 143 | // specs can be passed from bstack configuration file
|
121 | 144 | // specs can be passed via command line args as a string
|
@@ -149,71 +172,95 @@ exports.fixCommaSeparatedString = (string) => {
|
149 | 172 |
|
150 | 173 | exports.isUndefined = value => (value === undefined || value === null);
|
151 | 174 |
|
152 |
| -exports.isFloat = value => (Number(value) && Number(value) % 1 !== 0); |
| 175 | +exports.isFloat = (value) => Number(value) && Number(value) % 1 !== 0; |
153 | 176 |
|
154 | 177 | exports.isParallelValid = (value) => {
|
155 | 178 | return this.isUndefined(value) || !(isNaN(value) || this.isFloat(value) || parseInt(value, 10) === 0 || parseInt(value, 10) < -1) || value === Constants.cliMessages.RUN.DEFAULT_PARALLEL_MESSAGE;
|
156 | 179 | }
|
157 | 180 |
|
158 | 181 | exports.getUserAgent = () => {
|
159 | 182 | return `BStack-Cypress-CLI/1.3.0 (${os.arch()}/${os.platform()}/${os.release()})`;
|
160 |
| -} |
| 183 | +}; |
161 | 184 |
|
162 | 185 | exports.isAbsolute = (configPath) => {
|
163 |
| - return path.isAbsolute(configPath) |
164 |
| -} |
| 186 | + return path.isAbsolute(configPath); |
| 187 | +}; |
165 | 188 |
|
166 | 189 | exports.getConfigPath = (configPath) => {
|
167 |
| - return this.isAbsolute(configPath) ? configPath : path.join(process.cwd(), configPath); |
168 |
| -} |
| 190 | + return this.isAbsolute(configPath) |
| 191 | + ? configPath |
| 192 | + : path.join(process.cwd(), configPath); |
| 193 | +}; |
169 | 194 |
|
170 | 195 | exports.configCreated = (args) => {
|
171 |
| - let message = Constants.userMessages.CONFIG_FILE_CREATED |
| 196 | + let message = Constants.userMessages.CONFIG_FILE_CREATED; |
172 | 197 | logger.info(message);
|
173 |
| - this.sendUsageReport(null, args, message, Constants.messageTypes.SUCCESS, null); |
174 |
| -} |
| 198 | + this.sendUsageReport( |
| 199 | + null, |
| 200 | + args, |
| 201 | + message, |
| 202 | + Constants.messageTypes.SUCCESS, |
| 203 | + null |
| 204 | + ); |
| 205 | +}; |
175 | 206 |
|
176 | 207 | exports.exportResults = (buildId, buildUrl) => {
|
177 | 208 | let data = "BUILD_ID=" + buildId + "\nBUILD_URL=" + buildUrl;
|
178 | 209 | fs.writeFileSync("log/build_results.txt", data, function (err) {
|
179 | 210 | if (err) {
|
180 |
| - logger.warn(`Couldn't write BUILD_ID with value: ${buildId} to browserstack/build_results.txt`); |
181 |
| - logger.warn(`Couldn't write BUILD_URL with value: ${buildUrl} to browserstack/build_results.txt`); |
| 211 | + logger.warn( |
| 212 | + `Couldn't write BUILD_ID with value: ${buildId} to browserstack/build_results.txt` |
| 213 | + ); |
| 214 | + logger.warn( |
| 215 | + `Couldn't write BUILD_URL with value: ${buildUrl} to browserstack/build_results.txt` |
| 216 | + ); |
182 | 217 | }
|
183 | 218 | });
|
184 |
| -} |
| 219 | +}; |
185 | 220 |
|
186 | 221 | exports.deleteResults = () => {
|
187 |
| - fs.unlink("log/build_results.txt", function (err) { |
188 |
| - }); |
189 |
| -} |
| 222 | + fs.unlink("log/build_results.txt", function (err) {}); |
| 223 | +}; |
190 | 224 |
|
191 |
| -exports.isCypressProjDirValid = (cypressDir, cypressProjDir) => { |
| 225 | +exports.isCypressProjDirValid = (cypressProjDir, integrationFoldDir) => { |
192 | 226 | // Getting absolute path
|
193 |
| - cypressDir = path.resolve(cypressDir); |
194 |
| - cypressProjDir = path.resolve(cypressProjDir); |
195 |
| - if (cypressProjDir === cypressDir) return true; |
196 |
| - let parentTokens = cypressDir.split('/').filter(i => i.length); |
197 |
| - let childTokens = cypressProjDir.split('/').filter(i => i.length); |
| 227 | + let cypressDir = path.resolve(cypressProjDir); |
| 228 | + let integrationFolderDir = path.resolve(integrationFoldDir); |
| 229 | + if (!this.isAbsolute(integrationFoldDir)) { |
| 230 | + integrationFolderDir = path.resolve(path.join(cypressProjDir, integrationFoldDir)); |
| 231 | + } |
| 232 | + if (integrationFolderDir === cypressDir) return true; |
| 233 | + let parentTokens = cypressDir.split("/").filter((i) => i.length); |
| 234 | + let childTokens = integrationFolderDir.split("/").filter((i) => i.length); |
198 | 235 | return parentTokens.every((t, i) => childTokens[i] === t);
|
199 |
| -} |
| 236 | +}; |
200 | 237 |
|
201 | 238 | exports.getLocalFlag = (connectionSettings) => {
|
202 |
| - return !this.isUndefined(connectionSettings) && !this.isUndefined(connectionSettings.local) && connectionSettings.local |
203 |
| -} |
| 239 | + return ( |
| 240 | + !this.isUndefined(connectionSettings) && |
| 241 | + !this.isUndefined(connectionSettings.local) && |
| 242 | + connectionSettings.local |
| 243 | + ); |
| 244 | +}; |
204 | 245 |
|
205 | 246 | exports.setLocal = (bsConfig) => {
|
206 | 247 | if (!this.isUndefined(process.env.BROWSERSTACK_LOCAL)) {
|
207 | 248 | let local = false;
|
208 |
| - if (String(process.env.BROWSERSTACK_LOCAL).toLowerCase() === "true") local = true; |
209 |
| - bsConfig['connection_settings']['local'] = local; |
210 |
| - logger.info("Reading local setting from the environment variable BROWSERSTACK_LOCAL"); |
| 249 | + if (String(process.env.BROWSERSTACK_LOCAL).toLowerCase() === "true") |
| 250 | + local = true; |
| 251 | + bsConfig["connection_settings"]["local"] = local; |
| 252 | + logger.info( |
| 253 | + "Reading local setting from the environment variable BROWSERSTACK_LOCAL" |
| 254 | + ); |
211 | 255 | }
|
212 |
| -} |
| 256 | +}; |
213 | 257 |
|
214 | 258 | exports.setLocalIdentifier = (bsConfig) => {
|
215 | 259 | if (!this.isUndefined(process.env.BROWSERSTACK_LOCAL_IDENTIFIER)) {
|
216 |
| - bsConfig['connection_settings']['local_identifier'] = process.env.BROWSERSTACK_LOCAL_IDENTIFIER; |
217 |
| - logger.info("Reading local identifier from the environment variable BROWSERSTACK_LOCAL_IDENTIFIER"); |
| 260 | + bsConfig["connection_settings"]["local_identifier"] = |
| 261 | + process.env.BROWSERSTACK_LOCAL_IDENTIFIER; |
| 262 | + logger.info( |
| 263 | + "Reading local identifier from the environment variable BROWSERSTACK_LOCAL_IDENTIFIER" |
| 264 | + ); |
218 | 265 | }
|
219 |
| -} |
| 266 | +}; |
0 commit comments