Skip to content

Commit 583f89f

Browse files
authored
chore(ui5-avatar): migrate wdio tests to cypress (#11817)
Convert Avatar and AvatarGroup tests to Cypress component tests while maintaining test coverage and functionality parity with original specs. JIRA: BGSOFUIPIRIN-6816
1 parent 6cfa4e9 commit 583f89f

File tree

4 files changed

+572
-362
lines changed

4 files changed

+572
-362
lines changed

packages/main/cypress/specs/Avatar.cy.tsx

Lines changed: 198 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ describe("Accessibility", () => {
3939
cy.mount(
4040
<div>
4141
<Avatar interactive disabled initials="JD" id="diabled-avatar" onClick={increment}>
42-
<Tag slot="badge">
43-
<Icon slot="icon" name="accelerated"></Icon>
44-
</Tag>
42+
<Tag slot="badge">
43+
<Icon slot="icon" name="accelerated"></Icon>
44+
</Tag>
4545
</Avatar>
4646
<input value="0" id="click-event" />
4747
</div>
@@ -306,3 +306,198 @@ describe("Fallback Logic", () => {
306306
.should("have.class", "ui5-avatar-fallback-icon-hidden");
307307
});
308308
});
309+
310+
describe("Avatar Rendering and Interaction", () => {
311+
it("tests rendering of image", () => {
312+
cy.mount(
313+
<Avatar>
314+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==" alt="Woman image" />
315+
</Avatar>
316+
);
317+
318+
cy.get("[ui5-avatar]")
319+
.shadow()
320+
.find(".ui5-avatar-root slot:not([name])")
321+
.should("exist");
322+
323+
cy.get("[ui5-avatar]")
324+
.shadow()
325+
.find("ui5-avatar-icon")
326+
.should("not.exist");
327+
});
328+
329+
it("tests rendering of icon", () => {
330+
cy.mount(
331+
<Avatar icon="filter"></Avatar>
332+
);
333+
334+
cy.get("[ui5-avatar]")
335+
.shadow()
336+
.find(".ui5-avatar-icon")
337+
.should("exist");
338+
339+
cy.get("[ui5-avatar]")
340+
.shadow()
341+
.find("slot:not([name])")
342+
.should("not.exist");
343+
});
344+
345+
it("tests rendering of image, when all set", () => {
346+
cy.mount(
347+
<Avatar icon="filter" initials="SF">
348+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==" alt="Woman image" />
349+
</Avatar>
350+
);
351+
352+
cy.get("[ui5-avatar]")
353+
.shadow()
354+
.find(".ui5-avatar-root slot:not([name])")
355+
.should("exist");
356+
357+
cy.get("[ui5-avatar]")
358+
.shadow()
359+
.find(".ui5-avatar-icon")
360+
.should("not.exist");
361+
362+
cy.get("[ui5-avatar]")
363+
.shadow()
364+
.find(".ui5-avatar-initials")
365+
.should("not.exist");
366+
});
367+
368+
it("tests rendering of initials", () => {
369+
cy.mount(
370+
<Avatar initials="SF" shape="Square" size="M"></Avatar>
371+
);
372+
373+
cy.get("[ui5-avatar]")
374+
.shadow()
375+
.find(".ui5-avatar-initials")
376+
.should("exist");
377+
});
378+
379+
it("tests rendering of accented characters", () => {
380+
cy.mount(
381+
<Avatar initials="IOU" colorScheme="Accent1"></Avatar>
382+
);
383+
384+
cy.get("[ui5-avatar]")
385+
.shadow()
386+
.find(".ui5-avatar-initials")
387+
.should("exist");
388+
});
389+
390+
it("tests rendering of default fallback icon when initials are overflowing", () => {
391+
cy.mount(
392+
<Avatar initials="WWW" shape="Square" size="M"></Avatar>
393+
);
394+
395+
cy.get("[ui5-avatar]")
396+
.shadow()
397+
.find(".ui5-avatar-icon")
398+
.should("exist")
399+
.should("have.attr", "name", "employee");
400+
});
401+
402+
it("tests rendering of custom fallback icon when initials are overflowing", () => {
403+
cy.mount(
404+
<Avatar fallbackIcon="alert" initials="WWW" shape="Circle" size="L"></Avatar>
405+
);
406+
407+
cy.get("[ui5-avatar]")
408+
.shadow()
409+
.find(".ui5-avatar-icon-fallback")
410+
.should("exist")
411+
.should("have.attr", "name", "alert");
412+
});
413+
414+
it("Tests noConflict 'ui5-click' event for interactive avatars", () => {
415+
cy.mount(
416+
<Avatar interactive initials="XS" size="XS"></Avatar>
417+
);
418+
419+
cy.get("[ui5-avatar]")
420+
.as("avatar")
421+
.then(($avatar) => {
422+
$avatar[0].addEventListener("ui5-click", cy.stub().as("clickStub"));
423+
});
424+
425+
cy.get("@avatar")
426+
.shadow()
427+
.find(".ui5-avatar-root")
428+
.realClick();
429+
430+
cy.get("@clickStub")
431+
.should("have.been.calledOnce");
432+
433+
cy.get("@avatar")
434+
.shadow()
435+
.find(".ui5-avatar-root")
436+
.realPress("Enter");
437+
438+
cy.get("@clickStub")
439+
.should("have.been.calledTwice");
440+
441+
cy.get("@avatar")
442+
.shadow()
443+
.find(".ui5-avatar-root")
444+
.realPress("Space");
445+
446+
cy.get("@clickStub")
447+
.should("have.been.calledThrice");
448+
});
449+
450+
it("Tests noConflict 'ui5-click' event for non interactive avatars", () => {
451+
cy.mount(
452+
<Avatar initials="S" size="S"></Avatar>
453+
);
454+
455+
cy.get("[ui5-avatar]")
456+
.as("avatar")
457+
.then(($avatar) => {
458+
$avatar[0].addEventListener("ui5-click", cy.stub().as("clickStub"));
459+
});
460+
461+
cy.get("@avatar")
462+
.shadow()
463+
.find(".ui5-avatar-root")
464+
.realClick();
465+
466+
cy.get("@clickStub")
467+
.should("have.been.calledOnce");
468+
469+
cy.get("@avatar")
470+
.shadow()
471+
.find(".ui5-avatar-root")
472+
.realPress("Enter");
473+
474+
cy.get("@clickStub")
475+
.should("have.been.calledOnce");
476+
477+
cy.get("@avatar")
478+
.shadow()
479+
.find(".ui5-avatar-root")
480+
.realPress("Space");
481+
482+
cy.get("@clickStub")
483+
.should("have.been.calledOnce");
484+
});
485+
486+
it("Tests native 'click' event thrown", () => {
487+
cy.mount(
488+
<Avatar interactive initials="L" size="L"></Avatar>
489+
);
490+
491+
cy.get("[ui5-avatar]")
492+
.as("avatar")
493+
.then(($avatar) => {
494+
$avatar[0].addEventListener("ui5-click", cy.stub().as("clickStub"));
495+
});
496+
497+
cy.get("@avatar")
498+
.realClick();
499+
500+
cy.get("@clickStub")
501+
.should("have.been.calledOnce");
502+
});
503+
});

0 commit comments

Comments
 (0)