import { Component } from '@angular/core';
import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { FileModule } from '../file.module';
import { NuFileUploadComponent } from './file-upload.component';
@Component({
selector: 'prutech-file-upload-basic-test',
template: `
{{ fileUpload.value?.name }}
Choose a file...
`,
})
class NuFileUploadBasicTestComponent {
accept: string;
multiple: boolean;
disabled: boolean;
files: File | FileList;
selectFiles: File | FileList;
selectEvent(files: File | FileList): void {
this.selectFiles = files;
}
uploadEvent(files: File | FileList): void {
this.files = files;
}
cancelEvent(): void {
this.selectFiles = undefined;
this.files = undefined;
}
}
describe('Component: FileUpload', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [NuFileUploadBasicTestComponent],
imports: [FileModule],
});
TestBed.compileComponents();
}));
it('should render content inside .prutech-file-input button', async(
inject([], () => {
const fixture: ComponentFixture = TestBed.createComponent(NuFileUploadBasicTestComponent);
const component: NuFileUploadBasicTestComponent = fixture.debugElement.componentInstance;
component.multiple = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('.prutech-file-input span'))).toBeTruthy();
});
}),
));
it('should mimic file selection and then clear it', async(
inject([], () => {
const fixture: ComponentFixture = TestBed.createComponent(NuFileUploadBasicTestComponent);
const component: NuFileUploadBasicTestComponent = fixture.debugElement.componentInstance;
component.multiple = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.handleSelect([{}]);
fixture.debugElement.query(By.css('prutech-file-input')).triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeFalsy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeTruthy();
fixture.debugElement.query(By.css('.prutech-file-upload-cancel')).triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
expect(
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.value,
).toBeUndefined();
});
});
});
}),
));
it('should mimic file selection and then clear it by disabling it', async(
inject([], () => {
const fixture: ComponentFixture = TestBed.createComponent(NuFileUploadBasicTestComponent);
const component: NuFileUploadBasicTestComponent = fixture.debugElement.componentInstance;
component.multiple = false;
component.disabled = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.handleSelect([{}]);
fixture.debugElement.query(By.css('prutech-file-input')).triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeFalsy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeTruthy();
component.disabled = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
expect(
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.value,
).toBeUndefined();
});
});
});
}),
));
it('should mimic file selection and then upload it', async(
inject([], () => {
const fixture: ComponentFixture = TestBed.createComponent(NuFileUploadBasicTestComponent);
const component: NuFileUploadBasicTestComponent = fixture.debugElement.componentInstance;
component.multiple = false;
component.disabled = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.handleSelect([{}]);
fixture.debugElement.query(By.css('prutech-file-input')).triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeFalsy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeTruthy();
fixture.debugElement.query(By.css('.prutech-file-upload')).triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.files).toBeTruthy();
});
});
});
}),
));
it('should mimic file selection and throw (select) event', async(
inject([], () => {
const fixture: ComponentFixture = TestBed.createComponent(NuFileUploadBasicTestComponent);
const component: NuFileUploadBasicTestComponent = fixture.debugElement.componentInstance;
const eventSpy: jasmine.Spy = spyOn(component, 'selectEvent');
component.multiple = false;
component.disabled = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
expect(eventSpy.calls.count()).toBe(0);
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.handleSelect([{}]);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(eventSpy.calls.count()).toBe(1);
});
});
}),
));
it('should mimic file selection, upload click and throw (upload) event', async(
inject([], () => {
const fixture: ComponentFixture = TestBed.createComponent(NuFileUploadBasicTestComponent);
const component: NuFileUploadBasicTestComponent = fixture.debugElement.componentInstance;
const eventSpy: jasmine.Spy = spyOn(component, 'uploadEvent');
component.multiple = false;
component.disabled = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
expect(eventSpy.calls.count()).toBe(0);
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.handleSelect([{}]);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.selectFiles).toBeTruthy();
expect(eventSpy.calls.count()).toBe(0);
fixture.debugElement.query(By.css('.prutech-file-upload')).triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(eventSpy.calls.count()).toBe(1);
});
});
});
}),
));
it('should mimic file selection, cancel click and throw (cancel) event', async(
inject([], () => {
const fixture: ComponentFixture = TestBed.createComponent(NuFileUploadBasicTestComponent);
const component: NuFileUploadBasicTestComponent = fixture.debugElement.componentInstance;
const eventSpy: jasmine.Spy = spyOn(component, 'cancelEvent');
component.multiple = false;
component.disabled = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(fixture.debugElement.query(By.css('prutech-file-input'))).toBeTruthy();
expect(fixture.debugElement.query(By.css('.prutech-file-upload'))).toBeFalsy();
fixture.debugElement.query(By.directive(NuFileUploadComponent)).componentInstance.handleSelect([{}]);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.selectFiles).toBeTruthy();
expect(eventSpy.calls.count()).toBe(0);
fixture.debugElement.query(By.css('.prutech-file-upload-cancel')).triggerEventHandler('click', new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(eventSpy.calls.count()).toBe(1);
});
});
});
}),
));
});