console: revert improve data/relationships e2e tests

The changes turned out to be flaky — tests were failing from time to time, and blocking other PRs from being merged.

Reverts hasura/graphql-engine-mono#1037

GitOrigin-RevId: 97d95156e8d348f2e89ec33e06ffaac9bf75a2f9
This commit is contained in:
Aleksandra Sikora 2021-05-12 09:36:30 +02:00 committed by hasura-bot
parent 27aa5b4781
commit 8c21ca5d21
9 changed files with 232 additions and 274 deletions

View File

@ -14,6 +14,5 @@
"allowForLoopAfterthoughts": true
}
]
},
"ignorePatterns": ["**/*.d.ts"]
}
}

View File

@ -3,11 +3,7 @@ export const baseUrl = Cypress.config('baseUrl');
export const migrateUrl = Cypress.env('MIGRATE_URL');
export const migrateModeUrl = `${migrateUrl}/settings`;
/**
* sets value of window.prompt and reloads page
* @param value
* @deprecated Use `cy.setPrompt(value, callBackFn)` instead
*/
// sets value of window.prompt and reloads page
export const setPromptValue = (value: string | null) => {
cy.log(`Set window.prompt to "${value}"`).then(() => {
cy.removeAllListeners('window:before:load');
@ -22,20 +18,10 @@ export const setPromptValue = (value: string | null) => {
cy.wait(7000);
};
/**
* sets value of window.prompt and reloads page
* @param value
* @deprecated Use `cy.setPrompt(value, callBackFn)` instead
*/
// This is works as setPromptValue with no unnecessary waiting
export const setPromptWithCb = (value: string | null, cb: () => void) => {
const sandbox = Cypress.sinon.createSandbox();
cy.window()
.then(win => {
sandbox.stub(win, 'prompt').returns(value);
cb();
return null;
})
.then(() => {
sandbox.restore();
});
cy.window().then(win => {
cy.stub(win, 'prompt').returns(value);
cb();
});
};

View File

@ -1,3 +1,4 @@
import { setPromptWithCb } from '../../../helpers/common';
import { baseUrl } from '../../../helpers/dataHelpers';
const config = {
@ -7,7 +8,6 @@ const config = {
username: 'gql_test',
password: '',
};
const dbUrl = `postgres://${config.username}:${config.password}@${config.host}:${config.port}/${config.dbName}`;
export const openManageDatabases = () => {
@ -37,7 +37,9 @@ export const addsNewPostgresDatabaseWithUrl = () => {
cy.getBySel('idle-timeout').type('180');
cy.getBySel('retries').type('1');
cy.getBySel('connect-database-btn').click();
cy.checkNotification('Database added successfully!', { timeout: 10000 });
cy.get('.notification-success', { timeout: 10000 })
.should('be.visible')
.and('contain', 'Database added successfully!');
cy.url().should('eq', `${baseUrl}/data/manage`);
};
@ -55,7 +57,9 @@ export const addsNewPgDBWithConParams = () => {
}
cy.getBySel('database-name').type(config.dbName);
cy.getBySel('connect-database-btn').click();
cy.checkNotification('Database added successfully!', { timeout: 10000 });
cy.get('.notification-success', { timeout: 10000 })
.should('be.visible')
.and('contain', 'Database added successfully!');
cy.url().should('eq', `${baseUrl}/data/manage`);
};
@ -67,8 +71,9 @@ export const addsNewPgDBWithEnvVar = () => {
cy.getBySel('database-type').select('postgres');
cy.getBySel('database-url-env').type('HASURA_GRAPHQL_DATABASE_URL');
cy.getBySel('connect-database-btn').click();
cy.checkNotification('Database added successfully!', { timeout: 10000 });
cy.get('.notification-success', { timeout: 10000 })
.should('be.visible')
.and('contain', 'Database added successfully!');
cy.url().should('eq', `${baseUrl}/data/manage`);
};
@ -78,26 +83,37 @@ export const failDuplicateNameDb = () => {
cy.getBySel('database-display-name').type('testDB1');
cy.getBySel('database-url').type(dbUrl);
cy.getBySel('connect-database-btn').click();
cy.checkNotification('source with name "testDB1" already exists', {
timeout: 10000,
type: 'error',
});
cy.get('.notification-error')
.should('be.visible')
.and('contain', 'Add data source failed')
.and('contain', 'source with name "testDB1" already exists');
};
const deleteDB = (dbName: string) => {
cy.setPrompt(dbName, () => {
cy.getBySel(dbName).find('button').contains('Remove').click();
cy.checkNotification('Data source removed successfully!', {
timeout: 10000,
});
export const deleteTestDBWithUrl = () => {
cy.getBySel('sidebar-manage-database').click();
setPromptWithCb('testDB1', () => {
cy.getBySel('testDB1').find('button').contains('Remove').click();
cy.get('.notification-success')
.should('be.visible')
.and('contain', 'Data source removed successfully!');
cy.window().its('prompt').should('be.called');
});
};
export const deleteTestDBs = () => {
cy.getBySel('sidebar-manage-database').click();
const dbs = ['testDB1', 'testDB2', 'testDB3'];
dbs.forEach(db => {
deleteDB(db);
export const deleteTestDBWithConParams = () => {
setPromptWithCb('testDB2', () => {
cy.getBySel('testDB2').find('button').contains('Remove').click();
cy.get('.notification-success')
.should('be.visible')
.and('contain', 'Data source removed successfully!');
cy.window().its('prompt').should('be.called');
});
};
export const deleteTestDDWithEnvVar = () => {
setPromptWithCb('testDB3', () => {
cy.getBySel('testDB3').find('button').contains('Remove').click();
cy.get('.notification-success')
.should('be.visible')
.and('contain', 'Data source removed successfully!');
cy.window().its('prompt').should('be.called');
});
};

View File

@ -9,7 +9,9 @@ import {
failDuplicateNameDb,
addsNewPgDBWithConParams,
addsNewPgDBWithEnvVar,
deleteTestDBs,
deleteTestDBWithUrl,
deleteTestDBWithConParams,
deleteTestDDWithEnvVar,
} from './spec';
import { testMode } from '../../../helpers/common';
@ -40,7 +42,15 @@ export const runManageDatabaseTests = () => {
addsNewPgDBWithEnvVar
);
it('Fails to connect db with duplicate name', failDuplicateNameDb);
it('Successfully delete all test DBs', deleteTestDBs);
it('Successfully deletes test DB added with URL', deleteTestDBWithUrl);
it(
'Successfully deletes test DB added with connection params',
deleteTestDBWithConParams
);
it(
'Successfully deletes test DB added with env variable',
deleteTestDDWithEnvVar
);
});
};

View File

@ -1,29 +1,37 @@
import { baseUrl, tableColumnTypeSelector } from '../../../helpers/dataHelpers';
import {
baseUrl,
getElementFromAlias,
tableColumnTypeSelector,
getIndexRoute,
} from '../../../helpers/dataHelpers';
import {
setMetaData,
validateCT,
validateColumn,
ResultType,
TableFields,
} from '../../validators/validators';
import { setPromptValue } from '../../../helpers/common';
const delRel = (table: string, relname: string) => {
cy.getBySel(table).click();
cy.getBySel('table-relationships').click();
cy.getBySel(`relationship-toggle-editor-${relname}`).click();
cy.getBySel(`relationship-remove-${relname}`).click();
cy.get(getElementFromAlias(table)).click();
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias(`relationship-toggle-editor-${relname}`)).click();
cy.get(getElementFromAlias(`relationship-remove-${relname}`)).click();
cy.on('window:alert', str => {
expect(str === 'Are you sure?').to.be.true;
});
cy.wait(1000);
return cy.checkNotification('Relationship deleted', { timeout: 10000 });
cy.wait(15000);
};
export const createTable = (name: string, fields: TableFields) => {
cy.getBySel('public_schema').click();
cy.getBySel('data-create-table').click();
// Click on the "Add table" button and input the table name
cy.visit(getIndexRoute());
cy.wait(5000);
cy.get(getElementFromAlias('data-create-table')).click();
cy.url().should('eq', `${baseUrl}/data/default/schema/public/table/add`);
cy.getBySel('tableName').type(`${name}_table_rt`);
cy.get(getElementFromAlias('tableName')).type(`${name}_table_rt`);
// Enter column info
let i = 0;
@ -31,43 +39,53 @@ export const createTable = (name: string, fields: TableFields) => {
for (const key in fields) {
// eslint-disable-next-line no-prototype-builtins
if (fields.hasOwnProperty(key)) {
cy.getBySel(`column-${i}`).type(key);
cy.get(getElementFromAlias(`column-${i}`)).type(key);
tableColumnTypeSelector(`col-type-${i}`);
cy.getBySel(`data_test_column_type_value_${fields[key]}`).first().click();
cy.get(getElementFromAlias(`data_test_column_type_value_${fields[key]}`))
.first()
.click();
i += 1;
}
}
// Select primary key
cy.getBySel('primary-key-select-0').select('id');
cy.get(getElementFromAlias('primary-key-select-0')).select('id');
if (name === 'article') {
cy.getBySel('add-table-edit-fk-0').click();
cy.getBySel('foreign-key-ref-table-0').select('author_table_rt');
cy.getBySel('foreign-key-0-lcol-0').select('3');
cy.getBySel('foreign-key-0-rcol-0').select('id');
cy.getBySel('foreign-key-0-onUpdate-cascade').check();
cy.getBySel('foreign-key-0-onDelete-cascade').check();
cy.get(getElementFromAlias('add-table-edit-fk-0')).click();
cy.get(getElementFromAlias('foreign-key-ref-table-0')).select(
'author_table_rt'
);
cy.get(getElementFromAlias('foreign-key-0-lcol-0')).select('3');
cy.get(getElementFromAlias('foreign-key-0-rcol-0')).select('id');
cy.get(getElementFromAlias('foreign-key-0-onUpdate-cascade')).check();
cy.get(getElementFromAlias('foreign-key-0-onDelete-cascade')).check();
} else if (name === 'comment') {
cy.getBySel('add-table-edit-fk-0').click();
cy.getBySel('foreign-key-ref-table-0').select('author_table_rt');
cy.getBySel('foreign-key-0-lcol-0').select('1');
cy.getBySel('foreign-key-0-rcol-0').select('id');
cy.getBySel('foreign-key-0-onUpdate-cascade').check();
cy.getBySel('foreign-key-0-onDelete-cascade').check();
cy.getBySel('add-table-edit-fk-1').click();
cy.getBySel('foreign-key-ref-table-1').select('article_table_rt');
cy.getBySel('foreign-key-1-lcol-0').select('2');
cy.getBySel('foreign-key-1-rcol-0').select('id');
cy.getBySel('foreign-key-1-onUpdate-cascade').check();
cy.getBySel('foreign-key-1-onDelete-cascade').check();
cy.get(getElementFromAlias('add-table-edit-fk-0')).click();
cy.get(getElementFromAlias('foreign-key-ref-table-0')).select(
'author_table_rt'
);
cy.get(getElementFromAlias('foreign-key-0-lcol-0')).select('1');
cy.get(getElementFromAlias('foreign-key-0-rcol-0')).select('id');
cy.get(getElementFromAlias('foreign-key-0-onUpdate-cascade')).check();
cy.get(getElementFromAlias('foreign-key-0-onDelete-cascade')).check();
cy.get(getElementFromAlias('add-table-edit-fk-1')).click();
cy.get(getElementFromAlias('foreign-key-ref-table-1')).select(
'article_table_rt'
);
cy.get(getElementFromAlias('foreign-key-1-lcol-0')).select('2');
cy.get(getElementFromAlias('foreign-key-1-rcol-0')).select('id');
cy.get(getElementFromAlias('foreign-key-1-onUpdate-cascade')).check();
cy.get(getElementFromAlias('foreign-key-1-onDelete-cascade')).check();
}
cy.getBySel('table-create').click();
cy.url({ timeout: 15000 }).should(
cy.get(getElementFromAlias('table-create')).click();
cy.wait(15000);
cy.url().should(
'eq',
`${baseUrl}/data/default/schema/public/tables/${name}_table_rt/modify`
);
validateCT(`${name}_table_rt`, ResultType.SUCCESS);
};
@ -89,16 +107,13 @@ export const passRTCreateTables = () => {
};
export const Deletetable = (name: string) => {
cy.getBySel(name).click();
cy.getBySel('table-modify').click();
cy.setPrompt(name, () => {
cy.getBySel('delete-table').click();
cy.window().its('prompt').should('be.called');
cy.wait(1000);
cy.checkNotification('Table deleted', { timeout: 10000 }).then(() => {
validateCT(name, ResultType.FAILURE);
});
});
cy.get(getElementFromAlias(name)).click();
cy.get(getElementFromAlias('table-modify')).click();
setPromptValue(name);
cy.get(getElementFromAlias('delete-table')).click();
cy.window().its('prompt').should('be.called');
cy.wait(15000);
validateCT(name, ResultType.FAILURE);
};
export const passRTDeleteTables = () => {
@ -108,20 +123,24 @@ export const passRTDeleteTables = () => {
};
export const passRTAddManualObjRel = () => {
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships', { timeout: 4000 }).click();
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships').click();
cy.getBySel('create-edit-manual-rel').click();
cy.getBySel('manual-relationship-type').select('object');
cy.get(getElementFromAlias('article_table_rt')).click();
cy.get(getElementFromAlias('table-relationships')).click();
cy.wait(4000);
cy.get(getElementFromAlias('article_table_rt')).click();
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias('create-edit-manual-rel')).click();
cy.get(getElementFromAlias('manual-relationship-type')).select('object');
cy.get("input[placeholder='Enter relationship name']").type('author');
cy.getBySel('manual-relationship-ref-schema').select('public');
cy.getBySel('manual-relationship-ref-table').select('author_table_rt');
cy.getBySel('manual-relationship-lcol-0').select('author_id');
cy.getBySel('manual-relationship-rcol-0').select('id');
cy.getBySel('create-manual-rel-save').click();
cy.wait(1000);
cy.checkNotification('Relationship created', { timeout: 10000 });
cy.get(getElementFromAlias('manual-relationship-ref-schema')).select(
'public'
);
cy.get(getElementFromAlias('manual-relationship-ref-table')).select(
'author_table_rt'
);
cy.get(getElementFromAlias('manual-relationship-lcol-0')).select('author_id');
cy.get(getElementFromAlias('manual-relationship-rcol-0')).select('id');
cy.get(getElementFromAlias('create-manual-rel-save')).click();
cy.wait(15000);
validateColumn(
'article_table_rt',
['title', { name: 'author', columns: ['name'] }],
@ -130,63 +149,65 @@ export const passRTAddManualObjRel = () => {
};
export const passRTAddManualArrayRel = () => {
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships', { timeout: 4000 }).click();
cy.getBySel('create-edit-manual-rel').click();
cy.getBySel('manual-relationship-type').select('array');
cy.get(getElementFromAlias('article_table_rt')).click();
cy.wait(4000);
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias('create-edit-manual-rel')).click();
cy.get(getElementFromAlias('manual-relationship-type')).select('array');
cy.get("input[placeholder='Enter relationship name']").type('comments');
cy.getBySel('manual-relationship-ref-schema').select('public');
cy.getBySel('manual-relationship-ref-table').select('comment_table_rt');
cy.getBySel('manual-relationship-lcol-0').select('id');
cy.getBySel('manual-relationship-rcol-0').select('article_id');
cy.getBySel('create-manual-rel-save').click();
cy.wait(1000);
cy.checkNotification('Relationship created', { timeout: 10000 }).then(() => {
validateColumn(
'article_table_rt',
['title', { name: 'comments', columns: ['comment'] }],
ResultType.SUCCESS
);
});
cy.get(getElementFromAlias('manual-relationship-ref-schema')).select(
'public'
);
cy.get(getElementFromAlias('manual-relationship-ref-table')).select(
'comment_table_rt'
);
cy.get(getElementFromAlias('manual-relationship-lcol-0')).select('id');
cy.get(getElementFromAlias('manual-relationship-rcol-0')).select(
'article_id'
);
cy.get(getElementFromAlias('create-manual-rel-save')).click();
cy.wait(15000);
validateColumn(
'article_table_rt',
['title', { name: 'comments', columns: ['comment'] }],
ResultType.SUCCESS
);
};
export const passRTDeleteRelationships = () => {
delRel('article_table_rt', 'author').then(() => {
validateColumn(
'article_table_rt',
['title', { name: 'author', columns: ['name'] }],
ResultType.FAILURE
);
});
delRel('article_table_rt', 'comments').then(() => {
validateColumn(
'article_table_rt',
['title', { name: 'comments', columns: ['comment'] }],
ResultType.FAILURE
);
});
delRel('article_table_rt', 'author');
validateColumn(
'article_table_rt',
['title', { name: 'author', columns: ['name'] }],
ResultType.FAILURE
);
delRel('article_table_rt', 'comments');
validateColumn(
'article_table_rt',
['title', { name: 'comments', columns: ['comment'] }],
ResultType.FAILURE
);
};
export const passRTAddSuggestedRel = () => {
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships').click();
cy.getBySel('obj-rel-add-0').click();
cy.getBySel('suggested-rel-name').clear().type('author');
cy.getBySel('obj-rel-save-0').click();
cy.wait(1000);
cy.checkNotification('Relationship created', { timeout: 10000 });
cy.get(getElementFromAlias('article_table_rt')).click();
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias('obj-rel-add-0')).click();
cy.get(getElementFromAlias('suggested-rel-name')).clear().type('author');
cy.get(getElementFromAlias('obj-rel-save-0')).click();
cy.wait(5000);
validateColumn(
'article_table_rt',
['title', { name: 'author', columns: ['name'] }],
ResultType.SUCCESS
);
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships', { timeout: 5000 }).click();
cy.getBySel('arr-rel-add-0').click();
cy.getBySel('suggested-rel-name').clear().type('comments');
cy.getBySel('arr-rel-save-0').click({ force: true });
cy.wait(1000);
cy.checkNotification('Relationship created', { timeout: 10000 });
cy.get(getElementFromAlias('article_table_rt')).click();
cy.wait(5000);
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias('arr-rel-add-0')).click();
cy.get(getElementFromAlias('suggested-rel-name')).clear().type('comments');
cy.get(getElementFromAlias('arr-rel-save-0')).click();
cy.wait(5000);
validateColumn(
'article_table_rt',
['title', { name: 'comments', columns: ['comment'] }],
@ -195,25 +216,25 @@ export const passRTAddSuggestedRel = () => {
};
export const passRTRenameRelationship = () => {
cy.getBySel('relationship-toggle-editor-comments').click();
cy.getBySel('relationship-name-input-comments')
cy.get(getElementFromAlias('relationship-toggle-editor-comments')).click();
cy.get(getElementFromAlias('relationship-name-input-comments'))
.clear()
.type('comments_renamed');
cy.getBySel('relationship-save-comments').click();
cy.wait(1000);
cy.checkNotification('Relationship renamed', { timeout: 10000 });
cy.get(getElementFromAlias('relationship-save-comments')).click();
cy.wait(5000);
validateColumn(
'article_table_rt',
['title', { name: 'comments_renamed', columns: ['comment'] }],
ResultType.SUCCESS
);
cy.getBySel('relationship-toggle-editor-comments_renamed').click();
cy.getBySel('relationship-name-input-comments_renamed')
cy.get(
getElementFromAlias('relationship-toggle-editor-comments_renamed')
).click();
cy.get(getElementFromAlias('relationship-name-input-comments_renamed'))
.clear()
.type('comments');
cy.getBySel('relationship-save-comments_renamed').click();
cy.wait(1000);
cy.checkNotification('Relationship renamed', { timeout: 10000 });
cy.get(getElementFromAlias('relationship-save-comments_renamed')).click();
cy.wait(5000);
validateColumn(
'article_table_rt',
['title', { name: 'comments', columns: ['comment'] }],
@ -222,46 +243,41 @@ export const passRTRenameRelationship = () => {
};
export const failRTAddSuggestedRel = () => {
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships').click();
cy.getBySel('obj-rel-add-0').click();
cy.getBySel('suggested-rel-name').clear();
cy.getBySel('obj-rel-save-0').click();
cy.checkNotification('Relationship name cannot be empty', {
timeout: 10000,
type: 'error',
});
cy.getBySel('suggested-rel-name').type(`${123123}`);
cy.get(getElementFromAlias('article_table_rt')).click();
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias('obj-rel-add-0')).click();
cy.get(getElementFromAlias('suggested-rel-name')).clear();
cy.get(getElementFromAlias('obj-rel-save-0')).click();
cy.wait(15000);
cy.get(getElementFromAlias('suggested-rel-name')).clear().type(`${123123}`);
cy.get('button').contains('Save').click();
cy.checkNotification('Relationship name cannot contain special characters', {
timeout: 10000,
type: 'error',
});
cy.wait(15000);
validateColumn(
'article_table_rt',
['title', { name: 'author', columns: ['name'] }],
ResultType.FAILURE
);
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships').click();
cy.getBySel('obj-rel-add-0').click();
cy.getBySel('suggested-rel-name').clear().type('author');
cy.getBySel('obj-rel-save-0').click();
cy.wait(1000);
cy.checkNotification('Relationship created', { timeout: 10000 }).then(() => {
validateColumn(
'article_table_rt',
['title', { name: 'author', columns: ['name'] }],
ResultType.SUCCESS
);
});
cy.getBySel('article_table_rt').click();
cy.getBySel('table-relationships').click();
cy.getBySel('arr-rel-add-0').click();
cy.getBySel('suggested-rel-name').clear().type('comments');
cy.getBySel('arr-rel-save-0').click();
cy.wait(1000);
cy.checkNotification('Relationship created', { timeout: 10000 });
cy.get(getElementFromAlias('article_table_rt')).click();
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias('obj-rel-add-0')).click();
cy.get(getElementFromAlias('suggested-rel-name')).clear().type('author');
cy.get(getElementFromAlias('obj-rel-save-0')).click();
cy.wait(15000);
validateColumn(
'article_table_rt',
['title', { name: 'author', columns: ['name'] }],
ResultType.SUCCESS
);
cy.get(getElementFromAlias('article_table_rt')).click();
cy.get(getElementFromAlias('table-relationships')).click();
cy.get(getElementFromAlias('arr-rel-add-0')).click();
cy.get(getElementFromAlias('suggested-rel-name')).clear().type('comments');
cy.get(getElementFromAlias('arr-rel-save-0')).click();
cy.wait(15000);
delRel('article_table_rt', 'author');
delRel('article_table_rt', 'comments');
};
export const setValidationMetaData = () => {
setMetaData();
};

View File

@ -15,7 +15,9 @@ import { getIndexRoute } from '../../../helpers/dataHelpers';
const setup = () => {
describe('Check Data Tab', () => {
it('Clicking on Data tab opens the correct route', () => {
cy.visit(getIndexRoute()).then(setMetaData);
cy.visit(getIndexRoute());
cy.wait(7000);
setMetaData();
});
});
};

View File

@ -24,40 +24,10 @@
// -- This is will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
Cypress.Commands.add('getBySel', (selector, ...args) =>
cy.get(`[data-test=${selector}]`, ...args)
);
Cypress.Commands.add('getBySelLike', (selector, ...args) =>
cy.get(`[data-test*=${selector}]`, ...args)
);
interface NotificationOptions {
timeout?: number;
type?: 'error' | 'success' | 'info';
}
Cypress.Commands.add(
'checkNotification',
(content: string, options?: NotificationOptions) => {
const type = options?.type ?? 'success';
const timeout = options?.timeout ?? 0;
cy.get(`.notification-${type}`, timeout ? { timeout } : {})
.contains(content)
.should('be.visible')
.click({ multiple: true, force: true });
}
);
Cypress.Commands.add('setPrompt', (value: string, callback = () => {}) => {
const sandbox = Cypress.sinon.createSandbox();
cy.window()
.then(win => {
sandbox.stub(win, 'prompt').returns(value);
callback();
return null;
})
.then(() => {
sandbox.restore();
});
Cypress.Commands.add('getBySel', (selector, ...args) => {
return cy.get(`[data-test=${selector}]`, ...args);
});
Cypress.Commands.add('getBySelLike', (selector, ...args) => {
return cy.get(`[data-test*=${selector}]`, ...args);
});

View File

@ -2,54 +2,16 @@
declare namespace Cypress {
interface Chainable<Subject> {
/**
* Custom command to get one or more DOM elements by data-test attribute.
* Custom command to select DOM element by data-test attribute.
* <button data-test="greeting"> </button>
* @example
* cy.getBySel('greeting')
* @example cy.getBySel('greeting')
*/
getBySel(
selector: string,
options?: Partial<Loggable & Timeoutable & Withinable>
): Chainable<Element>;
getBySel(value: string): Chainable<Element>;
/**
* Custom command to get one or more DOM elements by selector by data-test* attribute.
* Custom command to select DOM element by data-test* attribute.
* <button data-test="save_me_oh_God"> </button>
* @example
* cy.getBySelLike('save_me')
* @example cy.getBySelLike('save_me')
*/
getBySelLike(
selector: string,
options?: Partial<Loggable & Timeoutable & Withinable>
): Chainable<Element>;
/**
* Custom command to check if notification with title was displayed.
* @example
* cy.checkNotification('Relationship renamed', {timeout: 5000}); // type defaults to success types
* cy.checkNotification('Relationship renamed'); // options are optional
* cy.checkNotification('Error adding relationship!', { timeout: 10000, type: 'error',});
*/
checkNotification(
content: string,
options?: {
type?: 'error' | 'success' | 'info';
timeout?: number;
}
): Cypress.Chainable<JQuery<HTMLElement>>;
/**
* Custom command to stun wwindow.prompt.
* @param value - Value to fill the prompt with
* @param callback - a callback function with subsequent assertions
* @example
* cy.setPrompt('users-table', () => {
* cy.getBySel('delete-table').click();
* cy.window().its('prompt').should('be.called');
* cy.checkNotification('Relationship renamed', {timeout: 5000});
* validateCT('users-table', ResultType.FAILURE);
* });
*/
setPrompt(value: string, callback?: () => void): void;
getBySelLike(value: string): Chainable<Element>;
}
}

View File

@ -140,7 +140,6 @@ const SchemaItemsView: React.FC<SchemaItemsViewProps> = ({
setActiveSchema,
pathname,
databaseLoading,
...props
}) => {
const [isOpen, setIsOpen] = useState(false);
const showActiveStyle =
@ -162,7 +161,6 @@ const SchemaItemsView: React.FC<SchemaItemsViewProps> = ({
role="button"
className={styles.padd_bottom_small}
style={showActiveStyle ? activeStyle : {}}
{...props}
>
<span
className={
@ -264,7 +262,6 @@ const DatabaseItemsView: React.FC<DatabaseItemsViewProps> = ({
setActiveSchema={handleSelectSchema}
key={key}
pathname={pathname}
data-test={`${child.name}_schema`}
databaseLoading={databaseLoading}
/>
</li>