/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
import React from 'react';
import { mountWithIntl } from 'test_utils/enzyme_helpers';
import { DEFAULT_MARK, DEFAULT_DARK_MARK, HomeIcon } from './home_icon';
// TODO: many of these tests cover the conditional logic of which mark to load depending on raw branding configurations
// Dark mode and custom/default fallbacks should instead be consolidated and centralized elsewhere:
// https://github.com/opensearch-project/OpenSearch-Dashboards/issues/895#issuecomment-1164995007
describe('Home button icon ', () => {
describe('in condensed light mode ', () => {
it('uses opensearch mark if no mark provided', () => {
const branding = {
darkMode: false,
logo: {},
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
useExpandedHeader: false,
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(`${branding.assetFolderUrl}/${DEFAULT_MARK}`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses opensearch mark if custom logo provided without mark', () => {
const branding = {
darkMode: false,
logo: { defaultUrl: '/defaultModeLogo' },
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
useExpandedHeader: false,
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(`${branding.assetFolderUrl}/${DEFAULT_MARK}`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses custom mark default mode URL', () => {
const branding = {
darkMode: false,
logo: {},
mark: { defaultUrl: '/defaultModeMark' },
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
useExpandedHeader: false,
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(branding.mark.defaultUrl);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
});
describe('in condensed dark mode ', () => {
it('uses opensearch mark if no mark provided', () => {
const branding = {
darkMode: true,
logo: {},
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
useExpandedHeader: false,
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(`${branding.assetFolderUrl}/${DEFAULT_DARK_MARK}`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses opensearch mark if custom logo provided without mark', () => {
const branding = {
darkMode: true,
logo: { defaultUrl: '/defaultModeLogo' },
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
useExpandedHeader: false,
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(`${branding.assetFolderUrl}/${DEFAULT_DARK_MARK}`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses custom mark default mode URL if no dark mode mark provided', () => {
const branding = {
darkMode: true,
logo: {},
mark: { defaultUrl: '/defaultModeMark' },
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
useExpandedHeader: false,
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(branding.mark.defaultUrl);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses custom mark dark mode URL', () => {
const branding = {
darkMode: true,
logo: {},
mark: { defaultUrl: '/defaultModeMark', darkModeUrl: '/darkModeMark' },
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
useExpandedHeader: false,
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(branding.mark.darkModeUrl);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
});
describe('in light mode ', () => {
it('uses home icon if no branding provided', () => {
const branding = {};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual('home');
expect(icon.prop('size')).toEqual(`m`);
expect(icon.prop('title')).toEqual(`opensearch dashboards home`);
expect(component).toMatchSnapshot();
});
it('uses home icon if no mark provided', () => {
const branding = {
darkMode: false,
logo: {},
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual('home');
expect(icon.prop('size')).toEqual(`m`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses home icon if custom logo provided without mark', () => {
const branding = {
darkMode: false,
logo: { defaultUrl: '/defaultModeLogo' },
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual('home');
expect(icon.prop('size')).toEqual(`m`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses custom mark default mode URL', () => {
const branding = {
darkMode: false,
logo: {},
mark: { defaultUrl: '/defaultModeMark' },
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(branding.mark.defaultUrl);
expect(icon.prop('size')).toEqual(`l`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
});
describe('in dark mode ', () => {
it('uses home icon if no mark provided', () => {
const branding = {
darkMode: true,
logo: {},
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual('home');
expect(icon.prop('size')).toEqual(`m`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses home icon if custom logo provided without mark', () => {
const branding = {
darkMode: true,
logo: { defaultUrl: '/defaultModeLogo' },
mark: {},
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual('home');
expect(icon.prop('size')).toEqual(`m`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses custom mark default mode URL if no dark mode mark provided', () => {
const branding = {
darkMode: true,
logo: {},
mark: { defaultUrl: '/defaultModeMark' },
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(branding.mark.defaultUrl);
expect(icon.prop('size')).toEqual(`l`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
it('uses custom mark dark mode URL', () => {
const branding = {
darkMode: true,
logo: {},
mark: { defaultUrl: '/defaultModeMark', darkModeUrl: '/darkModeMark' },
applicationTitle: 'custom title',
assetFolderUrl: 'base/ui/default_branding',
};
const component = mountWithIntl();
const icon = component.find('EuiIcon');
expect(icon.prop('type')).toEqual(branding.mark.darkModeUrl);
expect(icon.prop('size')).toEqual(`l`);
expect(icon.prop('title')).toEqual(`${branding.applicationTitle} home`);
expect(component).toMatchSnapshot();
});
});
});