Skip to content

Commit

Permalink
fix(editor): Fix flaky mapping tests (#10453)
Browse files Browse the repository at this point in the history
  • Loading branch information
elsmr authored Aug 16, 2024
1 parent b857c2c commit fc6d413
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 11 deletions.
22 changes: 16 additions & 6 deletions cypress/e2e/14-mapping.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ describe('Data mapping', () => {

ndv.actions.mapDataFromHeader(1, 'value');
ndv.getters.inlineExpressionEditorInput().should('have.text', '{{ $json.timestamp }}');
ndv.getters.inlineExpressionEditorInput().type('{esc}');
ndv.getters.parameterExpressionPreview('value').should('include.text', '2024');

ndv.actions.mapDataFromHeader(2, 'value');
ndv.getters
Expand Down Expand Up @@ -133,6 +135,7 @@ describe('Data mapping', () => {

ndv.actions.mapToParameter('value');
ndv.getters.inlineExpressionEditorInput().should('have.text', '{{ $json.input[0].count }}');
ndv.getters.inlineExpressionEditorInput().type('{esc}');
ndv.getters.parameterExpressionPreview('value').should('include.text', '0');

ndv.getters
Expand All @@ -146,6 +149,7 @@ describe('Data mapping', () => {
ndv.getters
.inlineExpressionEditorInput()
.should('have.text', '{{ $json.input }}{{ $json.input[0].count }}');
ndv.getters.inlineExpressionEditorInput().type('{esc}');
ndv.actions.validateExpressionPreview('value', '[object Object]0');
});

Expand All @@ -163,6 +167,7 @@ describe('Data mapping', () => {

ndv.actions.mapToParameter('value');
ndv.getters.inlineExpressionEditorInput().should('have.text', '{{ $json.input[0].count }}');
ndv.getters.inlineExpressionEditorInput().type('{esc}');
ndv.actions.validateExpressionPreview('value', '0');

ndv.getters.inputDataContainer().find('span').contains('input').realMouseDown();
Expand Down Expand Up @@ -192,6 +197,7 @@ describe('Data mapping', () => {
ndv.getters
.inlineExpressionEditorInput()
.should('have.text', `{{ $('${SCHEDULE_TRIGGER_NODE_NAME}').item.json.input[0].count }}`);
ndv.getters.inlineExpressionEditorInput().type('{esc}');

ndv.actions.switchInputMode('Table');
ndv.actions.selectInputNode(SCHEDULE_TRIGGER_NODE_NAME);
Expand Down Expand Up @@ -271,12 +277,12 @@ describe('Data mapping', () => {

ndv.actions.typeIntoParameterInput('value', 'fun');
ndv.actions.clearParameterInput('value'); // keep focus on param
cy.wait(300);

ndv.getters.inputDataContainer().should('exist').find('span').contains('count').realMouseDown();

ndv.actions.mapToParameter('value');
ndv.getters.inlineExpressionEditorInput().should('have.text', '{{ $json.input[0].count }}');
ndv.getters.inlineExpressionEditorInput().type('{esc}');
ndv.actions.validateExpressionPreview('value', '0');

ndv.getters.inputDataContainer().find('span').contains('input').realMouseDown();
Expand Down Expand Up @@ -350,19 +356,23 @@ describe('Data mapping', () => {
workflowPage.actions.zoomToFit();

workflowPage.actions.openNode('Set');
ndv.actions.clearParameterInput('value');
ndv.actions.typeIntoParameterInput('value', '=');
ndv.actions.typeIntoParameterInput('value', 'hello world{enter}{enter}newline');
ndv.getters.inlineExpressionEditorInput().find('.cm-content').paste('hello world\n\nnewline');
ndv.getters.inlineExpressionEditorInput().type('{esc}');

ndv.getters.inputDataContainer().should('exist').find('span').contains('count').realMouseDown();

ndv.actions.mapToParameter('value');
ndv.getters
.inlineExpressionEditorInput()
.should('have.text', '{{ $json.input[0].count }}hello worldnewline');
ndv.getters.inlineExpressionEditorInput().type('{esc}');
ndv.actions.validateExpressionPreview('value', '0hello world\n\nnewline');

ndv.getters.inputDataContainer().find('span').contains('input').realMouseDown();
ndv.actions.mapToParameter('value', 'bottom');
ndv.actions.mapToParameter('value', 'center');

ndv.getters
.inlineExpressionEditorInput()
.should('have.text', '{{ $json.input[0].count }}hello worldnewline{{ $json.input }}');
.should('have.text', '{{ $json.input[0].count }}hello world{{ $json.input }}newline');
});
});
4 changes: 2 additions & 2 deletions cypress/e2e/33-settings-personal.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ describe('Personal Settings', () => {
});
});
// eslint-disable-next-line n8n-local-rules/no-skipped-tests
it.skip('not allow malicious values for personal data', () => {
it('not allow malicious values for personal data', () => {
cy.visit('/settings/personal');
INVALID_NAMES.forEach((name) => {
cy.getByTestId('personal-data-form').find('input[name="firstName"]').clear().type(name);
cy.getByTestId('personal-data-form').find('input[name="lastName"]').clear().type(name);
cy.getByTestId('save-settings-button').click();
errorToast().should('contain', 'Malicious firstName | Malicious lastName');
errorToast().should('contain', 'Potentially malicious string | Potentially malicious string');
errorToast().find('.el-notification__closeBtn').click();
});
});
Expand Down
2 changes: 1 addition & 1 deletion cypress/pages/ndv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ export class NDV extends BasePage {
this.getters.editPinnedDataButton().click();

this.getters.pinnedDataEditor().click();
this.getters.pinnedDataEditor().type('{selectall}{backspace}').paste(JSON.stringify(data));
this.getters.pinnedDataEditor().invoke('text', '').paste(JSON.stringify(data));

this.actions.savePinnedData();
},
Expand Down
2 changes: 2 additions & 0 deletions cypress/support/e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ beforeEach(() => {

cy.window().then((win): void => {
win.localStorage.setItem('N8N_THEME', 'light');
win.localStorage.setItem('N8N_AUTOCOMPLETE_ONBOARDED', 'true');
win.localStorage.setItem('N8N_MAPPING_ONBOARDED', 'true');
});

cy.intercept('GET', '/rest/settings', (req) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ describe('NoUrl', () => {
const entity = new Entity();

describe('URLs', () => {
const URLS = ['http://google.com', 'www.domain.tld'];
const URLS = ['http://google.com', 'www.domain.tld', 'n8n.io'];

for (const str of URLS) {
test(`should block ${str}`, async () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/validators/no-url.validator.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
import { registerDecorator, ValidatorConstraint } from 'class-validator';

const URL_REGEX = /^(https?:\/\/|www\.)/i;
const URL_REGEX = /^(https?:\/\/|www\.)|(\.[\p{L}\d-]+)/iu;

@ValidatorConstraint({ name: 'NoUrl', async: false })
class NoUrlConstraint implements ValidatorConstraintInterface {
Expand Down

0 comments on commit fc6d413

Please sign in to comment.