1+ const fs = require ( "fs" )
2+
3+ const LambdatestLog = ( message ) => {
4+ if ( ! Cypress . env ( 'LAMBDATEST_LOGS' ) ) return ;
5+ cy . task ( 'lambdatest_log' , message ) ;
6+ }
7+
8+ const commandsToWrap = [ 'visit' , 'click' , 'type' , 'request' , 'dblclick' , 'rightclick' , 'clear' , 'check' , 'uncheck' , 'select' , 'trigger' , 'selectFile' , 'scrollIntoView' , 'scroll' , 'scrollTo' , 'blur' , 'focus' , 'go' , 'reload' , 'submit' , 'viewport' , 'origin' ] ;
9+
10+ const setScanConfig = ( win , payload ) =>
11+ new Promise ( async ( resolve , reject ) => {
12+ const isHttpOrHttps = / ^ ( h t t p | h t t p s ) : $ / . test ( win . location . protocol ) ;
13+ if ( ! isHttpOrHttps ) {
14+ resolve ( ) ;
15+ }
16+
17+ function startScan ( ) {
18+ console . log ( 'log' , "Accessibility setting scan config" )
19+ function onScanComplete ( event ) {
20+ win . document . removeEventListener ( "automation-custom-event" , onScanComplete ) ;
21+ console . log ( 'log' , "Recieved scan config data " + event . detail )
22+ resolve ( event . detail ) ;
23+ }
24+
25+ win . document . addEventListener ( "automation-custom-event" , onScanComplete ) ;
26+ const e = new CustomEvent ( "accessibility-extension-custom-event" , { detail : payload } ) ;
27+ win . document . dispatchEvent ( e ) ;
28+
29+
30+ setTimeout ( ( ) => {
31+ resolve ( new Error ( 'automation-custom-event not received within timeout' ) ) ;
32+ } , 45000 ) ;
33+ }
34+ startScan ( ) ;
35+
36+ } )
37+
38+ const getScanData = ( win , payload ) =>
39+ new Promise ( async ( resolve , reject ) => {
40+ const isHttpOrHttps = / ^ ( h t t p | h t t p s ) : $ / . test ( window . location . protocol ) ;
41+ if ( ! isHttpOrHttps ) {
42+ resolve ( ) ;
43+ }
44+
45+
46+ function getSummary ( ) {
47+ function onReceiveSummary ( event ) {
48+
49+ win . document . removeEventListener ( "automation-custom-event" , onReceiveSummary ) ;
50+ resolve ( event . detail ) ;
51+ }
52+
53+
54+ win . document . addEventListener ( "automation-custom-event" , onReceiveSummary ) ;
55+ const e = new CustomEvent ( "accessibility-extension-custom-event" , { detail : payload } ) ;
56+ win . document . dispatchEvent ( e ) ;
57+
58+ setTimeout ( ( ) => {
59+ resolve ( new Error ( 'automation-custom-event not received within timeout' ) ) ;
60+ } , 45000 ) ;
61+
62+ }
63+
64+
65+ getSummary ( ) ;
66+
67+ } )
68+
69+ Cypress . on ( 'command:start' , async ( command ) => {
70+ if ( ! command || ! command . attributes ) return ;
71+ if ( command . attributes . name == 'window' || command . attributes . name == 'then' || command . attributes . name == 'wrap' || command . attributes . name == 'wait' ) {
72+ return ;
73+ }
74+
75+ if ( ! commandsToWrap . includes ( command . attributes . name ) ) return ;
76+ let isAccessibilityLoaded = Cypress . env ( "ACCESSIBILITY" ) || false ;
77+ if ( ! isAccessibilityLoaded ) {
78+ console . log ( 'log' , "accessibility not enabled " + isAccessibilityLoaded ) ;
79+ return ;
80+ }
81+
82+
83+ console . log ( 'log' , "debugging scan form command " + command . attributes . name ) ;
84+ cy . window ( ) . then ( ( win ) => {
85+ let wcagCriteriaValue = Cypress . env ( "WCAG_CRITERIA" ) || "wcag21a" ;
86+ let bestPracticeValue = Cypress . env ( "BEST_PRACTICE" ) || false ;
87+ let needsReviewValue = Cypress . env ( "NEEDS_REVIEW" ) || true ;
88+
89+ const payloadToSend = {
90+ message : 'SET_CONFIG' ,
91+ wcagCriteria : wcagCriteriaValue ,
92+ bestPractice : bestPracticeValue ,
93+ needsReview : needsReviewValue
94+ }
95+ let testId = Cypress . env ( "TEST_ID" ) || ""
96+
97+ const filePath = Cypress . env ( "ACCESSIBILITY_REPORT_PATH" ) || 'cypress/results/accessibilityReport_' + testId + '.json' ;
98+
99+ cy . wrap ( setScanConfig ( win , payloadToSend ) , { timeout : 30000 } ) . then ( ( res ) => {
100+ console . log ( 'logging config reponse' , res ) ;
101+
102+ const payload = {
103+ message : 'GET_LATEST_SCAN_DATA' ,
104+ }
105+
106+ cy . wrap ( getScanData ( win , payload ) , { timeout : 45000 } ) . then ( ( res ) => {
107+ LambdatestLog ( 'log' , "scanning data " ) ;
108+
109+
110+ cy . task ( 'initializeFile' , filePath ) . then ( ( filePath ) => {
111+ cy . readFile ( filePath , { log : true , timeout : 45000 } ) . then ( ( fileContent ) => {
112+ let resultsArray = [ { } ] ;
113+ console . log ( 'logging report' , res ) ;
114+ // If the file is not empty, parse the existing content
115+ if ( fileContent ) {
116+ try {
117+ resultsArray = JSON . parse ( JSON . stringify ( fileContent ) ) ;
118+ } catch ( e ) {
119+ console . log ( "parsing error for content " , fileContent )
120+ console . log ( 'Error parsing JSON file:' , e ) ;
121+ return ;
122+ }
123+ }
124+ console . log ( 'scanned data recieved is' , res . message ) ;
125+ if ( res . message == "GET_LATEST_SCAN_DATA" ) {
126+ // Append the new result
127+ resultsArray . push ( res ) ;
128+ console . log ( 'resultsarray logging' , resultsArray ) ;
129+ }
130+
131+ // Write the updated content back to the file
132+ cy . writeFile ( filePath , resultsArray , { log : true , timeout : 45000 } ) ;
133+ } ) ;
134+ } ) ;
135+ } ) ;
136+
137+ } ) ;
138+ } )
139+ } )
140+
141+
142+ Cypress . on ( 'command:end' , ( command ) => {
143+
144+ return ;
145+ } )
0 commit comments