// revision 6c0b585aa4a7c13c44631915d13488e6967162f4 import { TestBed } from '@angular/core/testing'; import { createGenericTestComponent } from './test/common'; import { Component } from '@angular/core'; import { CollapseModule } from '../../collapse/index'; @Component({ selector: 'test-cmp', template: '' }) class TestComponent { collapsed = false; } const createTestComponent = (html: string) => createGenericTestComponent(html, TestComponent); function getCollapsibleContent(element: HTMLElement): Element { return element.querySelector('.collapse'); } describe('bs-collapse', () => { let html = `
Some content
`; beforeEach(() => { TestBed.configureTestingModule({ declarations: [TestComponent], imports: [CollapseModule] }); TestBed.overrideComponent(TestComponent, { set: { template: html } }); }); it('should have content open and aria-expanded true', () => { const fixture = TestBed.createComponent(TestComponent); fixture.detectChanges(); const collapseEl = getCollapsibleContent(fixture.nativeElement); expect(collapseEl).toHaveCssClass('in'); expect(collapseEl).toHaveCssClass('show'); expect(collapseEl.getAttribute('aria-expanded')).toBe('true'); }); it('should have content closed and aria-expanded false', () => { const fixture = TestBed.createComponent(TestComponent); const tc = fixture.componentInstance; tc.collapsed = true; fixture.detectChanges(); const collapseEl = getCollapsibleContent(fixture.nativeElement); expect(collapseEl).not.toHaveCssClass('in'); expect(collapseEl).not.toHaveCssClass('show'); expect(collapseEl.getAttribute('aria-expanded')).toBe('false'); }); it('should toggle collapsed content based on bound model change', () => { const fixture = TestBed.createComponent(TestComponent); fixture.detectChanges(); const tc = fixture.componentInstance; const collapseEl = getCollapsibleContent(fixture.nativeElement); expect(collapseEl).toHaveCssClass('in'); expect(collapseEl).toHaveCssClass('show'); tc.collapsed = true; fixture.detectChanges(); expect(collapseEl).not.toHaveCssClass('in'); expect(collapseEl).not.toHaveCssClass('show'); tc.collapsed = false; fixture.detectChanges(); expect(collapseEl).toHaveCssClass('in'); expect(collapseEl).toHaveCssClass('show'); }); it('should allow toggling collapse from outside', () => { html = `
`; const fixture = createTestComponent(html); const compiled = fixture.nativeElement; const collapseEl = getCollapsibleContent(compiled); const buttonEl = compiled.querySelector('button'); buttonEl.click(); fixture.detectChanges(); expect(collapseEl).not.toHaveCssClass('in'); expect(collapseEl).not.toHaveCssClass('show'); buttonEl.click(); fixture.detectChanges(); expect(collapseEl).toHaveCssClass('in'); expect(collapseEl).toHaveCssClass('show'); }); });