Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
357 changes: 32 additions & 325 deletions packages/fiori/cypress/specs/DynamicSideContent.cy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -144,333 +144,37 @@ describe("'equalSplit' property", () => {
cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-main")
.should("have.class", "ui5-dsc-span-6");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", "ui5-dsc-span-6");
});
});

describe("containers widths on XL size", () => {
it("check for proper width", () => {
cy.viewport(1600, 500);

cy.mount(
<DynamicSideContent>
<div>
<h1>Main Content</h1>
</div>
<div slot="sideContent">
<h1>Side Content</h1>
</div>
</DynamicSideContent>
);

cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-main")
.should("have.class", "ui5-dsc-span-9");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", "ui5-dsc-span-3");
});
});

describe("containers widths on L size", () => {
it("check for proper width", () => {
cy.viewport(1400, 500);

cy.mount(
<DynamicSideContent>
<div>
<h1>Main Content</h1>
</div>
<div slot="sideContent">
<h1>Side Content</h1>
</div>
</DynamicSideContent>
);

cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-main")
.should("have.class", "ui5-dsc-span-8");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", "ui5-dsc-span-4");
// Check actual computed CSS width values
cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-main")
.should("have.css", "width")
.then(width => {
// Parse the pixel value and check if it's approximately 50% of container
cy.get("@dynamicSideContent")
.invoke("outerWidth")
.then(containerWidth => {
const expectedWidth = containerWidth * 0.5;
expect(parseFloat(width as unknown as string)).to.be.closeTo(expectedWidth, 1);
});
});

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.css", "width")
.then(width => {
cy.get("@dynamicSideContent")
.invoke("outerWidth")
.then(containerWidth => {
const expectedWidth = containerWidth * 0.5;
expect(parseFloat(width as unknown as string)).to.be.closeTo(expectedWidth, 1);
});
});
});
});

describe("containers widths on M size:", () => {
it("check for proper width", () => {
cy.mount(
<DynamicSideContent>
<div>
<h1>Main Content</h1>
</div>
<div slot="sideContent">
<h1>Side Content</h1>
</div>
</DynamicSideContent>
);

cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

// set outer container width to > 960 and < 1024 (M1)
cy.viewport(1020, 500);

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-main")
.should("have.class", "ui5-dsc-span-fixed");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", "ui5-dsc-span-fixed");

// set outer container width to > 720 and < 960 (M2)
cy.viewport(950, 500);

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-main")
.should("have.class", "ui5-dsc-span-12");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", "ui5-dsc-span-12");
});
});

describe("containers widths on S size:", () => {
it("check for proper width", () => {
cy.mount(
<DynamicSideContent>
<div>
<h1>Main Content</h1>
</div>
<div slot="sideContent">
<h1>Side Content</h1>
</div>
</DynamicSideContent>
);

cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

// set outer container width to < 720 (S)
cy.viewport(700, 500);

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-main")
.should("have.class", "ui5-dsc-span-12");

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", "ui5-dsc-span-0");
});
});

describe("'sideContentVisibility' property:", () => {
it("'AlwaysShow' - side content is always visible", () => {
cy.viewport(1600, 500);

cy.mount(
<DynamicSideContent sideContentVisibility="AlwaysShow">
<div>
<h1>Main Content</h1>
</div>
<div slot="sideContent">
<h1>Side Content</h1>
</div>
</DynamicSideContent>
);

cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

const viewports = [
{ width: 1600, expectedClass: "ui5-dsc-span-3" },
{ width: 1400, expectedClass: "ui5-dsc-span-4" },
{ width: 1020, expectedClass: "ui5-dsc-span-fixed" },
{ width: 950, expectedClass: "ui5-dsc-span-12" },
{ width: 700, expectedClass: "ui5-dsc-span-12" },
];

viewports.forEach(({ width, expectedClass }) => {
cy.viewport(width, 500);

cy.get("ui5-dynamic-side-content")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", expectedClass);
});
});
});

describe("'sideContentFallDown' property", () => {
const testCases = [
{
setting: SideContentFallDown.BelowXL,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-12" },
{ size: 1020, expected: "ui5-dsc-span-12" },
{ size: 950, expected: "ui5-dsc-span-12" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
{
setting: SideContentFallDown.BelowL,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-4" },
{ size: 1020, expected: "ui5-dsc-span-12" },
{ size: 950, expected: "ui5-dsc-span-12" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
{
setting: SideContentFallDown.BelowM,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-4" },
{ size: 1020, expected: "ui5-dsc-span-fixed" },
{ size: 950, expected: "ui5-dsc-span-fixed" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
{
setting: SideContentFallDown.OnMinimumWidth,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-4" },
{ size: 1020, expected: "ui5-dsc-span-fixed" },
{ size: 950, expected: "ui5-dsc-span-12" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
];

testCases.forEach(({ setting, widths }) => {
it(`'${setting}' - side content falls down at expected breakpoints`, () => {
cy.mount(
<DynamicSideContent sideContentFallDown={setting}>
<div>
<h1>Main Content</h1>
</div>
<div slot="sideContent">
<h1>Side Content</h1>
</div>
</DynamicSideContent>
);

cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

widths.forEach(({ size, expected }) => {
cy.viewport(size, 500);

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", expected);
});
});
});
});

describe("'sideContentFallDown' property", () => {
const testCases = [
{
setting: SideContentFallDown.BelowXL,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-12" },
{ size: 1020, expected: "ui5-dsc-span-12" },
{ size: 950, expected: "ui5-dsc-span-12" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
{
setting: SideContentFallDown.BelowL,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-4" },
{ size: 1020, expected: "ui5-dsc-span-12" },
{ size: 950, expected: "ui5-dsc-span-12" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
{
setting: SideContentFallDown.BelowM,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-4" },
{ size: 1020, expected: "ui5-dsc-span-fixed" },
{ size: 950, expected: "ui5-dsc-span-fixed" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
{
setting: SideContentFallDown.OnMinimumWidth,
widths: [
{ size: 1600, expected: "ui5-dsc-span-3" },
{ size: 1400, expected: "ui5-dsc-span-4" },
{ size: 1020, expected: "ui5-dsc-span-fixed" },
{ size: 950, expected: "ui5-dsc-span-12" },
{ size: 700, expected: "ui5-dsc-span-0" },
],
},
];

testCases.forEach(({ setting, widths }) => {
it(`'${setting}' - side content falls down at expected breakpoints`, () => {
cy.mount(
<DynamicSideContent sideContentFallDown={setting}>
<div>
<h1>Main Content</h1>
</div>
<div slot="sideContent">
<h1>Side Content</h1>
</div>
</DynamicSideContent>
);

cy.get("[ui5-dynamic-side-content]")
.as("dynamicSideContent");

widths.forEach(({ size, expected }) => {
cy.viewport(size, 500);

cy.get("@dynamicSideContent")
.shadow()
.find(".ui5-dsc-side")
.should("have.class", expected);
});
});
});
});

describe("'layout-change' event:", () => {
it("fires when changing the breakpoint", () => {
Expand All @@ -493,8 +197,11 @@ describe("'layout-change' event:", () => {
.as("layoutChange"));
});

// Change to > 1024 and < 1440 (L) to ensure previous breakpoint for the next event
cy.viewport(1300, 500);

// Change to M
cy.viewport(800, 500);
cy.viewport(900, 500);

cy.get("@layoutChange")
.should("be.called")
Expand All @@ -508,7 +215,7 @@ describe("'layout-change' event:", () => {
});

// Change to > 1024 and < 1440 (L)
cy.viewport(1200, 500);
cy.viewport(1300, 500);

cy.get("@layoutChange")
.should("be.called")
Expand Down
Loading
Loading