diff --git a/frontend/src/metabase/admin/databases/database.js b/frontend/src/metabase/admin/databases/database.js index 17397dc3fdfb3ca5f6154226e77b0083319dde13..72a4d9e1c11d539cad1f61b30cad3bce39d17ebd 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 0000000000000000000000000000000000000000..9b29a9e62549cd9bda467f82ea25afcdd66ab197 --- /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 0000000000000000000000000000000000000000..3b32538412c30cf85b337ab3ba5481c20a4edd7c --- /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 8a0a0d290c52a49130063002e9d7522aa7778652..a1430d6ac821c24fa688092de450959865d80495 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";