UNPKG

igniteui-angular-sovn

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

238 lines (193 loc) 13.4 kB
import { Component, ViewChild } from '@angular/core'; import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxAvatarComponent, IgxAvatarType, IgxAvatarSize } from './avatar.component'; import { configureTestSuite } from '../test-utils/configure-suite'; describe('Avatar', () => { configureTestSuite(); const baseClass = 'igx-avatar'; const classes = { round: `${baseClass}--rounded`, circle: `${baseClass}--circle`, small: `${baseClass}--small`, medium: `${baseClass}--medium`, large: `${baseClass}--large`, image: `${baseClass}--image`, initials: `${baseClass}--initials`, icon: `${baseClass}--icon` }; beforeAll(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ InitAvatarComponent, AvatarWithAttribsComponent, IgxAvatarComponent, InitIconAvatarComponent, InitImageAvatarComponent ] }).compileComponents(); })); it('Initializes avatar with auto-incremented id', () => { const fixture = TestBed.createComponent(InitAvatarComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.id).toContain('igx-avatar-'); expect(hostEl.id).toContain('igx-avatar-'); instance.id = 'customAvatar'; fixture.detectChanges(); expect(instance.id).toBe('customAvatar'); expect(hostEl.id).toBe('customAvatar'); }); it('Initializes square and round avatar', () => { const fixture = TestBed.createComponent(AvatarWithAttribsComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.roundShape).toBeTruthy(); expect(instance.shape).toEqual('circle'); expect(hostEl.classList).toContain(classes.circle); expect(hostEl.classList).not.toContain(classes.round); instance.shape = "square"; fixture.detectChanges(); expect(instance.roundShape).toBeFalsy(); expect(instance.shape).toEqual('square'); expect(hostEl.classList).not.toContain(classes.round); expect(hostEl.classList).not.toContain(classes.circle); instance.shape = "rounded"; fixture.detectChanges(); expect(instance.roundShape).toBeFalsy(); expect(instance.shape).toEqual('rounded'); expect(hostEl.classList).toContain(classes.round); expect(hostEl.classList).not.toContain(classes.circle); }); it('Can change its size', () => { const fixture = TestBed.createComponent(AvatarWithAttribsComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.size).toEqual(IgxAvatarSize.SMALL); expect(hostEl.classList).toContain(classes.small); instance.size = IgxAvatarSize.MEDIUM; fixture.detectChanges(); expect(instance.size).toEqual(IgxAvatarSize.MEDIUM); expect(hostEl.classList).toContain(classes.medium); instance.size = IgxAvatarSize.LARGE; fixture.detectChanges(); expect(instance.size).toEqual(IgxAvatarSize.LARGE); expect(hostEl.classList).toContain(classes.large); instance.size = 'nonsense' as any; fixture.detectChanges(); expect(instance.size).toEqual(IgxAvatarSize.SMALL); expect(hostEl.classList).toContain(classes.small); }); it('Initializes default avatar', () => { const fixture = TestBed.createComponent(InitAvatarComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.initials).toBeUndefined(); expect(instance.src).toBeUndefined(); expect(instance.icon).toBeUndefined(); expect(instance.shape).toEqual('square'); expect(hostEl.textContent).toEqual('TEST'); }); it('Initializes initials avatar', () => { const fixture = TestBed.createComponent(AvatarWithAttribsComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.type).toEqual(IgxAvatarType.INITIALS); expect(instance.initials).toEqual('ZK'); expect(hostEl.querySelector('span').textContent).toEqual('ZK'); expect(hostEl.classList).toContain(classes.initials); }); it('Initializes icon avatar', () => { const fixture = TestBed.createComponent(InitIconAvatarComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.type).toEqual(IgxAvatarType.ICON); expect(instance.icon).toBeTruthy(); expect(hostEl.classList).toContain(classes.icon); }); it('Initializes image avatar', () => { const fixture = TestBed.createComponent(InitImageAvatarComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.type).toEqual(IgxAvatarType.IMAGE); const image = instance.elementRef.nativeElement.children[0]; expect(image).toBeTruthy(); expect(image.style.backgroundImage).toBeDefined(); expect(image.classList).toContain(`${baseClass}__image`); expect(hostEl.classList).toContain(classes.image); }); it('Sets background and foreground colors', () => { const fixture = TestBed.createComponent(AvatarWithAttribsComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(hostEl.style.background).toEqual(instance.bgColor); expect(hostEl.style.color).toEqual(instance.color); instance.bgColor = '#000'; instance.color = '#fff'; fixture.detectChanges(); expect(hostEl.style.background).toEqual('rgb(0, 0, 0)'); expect(hostEl.style.color).toEqual('rgb(255, 255, 255)'); }); it('Sets ARIA attributes', () => { const fixture = TestBed.createComponent(InitImageAvatarComponent); fixture.detectChanges(); const instance = fixture.componentInstance.avatar; const hostEl = fixture.debugElement.query(By.css(baseClass)).nativeElement; expect(instance.roleDescription).toEqual('image avatar'); expect(hostEl.getAttribute('role')).toEqual('img'); expect(hostEl.getAttribute('aria-roledescription')).toEqual('image avatar'); expect(hostEl.getAttribute('aria-label')).toEqual('avatar'); }); }); @Component({ template: `<igx-avatar>TEST</igx-avatar>`, standalone: true, imports: [IgxAvatarComponent] }) class InitAvatarComponent { @ViewChild(IgxAvatarComponent, { static: true }) public avatar: IgxAvatarComponent; } @Component({ template: ` <igx-avatar [initials]="initials" [bgColor]="bgColor" [color]="color" size="small" [roundShape]="true"> </igx-avatar>`, standalone: true, imports: [IgxAvatarComponent] }) class AvatarWithAttribsComponent { @ViewChild(IgxAvatarComponent, { static: true }) public avatar: IgxAvatarComponent; public initials = 'ZK'; public color = 'orange'; public bgColor = 'royalblue'; } @Component({ template: `<igx-avatar icon="person"></igx-avatar>`, standalone: true, imports: [IgxAvatarComponent] }) class InitIconAvatarComponent { @ViewChild(IgxAvatarComponent, { static: true }) public avatar: IgxAvatarComponent; } @Component({ template: `<igx-avatar [src]="source"></igx-avatar>`, standalone: true, imports: [IgxAvatarComponent] }) class InitImageAvatarComponent { @ViewChild(IgxAvatarComponent, { static: true }) public avatar: IgxAvatarComponent; // eslint-disable-next-line max-len public source = 'data:image/jpeg;base64,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'; }