diff --git a/qa-core/src/internal-api/fixtures/datasources.ts b/qa-core/src/internal-api/fixtures/datasources.ts index 4797f86631..c7f969a98c 100644 --- a/qa-core/src/internal-api/fixtures/datasources.ts +++ b/qa-core/src/internal-api/fixtures/datasources.ts @@ -1,4 +1,7 @@ +import { Datasource } from "@budibase/types" import { DatasourceRequest } from "../../types" +import { generator } from "../../shared" + // Add information about the data source to the fixtures file from 1password export const mongoDB = (): DatasourceRequest => { return { @@ -70,3 +73,50 @@ export const restAPI = (): DatasourceRequest => { fetchSchema: false, } } + +export const generateRelationshipForMySQL = ( + updatedDataSourceJson: any +): Datasource => { + const entities = updatedDataSourceJson!.datasource!.entities! + const datasourceId = updatedDataSourceJson!.datasource!._id! + const relationShipBody = { + ...updatedDataSourceJson.datasource, + entities: { + ...updatedDataSourceJson.datasource.entities, + employees: { + ...entities.employees, + schema: { + ...entities.employees.schema, + salaries: { + tableId: `${datasourceId}__salaries`, + name: "salaries", + relationshipType: "many-to-one", + fieldName: "salary", + type: "link", + main: true, + _id: generator.string(), + foreignKey: "emp_no", + }, + }, + }, + titles: { + ...entities.titles, + schema: { + ...entities.titles.schema, + employees: { + tableId: `${datasourceId}__employees`, + name: "employees", + relationshipType: "one-to-many", + fieldName: "emp_no", + type: "link", + main: true, + _id: generator.string(), + foreignKey: "emp_no", + }, + }, + }, + }, + } + + return relationShipBody +} diff --git a/qa-core/src/internal-api/tests/dataSources/mariaDB.integration.spec.ts b/qa-core/src/internal-api/tests/dataSources/mariaDB.integration.spec.ts index 3f479136f6..24c9cea94b 100644 --- a/qa-core/src/internal-api/tests/dataSources/mariaDB.integration.spec.ts +++ b/qa-core/src/internal-api/tests/dataSources/mariaDB.integration.spec.ts @@ -66,4 +66,41 @@ describe("Internal API - Data Sources: MariaDB", () => { updatedDataSourceJson.datasource._rev! ) }) + + it("Create a relationship", async () => { + // Create app + await config.createApp() + + // Get all integrations + await config.api.integrations.getAll() + + // Add data source + const [dataSourceResponse, dataSourceJson] = + await config.api.datasources.add(fixtures.datasources.mariaDB()) + + // Update data source + const newDataSourceInfo = { + ...dataSourceJson.datasource, + name: "MariaDB2", + } + const [updatedDataSourceResponse, updatedDataSourceJson] = + await config.api.datasources.update(newDataSourceInfo) + + // Query data source + const [queryResponse, queryJson] = await config.api.queries.preview( + fixtures.queries.mariaDB(updatedDataSourceJson.datasource._id!) + ) + + expect(queryJson.rows.length).toBeGreaterThan(9) + expect(queryJson.schemaFields).toEqual( + fixtures.queries.expectedSchemaFields.mariaDB + ) + + // Add relationship + const relationShipBody = fixtures.datasources.generateRelationshipForMySQL( + updatedDataSourceJson + ) + const [relationshipResponse, relationshipJson] = + await config.api.datasources.update(relationShipBody) + }) }) diff --git a/qa-core/src/internal-api/tests/dataSources/postgresSQL.integration.spec.ts b/qa-core/src/internal-api/tests/dataSources/postgresSQL.integration.spec.ts index ccfcce6f55..2aabd608bc 100644 --- a/qa-core/src/internal-api/tests/dataSources/postgresSQL.integration.spec.ts +++ b/qa-core/src/internal-api/tests/dataSources/postgresSQL.integration.spec.ts @@ -37,7 +37,7 @@ describe("Internal API - Data Sources: PostgresSQL", () => { fixtures.queries.postgres(updatedDataSourceJson.datasource._id!) ) - expect(queryJson.rows.length).toEqual(91) + expect(queryJson.rows.length).toBeGreaterThan(10) expect(queryJson.schemaFields).toEqual( fixtures.queries.expectedSchemaFields.postgres )