From a7351e9b303dfcf8525ffe9331e58f1715ece1ce Mon Sep 17 00:00:00 2001 From: Gustavo Saiani <gustavo@poe.ma> Date: Mon, 30 Aug 2021 15:52:47 -0300 Subject: [PATCH] When creating database, pass syncing schedule options to api (#17639) --- .../src/metabase/admin/databases/database.js | 8 ++- .../editParamsForUserControlledScheduling.js | 20 +++++++ ...msForUserControlledScheduling.unit.spec.js | 56 +++++++++++++++++++ .../scenarios/admin/databases/add.cy.spec.js | 2 +- 4 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.js create mode 100644 frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.unit.spec.js diff --git a/frontend/src/metabase/admin/databases/database.js b/frontend/src/metabase/admin/databases/database.js index 17397dc3fdf..72a4d9e1c11 100644 --- a/frontend/src/metabase/admin/databases/database.js +++ b/frontend/src/metabase/admin/databases/database.js @@ -12,6 +12,8 @@ import MetabaseSettings from "metabase/lib/settings"; import { MetabaseApi } from "metabase/services"; import Databases from "metabase/entities/databases"; +import { editParamsForUserControlledScheduling } from "./editParamsForUserControlledScheduling"; + // Default schedules for db sync and deep analysis export const DEFAULT_SCHEDULES = { cache_field_values: { @@ -165,10 +167,12 @@ export const proceedWithDbCreation = function(database) { if (database.details["let-user-control-scheduling"]) { try { dispatch.action(VALIDATE_DATABASE_STARTED); + const { valid } = await MetabaseApi.db_validate({ details: database }); + if (valid) { dispatch.action(SET_DATABASE_CREATION_STEP, { - database: database, + database, step: DB_EDIT_FORM_SCHEDULING_TAB, }); } else { @@ -190,6 +194,8 @@ export const proceedWithDbCreation = function(database) { }; export const createDatabase = function(database) { + editParamsForUserControlledScheduling(database); + return async function(dispatch, getState) { try { dispatch.action(CREATE_DATABASE_STARTED, {}); diff --git a/frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.js b/frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.js new file mode 100644 index 00000000000..9b29a9e6254 --- /dev/null +++ b/frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.js @@ -0,0 +1,20 @@ +export function editParamsForUserControlledScheduling(database) { + editSyncParamsForUserControlledScheduling(database); + editScheduleParamsForUserControlledScheduling(database); +} + +function editSyncParamsForUserControlledScheduling(database) { + if (database.details["let-user-control-scheduling"]) { + database.is_full_sync = false; + } +} + +function editScheduleParamsForUserControlledScheduling(database) { + const { details, schedules } = database; + + if (details["let-user-control-scheduling"] && !schedules?.metadata_sync) { + database.schedules.metadata_sync = { + schedule_type: "daily", + }; + } +} diff --git a/frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.unit.spec.js b/frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.unit.spec.js new file mode 100644 index 00000000000..3b32538412c --- /dev/null +++ b/frontend/src/metabase/admin/databases/editParamsForUserControlledScheduling.unit.spec.js @@ -0,0 +1,56 @@ +import { editParamsForUserControlledScheduling } from "./editParamsForUserControlledScheduling"; + +it("adds full_sync param if user will control scheduling", () => { + const database = { + schedules: {}, + details: { "let-user-control-scheduling": true }, + }; + + editParamsForUserControlledScheduling(database); + + expect(database.is_full_sync).toBe(false); +}); + +it("does not add full_sync param if user will not control scheduling", () => { + const database = { + schedules: {}, + details: {}, + }; + + editParamsForUserControlledScheduling(database); + + expect(database.is_full_sync).toBe(undefined); +}); + +it("adds metadata_sync param if user will control scheduling and no metadata_sync data is present", () => { + const database = { + schedules: {}, + details: { "let-user-control-scheduling": true }, + }; + + editParamsForUserControlledScheduling(database); + + expect(database.schedules.metadata_sync.schedule_type).toBe("daily"); +}); + +it("does not add metadata_sync param if user will not control scheduling", () => { + const database = { + schedules: {}, + details: {}, + }; + + editParamsForUserControlledScheduling(database); + + expect(database.schedules).toStrictEqual({}); +}); + +it("does not add metadata_sync param if user will control scheduling and metadata_sync data is present", () => { + const database = { + schedules: { metadata_sync: { schedule_type: "hourly" } }, + details: { "let-user-control-scheduling": true }, + }; + + editParamsForUserControlledScheduling(database); + + expect(database.schedules.metadata_sync.schedule_type).toBe("hourly"); +}); diff --git a/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js b/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js index 8a0a0d290c5..a1430d6ac82 100644 --- a/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js +++ b/frontend/test/metabase/scenarios/admin/databases/add.cy.spec.js @@ -184,7 +184,7 @@ describe("scenarios > admin > databases > add", () => { ); }); - it.skip("should respect users' decision to manually sync large database (metabase#17450)", () => { + it("should respect users' decision to manually sync large database (metabase#17450)", () => { const H2_CONNECTION_STRING = "zip:./target/uberjar/metabase.jar!/sample-dataset.db;USER=GUEST;PASSWORD=guest"; -- GitLab