mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-08 08:28:15 -04:00
Add tests for window resizing
This commit is contained in:
@@ -510,6 +510,12 @@ describe("Stick to top/bottom of window when scrolling", () => {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
|
||||||
|
window.GOVUK.stickAtTopWhenScrolling.setMode('default');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
describe("if window top is below the top of the highest element on load", () => {
|
describe("if window top is below the top of the highest element on load", () => {
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -850,7 +856,6 @@ describe("Stick to top/bottom of window when scrolling", () => {
|
|||||||
// scroll to just below the element
|
// scroll to just below the element
|
||||||
screenMock.scrollTo((pageFooterBottom - windowHeight) + 10);
|
screenMock.scrollTo((pageFooterBottom - windowHeight) + 10);
|
||||||
|
|
||||||
// default scroll position is above top of form
|
|
||||||
window.GOVUK.stickAtBottomWhenScrolling.init();
|
window.GOVUK.stickAtBottomWhenScrolling.init();
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -871,7 +876,7 @@ describe("Stick to top/bottom of window when scrolling", () => {
|
|||||||
|
|
||||||
const furthestBottomPoint = getFurthestBottomPoint(pageFooter.offsetHeight);
|
const furthestBottomPoint = getFurthestBottomPoint(pageFooter.offsetHeight);
|
||||||
|
|
||||||
// scroll past top of content
|
// scroll past furthest point
|
||||||
screenMock.scrollTo((furthestBottomPoint - windowHeight) - 10);
|
screenMock.scrollTo((furthestBottomPoint - windowHeight) - 10);
|
||||||
jest.advanceTimersByTime(60); // fake advance of time to something similar to that for a scroll
|
jest.advanceTimersByTime(60); // fake advance of time to something similar to that for a scroll
|
||||||
|
|
||||||
@@ -885,20 +890,43 @@ describe("Stick to top/bottom of window when scrolling", () => {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("if window resizes so bottom is above the bottom of the element, the element should be marked so it becomes sticky to the user", () => {
|
||||||
|
|
||||||
|
// resize window so the bottom is 30px above the bottom of the element
|
||||||
|
screenMock.window.resizeTo({ height: 560, width: screenMock.window.width });
|
||||||
|
jest.advanceTimersByTime(60); // fake advance of time to something similar to that for a resize
|
||||||
|
|
||||||
|
// `content-fixed` fades the drop-shadow in to show it became sticky from user interaction
|
||||||
|
expect(pageFooter.classList.contains('content-fixed')).toBe(true);
|
||||||
|
expect(pageFooter.classList.contains('content-fixed-onload')).toBe(false); // check the class for onload isn't applied
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("if viewport bottom starts above element bottom", () => {
|
describe("if viewport bottom starts above element bottom", () => {
|
||||||
|
|
||||||
let pageFooterBottom;
|
let pageFooterBottom;
|
||||||
|
let pageFooterShim;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
|
||||||
// scroll position defaults to 0 so bottom of window starts at 940px. Element bottom defaults to 1160px so will be sticky on load.
|
// scroll position defaults to 0 so bottom of window starts at 940px. Element bottom defaults to 1160px so will be sticky on load.
|
||||||
|
|
||||||
pageFooterBottom = getScreenItemBottomPosition(pageFooter);
|
pageFooterBottom = getScreenItemBottomPosition(pageFooter);
|
||||||
|
|
||||||
|
// shim will be inserted, inheriting space in the page from pageFooter so store this data
|
||||||
|
const pageFooterData = {
|
||||||
|
offsetHeight: pageFooter.offsetHeight,
|
||||||
|
offsetWidth: pageFooter.offsetWidth,
|
||||||
|
offsetTop: pageFooter.offsetTop
|
||||||
|
};
|
||||||
|
|
||||||
window.GOVUK.stickAtBottomWhenScrolling.init();
|
window.GOVUK.stickAtBottomWhenScrolling.init();
|
||||||
|
|
||||||
|
// add mock for shim
|
||||||
|
pageFooterShim = document.querySelector('.shim');
|
||||||
|
screenMock.mockPositionAndDimension('pageFooterShim', pageFooterShim, pageFooterData);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("if window is scrolled so bottom of it is below the bottom of the element, the element should be made not sticky", () => {
|
test("if window is scrolled so bottom of it is below the bottom of the element, the element should be made not sticky", () => {
|
||||||
@@ -912,6 +940,34 @@ describe("Stick to top/bottom of window when scrolling", () => {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("if window resizes so bottom is below the bottom of the element, the element should be made not sticky", () => {
|
||||||
|
|
||||||
|
// resize window so the bottom is 30px above the bottom of the element
|
||||||
|
screenMock.window.resizeTo({ height: pageFooterBottom + 10, width: screenMock.window.width });
|
||||||
|
jest.advanceTimersByTime(60); // fake advance of time to something similar to that for a resize
|
||||||
|
|
||||||
|
expect(pageFooter.classList.contains('content-fixed')).toBe(false);
|
||||||
|
expect(pageFooter.classList.contains('content-fixed-onload')).toBe(false);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
test("if window resizes so bottom is above the furthest point the bottom of the element can go in the scroll area, the element should be stopped", () => {
|
||||||
|
|
||||||
|
const furthestBottomPoint = getFurthestBottomPoint(pageFooter.offsetHeight);
|
||||||
|
|
||||||
|
// resize window so the bottom is above the furthest point
|
||||||
|
screenMock.window.resizeTo({ height: furthestBottomPoint - 10, width: screenMock.window.width });
|
||||||
|
jest.advanceTimersByTime(60); // fake advance of time to something similar to that for a resize
|
||||||
|
|
||||||
|
expect(pageFooter.classList.contains('content-fixed')).toBe(false); // applied if made sticky after page load
|
||||||
|
expect(pageFooter.classList.contains('content-fixed-onload')).toBe(true); // check the class for onload isn't applied
|
||||||
|
|
||||||
|
// elements are stopped by adding inline styles
|
||||||
|
expect(pageFooter.style.position).toEqual('absolute');
|
||||||
|
expect(pageFooter.style.top).toEqual(`${furthestBottomPoint - pageFooter.offsetHeight}px`);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("if element is made sticky and another element underneath it is focused", () => {
|
describe("if element is made sticky and another element underneath it is focused", () => {
|
||||||
@@ -1126,6 +1182,12 @@ describe("Stick to top/bottom of window when scrolling", () => {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
|
||||||
|
window.GOVUK.stickAtBottomWhenScrolling.setMode('default');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
describe("if window bottom is above the bottom of the lowest element on load", () => {
|
describe("if window bottom is above the bottom of the lowest element on load", () => {
|
||||||
|
|
||||||
let pageFooterBottom;
|
let pageFooterBottom;
|
||||||
|
|||||||
Reference in New Issue
Block a user