1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-28 18:43:26 +00:00
Files
browser/libs/vault/src/components/carousel/carousel.component.spec.ts
Shane Melton 31f35e7ac1 [PM-31199] Fix flaky Vault test (#18544)
* Fix flaky spec file

* Remove duplicate i18nPipe import that was causing warnings
2026-02-17 09:39:16 -08:00

103 lines
3.5 KiB
TypeScript

import { Component, ChangeDetectionStrategy } from "@angular/core";
import { ComponentFixture, TestBed } from "@angular/core/testing";
import { By } from "@angular/platform-browser";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { VaultCarouselSlideComponent } from "./carousel-slide/carousel-slide.component";
import { VaultCarouselComponent } from "./carousel.component";
@Component({
selector: "app-test-carousel-slide",
imports: [VaultCarouselComponent, VaultCarouselSlideComponent],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<vault-carousel label="Storybook Demo">
<vault-carousel-slide label="First Slide">
<h1>First Carousel Heading</h1>
</vault-carousel-slide>
<vault-carousel-slide label="Second Slide">
<h1>Second Carousel Heading</h1>
</vault-carousel-slide>
<vault-carousel-slide label="Third Slide">
<h1>Third Carousel Heading</h1>
</vault-carousel-slide>
</vault-carousel>
`,
})
class TestCarouselComponent {
// Test carousel by creating a wrapping component.
}
describe("VaultCarouselComponent", () => {
let fixture: ComponentFixture<TestCarouselComponent>;
let component: VaultCarouselComponent;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [VaultCarouselComponent, VaultCarouselSlideComponent],
providers: [{ provide: I18nService, useValue: { t: (key: string) => key } }],
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(TestCarouselComponent);
fixture.detectChanges();
component = fixture.debugElement.query(By.directive(VaultCarouselComponent)).componentInstance;
});
it("sets first slide as active by default", () => {
expect(component["selectedIndex"]).toBe(0);
});
it("shows the active slides content", () => {
// Set the second slide as active
fixture.debugElement.queryAll(By.css("button"))[2].nativeElement.click();
fixture.detectChanges();
const heading = fixture.debugElement.query(By.css("h1")).nativeElement;
expect(heading.textContent).toBe("Second Carousel Heading");
});
it("sets the initial focused button as the first button", () => {
expect(component["keyManager"]?.activeItemIndex).toBe(0);
});
it('emits "slideChange" event when slide changes', () => {
jest.spyOn(component.slideChange, "emit");
const thirdSlideButton = fixture.debugElement.queryAll(By.css("button"))[3];
thirdSlideButton.nativeElement.click();
expect(component.slideChange.emit).toHaveBeenCalledWith(2);
});
it('advances to the next slide when the "next" button is pressed', () => {
const middleSlideButton = fixture.debugElement.queryAll(By.css("button"))[2];
const nextButton = fixture.debugElement.queryAll(By.css("button"))[4];
middleSlideButton.nativeElement.click();
jest.spyOn(component.slideChange, "emit");
nextButton.nativeElement.click();
expect(component.slideChange.emit).toHaveBeenCalledWith(2);
});
it('advances to the previous slide when the "back" button is pressed', async () => {
const middleSlideButton = fixture.debugElement.queryAll(By.css("button"))[2];
const backButton = fixture.debugElement.queryAll(By.css("button"))[0];
middleSlideButton.nativeElement.click();
fixture.detectChanges();
jest.spyOn(component.slideChange, "emit");
backButton.nativeElement.click();
expect(component.slideChange.emit).toHaveBeenCalledWith(0);
});
});