Skip to content

Commit 4e2854f

Browse files
Merge branch 'develop' into dependabot/npm_and_yarn/gallery/express-4.19.2
2 parents 57c46d6 + b9576bd commit 4e2854f

35 files changed

+867
-499
lines changed

.github/dependabot.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: 'yarn'
4+
directory: '/'
5+
schedule:
6+
interval: 'weekly'
7+
target-branch: 'develop'
8+
9+
- package-ecosystem: 'yarn'
10+
directory: '/gallery'
11+
schedule:
12+
interval: 'weekly'
13+
target-branch: 'develop'
14+
15+
- package-ecosystem: 'yarn'
16+
directory: '/docs'
17+
schedule:
18+
interval: 'weekly'
19+
target-branch: 'develop'

.github/workflows/master-deployment.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
with:
3232
build: yarn run build
3333
start: yarn run dev
34-
wait-on: "http://localhost:3000"
34+
wait-on: 'http://localhost:3000'
3535
browser: chrome
3636
build-s3:
3737
needs: build-test
@@ -79,7 +79,7 @@ jobs:
7979
context: .
8080
file: ./Dockerfile
8181
push: true
82-
tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.4
82+
tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.8
8383
build-docker-legacy:
8484
needs: build-test
8585
runs-on: neodash-runners
@@ -103,7 +103,7 @@ jobs:
103103
context: .
104104
file: ./Dockerfile
105105
push: true
106-
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.4
106+
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.8
107107
deploy-gallery:
108108
runs-on: neodash-runners
109109
strategy:

Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ WORKDIR /usr/local/src/neodash
1010

1111
# Copy sources and install/build
1212
COPY ./package.json /usr/local/src/neodash/package.json
13+
COPY ./yarn.lock /usr/local/src/neodash/yarn.lock
1314

1415
RUN yarn install
1516
COPY ./ /usr/local/src/neodash
@@ -43,4 +44,4 @@ USER nginx
4344
EXPOSE $NGINX_PORT
4445

4546
HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1
46-
LABEL version="2.4.4"
47+
LABEL version="2.4.8"

changelog.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,45 @@
1+
## NeoDash 2.4.8
2+
This is a minor release containing an important fix and other minor fixes:
3+
4+
- Fixed a bug where loading a dashboard would reset parameters to null ([887](https://github.com/neo4j-labs/neodash/pull/887)).
5+
- Fix relationship width parameter for Graph report ([889](https://github.com/neo4j-labs/neodash/pull/889)).
6+
7+
Thanks to all the contributors for this release:
8+
- [alfredorubin96](https://github.com/alfredorubin96),
9+
- [nielsdejong](https://github.com/nielsdejong).
10+
11+
## NeoDash 2.4.7
12+
This is a minor release containing a few critical fixes and general code quality improvements:
13+
14+
- Fix multiple parameter select ([881](https://github.com/neo4j-labs/neodash/pull/881)).
15+
- Fix parameter casting error when loading dashboards([874](https://github.com/neo4j-labs/neodash/pull/874)).
16+
- Fix the fraud demo in the [Example Gallery](https://neodash-gallery.graphapp.io/).
17+
18+
Thanks to all the contributors for this release:
19+
- [alfredorubin96](https://github.com/alfredorubin96),
20+
- [MariusC](https://github.com/mariusconjeaud),
21+
- [elizarp](https://github.com/elizarp).
22+
23+
## NeoDash 2.4.6
24+
This is a minor release containing a few critical fixes and some extra style customizations:
25+
26+
- Fix bad text wrapping for arrays in tables ([868](https://github.com/neo4j-labs/neodash/pull/868)).
27+
- Make wrapping in table optional, disabled by default ([872](https://github.com/neo4j-labs/neodash/pull/872)).
28+
- Fixed issues where cross database dashboard sharing always reverted back to the default database ([873](https://github.com/neo4j-labs/neodash/pull/873)).
29+
- Added option to define style config using environment variables for the Docker image ([876](https://github.com/neo4j-labs/neodash/pull/876)).
30+
31+
## NeoDash 2.4.5
32+
This is a small release containing a few fixes:
33+
- Fixed rendering of string arrays inside tables, report titles, and report action buttons [849](https://github.com/neo4j-labs/neodash/pull/849)
34+
- Allowed text to wrap in tables, preserving the number of rows [852](https://github.com/neo4j-labs/neodash/pull/852)
35+
- Disabled auto-sorting of Cypher query-based Parameter Select ; use Cypher ORDER BY to control result order [857](https://github.com/neo4j-labs/neodash/pull/857)
36+
- Updated role selector menu, and made user updates more robust [854](https://github.com/neo4j-labs/neodash/pull/854)
37+
38+
Thanks to all the contributors for this release:
39+
- [MariusC](https://github.com/mariusconjeaud),
40+
- [LiamEdwardsLamarche](https://github.com/LiamEdwardsLamarche),
41+
- [AleSim94](https://github.com/AleSim94)
42+
143
## NeoDash 2.4.4
244
This is a hotfix release fixing some breaking issues in the 2.4.3:
345
- Fixed number parsing using newer versions of the Neo4j driver. [811](https://github.com/neo4j-labs/neodash/pull/811)

cypress/e2e/render/array.cy.js

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
import { stringArrayCypherQuery, intArrayCypherQuery, pathArrayCypherQuery } from '../../fixtures/cypher_queries';
2+
import {
3+
enableReportActions,
4+
createReportOfType,
5+
closeSettings,
6+
toggleTableTranspose,
7+
openReportActionsMenu,
8+
selectReportOfType,
9+
openAdvancedSettings,
10+
updateDropdownAdvancedSetting,
11+
} from '../utils';
12+
13+
const WAITING_TIME = 20000;
14+
const CARD_SELECTOR = 'main .react-grid-item:eq(2)';
15+
// Ignore warnings that may appear when using the Cypress dev server
16+
Cypress.on('uncaught:exception', (err, runnable) => {
17+
console.log(err, runnable);
18+
return false;
19+
});
20+
21+
describe('Testing array rendering', () => {
22+
beforeEach('open neodash', () => {
23+
cy.viewport(1920, 1080);
24+
cy.visit('/', {
25+
onBeforeLoad(win) {
26+
win.localStorage.clear();
27+
},
28+
});
29+
30+
cy.get('#form-dialog-title', { WAITING_TIME: WAITING_TIME })
31+
.should('contain', 'NeoDash - Neo4j Dashboard Builder')
32+
.click();
33+
34+
cy.get('#form-dialog-title').then(($div) => {
35+
const text = $div.text();
36+
if (text == 'NeoDash - Neo4j Dashboard Builder') {
37+
cy.wait(500);
38+
// Create new dashboard
39+
cy.contains('New Dashboard').click();
40+
}
41+
});
42+
43+
cy.get('#form-dialog-title', { WAITING_TIME: WAITING_TIME }).should('contain', 'Connect to Neo4j');
44+
45+
cy.get('#url').clear().type('localhost');
46+
cy.get('#dbusername').clear().type('neo4j');
47+
cy.get('#dbpassword').type('test1234');
48+
cy.get('button').contains('Connect').click();
49+
cy.wait(100);
50+
});
51+
52+
it('creates a table that contains string arrays', () => {
53+
cy.checkInitialState();
54+
enableReportActions();
55+
createReportOfType('Table', stringArrayCypherQuery, true, true);
56+
57+
// Standard array, displays strings joined with comma and whitespace
58+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', 'initial, list');
59+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', 'other, list');
60+
61+
// Now, transpose the table
62+
toggleTableTranspose(CARD_SELECTOR, true);
63+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`, { timeout: WAITING_TIME }).should(
64+
'have.text',
65+
'initial,list'
66+
);
67+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', 'other, list');
68+
69+
// Transpose back
70+
// And add a report action
71+
toggleTableTranspose(CARD_SELECTOR, false);
72+
openReportActionsMenu(CARD_SELECTOR);
73+
cy.get('.ndl-modal').find('button[aria-label="add"]').click();
74+
cy.get('.ndl-modal').find('input:eq(2)').type('column');
75+
cy.get('.ndl-modal').find('input:eq(5)').type('test_param');
76+
cy.get('.ndl-modal').find('input:eq(6)').type('column');
77+
cy.get('.ndl-modal').find('button').contains('Save').click();
78+
closeSettings(CARD_SELECTOR);
79+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`)
80+
.find('button')
81+
.should('be.visible')
82+
.should('have.text', 'initial, list')
83+
.click();
84+
85+
// Previous step's click set a parameter from the array
86+
// Test that parameter rendering works
87+
cy.get(`${CARD_SELECTOR} .MuiCardHeader-root`).find('input').type('$neodash_test_param').blur();
88+
cy.get(`${CARD_SELECTOR} .MuiCardHeader-root`).find('input').should('have.value', 'initial, list');
89+
});
90+
91+
it('creates a table that contains int arrays', () => {
92+
cy.checkInitialState();
93+
createReportOfType('Table', intArrayCypherQuery, true, true);
94+
95+
// Standard array, displays strings joined with comma and whitespace
96+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', '1, 2');
97+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', '3, 4');
98+
99+
// Now, transpose the table
100+
toggleTableTranspose(CARD_SELECTOR, true);
101+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`, { timeout: WAITING_TIME }).should(
102+
'have.text',
103+
'1,2'
104+
);
105+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', '3, 4');
106+
});
107+
108+
it('creates a table that contains nodes and rels', () => {
109+
cy.checkInitialState();
110+
createReportOfType('Table', pathArrayCypherQuery, true, true);
111+
112+
// Standard array, displays a path with two nodes and a relationship
113+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', 'PersonACTED_INMovie');
114+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) button`).should('have.length', 2);
115+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) button:eq(0)`).should('have.text', 'Person');
116+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) button:eq(1)`).should('have.text', 'Movie');
117+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) .MuiChip-root`).should('have.length', 1);
118+
cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) .MuiChip-root`).should('have.text', 'ACTED_IN');
119+
});
120+
121+
it('creates a single value report which is an array', () => {
122+
cy.checkInitialState();
123+
createReportOfType('Single Value', stringArrayCypherQuery, true, true);
124+
cy.get(CARD_SELECTOR).should('have.text', 'initial, list');
125+
});
126+
127+
it('creates a multi parameter select', () => {
128+
cy.checkInitialState();
129+
selectReportOfType('Parameter Select');
130+
cy.get('main .react-grid-item:eq(2) label[for="Selection Type"]').siblings('div').click();
131+
// Set up the parameter select
132+
cy.contains('Node Property').click();
133+
cy.wait(100);
134+
cy.contains('Node Label').click();
135+
cy.contains('Node Label').siblings('div').find('input').type('Movie');
136+
cy.wait(1000);
137+
cy.get('.MuiAutocomplete-popper').contains('Movie').click();
138+
cy.contains('Property Name').click();
139+
cy.contains('Property Name').siblings('div').find('input').type('title');
140+
cy.wait(1000);
141+
cy.get('.MuiAutocomplete-popper').contains('title').click();
142+
// Enable multiple selection
143+
closeSettings(CARD_SELECTOR);
144+
updateDropdownAdvancedSetting(CARD_SELECTOR, 'Multiple Selection', 'on');
145+
// Finally, select a few values in the parameter select
146+
cy.get(CARD_SELECTOR).contains('Movie title').click();
147+
cy.get(CARD_SELECTOR).contains('Movie title').siblings('div').find('input').type('a');
148+
cy.get('.MuiAutocomplete-popper').contains('Apollo 13').click();
149+
cy.get(CARD_SELECTOR).contains('Movie title').siblings('div').find('input').type('t');
150+
cy.get('.MuiAutocomplete-popper').contains('The Matrix').click();
151+
cy.get(CARD_SELECTOR).contains('Apollo 13').should('be.visible');
152+
cy.get(CARD_SELECTOR).contains('The Matrix').should('be.visible');
153+
});
154+
});

cypress/e2e/start_page.cy.js

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
gaugeChartCypherQuery,
1111
formCypherQuery,
1212
} from '../fixtures/cypher_queries';
13+
import { createReportOfType, selectReportOfType, enableAdvancedVisualizations, enableFormsExtension } from './utils';
1314

1415
const WAITING_TIME = 20000;
1516
// Ignore warnings that may appear when using the Cypress dev server
@@ -293,46 +294,3 @@ describe('NeoDash E2E Tests', () => {
293294
}
294295
});
295296
});
296-
297-
function enableAdvancedVisualizations() {
298-
cy.get('main button[aria-label="Extensions').should('be.visible').click();
299-
cy.get('#checkbox-advanced-charts').should('be.visible').click();
300-
cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click();
301-
cy.wait(200);
302-
}
303-
304-
function enableFormsExtension() {
305-
cy.get('main button[aria-label="Extensions').should('be.visible').click();
306-
cy.get('#checkbox-forms').scrollIntoView();
307-
cy.get('#checkbox-forms').should('be.visible').click();
308-
cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click();
309-
cy.wait(200);
310-
}
311-
312-
function selectReportOfType(type) {
313-
cy.get('main .react-grid-item button[aria-label="add report"]').should('be.visible').click();
314-
cy.get('main .react-grid-item')
315-
.contains('No query specified.')
316-
.parentsUntil('.react-grid-item')
317-
.find('button[aria-label="settings"]', { timeout: 2000 })
318-
.should('be.visible')
319-
.click();
320-
cy.get('main .react-grid-item:eq(2) #type', { timeout: 2000 }).should('be.visible').click();
321-
cy.contains(type).click();
322-
cy.wait(100);
323-
}
324-
325-
function createReportOfType(type, query, fast = false, run = true) {
326-
selectReportOfType(type);
327-
if (fast) {
328-
cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { delay: 1, parseSpecialCharSequences: false });
329-
} else {
330-
cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { parseSpecialCharSequences: false });
331-
}
332-
cy.wait(400);
333-
334-
cy.get('main .react-grid-item:eq(2)').contains('Advanced settings').click();
335-
if (run) {
336-
cy.get('main .react-grid-item:eq(2) button[aria-label="run"]').click();
337-
}
338-
}

0 commit comments

Comments
 (0)