Skip to content

Commit cb71291

Browse files
minor fixes
1 parent 81df849 commit cb71291

File tree

3 files changed

+66
-166
lines changed

3 files changed

+66
-166
lines changed

bin/commands/runs.js

Lines changed: 8 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -75,75 +75,9 @@ const {
7575
supportFileCleanup
7676
} = require('../accessibility-automation/helper');
7777
const { isTurboScaleSession, getTurboScaleGridDetails, patchCypressConfigFileContent, atsFileCleanup } = require('../helpers/atsHelper');
78-
const { shouldProcessEventForTesthub, checkAndSetAccessibility, findAvailablePort } = require('../testhub/utils');
78+
const { shouldProcessEventForTesthub, findAvailablePort } = require('../testhub/utils');
7979
const TestHubHandler = require('../testhub/testhubHandler');
8080

81-
// Helper function to determine final accessibility setting matching C# SDK logic
82-
const shouldAutoEnableAccessibility = (userSetting, buildResponse) => {
83-
// If user has explicit setting (true/false), respect it
84-
if (userSetting !== null && userSetting !== undefined) {
85-
logToServer(`[Accessibility] Using explicit user setting: ${userSetting}`);
86-
return userSetting;
87-
}
88-
89-
// User setting is null - check server response for auto-enable decision
90-
if (buildResponse && buildResponse.accessibility && buildResponse.accessibility.success === true) {
91-
logToServer(`[Accessibility] Server decided to auto-enable accessibility`);
92-
return true;
93-
}
94-
95-
// Fallback if no server auto-enable decision
96-
logToServer('[Accessibility] No server auto-enable decision, defaulting to false');
97-
return false;
98-
};
99-
100-
// Helper function to process accessibility response from server - matches C# SDK pattern
101-
const processAccessibilityResponse = (bsConfig, buildResponse, userAccessibilitySetting) => {
102-
logToServer(`[Accessibility] Processing build response: ${JSON.stringify(buildResponse?.accessibility || 'No accessibility in response', null, 2)}`);
103-
104-
// Use C# SDK logic to determine final accessibility setting
105-
const finalAccessibility = shouldAutoEnableAccessibility(userAccessibilitySetting, buildResponse);
106-
107-
logToServer(`[Accessibility] Final decision: userSetting=${userAccessibilitySetting}, serverResponse=${buildResponse?.accessibility?.success}, finalAccessibility=${finalAccessibility}`);
108-
109-
// If final decision is to enable accessibility, update configuration
110-
if (finalAccessibility === true) {
111-
logger.debug("Accessibility enabled (user explicit or server auto-enable)");
112-
113-
// Update configuration
114-
bsConfig.run_settings.accessibility = true;
115-
process.env.BROWSERSTACK_TEST_ACCESSIBILITY = 'true';
116-
117-
// Ensure system_env_vars array exists
118-
if (!bsConfig.run_settings.system_env_vars) {
119-
bsConfig.run_settings.system_env_vars = [];
120-
}
121-
122-
// Remove existing accessibility env var if present to avoid duplicates
123-
bsConfig.run_settings.system_env_vars = bsConfig.run_settings.system_env_vars.filter(
124-
envVar => !envVar.startsWith('BROWSERSTACK_TEST_ACCESSIBILITY=')
125-
);
126-
127-
// Add the accessibility setting
128-
bsConfig.run_settings.system_env_vars.push(`BROWSERSTACK_TEST_ACCESSIBILITY=true`);
129-
130-
logToServer(`[Accessibility] Successfully enabled accessibility`);
131-
132-
return true;
133-
} else if (finalAccessibility === false) {
134-
// Explicitly set to false
135-
bsConfig.run_settings.accessibility = false;
136-
process.env.BROWSERSTACK_TEST_ACCESSIBILITY = 'false';
137-
138-
logToServer(`[Accessibility] Accessibility set to false`);
139-
return false;
140-
}
141-
142-
// Should not reach here with proper logic
143-
logToServer(`[Accessibility] Unexpected state: finalAccessibility=${finalAccessibility}`);
144-
return false;
145-
};
146-
14781
module.exports = function run(args, rawArgs) {
14882
utils.normalizeTestReportingEnvVars();
14983
markBlockStart('preBuild');
@@ -173,78 +107,8 @@ module.exports = function run(args, rawArgs) {
173107
/* Set testObservability & browserstackAutomation flags */
174108
const [isTestObservabilitySession, isBrowserstackInfra] = setTestObservabilityFlags(bsConfig);
175109

176-
// Log initial accessibility state
177-
logToServer(`Aakash CBT Initial Config - Before accessibility processing: bsConfig.run_settings.accessibility=${bsConfig.run_settings.accessibility}, system_env_vars=${JSON.stringify(bsConfig.run_settings.system_env_vars || [])}`);
178-
179-
// Helper functions to match C# SDK logic for accessibility auto-enable
180-
const getUserAccessibilitySetting = (bsConfig) => {
181-
logToServer(`[Accessibility] Getting user setting from config:`, {
182-
runSettings: bsConfig.run_settings.accessibility,
183-
environment: process.env.BROWSERSTACK_TEST_ACCESSIBILITY
184-
});
185-
186-
// Priority order: run_settings.accessibility > environment variable > null (let server decide)
187-
188-
// Check run_settings.accessibility first
189-
if (bsConfig.run_settings.accessibility !== undefined && bsConfig.run_settings.accessibility !== null) {
190-
logToServer(`[Accessibility] Using run_settings setting: ${bsConfig.run_settings.accessibility}`);
191-
return bsConfig.run_settings.accessibility;
192-
}
193-
194-
// Check environment variable
195-
if (process.env.BROWSERSTACK_TEST_ACCESSIBILITY === 'true') {
196-
logToServer('[Accessibility] Using environment variable setting: true');
197-
return true;
198-
}
199-
200-
if (process.env.BROWSERSTACK_TEST_ACCESSIBILITY === 'false') {
201-
logToServer('[Accessibility] Using environment variable setting: false');
202-
return false;
203-
}
204-
205-
// Return null to let server decide (matches C# SDK behavior)
206-
logToServer('[Accessibility] No explicit setting found, returning null for server decision');
207-
return null;
208-
};
209-
210-
const shouldAutoEnableAccessibility = (userSetting, buildResponse) => {
211-
// If user has explicit setting (true/false), respect it
212-
if (userSetting !== null && userSetting !== undefined) {
213-
logToServer(`[Accessibility] Using explicit user setting: ${userSetting}`);
214-
return userSetting;
215-
}
216-
217-
// User setting is null - check server response for auto-enable decision
218-
if (buildResponse && buildResponse.accessibility && buildResponse.accessibility.success === true) {
219-
logToServer(`[Accessibility] Server decided to auto-enable accessibility`);
220-
return true;
221-
}
222-
223-
// Fallback if no server decision available
224-
logToServer('[Accessibility] No server auto-enable decision, defaulting to false');
225-
return false;
226-
};
227-
228-
// Get user's explicit accessibility setting (null means let server decide)
229-
const userAccessibilitySetting = getUserAccessibilitySetting(bsConfig);
230-
231-
// Set initial accessibility value based on user setting (null if not explicitly set)
232-
if (userAccessibilitySetting !== null) {
233-
bsConfig.run_settings.accessibility = userAccessibilitySetting;
234-
logToServer(`[Accessibility] Set initial accessibility to user setting: ${userAccessibilitySetting}`);
235-
} else {
236-
// Keep accessibility as null to let server decide
237-
bsConfig.run_settings.accessibility = null;
238-
logToServer(`[Accessibility] Keeping accessibility as null for server decision`);
239-
}
240-
241-
if (bsConfig.run_settings.accessibility === true) {
242-
logger.debug("Accessibility explicitly enabled by user");
243-
} else if (bsConfig.run_settings.accessibility === false) {
244-
logger.debug("Accessibility explicitly disabled by user");
245-
} else {
246-
logger.debug("Accessibility setting is null - will be decided by server response");
247-
}
110+
// Log initial accessibility state before TestHub processing
111+
logToServer(`[Accessibility] Initial config state: bsConfig.run_settings.accessibility=${bsConfig.run_settings.accessibility}, env=${process.env.BROWSERSTACK_TEST_ACCESSIBILITY}`);
248112

249113
const turboScaleSession = isTurboScaleSession(bsConfig);
250114
Constants.turboScaleObj.enabled = turboScaleSession;
@@ -289,16 +153,8 @@ module.exports = function run(args, rawArgs) {
289153
// set build tag caps
290154
utils.setBuildTags(bsConfig, args);
291155

292-
// Only call checkAndSetAccessibility if user has explicit setting
293-
if (userAccessibilitySetting !== null) {
294-
checkAndSetAccessibility(bsConfig, userAccessibilitySetting);
295-
logToServer(`[Accessibility] Called checkAndSetAccessibility with explicit user setting: ${userAccessibilitySetting}`);
296-
} else {
297-
logToServer(`[Accessibility] Skipping checkAndSetAccessibility - accessibility is null for server decision`);
298-
}
299-
300-
// Log accessibility state after checkAndSetAccessibility
301-
logToServer(`Aakash CBT After checkAndSetAccessibility - Final accessibility state: bsConfig.run_settings.accessibility=${bsConfig.run_settings.accessibility}, BROWSERSTACK_TEST_ACCESSIBILITY=${process.env.BROWSERSTACK_TEST_ACCESSIBILITY}, system_env_vars=${JSON.stringify(bsConfig.run_settings.system_env_vars || [])}`);
156+
// Log accessibility state before TestHub processing
157+
logToServer(`[Accessibility] Before TestHub: bsConfig.run_settings.accessibility=${bsConfig.run_settings.accessibility}, env=${process.env.BROWSERSTACK_TEST_ACCESSIBILITY}`);
302158

303159
const preferredPort = 5348;
304160
const port = await findAvailablePort(preferredPort);
@@ -308,6 +164,9 @@ module.exports = function run(args, rawArgs) {
308164
if(shouldProcessEventForTesthub()) {
309165
await TestHubHandler.launchBuild(bsConfig, bsConfigPath);
310166
utils.setO11yProcessHooks(null, bsConfig, args, null, buildReportData);
167+
168+
// Log accessibility state after TestHub processing (which handles auto-enable)
169+
logToServer(`[Accessibility] After TestHub processing: bsConfig.run_settings.accessibility=${bsConfig.run_settings.accessibility}, env=${process.env.BROWSERSTACK_TEST_ACCESSIBILITY}`);
311170
}
312171

313172
// accept the system env list from bsconf and set it
@@ -509,15 +368,6 @@ module.exports = function run(args, rawArgs) {
509368
markBlockEnd('createBuild');
510369
markBlockEnd('total');
511370

512-
// Process accessibility response from server - matches C# SDK logic
513-
const accessibilityAutoEnabled = processAccessibilityResponse(bsConfig, data, userAccessibilitySetting);
514-
if (accessibilityAutoEnabled) {
515-
logger.info("Accessibility has been auto-enabled based on server response");
516-
}
517-
518-
// Log final accessibility state after server response processing
519-
logToServer(`Aakash CBT Final Build State - After server response processing: bsConfig.run_settings.accessibility=${bsConfig.run_settings.accessibility}, BROWSERSTACK_TEST_ACCESSIBILITY=${process.env.BROWSERSTACK_TEST_ACCESSIBILITY}, accessibilityAutoEnabled=${accessibilityAutoEnabled}`);
520-
521371
utils.setProcessHooks(data.build_id, bsConfig, bs_local, args, buildReportData);
522372
if(isTestObservabilitySession) {
523373
utils.setO11yProcessHooks(data.build_id, bsConfig, bs_local, args, buildReportData);

bin/testhub/testhubHandler.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class TestHubHandler {
2525
process.env.BS_TESTOPS_BUILD_COMPLETED = false;
2626
}
2727

28-
if (testhubUtils.isAccessibilityEnabled()) {
28+
if (testhubUtils.isAccessibilityEnabled(user_config)) {
2929
logger.debug(
3030
"Exception while creating test run for BrowserStack Accessibility Automation: Missing authentication token"
3131
);
@@ -53,6 +53,8 @@ class TestHubHandler {
5353
static async generateBuildUpstreamData(user_config) {
5454
const { buildName, projectName, buildDescription, buildTags } = helper.getBuildDetails(user_config, true);
5555
const productMap = testhubUtils.getProductMap(user_config);
56+
const accessibilityOptions = testhubUtils.getAccessibilityOptions(user_config);
57+
5658
const data = {
5759
project_name: projectName,
5860
name: buildName,
@@ -65,12 +67,15 @@ class TestHubHandler {
6567
build_run_identifier: process.env.BROWSERSTACK_BUILD_RUN_IDENTIFIER,
6668
failed_tests_rerun: process.env.BROWSERSTACK_RERUN || false,
6769
version_control: await helper.getGitMetaData(),
68-
accessibility: testhubUtils.getAccessibilityOptions(user_config),
70+
accessibility: accessibilityOptions,
6971
framework_details: testhubUtils.getFrameworkDetails(),
7072
product_map: productMap,
7173
browserstackAutomation: productMap["automate"],
7274
};
7375

76+
// Log what accessibility data is being sent to server
77+
console.log(`[TestHub] Sending accessibility data to server: ${JSON.stringify(accessibilityOptions, null, 2)}`);
78+
7479
return data;
7580
}
7681

@@ -104,7 +109,7 @@ class TestHubHandler {
104109
process.env.BROWSERSTACK_TEST_OBSERVABILITY = "false";
105110
}
106111

107-
if(testhubUtils.isAccessibilityEnabled()) {
112+
if(testhubUtils.isAccessibilityEnabled(user_config)) {
108113
testhubUtils.setAccessibilityVariables(user_config, response.data);
109114
} else {
110115
process.env.BROWSERSTACK_ACCESSIBILITY = 'false';

bin/testhub/utils.js

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,24 @@ exports.getFrameworkDetails = (user_config) => {
6565
};
6666
};
6767

68-
exports.isAccessibilityEnabled = () => {
68+
exports.isAccessibilityEnabled = (user_config = null) => {
69+
// If user_config is provided, check the user's explicit setting first
70+
if (user_config && user_config.run_settings) {
71+
// Check run_settings.accessibility first (explicit user setting)
72+
if (user_config.run_settings.accessibility !== undefined && user_config.run_settings.accessibility !== null) {
73+
logToServer(`[TestHub] isAccessibilityEnabled from config: ${user_config.run_settings.accessibility}`);
74+
return user_config.run_settings.accessibility === true;
75+
}
76+
}
77+
78+
// Fallback to environment variable check
6979
if (process.env.BROWSERSTACK_TEST_ACCESSIBILITY !== undefined) {
70-
return process.env.BROWSERSTACK_TEST_ACCESSIBILITY === "true";
80+
const isEnabled = process.env.BROWSERSTACK_TEST_ACCESSIBILITY === "true";
81+
logToServer(`[TestHub] isAccessibilityEnabled from env: ${isEnabled}`);
82+
return isEnabled;
7183
}
72-
logger.debug('Accessibility is disabled');
84+
85+
logToServer('[TestHub] Accessibility is disabled - no explicit setting found');
7386
return false;
7487
};
7588

@@ -87,7 +100,7 @@ exports.getProductMap = (user_config) => {
87100
exports.shouldProcessEventForTesthub = () => {
88101
return (
89102
testObservabilityHelper.isTestObservabilitySession() ||
90-
exports.isAccessibilityEnabled()
103+
exports.isAccessibilityEnabled() // No user_config available here, use env fallback
91104
);
92105
};
93106

@@ -326,7 +339,39 @@ exports.getAccessibilityOptions = (user_config) => {
326339
const settings = isUndefined(user_config.run_settings.accessibilityOptions)
327340
? {}
328341
: user_config.run_settings.accessibilityOptions;
329-
return { settings: settings };
342+
343+
// Get user's explicit accessibility preference (true/false/null) - matches C# SDK pattern
344+
let accessibility = null;
345+
346+
logToServer(`[TestHub] Getting accessibility options: run_settings.accessibility=${user_config.run_settings.accessibility}, env=${process.env.BROWSERSTACK_TEST_ACCESSIBILITY}`);
347+
348+
// Check run_settings.accessibility first (highest priority)
349+
if (user_config.run_settings.accessibility !== undefined && user_config.run_settings.accessibility !== null) {
350+
accessibility = user_config.run_settings.accessibility;
351+
logToServer(`[TestHub] Using run_settings accessibility: ${accessibility}`);
352+
}
353+
// Check environment variable (fallback)
354+
else if (process.env.BROWSERSTACK_TEST_ACCESSIBILITY === 'true') {
355+
accessibility = true;
356+
logToServer(`[TestHub] Using environment variable accessibility: true`);
357+
}
358+
else if (process.env.BROWSERSTACK_TEST_ACCESSIBILITY === 'false') {
359+
accessibility = false;
360+
logToServer(`[TestHub] Using environment variable accessibility: false`);
361+
}
362+
// Otherwise keep as null for server auto-enable decision
363+
else {
364+
logToServer(`[TestHub] No explicit accessibility setting found, sending null for server auto-enable decision`);
365+
}
366+
367+
const result = {
368+
settings: settings,
369+
enabled: accessibility // Send user preference to server (null = let server decide)
370+
};
371+
372+
logToServer(`[TestHub] Final accessibility options being sent to server:`, result);
373+
374+
return result;
330375
};
331376

332377
exports.appendTestHubParams = (testData, eventType, accessibilityScanInfo) => {

0 commit comments

Comments
 (0)