powerbi-client-angular-next
Version:
Angular wrapper for powerbi-client library
202 lines (166 loc) • 5.53 kB
text/typescript
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
import { SimpleChange } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { PowerBIPaginatedReportEmbedComponent } from './powerbi-paginated-report-embed.component';
describe('PowerBIPaginatedReportEmbedComponent', () => {
let component: PowerBIPaginatedReportEmbedComponent;
let fixture: ComponentFixture<PowerBIPaginatedReportEmbedComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [PowerBIPaginatedReportEmbedComponent],
}).compileComponents();
// Arrange
fixture = TestBed.createComponent(PowerBIPaginatedReportEmbedComponent);
component = fixture.componentInstance;
});
afterEach(() => {
fixture.destroy();
});
describe('Basic tests', () => {
it('should create', () => {
// Arrange
const config = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
// Act
component.embedConfig = config;
fixture.detectChanges();
// Assert
expect(component).toBeTruthy();
});
it('renders exactly one div', () => {
// Arrange
const config = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
// Act
component.embedConfig = config;
fixture.detectChanges();
const divCount = fixture.debugElement.queryAll(By.css('div')).length;
// Assert
expect(divCount).toBe(1);
});
it('renders exactly one iframe', () => {
// Arrange
const config = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
// Act
component.embedConfig = config;
fixture.detectChanges();
const iframeCount = fixture.debugElement.queryAll(By.css('iframe')).length;
// Assert
expect(iframeCount).toBe(1);
});
it('sets the CSS classes', () => {
// Arrange
const inputCssClasses = 'test-class another-test-class';
const config = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
// Act
component.embedConfig = config;
component.cssClassName = inputCssClasses;
fixture.detectChanges();
const divElement: HTMLElement = fixture.debugElement.queryAll(By.css('div'))[0].nativeElement;
// Assert
expect(divElement.classList).toContain(inputCssClasses.split(' ')[0]);
expect(divElement.classList).toContain(inputCssClasses.split(' ')[1]);
});
});
describe('Interaction with Power BI service', () => {
let mockPowerBIService: any;
beforeEach(() => {
mockPowerBIService = jasmine.createSpyObj('mockService', ['embed', 'setSdkInfo']);
});
it('embeds paginated report when accessToken provided', () => {
// Arrange
const config = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
// Act
component.embedConfig = config;
component.service = mockPowerBIService;
fixture.detectChanges();
// Assert
expect(mockPowerBIService.embed).toHaveBeenCalledTimes(1);
});
it('embeds when embedConfig is updated in new input data', () => {
// Arrange
const config = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
// Act
component.embedConfig = config;
component.service = mockPowerBIService;
fixture.detectChanges();
// Assert
expect(mockPowerBIService.embed).toHaveBeenCalled();
mockPowerBIService.embed.calls.reset();
// Embed URL of different paginated report
const newConfig = {
...config,
embedUrl: 'https://app.powerbi.com/newFakeEmbedUrl'
};
// Act
component.embedConfig = newConfig;
component.ngOnChanges({
embedConfig: new SimpleChange(config, component.embedConfig, false),
})
fixture.detectChanges();
// Assert
expect(mockPowerBIService.embed).toHaveBeenCalled();
});
it('does not embed again if no changes in embedConfig', () => {
// Arrange
const config = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
const newConfig = {
type: 'report',
id: 'fakeId',
embedUrl: 'https://app.powerbi.com/fakeEmbedUrl',
accessToken: 'fakeToken',
};
// Act
component.embedConfig = config;
component.service = mockPowerBIService;
fixture.detectChanges();
// Assert
expect(mockPowerBIService.embed).toHaveBeenCalledTimes(1);
mockPowerBIService.embed.calls.reset();
// Act
// With accessToken (embed)
component.embedConfig = newConfig;
component.ngOnChanges({
embedConfig: new SimpleChange(config, component.embedConfig, false),
});
fixture.detectChanges();
// Assert
expect(mockPowerBIService.embed).not.toHaveBeenCalled();
});
});
});