import {
async,
ComponentFixtureAutoDetect,
ComponentFixture,
TestBed
} from '@angular/core/testing';
import { Component } from '@angular/core';
import { By } from '@angular/platform-browser';
// Load the implementations that should be tested
import {
SamAccordionComponent,
SamAccordionSection
} from './accordion.component';
@Component({
template: `
Content Goes Here
More Content Goes Here
`
})
class AccordionDefault { }
@Component({
template: `
Content Goes Here
More Content Goes Here
`
})
class AccordionBordered { }
@Component({
template: `
Content Goes Here
More Content Goes Here
`
})
class AccordionInitialized { }
function getComponent(fix: any) {
return fix
.debugElement
.query(
By.directive(SamAccordionComponent)
)
.componentInstance;
}
describe('The Sam Accordion component', () => {
describe('isolated tests', () => {
let component: SamAccordionComponent;
let sectionComponent: SamAccordionSection;
let sectionComponent2: SamAccordionSection;
beforeEach(() => {
component = new SamAccordionComponent();
sectionComponent = new SamAccordionSection(component);
sectionComponent2 = new SamAccordionSection(component);
});
// section
it('should check for "name" prop and throw error', () => {
try {
sectionComponent.ngOnInit();
// shouldn't get here
expect(false).toBe(true);
} catch (e) {
expect(true).toBe(true);
}
});
it('should return index', () => {
expect(sectionComponent.index()).toBe(0);
});
it('should expand section', () => {
sectionComponent.isExpanded = false;
sectionComponent.expand();
expect(sectionComponent.isExpanded).toBe(true);
});
it('should collpase section', () => {
sectionComponent.isExpanded = true;
sectionComponent.collapse();
expect(sectionComponent.isExpanded).toBe(false);
});
// accordion
it('should collapse all sections', () => {
sectionComponent.expand();
expect(sectionComponent.isExpanded).toBe(true);
component.collapseAll();
expect(sectionComponent.isExpanded).toBe(false);
});
it('should add border class and set initial index', () => {
component.bordered = true;
component.expandIndex = 0;
component.ngOnInit();
expect(component.accordionClass).toBe('usa-accordion-bordered');
expect(sectionComponent.isExpanded).toBe(true);
});
it('should provide an output when a section expands', () => {
component.ngOnInit();
sectionComponent.expand();
component.expandedChanged(sectionComponent);
component.selectedIndexChange.subscribe(idx => {
expect(idx).toBe(0);
});
});
});
describe('integration tests', () => {
let component: SamAccordionComponent;
let fixture: any;
beforeEach( async(() => {
TestBed.configureTestingModule({
declarations: [
AccordionBordered,
AccordionDefault,
AccordionInitialized,
SamAccordionComponent,
SamAccordionSection
],
providers: [
{ provide: ComponentFixtureAutoDetect, useValue: true }
],
}).compileComponents();
}));
// section
it('should toggle expanded', () => {
fixture = TestBed.createComponent(AccordionDefault);
component = getComponent(fixture);
component.ngOnInit();
fixture.detectChanges();
const el = fixture
.debugElement
.query(
By.css('.usa-accordion-button')
)
.nativeElement;
expect(component.sections[0].isExpanded).toBe(false);
el.click();
expect(component.sections[0].isExpanded).toBe(true);
});
// accordion
it('should display an accordion with a border', () => {
fixture = TestBed.createComponent(AccordionBordered);
component = getComponent(fixture);
component.ngOnInit();
const el = fixture.debugElement.query(By.css('sam-accordion > div'));
expect(el.nativeElement.classList.contains('usa-accordion')).toBeFalsy();
expect(
el.nativeElement.classList.contains('usa-accordion-bordered')
)
.toBeTruthy();
});
it('should display sam accordions without border', function () {
fixture = TestBed.createComponent(AccordionDefault);
component = getComponent(fixture);
component.ngOnInit();
const el = fixture.debugElement.query(By.css('sam-accordion > div'));
expect(el.nativeElement.classList.contains('usa-accordion')).toBeTruthy();
expect(
el.nativeElement.classList.contains('usa-accordion-bordered')
)
.toBeFalsy();
});
it('should expand the first section', function () {
fixture = TestBed.createComponent(AccordionDefault);
component = getComponent(fixture);
component.ngOnInit();
expect(component.expandIndex).toEqual(-1);
const el = fixture.debugElement.query(By.css('button'));
el.nativeElement.click();
expect(component.expandIndex).toEqual(0);
});
it('should close a section', function () {
fixture = TestBed.createComponent(AccordionInitialized);
component = getComponent(fixture);
component.ngOnInit();
const el = fixture.debugElement.query(By.css('button'));
el.nativeElement.click();
expect(component.expandIndex).toEqual(-1);
});
});
});