open-vault/ui/tests/integration/components/calendar-widget-test.js
Jordan Reimer c84d267c61
Sidebar Navigation (#19296)
* 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
2023-05-02 19:36:15 -06:00

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`);
}
});
});
});