c84d267c61
* Add Helios Design System Components (#19278) * adds hds dependency * updates reset import path * sets minifyCSS advanced option to false * Remove node-sass (#19376) * removes node-sass and fixes sass compilation * fixes active tab li class * Sidebar Navigation Components (#19446) * links ember-shared-components addon and imports styles * adds sidebar frame and nav components * updates HcNav component name to HcAppFrame and adds sidebar UserMenu component * adds tests for sidebar components * fixes tests * updates user menu styling * fixes typos in nav cluster component * changes padding value in sidebar stylesheet to use variable * Replace and remove old nav components with new ones (#19447) * links ember-shared-components addon and imports styles * adds sidebar frame and nav components * updates activeCluster on auth service and adds activeSession prop for sidebar visibility * replaces old nav components with new ones in templates * fixes sidebar visibility issue and updates user menu label class * removes NavHeader usage * adds clients index route to redirect to dashboard * removes unused HcAppFrame footer block and reduces page header top margin * Nav component cleanup (#19681) * removes nav-header components * removes navbar styling * removes status-menu component and styles * removes cluster and auth info components * removes menu-sidebar component and styling * fixes tests * Console Panel Updates (#19741) * updates console panel styling * adds test for opening and closing the console panel * updates console panel background color to use hds token * adds right margin to console panel input * updates link-status banner styling * updates hc nav components to new API * Namespace Picker Updates (#19753) * updates namespace-picker * updates namespace picker menu styling * adds bottom margin to env banner * updates class order on namespace picker link * restores manage namespaces refresh icon * removes manage namespaces nav icon * removes home link component (#20027) * Auth and Error View Updates (#19749) * adds vault logo to auth page * updates top level error template * updates loading substate handling and moves policies link from access to cluster nav (#20033) * moves console panel to bottom of viewport (#20183) * HDS Sidebar Nav Components (#20197) * updates nav components to hds * upgrades project yarn version to 3.5 * fixes issues in app frame component * updates sidenav actions to use icon button component * Sidebar navigation acceptance tests (#20270) * adds sidebar navigation acceptance tests and fixes other test failures * console panel styling tweaks * bumps addon version * remove and ignore yarn install-state file * fixes auth service and console tests * moves classes from deleted files after bulma merge * fixes sass syntax errors blocking build * cleans up dart sass deprecation warnings * adds changelog entry * hides namespace picker when sidebar nav panel is minimized * style tweaks * fixes sidebar nav tests * bumps hds addon to latest version and removes style override * updates modify-passthrough-response helper * updates sidebar nav tests * mfa-setup test fix attempt * fixes cluster mfa setup test * remove deprecated yarn ignore-optional flag from makefile * removes another instance of yarn ignore-optional and updates ui readme * removes unsupported yarn verbose flag from ci-helper * hides nav headings when user does not have access to any sub links * removes unused optional deps and moves lint-staged to dev deps * updates has-permission helper and permissions service tests * fixes issue with console panel not filling container width
258 lines
9.6 KiB
JavaScript
258 lines
9.6 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
*/
|
|
|
|
import { module, test } from 'qunit';
|
|
import { setupRenderingTest } from 'ember-qunit';
|
|
import { render, click } from '@ember/test-helpers';
|
|
import sinon from 'sinon';
|
|
import hbs from 'htmlbars-inline-precompile';
|
|
import calendarDropdown from 'vault/tests/pages/components/calendar-widget';
|
|
import { ARRAY_OF_MONTHS } from 'core/utils/date-formatters';
|
|
import { subMonths, subYears } from 'date-fns';
|
|
import timestamp from 'core/utils/timestamp';
|
|
|
|
module('Integration | Component | calendar-widget', function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
hooks.before(function () {
|
|
sinon.stub(timestamp, 'now').callsFake(() => new Date('2018-04-03T14:15:30'));
|
|
});
|
|
hooks.beforeEach(function () {
|
|
const CURRENT_DATE = timestamp.now();
|
|
this.set('currentDate', CURRENT_DATE);
|
|
this.set('calendarStartDate', subMonths(CURRENT_DATE, 12));
|
|
this.set('calendarEndDate', CURRENT_DATE);
|
|
this.set('startTimestamp', subMonths(CURRENT_DATE, 12).toISOString());
|
|
this.set('endTimestamp', CURRENT_DATE.toISOString());
|
|
this.set('handleClientActivityQuery', sinon.spy());
|
|
});
|
|
hooks.after(function () {
|
|
timestamp.now.restore();
|
|
});
|
|
|
|
test('it renders and disables correct months when start date is 12 months ago', async function (assert) {
|
|
assert.expect(14);
|
|
await render(hbs`
|
|
<CalendarWidget
|
|
@startTimestamp={{this.startTimestamp}}
|
|
@endTimestamp={{this.endTimestamp}}
|
|
@selectMonth={{this.handleClientActivityQuery}}
|
|
/>
|
|
`);
|
|
assert
|
|
.dom('[data-test-calendar-widget-trigger]')
|
|
.hasText(`Apr 2017 - Apr 2018`, 'renders and formats start and end dates');
|
|
await calendarDropdown.openCalendar();
|
|
assert.ok(calendarDropdown.showsCalendar, 'renders the calendar component');
|
|
// assert months in current year are disabled/enabled correctly
|
|
const enabledMonths = ['January', 'February', 'March', 'April'];
|
|
ARRAY_OF_MONTHS.forEach(function (month) {
|
|
if (enabledMonths.includes(month)) {
|
|
assert
|
|
.dom(`[data-test-calendar-month="${month}"]`)
|
|
.doesNotHaveClass('is-readOnly', `${month} is enabled`);
|
|
} else {
|
|
assert.dom(`[data-test-calendar-month="${month}"]`).hasClass('is-readOnly', `${month} is read only`);
|
|
}
|
|
});
|
|
});
|
|
|
|
test('it renders and disables months before start timestamp', async function (assert) {
|
|
await render(hbs`
|
|
<CalendarWidget
|
|
@startTimestamp={{this.startTimestamp}}
|
|
@endTimestamp={{this.endTimestamp}}
|
|
@selectMonth={{this.handleClientActivityQuery}}
|
|
/>
|
|
`);
|
|
|
|
await calendarDropdown.openCalendar();
|
|
assert.dom('[data-test-next-year]').isDisabled('Future year is disabled');
|
|
await calendarDropdown.clickPreviousYear();
|
|
assert
|
|
.dom('[data-test-display-year]')
|
|
.hasText(`${subYears(this.currentDate, 1).getFullYear()}`, 'shows the previous year');
|
|
assert.dom('[data-test-previous-year]').isDisabled('disables previous year');
|
|
|
|
// assert months in previous year are disabled/enabled correctly
|
|
const disabledMonths = ['January', 'February', 'March'];
|
|
ARRAY_OF_MONTHS.forEach(function (month) {
|
|
if (disabledMonths.includes(month)) {
|
|
assert.dom(`[data-test-calendar-month="${month}"]`).hasClass('is-readOnly', `${month} is read only`);
|
|
} else {
|
|
assert
|
|
.dom(`[data-test-calendar-month="${month}"]`)
|
|
.doesNotHaveClass('is-readOnly', `${month} is enabled`);
|
|
}
|
|
});
|
|
});
|
|
|
|
test('it calls parent callback with correct arg when clicking "Current billing period"', async function (assert) {
|
|
await render(hbs`
|
|
<CalendarWidget
|
|
@startTimestamp={{this.startTimestamp}}
|
|
@endTimestamp={{this.endTimestamp}}
|
|
@selectMonth={{this.handleClientActivityQuery}}
|
|
/>
|
|
`);
|
|
await calendarDropdown.menuToggle();
|
|
await calendarDropdown.clickCurrentBillingPeriod();
|
|
assert.propEqual(
|
|
this.handleClientActivityQuery.args[0][0],
|
|
{ dateType: 'reset' },
|
|
'it calls parent function with reset dateType'
|
|
);
|
|
});
|
|
|
|
test('it calls parent callback with correct arg when clicking "Current month"', async function (assert) {
|
|
await render(hbs`
|
|
<CalendarWidget
|
|
@startTimestamp={{this.startTimestamp}}
|
|
@endTimestamp={{this.endTimestamp}}
|
|
@selectMonth={{this.handleClientActivityQuery}}
|
|
/>
|
|
`);
|
|
await calendarDropdown.menuToggle();
|
|
await calendarDropdown.clickCurrentMonth();
|
|
assert.propEqual(
|
|
this.handleClientActivityQuery.args[0][0],
|
|
{ dateType: 'currentMonth' },
|
|
'it calls parent function with currentMoth dateType'
|
|
);
|
|
});
|
|
|
|
test('it calls parent callback with correct arg when selecting a month', async function (assert) {
|
|
await render(hbs`
|
|
<CalendarWidget
|
|
@startTimestamp={{this.startTimestamp}}
|
|
@endTimestamp={{this.endTimestamp}}
|
|
@selectMonth={{this.handleClientActivityQuery}}
|
|
/>
|
|
`);
|
|
await calendarDropdown.openCalendar();
|
|
await click(`[data-test-calendar-month="April"`);
|
|
assert.propEqual(
|
|
this.handleClientActivityQuery.lastCall.lastArg,
|
|
{
|
|
dateType: 'endDate',
|
|
monthIdx: 3,
|
|
monthName: 'April',
|
|
year: 2018,
|
|
},
|
|
'it calls parent function with end date (current) month/year'
|
|
);
|
|
|
|
await calendarDropdown.openCalendar();
|
|
await calendarDropdown.clickPreviousYear();
|
|
await click(`[data-test-calendar-month="March"]`);
|
|
assert.propEqual(
|
|
this.handleClientActivityQuery.lastCall.lastArg,
|
|
{
|
|
dateType: 'endDate',
|
|
monthIdx: 2,
|
|
monthName: 'March',
|
|
year: 2017,
|
|
},
|
|
'it calls parent function with selected start date month/year'
|
|
);
|
|
});
|
|
|
|
test('it disables correct months when start date 6 months ago', async function (assert) {
|
|
this.set('calendarStartDate', subMonths(this.currentDate, 6)); // Nov 3, 2017
|
|
this.set('startTimestamp', subMonths(this.currentDate, 6).toISOString());
|
|
await render(hbs`
|
|
<CalendarWidget
|
|
@startTimestamp={{this.startTimestamp}}
|
|
@endTimestamp={{this.endTimestamp}}
|
|
@selectMonth={{this.handleClientActivityQuery}}
|
|
/>
|
|
`);
|
|
|
|
await calendarDropdown.openCalendar();
|
|
assert.dom('[data-test-next-year]').isDisabled('Future year is disabled');
|
|
|
|
// Check start year disables correct months
|
|
await calendarDropdown.clickPreviousYear();
|
|
assert.dom('[data-test-previous-year]').isDisabled('previous year is disabled');
|
|
const prevYearEnabled = ['October', 'November', 'December'];
|
|
ARRAY_OF_MONTHS.forEach(function (month) {
|
|
if (prevYearEnabled.includes(month)) {
|
|
assert
|
|
.dom(`[data-test-calendar-month="${month}"]`)
|
|
.doesNotHaveClass('is-readOnly', `${month} is enabled`);
|
|
} else {
|
|
assert.dom(`[data-test-calendar-month="${month}"]`).hasClass('is-readOnly', `${month} is read only`);
|
|
}
|
|
});
|
|
|
|
// Check end year disables correct months
|
|
await click('[data-test-next-year]');
|
|
const currYearEnabled = ['January', 'February', 'March', 'April'];
|
|
ARRAY_OF_MONTHS.forEach(function (month) {
|
|
if (currYearEnabled.includes(month)) {
|
|
assert
|
|
.dom(`[data-test-calendar-month="${month}"]`)
|
|
.doesNotHaveClass('is-readOnly', `${month} is enabled`);
|
|
} else {
|
|
assert.dom(`[data-test-calendar-month="${month}"]`).hasClass('is-readOnly', `${month} is read only`);
|
|
}
|
|
});
|
|
});
|
|
|
|
test('it disables correct months when start date 36 months ago', async function (assert) {
|
|
this.set('calendarStartDate', subMonths(this.currentDate, 36)); // April 3 2015
|
|
this.set('startTimestamp', subMonths(this.currentDate, 36).toISOString());
|
|
await render(hbs`
|
|
<CalendarWidget
|
|
@startTimestamp={{this.startTimestamp}}
|
|
@endTimestamp={{this.endTimestamp}}
|
|
@selectMonth={{this.handleClientActivityQuery}}
|
|
/>
|
|
`);
|
|
|
|
await calendarDropdown.openCalendar();
|
|
assert.dom('[data-test-next-year]').isDisabled('Future year is disabled');
|
|
|
|
for (const year of [2017, 2016, 2015]) {
|
|
await calendarDropdown.clickPreviousYear();
|
|
assert.dom('[data-test-display-year]').hasText(year.toString());
|
|
}
|
|
|
|
assert.dom('[data-test-previous-year]').isDisabled('previous year is disabled');
|
|
assert.dom('[data-test-next-year]').isEnabled('next year is enabled');
|
|
|
|
assert.dom('.calendar-widget .is-readOnly').exists('Some months disabled');
|
|
|
|
const disabledMonths = ['January', 'February', 'March'];
|
|
ARRAY_OF_MONTHS.forEach(function (month) {
|
|
if (disabledMonths.includes(month)) {
|
|
assert.dom(`[data-test-calendar-month="${month}"]`).hasClass('is-readOnly', `${month} is read only`);
|
|
} else {
|
|
assert
|
|
.dom(`[data-test-calendar-month="${month}"]`)
|
|
.doesNotHaveClass('is-readOnly', `${month} is enabled`);
|
|
}
|
|
});
|
|
|
|
await click('[data-test-next-year]');
|
|
assert.dom('.calendar-widget .is-readOnly').doesNotExist('All months enabled for 2016');
|
|
await click('[data-test-next-year]');
|
|
assert.dom('.calendar-widget .is-readOnly').doesNotExist('All months enabled for 2017');
|
|
await click('[data-test-next-year]');
|
|
assert.dom('.calendar-widget .is-readOnly').exists('Some months disabled for 2018');
|
|
|
|
const enabledMonths = ['January', 'February', 'March', 'April'];
|
|
ARRAY_OF_MONTHS.forEach(function (month) {
|
|
if (enabledMonths.includes(month)) {
|
|
assert
|
|
.dom(`[data-test-calendar-month="${month}"]`)
|
|
.doesNotHaveClass('is-readOnly', `${month} is enabled`);
|
|
} else {
|
|
assert.dom(`[data-test-calendar-month="${month}"]`).hasClass('is-readOnly', `${month} is read only`);
|
|
}
|
|
});
|
|
});
|
|
});
|