|
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