diff --git a/console/cypress/integration/api-explorer/graphql/spec.js b/console/cypress/integration/api-explorer/graphql/spec.js index 5e58a3fdd6872..e73146c36d7c0 100644 --- a/console/cypress/integration/api-explorer/graphql/spec.js +++ b/console/cypress/integration/api-explorer/graphql/spec.js @@ -8,3 +8,11 @@ export const openAPIExplorer = () => { cy.get(getElementFromAlias('api-explorer')).click(); cy.wait(3000); }; + +export const checkExecuteQueryButton = () => { + cy.get('.execute-button'); + cy.get('.cm-def').contains('errors'); + cy.get('textarea') + .first() + .type('{enter}{uparrow}query', { force: true }); +}; diff --git a/console/cypress/integration/api-explorer/graphql/test.js b/console/cypress/integration/api-explorer/graphql/test.js index c9218ee20e8b1..b2b59c2699821 100644 --- a/console/cypress/integration/api-explorer/graphql/test.js +++ b/console/cypress/integration/api-explorer/graphql/test.js @@ -1,7 +1,7 @@ /* eslint no-unused-vars: 0 */ /* eslint import/prefer-default-export: 0 */ -import { openAPIExplorer } from './spec'; +import { openAPIExplorer, checkExecuteQueryButton } from './spec'; import { setMetaData } from '../../validators/validators'; import { testMode } from '../../../helpers/common'; @@ -21,6 +21,7 @@ const setup = () => { export const runApiExplorerTests = () => { describe('API Explorer', () => { it('Open API Explorer', openAPIExplorer); + // it('Run Query button works', checkExecuteQueryButton); }); }; diff --git a/console/cypress/integration/data/relationships/spec.js b/console/cypress/integration/data/relationships/spec.js index 8ca8807672f1d..7b2b6cae88a48 100644 --- a/console/cypress/integration/data/relationships/spec.js +++ b/console/cypress/integration/data/relationships/spec.js @@ -6,19 +6,38 @@ import { validateColumn, } from '../../validators/validators'; -export const Createtable = (name, dict) => { +const delRel = (table, relname) => { + cy.get(getElementFromAlias(table)).click(); + cy.get(getElementFromAlias('table-relationships')).click(); + cy.get(getElementFromAlias(`remove-button-${relname}`)) + .first() + .click(); + cy.on('window:alert', str => { + expect(str === 'Are you sure?').to.be.true; + }); + cy.wait(15000); +}; + +export const Createtable = (name, fields) => { + // Click on the "Add table" button and input the table name + cy.get(getElementFromAlias('sidebar-add-table')).click(); cy.url().should('eq', `${baseUrl}/data/schema/public/table/add`); cy.get(getElementFromAlias('tableName')).type(`${name}_table_rt`); - const keys = Object.keys(dict).map(k => k); - const values = Object.keys(dict).map(k => dict[k]); - for (let i = 0; i < keys.length; i += 1) { - cy.get(getElementFromAlias(`column-${i}`)).type(keys[i]); - cy.get(getElementFromAlias(`col-type-${i}`)).select(values[i]); + + // Enter column info + let i = 0; + for (const key in fields) { + if (fields.hasOwnProperty(key)) { + cy.get(getElementFromAlias(`column-${i}`)).type(key); + cy.get(getElementFromAlias(`col-type-${i}`)).select(fields[key]); + i++; + } } + // Select primary key cy.get(getElementFromAlias('primary-key-select-0')).select('id'); cy.get(getElementFromAlias('table-create')).click(); - cy.wait(10000); + cy.wait(15000); cy.url().should( 'eq', `${baseUrl}/data/schema/public/tables/${name}_table_rt/modify` @@ -28,9 +47,7 @@ export const Createtable = (name, dict) => { }; export const passRTCreateTables = () => { - cy.get(getElementFromAlias('data-create-table')).click(); Createtable('author', { id: 'Integer', name: 'Text' }); - cy.get(getElementFromAlias('sidebar-add-table')).click(); Createtable('article', { id: 'Integer', title: 'Text', @@ -38,7 +55,6 @@ export const passRTCreateTables = () => { author_id: 'Integer', rating: 'Integer', }); - cy.get(getElementFromAlias('sidebar-add-table')).click(); Createtable('comment', { id: 'Integer', user_id: 'Integer', @@ -59,7 +75,7 @@ export const Deletetable = name => { cy.on('window:alert', str => { expect(str === 'Are you sure?').to.be.true; }); - cy.wait(7000); + cy.wait(15000); validateCT(name, 'failure'); }; @@ -69,141 +85,19 @@ export const passRTDeleteTables = () => { Deletetable('author_table_rt'); }; -export const passRTAddDataarticle = data => { - cy.get(getElementFromAlias('article_table_rt')).click(); - cy.get(getElementFromAlias('table-insert-rows')).click(); - cy.get('label') - .contains('id') - .next() - .find('input') - .last() - .type(data[0]); - cy.get('label') - .contains('title') - .next() - .find('input') - .last() - .type(data[1]); - cy.get('label') - .contains('Content') - .next() - .find('input') - .last() - .type(data[2]); - cy.get('label') - .contains('author_id') - .next() - .find('input') - .last() - .type(data[3]); - cy.get('label') - .contains('rating') - .next() - .find('input') - .last() - .type(data[4]); - cy.get('button') - .contains('Save') - .click(); - cy.wait(7000); -}; - -export const passRTAddDataauthor = data => { - cy.get(getElementFromAlias('author_table_rt')).click(); - cy.get(getElementFromAlias('table-insert-rows')).click(); - cy.get('label') - .contains('id') - .next() - .find('input') - .last() - .type(data[0]); - cy.get('label') - .contains('name') - .next() - .find('input') - .last() - .type(data[1]); - cy.get(getElementFromAlias('insert-save-button')).click(); - cy.wait(7000); -}; - -export const passRTAddDatacomment = data => { - cy.get(getElementFromAlias('comment_table_rt')).click(); - cy.get(getElementFromAlias('table-insert-rows')).click(); - cy.get('label') - .contains('id') - .next() - .find('input') - .last() - .type(data[0]); - cy.get('label') - .contains('user_id') - .next() - .find('input') - .last() - .type(data[1]); - cy.get('label') - .contains('article_id') - .next() - .find('input') - .last() - .type(data[2]); - cy.get('label') - .contains('comment') - .next() - .find('input') - .last() - .type(data[3]); - cy.get(getElementFromAlias('insert-save-button')).click(); - cy.wait(7000); -}; - -export const passRTAddData = () => { - let data; - data = [1, 'A', 'Sontent', 1, 4]; - passRTAddDataarticle(data); - data = [2, 'B', 'Sontenta', 2, 4]; - passRTAddDataarticle(data); - data = [3, 'C', 'Sontentb', 1, 4]; - passRTAddDataarticle(data); - data = [1, 'A']; - passRTAddDataauthor(data); - data = [2, 'B']; - passRTAddDataauthor(data); - data = [1, 1, 1, 'new comment']; - passRTAddDatacomment(data); - data = [2, 2, 2, 'new comment']; - passRTAddDatacomment(data); - data = [3, 1, 2, 'new comment']; - passRTAddDatacomment(data); -}; - export const passRTAddManualObjRel = () => { cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-relationships')).click(); cy.get(getElementFromAlias('add-manual-relationship')).click(); - cy.get('select') - .first() - .select('Object Relationship'); - cy.get("input[placeholder='Enter relationship name']").type('author'); - cy.get('select') - .find('option') - .contains('Current Column') - .parent() - .select('author_id'); - cy.get('select') - .find('option') - .contains('Remote Table') - .parent() - .select('author_table_rt'); - cy.get('select') - .last() - .select('id'); + cy.get(getElementFromAlias('rel-type')).select('Object Relationship'); + cy.get(getElementFromAlias('rel-name')).type('author'); + cy.get(getElementFromAlias('current-col')).select('author_id'); + cy.get(getElementFromAlias('remote-table')).select('author_table_rt'); + cy.get(getElementFromAlias('remote-table-col')).select('id'); cy.get(getElementFromAlias('table-add-manual-relationship')) - .contains('Add') .last() .click(); - cy.wait(7000); + cy.wait(15000); validateColumn( 'article_table_rt', ['title', { name: 'author', columns: ['name'] }], @@ -215,28 +109,16 @@ export const passRTAddManualArrayRel = () => { cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-relationships')).click(); cy.get(getElementFromAlias('add-manual-relationship')).click(); - cy.get('select') - .first() - .select('Array Relationship'); - cy.get("input[placeholder='Enter relationship name']").type('comments'); - cy.get('select') - .find('option') - .contains('Current Column') - .parent() - .select('id'); - cy.get('select') - .find('option') - .contains('Remote Table') - .parent() - .select('comment_table_rt'); - cy.get('select') - .last() - .select('article_id'); + cy.get(getElementFromAlias('rel-type')).select('Array Relationship'); + cy.get(getElementFromAlias('rel-name')).type('comments'); + cy.get(getElementFromAlias('current-col')).select('id'); + cy.get(getElementFromAlias('remote-table')).select('comment_table_rt'); + cy.get(getElementFromAlias('remote-table-col')).select('article_id'); cy.get(getElementFromAlias('table-add-manual-relationship')) .contains('Add') .last() .click(); - cy.wait(7000); + cy.wait(15000); validateColumn( 'article_table_rt', ['title', { name: 'comments', columns: ['comment'] }], @@ -247,68 +129,38 @@ export const passRTAddManualArrayRel = () => { export const passRTAddForeignKey = () => { cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-modify')).click(); - cy.get('b') - .contains('author_id') - .prev() - .click(); - cy.get('[data-test=foreign-key-checkbox]').check(); - cy.get('select') - .find('option') - .contains('Reference table') - .parent() - .select('author_table_rt'); - cy.get('select') - .find('option') - .contains('Reference column') - .parent() - .select('id'); + cy.get(getElementFromAlias('edit-author_id')).click(); + cy.get(getElementFromAlias('foreign-key-checkbox')).check(); + cy.get(getElementFromAlias('ref-table')).select('author_table_rt'); + cy.get(getElementFromAlias('ref-col')).select('id'); cy.get(getElementFromAlias('save-button')).click(); - cy.wait(7000); + cy.wait(15000); cy.get(getElementFromAlias('comment_table_rt')).click(); cy.get(getElementFromAlias('table-modify')).click(); - cy.get('b') - .contains('article_id') - .prev() - .click(); - cy.get('[data-test=foreign-key-checkbox]').check(); - cy.get('select') - .find('option') - .contains('Reference table') - .parent() - .select('article_table_rt'); - cy.get('select') - .find('option') - .contains('Reference column') - .parent() - .select('id'); + cy.get(getElementFromAlias('edit-article_id')).click(); + cy.get(getElementFromAlias('foreign-key-checkbox')).check(); + cy.get(getElementFromAlias('ref-table')).select('article_table_rt'); + cy.get(getElementFromAlias('ref-col')).select('id'); cy.get(getElementFromAlias('save-button')).click(); - cy.wait(7000); + cy.wait(15000); +}; + +export const checkAddManualRelationshipsButton = () => { + cy.get(getElementFromAlias('add-rel-mod')).click(); + cy.url().should( + 'eq', + `${baseUrl}/data/schema/public/tables/comment_table_rt/relationships` + ); }; export const passRTDeleteRelationships = () => { - cy.get(getElementFromAlias('article_table_rt')).click(); - cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('remove-button')) - .first() - .click(); - cy.on('window:alert', str => { - expect(str === 'Are you sure?').to.be.true; - }); - cy.wait(7000); + delRel('article_table_rt', 'author'); validateColumn( 'article_table_rt', ['title', { name: 'author', columns: ['name'] }], 'failure' ); - cy.get(getElementFromAlias('article_table_rt')).click(); - cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('remove-button')) - .first() - .click(); - cy.on('window:alert', str => { - expect(str === 'Are you sure?').to.be.true; - }); - cy.wait(7000); + delRel('article_table_rt', 'comments'); validateColumn( 'article_table_rt', ['title', { name: 'comments', columns: ['comment'] }], @@ -319,15 +171,10 @@ export const passRTDeleteRelationships = () => { export const passRTAddSuggestedRel = () => { cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('obj-rel-add-0')) - .contains('Add') - .last() - .click(); - cy.get('input') - .last() - .type('author'); + cy.get(getElementFromAlias('obj-rel-add-0')).click(); + cy.get(getElementFromAlias('suggested-rel-name')).type('author'); cy.get(getElementFromAlias('obj-rel-save-0')).click(); - cy.wait(7000); + cy.wait(15000); validateColumn( 'article_table_rt', ['title', { name: 'author', columns: ['name'] }], @@ -335,15 +182,10 @@ export const passRTAddSuggestedRel = () => { ); cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('arr-rel-add-0')) - .contains('Add') - .last() - .click(); - cy.get('input') - .last() - .type('comments'); + cy.get(getElementFromAlias('arr-rel-add-0')).click(); + cy.get(getElementFromAlias('suggested-rel-name')).type('comments'); cy.get(getElementFromAlias('arr-rel-save-0')).click(); - cy.wait(7000); + cy.wait(15000); validateColumn( 'article_table_rt', ['title', { name: 'comments', columns: ['comment'] }], @@ -354,21 +196,16 @@ export const passRTAddSuggestedRel = () => { export const failRTAddSuggestedRel = () => { cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('obj-rel-add-0')) - .contains('Add') - .last() - .click(); + cy.get(getElementFromAlias('obj-rel-add-0')).click(); cy.get(getElementFromAlias('obj-rel-save-0')).click(); // cy.get('.notification-error'); - cy.wait(7000); - cy.get('input') - .last() - .type(123123); + cy.wait(15000); + cy.get(getElementFromAlias('suggested-rel-name')).type(123123); cy.get('button') .contains('Save') .click(); // cy.get('.notification-error'); - cy.wait(10000); + cy.wait(15000); validateColumn( 'article_table_rt', ['title', { name: 'author', columns: ['name'] }], @@ -376,14 +213,10 @@ export const failRTAddSuggestedRel = () => { ); cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('obj-rel-add-0')) - .last() - .click(); - cy.get('input') - .last() - .type('author'); + cy.get(getElementFromAlias('obj-rel-add-0')).click(); + cy.get(getElementFromAlias('suggested-rel-name')).type('author'); cy.get(getElementFromAlias('obj-rel-save-0')).click(); - cy.wait(10000); + cy.wait(15000); validateColumn( 'article_table_rt', ['title', { name: 'author', columns: ['name'] }], @@ -391,28 +224,13 @@ export const failRTAddSuggestedRel = () => { ); cy.get(getElementFromAlias('article_table_rt')).click(); cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('arr-rel-add-0')) - .contains('Add') - .last() - .click(); - cy.get('input') - .last() - .type('author'); - cy.get('button') - .contains('Save') - .click(); - cy.wait(7000); + cy.get(getElementFromAlias('arr-rel-add-0')).click(); + cy.get(getElementFromAlias('suggested-rel-name')).type('author'); + cy.get(getElementFromAlias('arr-rel-save-0')).click(); + cy.wait(15000); // cy.get('.notification-error'); - cy.wait(7000); - cy.get(getElementFromAlias('article_table_rt')).click(); - cy.get(getElementFromAlias('table-relationships')).click(); - cy.get(getElementFromAlias('remove-button')) - .first() - .click(); - cy.on('window:alert', str => { - expect(str === 'Are you sure?').to.be.true; - }); - cy.wait(7000); + cy.wait(15000); + delRel('article_table_rt', 'author'); }; export const setValidationMetaData = () => { diff --git a/console/cypress/integration/data/relationships/test.js b/console/cypress/integration/data/relationships/test.js index d5771ad1f4e38..c3a3dbfff5718 100644 --- a/console/cypress/integration/data/relationships/test.js +++ b/console/cypress/integration/data/relationships/test.js @@ -11,6 +11,7 @@ import { passRTDeleteRelationships, passRTAddSuggestedRel, failRTAddSuggestedRel, + checkAddManualRelationshipsButton, } from './spec'; import { testMode } from '../../../helpers/common'; import { setMetaData } from '../../validators/validators'; @@ -34,6 +35,10 @@ export const runRelationshipsTests = () => { it('Adding Manual Relationship Object', passRTAddManualObjRel); it('Adding Manual Relationship Array', passRTAddManualArrayRel); it('Adding a Foreign Key', passRTAddForeignKey); + it( + 'Check Add manual relationships button', + checkAddManualRelationshipsButton + ); it('Deleting the relationships', passRTDeleteRelationships); it('Adding Suggested Relationships Error', failRTAddSuggestedRel); it('Adding Suggested Relationships', passRTAddSuggestedRel); diff --git a/console/cypress/integration/data/views/spec.js b/console/cypress/integration/data/views/spec.js index 7f9acc6a31a5b..afbe8f45899b4 100644 --- a/console/cypress/integration/data/views/spec.js +++ b/console/cypress/integration/data/views/spec.js @@ -370,7 +370,7 @@ export const passVAddManualObjRel = () => { cy.wait(2000); cy.get(getElementFromAlias('table-relationships')).click(); cy.wait(2000); - cy.get(getElementFromAlias('data-rel-type')).select('object_rel'); + cy.get(getElementFromAlias('rel-type')).select('object_rel'); cy.get("input[placeholder='Enter relationship name']").type('author'); cy.get('select') .find('option') diff --git a/console/src/components/Services/Data/TableModify/ModifyTable.js b/console/src/components/Services/Data/TableModify/ModifyTable.js index 93aa775fc680e..8af3cd450dede 100644 --- a/console/src/components/Services/Data/TableModify/ModifyTable.js +++ b/console/src/components/Services/Data/TableModify/ModifyTable.js @@ -107,6 +107,7 @@ const ColumnEditor = ({ +Add relationship @@ -149,6 +150,7 @@ const ColumnEditor = ({ disabled={fkAdd.fkCheckBox === false} value={refTable} onChange={onFKRefTableChange} + data-test="ref-table" > Reference table @@ -166,6 +168,7 @@ const ColumnEditor = ({ disabled={fkAdd.fkCheckBox === false} value={rcol} onChange={onFKRefColumnChange} + data-test="ref-col" > Reference column diff --git a/console/src/components/Services/Data/TableRelationships/Relationships.js b/console/src/components/Services/Data/TableRelationships/Relationships.js index 134b70c7edbab..1db19af812f52 100644 --- a/console/src/components/Services/Data/TableRelationships/Relationships.js +++ b/console/src/components/Services/Data/TableRelationships/Relationships.js @@ -78,7 +78,7 @@ const relationshipView = ( Remove @@ -307,6 +307,7 @@ const addRelationshipCellView = ( className="input-sm form-control" value={selectedRelationshipName} onChange={onRelationshipNameChanged} + data-test="suggested-rel-name" />{' '} - + Select relationship type @@ -512,6 +517,7 @@ const AddManualRelationship = ({ onChange={onRelNameChange} className="form-control" placeholder="Enter relationship name" + data-test="rel-name" /> @@ -522,6 +528,7 @@ const AddManualRelationship = ({ Current Column {tableSchema.columns.map((c, i) => ( @@ -532,7 +539,11 @@ const AddManualRelationship = ({ :: - + Remote Table {allSchemas.map((s, i) => ( @@ -543,7 +554,11 @@ const AddManualRelationship = ({ -> - + Remote Table Column: {manualColumns.map((c, i) => ( diff --git a/console/src/components/Services/Data/TableRelationships/RelationshipsView.js b/console/src/components/Services/Data/TableRelationships/RelationshipsView.js index a9fb24a0c1a58..a5c01940dac5d 100644 --- a/console/src/components/Services/Data/TableRelationships/RelationshipsView.js +++ b/console/src/components/Services/Data/TableRelationships/RelationshipsView.js @@ -128,6 +128,7 @@ const AddRelationship = ({ data-test="data-rel-type" className="form-control" onChange={onRelTypeChange} + data-test="rel-type" > Select relationship type @@ -150,6 +151,7 @@ const AddRelationship = ({ onChange={onRelNameChange} className="form-control" placeholder="Enter relationship name" + data-test="rel-name" /> @@ -160,6 +162,7 @@ const AddRelationship = ({ Current Column {tableSchema.columns.map((c, i) => ( @@ -170,7 +173,11 @@ const AddRelationship = ({ :: - + Remote Table {allSchemas.map((s, i) => ( @@ -181,7 +188,11 @@ const AddRelationship = ({ -> - + Remote Table Column: {manualColumns.map((c, i) => (