mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-09-20 15:09:02 +03:00
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:
parent
27aa5b4781
commit
8c21ca5d21
@ -14,6 +14,5 @@
|
||||
"allowForLoopAfterthoughts": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"ignorePatterns": ["**/*.d.ts"]
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
});
|
||||
};
|
||||
|
@ -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');
|
||||
});
|
||||
};
|
||||
|
@ -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
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -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();
|
||||
};
|
||||
|
@ -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();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
@ -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);
|
||||
});
|
||||
|
50
console/cypress/support/index.d.ts
vendored
50
console/cypress/support/index.d.ts
vendored
@ -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>;
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user