import { TestBed, ComponentFixture } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { Messages } from './messages';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { Component, NO_ERRORS_SCHEMA } from '@angular/core';
import { Button } from "mirra-ui/button";
import { FormsModule } from '@angular/forms';
import { MessageService } from "mirra-ui/api";
import { Message } from "mirra-ui/api";
@Component({
template: `
`
})
class TestMessagesComponent {
msgs: Message[] = [];
constructor(private messageService: MessageService) {}
showSuccess() {
this.msgs = [];
this.msgs.push({severity:'success', summary:'Success Message', detail:'Order submitted'});
}
showInfo() {
this.msgs = [];
this.msgs.push({severity:'info', summary:'Info Message', detail:'BluOne rocks'});
}
showWarn() {
this.msgs = [];
this.msgs.push({severity:'warn', summary:'Warn Message', detail:'There are unsaved changes'});
}
showError() {
this.msgs = [];
this.msgs.push({severity:'error', summary:'Error Message', detail:'Validation failed'});
}
showDefault() {
this.msgs = [];
this.msgs.push({summary:'Default Message', detail:'Default detail'});
}
showViaService() {
this.messageService.add({severity:'success', summary:'Service Message', detail:'Via MessageService'});
}
showAllViaService() {
this.messageService.addAll([{severity:'success',key:'BluOne', summary:'Service Message', detail:'Via MessageService'},{severity:'success', summary:'Service Message', detail:'Via MessageService'}]);
}
clearWithService() {
this.messageService.clear();
}
clearWithServiceAndKey() {
this.messageService.clear("BluOne");
}
}
describe('Messages', () => {
let messages: Messages;
let fixture: ComponentFixture;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
FormsModule
],
declarations: [
Messages,
Button,
TestMessagesComponent
],
providers:[MessageService]
});
fixture = TestBed.createComponent(TestMessagesComponent);
messages = fixture.debugElement.children[0].componentInstance;
});
it('should not display by default', () => {
fixture.detectChanges();
const messageEl = fixture.debugElement.query(By.css('div'));
expect(messageEl).not.toBeTruthy();
});
it('should show success', () => {
fixture.detectChanges();
const successButton = fixture.debugElement.query(By.css('button'));
successButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.query(By.css('div'));
const iconEl = fixture.debugElement.query(By.css('.ui-messages-icon'));
const summaryEl = fixture.debugElement.query(By.css('.ui-messages-summary'));
const detailEl = fixture.debugElement.query(By.css('.ui-messages-detail'));
expect(messageEl).toBeTruthy();
expect(iconEl).toBeTruthy();
expect(summaryEl).toBeTruthy();
expect(detailEl).toBeTruthy();
expect(messageEl.nativeElement.className).toContain('ui-messages-success');
expect(iconEl.nativeElement.className).toContain('fa-check');
expect(summaryEl.nativeElement.innerHTML).toEqual('Success Message');
expect(detailEl.nativeElement.innerHTML).toContain('Order submitted');
});
it('should show info', () => {
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[1];
successButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.query(By.css('div'));
const iconEl = fixture.debugElement.query(By.css('.ui-messages-icon'));
const summaryEl = fixture.debugElement.query(By.css('.ui-messages-summary'));
const detailEl = fixture.debugElement.query(By.css('.ui-messages-detail'));
expect(messageEl).toBeTruthy();
expect(iconEl).toBeTruthy();
expect(summaryEl).toBeTruthy();
expect(detailEl).toBeTruthy();
expect(messageEl.nativeElement.className).toContain('ui-messages-info');
expect(iconEl.nativeElement.className).toContain('fa-info-circle');
expect(summaryEl.nativeElement.innerHTML).toEqual('Info Message');
expect(detailEl.nativeElement.innerHTML).toContain('BluOne rocks');
});
it('should show warning', () => {
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[2];
successButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.query(By.css('div'));
const iconEl = fixture.debugElement.query(By.css('.ui-messages-icon'));
const summaryEl = fixture.debugElement.query(By.css('.ui-messages-summary'));
const detailEl = fixture.debugElement.query(By.css('.ui-messages-detail'));
expect(messageEl).toBeTruthy();
expect(iconEl).toBeTruthy();
expect(summaryEl).toBeTruthy();
expect(detailEl).toBeTruthy();
expect(messageEl.nativeElement.className).toContain('ui-messages-warn');
expect(iconEl.nativeElement.className).toContain('fa-exclamation-triangle');
expect(summaryEl.nativeElement.innerHTML).toEqual('Warn Message');
expect(detailEl.nativeElement.innerHTML).toContain('There are unsaved changes');
});
it('should show error', () => {
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[3];
successButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.query(By.css('div'));
const iconEl = fixture.debugElement.query(By.css('.ui-messages-icon'));
const summaryEl = fixture.debugElement.query(By.css('.ui-messages-summary'));
const detailEl = fixture.debugElement.query(By.css('.ui-messages-detail'));
expect(messageEl).toBeTruthy();
expect(iconEl).toBeTruthy();
expect(summaryEl).toBeTruthy();
expect(detailEl).toBeTruthy();
expect(messageEl.nativeElement.className).toContain('ui-messages-error');
expect(iconEl.nativeElement.className).toContain('fa-times');
expect(summaryEl.nativeElement.innerHTML).toEqual('Error Message');
expect(detailEl.nativeElement.innerHTML).toContain('Validation failed');
});
it('should show default', () => {
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[4];
successButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.query(By.css('div'));
const iconEl = fixture.debugElement.query(By.css('.ui-messages-icon'));
const summaryEl = fixture.debugElement.query(By.css('.ui-messages-summary'));
const detailEl = fixture.debugElement.query(By.css('.ui-messages-detail'));
expect(messageEl).toBeTruthy();
expect(iconEl).toBeTruthy();
expect(summaryEl).toBeTruthy();
expect(detailEl).toBeTruthy();
expect(iconEl.nativeElement.className).toContain('fa-info-circle');
expect(summaryEl.nativeElement.innerHTML).toEqual('Default Message');
expect(detailEl.nativeElement.innerHTML).toContain('Default detail');
});
it('should show with service', () => {
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[5];
successButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.query(By.css('div'));
const iconEl = fixture.debugElement.query(By.css('.ui-messages-icon'));
const summaryEl = fixture.debugElement.query(By.css('.ui-messages-summary'));
const detailEl = fixture.debugElement.query(By.css('.ui-messages-detail'));
expect(messageEl).toBeTruthy();
expect(iconEl).toBeTruthy();
expect(summaryEl).toBeTruthy();
expect(detailEl).toBeTruthy();
expect(iconEl.nativeElement.className).toContain('fa-check');
expect(summaryEl.nativeElement.innerHTML).toEqual('Service Message');
expect(detailEl.nativeElement.innerHTML).toContain('Via MessageService');
});
it('should show multiple with service', () => {
messages.key = "BluOne";
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[6];
successButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.queryAll(By.css('.ui-messages-icon'));
expect(messageEl.length).toEqual(2);
});
it('should clear with service', () => {
messages.key = "BluOne";
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[6];
const clearButton = fixture.debugElement.queryAll(By.css('button'))[7];
successButton.nativeElement.click();
fixture.detectChanges();
clearButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.queryAll(By.css('.ui-messages'));
expect(messageEl.length).toEqual(0);
});
it('should clear with service and key', () => {
messages.key = "BluOne";
fixture.detectChanges();
const successButton = fixture.debugElement.queryAll(By.css('button'))[6];
const clearButton = fixture.debugElement.queryAll(By.css('button'))[8];
successButton.nativeElement.click();
fixture.detectChanges();
clearButton.nativeElement.click();
fixture.detectChanges();
const messageEl = fixture.debugElement.queryAll(By.css('.ui-messages-icon'));
expect(messageEl.length).toEqual(1);
});
});