Skip to content

Commit e21c658

Browse files
Ivan KitanovIvan Kitanov
authored andcommitted
Simplifying the rendering of chips and adding test for chip interactions
1 parent f69a6f4 commit e21c658

4 files changed

Lines changed: 276 additions & 204 deletions

File tree

src/components/date-range-picker/date-range-picker.spec.ts

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
escapeKey,
1212
} from '../common/controllers/key-bindings.js';
1313
import { defineComponents } from '../common/definitions/defineComponents.js';
14+
import { IgcDateRangePickerResourceStringsEN } from '../common/i18n/date-range-picker.resources.js';
1415
import {
1516
type ValidationContainerTestsParams,
1617
checkDatesEqual,
@@ -24,6 +25,7 @@ import IgcDateTimeInputComponent from '../date-time-input/date-time-input.js';
2425
import { DateTimeUtil } from '../date-time-input/date-util.js';
2526
import IgcInputComponent from '../input/input.js';
2627
import IgcDateRangePickerComponent, {
28+
type CustomDateRange,
2729
type DateRangeValue,
2830
} from './date-range-picker.js';
2931

@@ -708,6 +710,221 @@ describe('Date range picker', () => {
708710
expect(calendar.values).to.deep.equal([]);
709711
});
710712
});
713+
describe('Selection via the range selection chips', () => {
714+
const previousThreeDaysStart = CalendarDay.from(today.native).add(
715+
'day',
716+
-3
717+
).native;
718+
const nextThreeDaysEnd = CalendarDay.from(today.native).add(
719+
'day',
720+
+3
721+
).native;
722+
723+
const customRanges: CustomDateRange[] = [
724+
{
725+
label: 'Previous Three Days',
726+
dateRange: {
727+
start: previousThreeDaysStart,
728+
end: today.native,
729+
},
730+
},
731+
{
732+
label: 'Next Three Days',
733+
dateRange: {
734+
start: today.native,
735+
end: nextThreeDaysEnd,
736+
},
737+
},
738+
];
739+
740+
it('should not render any chips when usePredefinedRanges is false and there are no custom ranges added', async () => {
741+
picker.open = true;
742+
await elementUpdated(picker);
743+
744+
const chips = picker.renderRoot.querySelectorAll('igc-chip');
745+
expect(chips.length).to.equal(0);
746+
});
747+
it('should render all predefined chips and custom chips when set', async () => {
748+
picker.usePredefinedRanges = true;
749+
picker.open = true;
750+
const predefinedRangesLength = (picker as any).predefinedRanges.length;
751+
await elementUpdated(picker);
752+
753+
let chips = picker.renderRoot.querySelectorAll('igc-chip');
754+
expect(chips.length).to.equal(predefinedRangesLength);
755+
756+
expect(chips[0].innerText).to.equal(
757+
IgcDateRangePickerResourceStringsEN.last7Days
758+
);
759+
expect(chips[1].innerText).to.equal(
760+
IgcDateRangePickerResourceStringsEN.currentMonth
761+
);
762+
expect(chips[2].innerText).to.equal(
763+
IgcDateRangePickerResourceStringsEN.last30Days
764+
);
765+
expect(chips[3].innerText).to.equal(
766+
IgcDateRangePickerResourceStringsEN.yearToDate
767+
);
768+
769+
picker.customRanges = customRanges;
770+
await elementUpdated(picker);
771+
772+
const allRangesLenght = (picker as any).allRanges.length;
773+
chips = picker.renderRoot.querySelectorAll('igc-chip');
774+
expect(chips.length).to.equal(allRangesLenght);
775+
776+
expect(chips[0].innerText).to.equal(
777+
IgcDateRangePickerResourceStringsEN.last7Days
778+
);
779+
expect(chips[1].innerText).to.equal(
780+
IgcDateRangePickerResourceStringsEN.currentMonth
781+
);
782+
expect(chips[2].innerText).to.equal(
783+
IgcDateRangePickerResourceStringsEN.last30Days
784+
);
785+
expect(chips[3].innerText).to.equal(
786+
IgcDateRangePickerResourceStringsEN.yearToDate
787+
);
788+
expect(chips[4].innerText).to.equal('Previous Three Days');
789+
expect(chips[5].innerText).to.equal('Next Three Days');
790+
});
791+
it('should emit igcChange when the chips are clicked', async () => {
792+
const eventSpy = spy(picker, 'emitEvent');
793+
const popover = picker.renderRoot.querySelector('igc-popover');
794+
795+
picker.usePredefinedRanges = true;
796+
picker.customRanges = customRanges;
797+
picker.open = true;
798+
await elementUpdated(picker);
799+
800+
const allRangesLenght = (picker as any).allRanges.length;
801+
const chips = picker.renderRoot.querySelectorAll('igc-chip');
802+
expect(chips.length).to.equal(allRangesLenght);
803+
804+
chips[0].click();
805+
await elementUpdated(picker);
806+
807+
expect(eventSpy).calledWith('igcChange');
808+
809+
checkSelectedRange(picker, {
810+
start: new Date(
811+
today.native.getFullYear(),
812+
today.native.getMonth(),
813+
today.native.getDate() - 7
814+
),
815+
end: today.native,
816+
});
817+
818+
expect(popover?.hasAttribute('open')).to.equal(true);
819+
820+
chips[1].click();
821+
await elementUpdated(picker);
822+
823+
expect(eventSpy).calledWith('igcChange');
824+
825+
checkSelectedRange(picker, {
826+
start: new Date(
827+
today.native.getFullYear(),
828+
today.native.getMonth(),
829+
1
830+
),
831+
end: new Date(
832+
today.native.getFullYear(),
833+
today.native.getMonth() + 1,
834+
0
835+
),
836+
});
837+
838+
expect(popover?.hasAttribute('open')).to.equal(true);
839+
840+
chips[2].click();
841+
await elementUpdated(picker);
842+
843+
expect(eventSpy).calledWith('igcChange');
844+
845+
checkSelectedRange(picker, {
846+
start: CalendarDay.from(today.native).add('day', -29).native,
847+
end: today.native,
848+
});
849+
850+
expect(popover?.hasAttribute('open')).to.equal(true);
851+
852+
chips[3].click();
853+
await elementUpdated(picker);
854+
855+
expect(eventSpy).calledWith('igcChange');
856+
857+
checkSelectedRange(picker, {
858+
start: new Date(today.native.getFullYear(), 0, 1),
859+
end: today.native,
860+
});
861+
862+
expect(popover?.hasAttribute('open')).to.equal(true);
863+
864+
chips[4].click();
865+
await elementUpdated(picker);
866+
867+
expect(eventSpy).calledWith('igcChange');
868+
869+
checkSelectedRange(picker, {
870+
start: previousThreeDaysStart,
871+
end: today.native,
872+
});
873+
874+
expect(popover?.hasAttribute('open')).to.equal(true);
875+
876+
chips[5].click();
877+
await elementUpdated(picker);
878+
879+
expect(eventSpy).calledWith('igcChange');
880+
881+
checkSelectedRange(picker, {
882+
start: today.native,
883+
end: nextThreeDaysEnd,
884+
});
885+
886+
expect(popover?.hasAttribute('open')).to.equal(true);
887+
});
888+
889+
it('should render only custom chips, when usePredefinedRanges is false and emit igcChange when chips are clicked', async () => {
890+
const eventSpy = spy(picker, 'emitEvent');
891+
const popover = picker.renderRoot.querySelector('igc-popover');
892+
893+
picker.customRanges = customRanges;
894+
picker.open = true;
895+
await elementUpdated(picker);
896+
897+
const chips = picker.renderRoot.querySelectorAll('igc-chip');
898+
expect(chips.length).to.equal(picker.customRanges.length);
899+
900+
expect(chips[0].innerText).to.equal('Previous Three Days');
901+
expect(chips[1].innerText).to.equal('Next Three Days');
902+
903+
chips[0].click();
904+
await elementUpdated(picker);
905+
906+
expect(eventSpy).calledWith('igcChange');
907+
908+
checkSelectedRange(picker, {
909+
start: previousThreeDaysStart,
910+
end: today.native,
911+
});
912+
913+
expect(popover?.hasAttribute('open')).to.equal(true);
914+
915+
chips[1].click();
916+
await elementUpdated(picker);
917+
918+
expect(eventSpy).calledWith('igcChange');
919+
920+
checkSelectedRange(picker, {
921+
start: today.native,
922+
end: nextThreeDaysEnd,
923+
});
924+
925+
expect(popover?.hasAttribute('open')).to.equal(true);
926+
});
927+
});
711928
describe('Keyboard navigation', () => {
712929
it('should close the picker when in open state on pressing Escape', async () => {
713930
const eventSpy = spy(picker, 'emitEvent');

0 commit comments

Comments
 (0)