1
+ 'use strict'
2
+
3
+ import { NightwatchBrowser } from 'nightwatch'
4
+ import init from '../helpers/init'
5
+
6
+ const templatesToCheck = [
7
+ {
8
+ value : "remixDefault" ,
9
+ displayName : "Basic" ,
10
+ checkSelectors : [
11
+ '*[data-id="treeViewLitreeViewItemcontracts/3_Ballot.sol"]' ,
12
+ '*[data-id="treeViewLitreeViewItemscripts/deploy_with_web3.ts"]'
13
+ ]
14
+ } ,
15
+ {
16
+ value : "blank" ,
17
+ displayName : "Blank" ,
18
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItem.prettierrc.json"]' ]
19
+ } ,
20
+ {
21
+ value : "simpleEip7702" ,
22
+ displayName : "Simple EIP-7702" ,
23
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcontracts/Example7702.sol"]' ]
24
+ } ,
25
+ {
26
+ value : "introToEIP7702" ,
27
+ displayName : "Intro to EIP-7702" ,
28
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcontracts/Spender.sol"]' ]
29
+ } ,
30
+ {
31
+ value : "accountAbstraction" ,
32
+ displayName : "Account Abstraction" ,
33
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemfunding.json"]' ]
34
+ } ,
35
+ {
36
+ value : "ozerc20" ,
37
+ displayName : "ERC20" ,
38
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcontracts/MyToken.sol"]' ]
39
+ } ,
40
+ {
41
+ value : "ozerc721" ,
42
+ displayName : "ERC721" ,
43
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcontracts/MyToken.sol"]' ]
44
+ } ,
45
+ {
46
+ value : "ozerc1155" ,
47
+ displayName : "ERC1155" ,
48
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcontracts/MyToken.sol"]' ]
49
+ } ,
50
+ {
51
+ value : "zeroxErc20" ,
52
+ displayName : "ERC20" ,
53
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcontracts/SampleERC20.sol"]' ]
54
+ } ,
55
+ {
56
+ value : "gnosisSafeMultisig" ,
57
+ displayName : "MultiSig" ,
58
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcontracts/MultisigWallet.sol"]' ]
59
+ } ,
60
+ {
61
+ value : "semaphore" ,
62
+ displayName : "Semaphore" ,
63
+ checkSelectors : [ '*[data-id="treeViewLitreeViewItemcircuits/semaphore.circom"]' ]
64
+ } ,
65
+ {
66
+ value : "hashchecker" ,
67
+ displayName : "Hash" ,
68
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemcircuits/calculate_hash.circom"]' ]
69
+ } ,
70
+ {
71
+ value : "rln" ,
72
+ displayName : "Rate" ,
73
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemcircuits/rln.circom"]' ]
74
+ } ,
75
+ {
76
+ value : "multNr" ,
77
+ displayName : "Multiplier" ,
78
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemsrc/main.nr"]' ]
79
+ } ,
80
+ {
81
+ value : "sindriScripts" ,
82
+ displayName : "Add Sindri ZK scripts" ,
83
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemscripts/sindri/run_compile.ts"]' ]
84
+ } ,
85
+ {
86
+ value : "uniswapV4Template" ,
87
+ displayName : "v4 Template" ,
88
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemfoundry.toml"]' ]
89
+ } ,
90
+ {
91
+ value : "contractCreate2Factory" ,
92
+ displayName : "Add Create2 Solidity factory" ,
93
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemcontracts/libs/create2-factory.sol"]' ]
94
+ } ,
95
+ {
96
+ value : "contractDeployerScripts" ,
97
+ displayName : "Add contract deployer scripts" ,
98
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemscripts/contract-deployer/basic-contract-deploy.ts"]' ]
99
+ } ,
100
+ {
101
+ value : "etherscanScripts" ,
102
+ displayName : "Add Etherscan scripts" ,
103
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItemscripts/etherscan/receiptGuidScript.ts"]' ]
104
+ } ,
105
+ {
106
+ value : "runJsTestAction" ,
107
+ displayName : "Mocha Chai Test Workflow" ,
108
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItem.github/workflows/run-js-test.yml"]' ]
109
+ } ,
110
+ {
111
+ value : "runSolidityUnittestingAction" ,
112
+ displayName : "Solidity Test Workflow" ,
113
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItem.github/workflows/run-solidity-unittesting.yml"]' ]
114
+ } ,
115
+ {
116
+ value : "runSlitherAction" ,
117
+ displayName : "Slither Workflo" ,
118
+ checkSelectors : [ '*[data-id="treeViewDivtreeViewItem.github/workflows/run-slither-action.yml"]' ]
119
+ }
120
+ ]
121
+
122
+ function openTemplatesExplorer ( browser : NightwatchBrowser ) {
123
+ browser
124
+ . click ( '*[data-id="workspacesMenuDropdown"]' )
125
+ . click ( '*[data-id="workspacecreate"]' )
126
+ . waitForElementPresent ( '*[data-id="create-remixDefault"]' )
127
+ }
128
+
129
+ function runTemplateChecks (
130
+ browser : NightwatchBrowser ,
131
+ start : number ,
132
+ end : number ,
133
+ mode : 'create' | 'add' = 'create'
134
+ ) {
135
+ templatesToCheck . slice ( start , end ) . forEach ( ( { value, displayName, checkSelectors } ) => {
136
+ console . log ( `Checking template: ${ value } in ${ mode } mode` )
137
+ openTemplatesExplorer ( browser )
138
+
139
+ if ( mode === 'create' ) {
140
+ browser
141
+ . waitForElementVisible ( `[data-id="create-${ value } "]` , 5000 )
142
+ . click ( `[data-id="create-${ value } "]` )
143
+ } else {
144
+ browser
145
+ . waitForElementVisible ( `[data-id="create-blank"]` , 5000 )
146
+ . click ( `[data-id="create-blank"]` )
147
+ }
148
+
149
+ browser
150
+ . waitForElementVisible ( '*[data-id="TemplatesSelection-modal-footer-ok-react"]' , 2000 )
151
+ . click ( '*[data-id="TemplatesSelection-modal-footer-ok-react"]' )
152
+ . pause ( 1000 )
153
+
154
+ if ( mode === 'add' ) {
155
+ browser . element ( 'css selector' , `[data-id="add-${ value } "]` , result => {
156
+ console . log ( `Element add-${ value } status: ${ result . status } ` )
157
+ if ( result . status == 0 ) {
158
+ openTemplatesExplorer ( browser )
159
+ browser
160
+ . waitForElementVisible ( `[data-id="add-${ value } "]` , 5000 )
161
+ . click ( `[data-id="add-${ value } "]` )
162
+
163
+ checkSelectors . forEach ( selector => {
164
+ console . log ( `Checking selector: ${ selector } ` )
165
+ browser . waitForElementVisible ( selector , 30000 )
166
+ } )
167
+ }
168
+ } )
169
+ } else {
170
+ browser
171
+ . useXpath ( )
172
+ . waitForElementVisible ( `//div[contains(@data-id, "dropdown-content") and contains(., "${ displayName } ")]` , 5000 )
173
+ . useCss ( )
174
+
175
+ checkSelectors . forEach ( selector => {
176
+ console . log ( `Checking selector: ${ selector } ` )
177
+ browser . waitForElementVisible ( selector , 30000 )
178
+ } )
179
+ }
180
+ } )
181
+ }
182
+
183
+ module . exports = {
184
+ '@disabled' : true ,
185
+ before : function ( browser : NightwatchBrowser , done : VoidFunction ) {
186
+ init ( browser , done )
187
+ } ,
188
+ openFilePanel : function ( browser : NightwatchBrowser ) {
189
+ browser . clickLaunchIcon ( 'filePanel' )
190
+ } ,
191
+ 'Loop through templates and click create #group1' : function ( browser ) {
192
+ runTemplateChecks ( browser , 0 , templatesToCheck . length , 'create' )
193
+ } ,
194
+ 'Loop through templates and click add buttons #group2' : function ( browser ) {
195
+ runTemplateChecks ( browser , 0 , templatesToCheck . length , 'add' )
196
+ }
197
+ }
0 commit comments