Skip to content

Commit

Permalink
add tests and public api
Browse files Browse the repository at this point in the history
  • Loading branch information
alQlagin committed Jan 28, 2020
1 parent 1f484b9 commit 435dfae
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 20 deletions.
49 changes: 32 additions & 17 deletions projects/ngx-pwa-install/src/lib/ngx-pwa-install.component.spec.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,40 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { createHostFactory, SpectatorHost } from '@ngneat/spectator';
import { NgxPwaInstallComponent } from './ngx-pwa-install.component';
import { fakeAsync, tick } from '@angular/core/testing';

describe('NgxPwaInstallComponent', () => {
let component: NgxPwaInstallComponent;
let fixture: ComponentFixture<NgxPwaInstallComponent>;
function createEvent() {
const event = new CustomEvent('beforeinstallprompt');
let userChoiceResolve;
(event as any).userChoice = new Promise((resolve) => userChoiceResolve = resolve);
(event as any).prompt = () => {
userChoiceResolve({outcome: 'accepted'});
};
return event;
}

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ NgxPwaInstallComponent ]
})
.compileComponents();
}));
describe('NgxPwaInstallComponent', () => {
let spectator: SpectatorHost<NgxPwaInstallComponent>;
const createHost = createHostFactory(NgxPwaInstallComponent);

beforeEach(() => {
fixture = TestBed.createComponent(NgxPwaInstallComponent);
component = fixture.componentInstance;
fixture.detectChanges();
spectator = createHost(`<ngx-pwa-install><button class="install-me">Install me</button></ngx-pwa-install>`);
});

it('should create', () => {
expect(component).toBeTruthy();
it('should not display content until BeforeInstallPromptEvent fired', () => {
spectator.detectChanges();
expect(spectator.query('.install-me')).toBeNull();
});
it('should display content when BeforeInstallPromptEvent fired', () => {
window.dispatchEvent(createEvent());
spectator.detectChanges();
expect(spectator.query('.install-me')).not.toBeNull();
});
it('should hide content when .install() called', fakeAsync(() => {
const event = createEvent();
window.dispatchEvent(event);
spectator.detectChanges();
spectator.component.install();
tick(0);
spectator.detectChanges();
expect(spectator.query('.install-me')).toBeNull();
}));
});
59 changes: 59 additions & 0 deletions projects/ngx-pwa-install/src/lib/ngx-pwa-install.module.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { Component, ModuleWithProviders, NgModule, Type } from '@angular/core';
import { createComponentFactory, Spectator } from '@ngneat/spectator';
import { BeforeInstallPrompt, NgxPwaInstallModule } from '../public-api';

@Component({
template: ''
})
class FakeComponent {
}

function configureComponentFactory(
targetModule: ModuleWithProviders<NgxPwaInstallModule> | Type<any>,
beforeInstallPromptFactory: () => Promise<void>) {
return createComponentFactory({
component: FakeComponent,
imports: [targetModule],
providers: [
{provide: BeforeInstallPrompt, useFactory: beforeInstallPromptFactory}
]
});
}

describe('NgxPwaInstallModule', () => {
let spectator: Spectator<FakeComponent>;
let spyInit: jasmine.Spy;
const beforeInstallPromptProvider = {
init() {
return Promise.resolve();
}
};
const beforeInstallPromptFactory = () => beforeInstallPromptProvider.init();

describe('without .forRoot()', () => {
const createComponent = configureComponentFactory(NgxPwaInstallModule, beforeInstallPromptFactory);

beforeEach(() => {
spyInit = spyOn(beforeInstallPromptProvider, 'init');
spectator = createComponent();
});

it('should not setup window event listener', () => {
expect(spyInit).not.toHaveBeenCalled();
});
});
describe('with .forRoot()', () => {
const targetModule = NgxPwaInstallModule.forRoot();
const createComponent = configureComponentFactory(targetModule, beforeInstallPromptFactory);

beforeEach(() => {
spyInit = spyOn(beforeInstallPromptProvider, 'init');
spectator = createComponent();
});

it('should setup window event listener', () => {
expect(spyInit).toHaveBeenCalled();
});
});
});

5 changes: 2 additions & 3 deletions projects/ngx-pwa-install/src/public-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@
* Public API Surface of ngx-pwa-install
*/

export * from './lib/ngx-pwa-install.service';
export * from './lib/ngx-pwa-install.component';
export * from './lib/ngx-pwa-install.module';
export { NgxPwaInstallModule } from './lib/ngx-pwa-install.module';
export { BeforeInstallPrompt } from './lib/ngx-pwa-install.providers';

0 comments on commit 435dfae

Please sign in to comment.