blob: 5e040dd5b6a839a35d6950c5c815571b67c372e0 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import React from 'react';
import { shallow } from 'enzyme';
import Header from 'src/dashboard/components/Header';
import EditableTitle from 'src/components/EditableTitle';
import FaveStar from 'src/components/FaveStar';
import PublishedStatus from 'src/dashboard/components/PublishedStatus';
import HeaderActionsDropdown from 'src/dashboard/components/HeaderActionsDropdown';
import Button from 'src/components/Button';
import UndoRedoKeylisteners from 'src/dashboard/components/UndoRedoKeylisteners';
describe('Header', () => {
const props = {
addSuccessToast: () => {},
addDangerToast: () => {},
addWarningToast: () => {},
dashboardInfo: {
id: 1,
dash_edit_perm: true,
dash_save_perm: true,
userId: 1,
metadata: {},
common: {
conf: {},
},
},
dashboardTitle: 'title',
charts: {},
layout: {},
filters: {},
expandedSlices: {},
css: '',
customCss: '',
isStarred: false,
isLoading: false,
lastModifiedTime: 0,
refreshFrequency: 0,
shouldPersistRefreshFrequency: false,
onSave: () => {},
onChange: () => {},
fetchFaveStar: () => {},
fetchCharts: () => {},
saveFaveStar: () => {},
savePublished: () => {},
isPublished: false,
updateDashboardTitle: () => {},
editMode: false,
setEditMode: () => {},
showBuilderPane: () => {},
updateCss: () => {},
setColorSchemeAndUnsavedChanges: () => {},
logEvent: () => {},
setRefreshFrequency: () => {},
hasUnsavedChanges: false,
maxUndoHistoryExceeded: false,
// redux
onUndo: () => {},
onRedo: () => {},
undoLength: 0,
redoLength: 0,
setMaxUndoHistoryExceeded: () => {},
maxUndoHistoryToast: () => {},
dashboardInfoChanged: () => {},
dashboardTitleChanged: () => {},
};
function setup(overrideProps) {
const wrapper = shallow(<Header {...props} {...overrideProps} />);
return wrapper;
}
describe('read-only-user', () => {
const overrideProps = {
dashboardInfo: {
...props.dashboardInfo,
id: 1,
dash_edit_perm: false,
dash_save_perm: false,
userId: 1,
},
};
it('should render the EditableTitle', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(EditableTitle)).toExist();
});
it('should render the PublishedStatus', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(PublishedStatus)).toExist();
});
it('should render the FaveStar', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(FaveStar)).toExist();
});
it('should render the HeaderActionsDropdown', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(HeaderActionsDropdown)).toExist();
});
it('should not set up undo/redo', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(UndoRedoKeylisteners)).not.toExist();
});
});
describe('write-user', () => {
const overrideProps = {
editMode: false,
dashboardInfo: {
...props.dashboardInfo,
id: 1,
dash_edit_perm: true,
dash_save_perm: true,
userId: 1,
},
};
it('should render the EditableTitle', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(EditableTitle)).toExist();
});
it('should render the PublishedStatus', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(PublishedStatus)).toExist();
});
it('should render the FaveStar', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(FaveStar)).toExist();
});
it('should render the HeaderActionsDropdown', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(HeaderActionsDropdown)).toExist();
});
it('should not set up undo/redo', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(UndoRedoKeylisteners)).not.toExist();
});
});
describe('write-user-with-edit-mode', () => {
const overrideProps = {
editMode: true,
dashboardInfo: {
...props.dashboardInfo,
id: 1,
dash_edit_perm: true,
dash_save_perm: true,
userId: 1,
},
};
it('should render the EditableTitle', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(EditableTitle)).toExist();
});
it('should render the FaveStar', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(FaveStar)).toExist();
});
it('should render the PublishedStatus', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(PublishedStatus)).toExist();
});
it('should render the HeaderActionsDropdown', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(HeaderActionsDropdown)).toExist();
});
it('should render five Buttons', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(Button)).toHaveLength(4);
});
it('should set up undo/redo', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(UndoRedoKeylisteners)).toExist();
});
});
describe('logged-out-user', () => {
const overrideProps = {
dashboardInfo: {
...props.dashboardInfo,
id: 1,
dash_edit_perm: false,
dash_save_perm: false,
userId: null,
},
};
it('should render the EditableTitle', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(EditableTitle)).toExist();
});
it('should render the PublishedStatus', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(PublishedStatus)).toExist();
});
it('should not render the FaveStar', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(FaveStar)).not.toExist();
});
it('should render the HeaderActionsDropdown', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(HeaderActionsDropdown)).toExist();
});
it('should not set up undo/redo', () => {
const wrapper = setup(overrideProps);
expect(wrapper.find(UndoRedoKeylisteners)).not.toExist();
});
});
});