From f75f86b57c5c4c6dbc8860a54eea605d40194bf2 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Fri, 5 Nov 2021 05:34:58 -0600 Subject: [PATCH] Dashboards: Fix 'Copy' from being appended to new dashboard titles (#41344) (#41348) (cherry picked from commit cbc00babe4693071099c90564ac0164aae52348e) Co-authored-by: Josh Hunt --- .../forms/SaveDashboardAsForm.test.tsx | 28 ++++++++++++++++--- .../forms/SaveDashboardAsForm.tsx | 9 ++++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.test.tsx b/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.test.tsx index fd46f534bb0..a267266f4b7 100644 --- a/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.test.tsx +++ b/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.test.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { mount } from 'enzyme'; -import { SaveDashboardAsForm } from './SaveDashboardAsForm'; +import { SaveDashboardAsForm, SaveDashboardAsFormProps } from './SaveDashboardAsForm'; import { DashboardModel } from 'app/features/dashboard/state'; import { act } from 'react-dom/test-utils'; import * as api from 'app/features/manage-dashboards/state/actions'; @@ -26,7 +26,11 @@ const prepareDashboardMock = (panel: any) => { getSaveModelClone: () => json, }; }; -const renderAndSubmitForm = async (dashboard: any, submitSpy: any) => { +const renderAndSubmitForm = async ( + dashboard: unknown, + submitSpy: jest.Mock, + otherProps: Partial = {} +) => { const container = mount( { submitSpy(jsonModel); return {}; }} + {...otherProps} /> ); @@ -51,15 +56,30 @@ describe('SaveDashboardAsForm', () => { jest.spyOn(api, 'searchFolders').mockResolvedValue([]); const spy = jest.fn(); - await renderAndSubmitForm(prepareDashboardMock({}), spy); + await renderAndSubmitForm(prepareDashboardMock({}), spy, { + isNew: true, + }); expect(spy).toBeCalledTimes(1); const savedDashboardModel = spy.mock.calls[0][0]; expect(savedDashboardModel.id).toBe(null); - expect(savedDashboardModel.title).toBe('name Copy'); + expect(savedDashboardModel.title).toBe('name'); expect(savedDashboardModel.editable).toBe(true); expect(savedDashboardModel.hideControls).toBe(false); }); + + it("appends 'Copy' to the name when the dashboard isnt new", async () => { + jest.spyOn(api, 'searchFolders').mockResolvedValue([]); + const spy = jest.fn(); + + await renderAndSubmitForm(prepareDashboardMock({}), spy, { + isNew: false, + }); + + expect(spy).toBeCalledTimes(1); + const savedDashboardModel = spy.mock.calls[0][0]; + expect(savedDashboardModel.title).toBe('name Copy'); + }); }); describe('graph panel', () => { diff --git a/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.tsx b/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.tsx index 1116f67aaa9..bae756865cf 100644 --- a/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.tsx +++ b/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.tsx @@ -34,14 +34,19 @@ const getSaveAsDashboardClone = (dashboard: DashboardModel) => { return clone; }; -export const SaveDashboardAsForm: React.FC = ({ +export interface SaveDashboardAsFormProps extends SaveDashboardFormProps { + isNew?: boolean; +} + +export const SaveDashboardAsForm: React.FC = ({ dashboard, + isNew, onSubmit, onCancel, onSuccess, }) => { const defaultValues: SaveDashboardAsFormDTO = { - title: `${dashboard.title} Copy`, + title: isNew ? dashboard.title : `${dashboard.title} Copy`, $folder: { id: dashboard.meta.folderId, title: dashboard.meta.folderTitle,