Skip to content

Commit ac2f2fd

Browse files
authored
Merge pull request #680 from MetaCell/test/netpyne-101
Test/netpyne 101
2 parents 69b9e5f + 284be4b commit ac2f2fd

12 files changed

Lines changed: 693 additions & 330 deletions

.github/workflows/tests.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,28 @@ jobs:
5858
npm run Experiment_Manager_test
5959
env:
6060
CI: true
61+
Control_Panel-test:
62+
# The type of runner that the job will run on
63+
runs-on: ubuntu-20.04
64+
container: lironavon/docker-puppeteer-container:14.16.0
65+
env:
66+
CI: true
67+
steps:
68+
- uses: actions/checkout@v1
69+
- name: Use Node.js ${{ matrix.node-version }}
70+
uses: actions/setup-node@v1
71+
with:
72+
node-version: ${{ matrix.node-version }}
73+
cache-dependency-path: frontend/e2e/tests/package-lock.json
74+
- name: Control Panel test using Tut#2
75+
run: |
76+
cd tests/frontend/e2e
77+
#install dependencies
78+
npm ci
79+
# run Control Panel test
80+
npm run Control_Panel_test
81+
env:
82+
CI: true
6183
Tutorial_1-SmokeTest:
6284
# The type of runner that the job will run on
6385
runs-on: ubuntu-20.04

tests/frontend/e2e/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"Tutorial_3B_test":"jest --verbose Tut#3b_smoke ",
1414
"Tutorial_3C_test":"jest --verbose Tut#3c_smoke ",
1515
"Tutorial_4_test":"jest --verbose Tut#4_smoke ",
16+
"Control_Panel_test": "jest --verbose ControlPanel ",
1617
"lint": "eslint --fix --ext .js,.jsx ."
1718
},
1819
"dependencies": {
Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
//IMPORTS:
2+
import 'expect-puppeteer';
3+
import { click } from './utils';
4+
import { toMatchImageSnapshot } from 'jest-image-snapshot'
5+
expect.extend({ toMatchImageSnapshot })
6+
const path = require('path');
7+
var scriptName = path.basename(__filename, '.js');
8+
import * as selectors from './selectors'
9+
10+
11+
//PAGE INFO:
12+
const baseURL = process.env.url || 'https://stage.netpyne.metacell.us/'
13+
const PAGE_WAIT = 3000;
14+
const TIMEOUT = 60000;
15+
16+
//SNAPSHOT:
17+
const SNAPSHOT_OPTIONS = {
18+
customSnapshotsDir: `./tests/snapshots/Tut#2_smoke.test/`,
19+
comparisonMethod: 'ssim',
20+
failureThresholdType: 'percent',
21+
failureThreshold: 0.25
22+
};
23+
24+
let r = (Math.random() + 1).toString(36).substring(2);
25+
26+
//USERS:
27+
const USERNAME = `TestUser${r}`
28+
const PASSWORD = 'testpassword'
29+
30+
//TESTS:
31+
32+
jest.setTimeout(300000);
33+
34+
35+
36+
describe('Test for the Control Panel - color picker', () => {
37+
38+
beforeAll(async () => {
39+
await page.goto(baseURL);
40+
await page.waitForSelector(selectors.LOGIN_PAGE_SELECTOR);
41+
await page.waitForSelector(selectors.USERNAME_SELECTOR)
42+
await expect(page)
43+
.toFill(selectors.USERNAME_SELECTOR, USERNAME, { timeout: TIMEOUT });
44+
45+
await page.waitForSelector(selectors.PASSWORD_SELECTOR)
46+
await expect(page)
47+
.toFill(selectors.PASSWORD_SELECTOR, PASSWORD, { timeout: TIMEOUT });
48+
49+
await page.click(selectors.LOGIN_BUTTON_SELECTOR)
50+
51+
await page.waitForFunction(() => {
52+
let el = document.querySelector('#loading-spinner');
53+
return el == null || el.clientHeight === 0;
54+
}, { timeout: TIMEOUT });
55+
});
56+
57+
it('Open new page', async () => {
58+
59+
console.log('Opening a new NetPyNE page')
60+
61+
await page.on("dialog", dialog =>
62+
dialog.accept());
63+
64+
await page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 6, visible: true })
65+
await page.waitForSelector(selectors.FILE_TAB_SELECTOR, { timeout: PAGE_WAIT * 3 })
66+
await page.waitForTimeout(PAGE_WAIT)
67+
await page.click(selectors.FILE_TAB_SELECTOR)
68+
await page.waitForSelector(selectors.NEW_FILE_SELECTOR, { timeout: PAGE_WAIT * 3 })
69+
await page.waitForTimeout(PAGE_WAIT)
70+
await page.click(selectors.NEW_FILE_SELECTOR)
71+
await page.waitForTimeout(PAGE_WAIT)
72+
await page.waitForSelector(selectors.CONFIRM_NEW_PAGE_SELECTOR)
73+
await page.click(selectors.CONFIRM_NEW_PAGE_SELECTOR)
74+
await page.waitForTimeout(PAGE_WAIT * 2)
75+
76+
await page.waitForFunction(() => {
77+
let el = document.querySelector('#loading-spinner');
78+
return el == null || el.clientHeight === 0;
79+
}, { timeout: TIMEOUT });
80+
81+
await page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT * 10 })
82+
83+
console.log('Page opened successfully')
84+
85+
})
86+
87+
it('Load Tutorial#2', async () => {
88+
89+
await page.waitForTimeout(PAGE_WAIT * 2)
90+
await page.waitForSelector(selectors.SELECT_CELL_BUTTON_SELECTOR, { timeout: TIMEOUT })
91+
await page.waitForTimeout(PAGE_WAIT)
92+
await page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT })
93+
94+
console.log('Loading Tutorial #2')
95+
96+
await page.click(selectors.TUTORIAL_2_SELECTOR, { timeout: TIMEOUT })
97+
await page.waitForTimeout(PAGE_WAIT)
98+
await page.waitForSelector(selectors.PYR_2_CELL_SELECTOR)
99+
await page.waitForSelector(selectors.INT_CELL_SELECTOR)
100+
await page.waitForTimeout(PAGE_WAIT)
101+
102+
console.log('Tutorial #2 loaded successfully')
103+
104+
})
105+
106+
107+
it('Create network', async () => {
108+
109+
await page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR)
110+
await page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT });
111+
await page.waitForSelector(selectors.CREATE_NETWORK_SELECTOR)
112+
await page.click(selectors.CREATE_NETWORK_SELECTOR, { timeout: TIMEOUT });
113+
114+
console.log('Create network')
115+
116+
await page.waitForSelector(selectors.DISABLED_RASTER_PLOT_SELECTOR, { timeout: TIMEOUT * 3 })
117+
118+
console.log('Network created successfully')
119+
120+
await page.waitForTimeout(PAGE_WAIT)
121+
122+
console.log('... taking snapshot ...');
123+
await page.waitForTimeout(PAGE_WAIT);
124+
expect(await page.screenshot())
125+
.toMatchImageSnapshot({
126+
...SNAPSHOT_OPTIONS,
127+
customSnapshotIdentifier: 'Tutorial#2 Network'
128+
});
129+
})
130+
131+
it('Open Color Picker Menu', async () => {
132+
133+
console.log('Opening Control Panel')
134+
135+
await page.waitForSelector(selectors.CONTROL_PANEL_TAB_SELECTOR)
136+
await page.click(selectors.CONTROL_PANEL_TAB_SELECTOR)
137+
await page.waitForSelector(selectors.NETWORKS_IN_CONTROL_PANEL_SELECTOR)
138+
139+
const network_items = (await page.$$(selectors.NETWORK_ITEMS_CONTROL_PANEL_SELECTOR)).length;
140+
await expect(network_items).toEqual(3)
141+
142+
console.log('Control Panel displayed successfully')
143+
144+
})
145+
146+
it('Randomize Main Level network color', async () => {
147+
148+
console.log('Randomize Main Level network color')
149+
150+
await page.waitForTimeout(PAGE_WAIT * 3)
151+
await page.waitForSelector(selectors.CONTROL_PANEL_TABLE_SELECTOR)
152+
153+
const primary_level_colors = await page.$$eval(selectors.COLOR_RECT_SELECTOR, primary_level_colors => {
154+
return primary_level_colors.map(primary_level_color => primary_level_color.outerHTML);
155+
});
156+
157+
expect(primary_level_colors[0]).toContain('fill="#FF7F99"')
158+
expect(primary_level_colors[0]).toEqual(primary_level_colors[1])
159+
expect(primary_level_colors[1]).toEqual(primary_level_colors[2])
160+
161+
await page.waitForTimeout(PAGE_WAIT)
162+
163+
const rows = await page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR)
164+
for (var i = 0; i < rows.length; i++) {
165+
await rows[0].hover()
166+
}
167+
168+
const buttons = await page.$$(selectors.COLOR_CONTROL_BUTTONS_SELECTOR)
169+
170+
for (var i = 0; i < buttons.length; i++) {
171+
await buttons[1].click()
172+
}
173+
174+
await page.waitForTimeout(PAGE_WAIT)
175+
176+
const rndm_primary_level_colors = await page.$$eval(selectors.COLOR_RECT_SELECTOR, rndm_primary_level_colors => {
177+
return rndm_primary_level_colors.map(rndm_primary_level_color => rndm_primary_level_color.outerHTML);
178+
});
179+
180+
expect(rndm_primary_level_colors[0]).toContain('fill="#989898"')
181+
expect(rndm_primary_level_colors[2]).not.toEqual(rndm_primary_level_colors[1])
182+
183+
console.log('Main Network color randomized successfully')
184+
185+
await page.waitForTimeout(PAGE_WAIT)
186+
187+
})
188+
189+
it('Randomize Sub level E network color', async () => {
190+
191+
console.log('Randomize Sub Level E network color')
192+
193+
const rows = await page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR)
194+
for (var i = 0; i < rows.length; i++) {
195+
await rows[1].click()
196+
await rows[1].hover()
197+
}
198+
await page.waitForTimeout(PAGE_WAIT)
199+
200+
const second_level_colors = await page.$$eval(selectors.COLOR_RECT_SELECTOR, second_level_colors => {
201+
return second_level_colors.map(second_level_color => second_level_color.outerHTML);
202+
});
203+
204+
205+
expect(second_level_colors[1]).toEqual(second_level_colors[2])
206+
expect(second_level_colors[2]).toEqual(second_level_colors[3])
207+
208+
209+
const buttons = await page.$$(selectors.COLOR_CONTROL_BUTTONS_SELECTOR)
210+
211+
for (var i = 0; i < buttons.length; i++) {
212+
await buttons[2].click()
213+
}
214+
215+
await page.waitForTimeout(PAGE_WAIT * 2)
216+
217+
const second_level_colors_after_rndm = await page.$$eval(selectors.COLOR_RECT_SELECTOR, second_level_colors_after_rndm => {
218+
return second_level_colors_after_rndm.map(second_level_color_after_rndm => second_level_color_after_rndm.outerHTML);
219+
});
220+
221+
expect(second_level_colors_after_rndm[1]).toContain('fill="#989898"')
222+
expect(second_level_colors_after_rndm[2]).not.toEqual(second_level_colors_after_rndm[3])
223+
expect(second_level_colors_after_rndm[2]).not.toEqual(second_level_colors_after_rndm[1])
224+
225+
console.log('E Network color randomized successfully')
226+
227+
await page.waitForTimeout(PAGE_WAIT * 3)
228+
229+
})
230+
231+
232+
it('Pick a color for the sublevel I netowrk', async () => {
233+
234+
console.log('Selecting a color for the I network')
235+
236+
const rows = await page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR)
237+
for (var i = 0; i < rows.length; i++) {
238+
await rows[1].click()
239+
}
240+
241+
await page.waitForTimeout(PAGE_WAIT)
242+
243+
const rows_ = await page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR)
244+
245+
for (var i = 0; i < rows_.length; i++) {
246+
await rows_[2].click()
247+
}
248+
249+
await page.waitForTimeout(PAGE_WAIT)
250+
251+
const network_colors = await page.$$eval(selectors.COLOR_RECT_SELECTOR, network_colors => {
252+
return network_colors.map(network_color => network_color.outerHTML);
253+
});
254+
255+
expect(network_colors[3]).toEqual(network_colors[4])
256+
expect(network_colors[3]).toEqual(network_colors[2])
257+
258+
await page.waitForTimeout(PAGE_WAIT * 3)
259+
260+
const buttons = await page.$$(selectors.COLOR_CONTROL_BUTTONS_SELECTOR)
261+
262+
for (var i = 0; i < buttons.length; i++) {
263+
await buttons[4].click()
264+
}
265+
266+
await page.waitForTimeout(PAGE_WAIT)
267+
268+
const list_bounds = await page.$(selectors.NETWORKS_IN_CONTROL_PANEL_SELECTOR);
269+
const rect = await page.evaluate((list_bounds) => {
270+
const { top, left, bottom, right } = list_bounds.getBoundingClientRect();
271+
return { top, left, bottom, right };
272+
}, list_bounds);
273+
274+
await page.waitForTimeout(PAGE_WAIT)
275+
await page.mouse.click(Math.round(rect.right) - 40, Math.round(rect.bottom) + 40)
276+
await page.waitForTimeout(PAGE_WAIT * 2)
277+
278+
const rows_after_colouring_I = await page.$$(selectors.CONTROL_PANEL_NETWORK_ROWS_SELECTOR)
279+
for (var i = 0; i < rows_after_colouring_I.length; i++) {
280+
await rows_after_colouring_I[2].click()
281+
}
282+
283+
const network_colors_after_colouring_I = await page.$$eval(selectors.COLOR_RECT_SELECTOR, network_colors_after_colouring_I => {
284+
return network_colors_after_colouring_I.map(network_color_after_colouring_I => network_color_after_colouring_I.outerHTML);
285+
});
286+
await page.waitForTimeout(PAGE_WAIT)
287+
288+
expect(network_colors_after_colouring_I[2]).toEqual(network_colors_after_colouring_I[3])
289+
expect(network_colors_after_colouring_I[2]).toEqual(network_colors_after_colouring_I[4])
290+
291+
console.log('I network color selected successfully')
292+
293+
})
294+
295+
it('Filter results from the Control panel', async () => {
296+
297+
await page.waitForTimeout(PAGE_WAIT)
298+
console.log('Filtering results')
299+
300+
await expect(page).toFill(selectors.CONTROL_PANEL_FILTER_SELECTOR, 'E')
301+
302+
await page.waitForTimeout(PAGE_WAIT)
303+
await page.waitForSelector(selectors.NETWORKS_IN_CONTROL_PANEL_SELECTOR)
304+
305+
const network_items = (await page.$$(selectors.NETWORK_ITEMS_CONTROL_PANEL_SELECTOR)).length;
306+
await expect(network_items).toEqual(3)
307+
308+
console.log('Results filtered successfully')
309+
310+
})
311+
312+
313+
});

0 commit comments

Comments
 (0)