diff --git a/src/app/appmarket/admin/webhook/webhook-details/webhook-details.component.spec.ts b/src/app/appmarket/admin/webhook/webhook-details/webhook-details.component.spec.ts index 89d35d84e215e651f40edf8859f8cc4d81aa6df6..2cdf0b4149bba22ae5a7800918bd56700f4d3f4c 100644 --- a/src/app/appmarket/admin/webhook/webhook-details/webhook-details.component.spec.ts +++ b/src/app/appmarket/admin/webhook/webhook-details/webhook-details.component.spec.ts @@ -1,23 +1,70 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { WebhookDetailsComponent } from './webhook-details.component'; +import { WebhookService } from '../../../../service/webhook.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Webhook } from '../../../../model/webhook'; +import { TranslateFakeLoader, TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { FormsModule } from '@angular/forms'; + +class MockWebhookService { + getOne = jasmine.createSpy().and.returnValue(of({ id: 1, name: 'Test', eventType: 'DOMAIN_CREATION', targetUrl: 'http://test' })); + update = jasmine.createSpy().and.returnValue(of({ id: 1, name: 'Updated', eventType: 'DOMAIN_CREATION', targetUrl: 'http://test' })); +} + +class MockActivatedRoute { + params = of({ id: 1 }); +} + +class MockRouter {} describe('WebhookDetailsComponent', () => { let component: WebhookDetailsComponent; let fixture: ComponentFixture<WebhookDetailsComponent>; + let service: MockWebhookService; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [WebhookDetailsComponent] - }) - .compileComponents(); - + declarations: [WebhookDetailsComponent], + imports: [ + FormsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateFakeLoader + } + }), + ], + providers: [ + { provide: WebhookService, useClass: MockWebhookService }, + { provide: ActivatedRoute, useClass: MockActivatedRoute }, + { provide: Router, useClass: MockRouter } + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + fixture = TestBed.createComponent(WebhookDetailsComponent); component = fixture.componentInstance; + service = TestBed.inject(WebhookService) as any; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should initialize and fetch webhook by id', () => { + expect(component.webhooksId).toBe(1); + expect(service.getOne).toHaveBeenCalledWith(1); + expect(component.webhook).toBeDefined(); + expect(component.webhook.id).toBe(1); + }); + + it('should call update on submit and update webhook', () => { + component.webhook = { id: 1, name: 'Test', eventType: 'DOMAIN_CREATION', targetUrl: 'http://test' } as Webhook; + component.submit(); + expect(service.update).toHaveBeenCalledWith(component.webhook); + fixture.detectChanges(); + }); }); diff --git a/src/app/appmarket/admin/webhook/webhook-list/webhook-list.component.spec.ts b/src/app/appmarket/admin/webhook/webhook-list/webhook-list.component.spec.ts index 66dcfb7ebff2aea79a92d579c4e6e0be8592921f..9fc3ab0d77a4ec175f96ac65c1e3db2412292bb0 100644 --- a/src/app/appmarket/admin/webhook/webhook-list/webhook-list.component.spec.ts +++ b/src/app/appmarket/admin/webhook/webhook-list/webhook-list.component.spec.ts @@ -1,23 +1,93 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - +import { NO_ERRORS_SCHEMA } from '@angular/core'; import { WebhookListComponent } from './webhook-list.component'; +import { WebhookService } from '../../../../service/webhook.service'; +import { of } from 'rxjs'; +import { ModalComponent } from '../../../../shared'; +import { Webhook, WebhookType } from '../../../../model/webhook'; +import { TranslateFakeLoader, TranslateLoader, TranslateModule } from '@ngx-translate/core'; + +class MockWebhookService { + getAll = jasmine.createSpy().and.returnValue(of([{ id: 1, name: 'Test', eventType: 'DOMAIN_CREATION', targetUrl: 'http://test' }])); + create = jasmine.createSpy().and.returnValue(of({})); +} + +class MockModalComponent { + show = jasmine.createSpy(); + hide = jasmine.createSpy(); +} describe('WebhookListComponent', () => { let component: WebhookListComponent; let fixture: ComponentFixture<WebhookListComponent>; + let service: MockWebhookService; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [WebhookListComponent] + declarations: [WebhookListComponent], + imports: [ + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateFakeLoader + } + }), + ], + schemas: [NO_ERRORS_SCHEMA], + providers: [ + { provide: WebhookService, useClass: MockWebhookService } + ] + }) + .overrideComponent(WebhookListComponent, { + set: { + providers: [], + } }) .compileComponents(); - + fixture = TestBed.createComponent(WebhookListComponent); component = fixture.componentInstance; + service = TestBed.inject(WebhookService) as any; + component.modal = new MockModalComponent() as any; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should have a defined component instance', () => { + expect(component).toBeDefined(); + }); + + it('should render the component', () => { + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled).toBeTruthy(); + }); + + it('should refresh list and set webkooks', () => { + component.refreshList(); + expect(service.getAll).toHaveBeenCalled(); + fixture.detectChanges(); + expect(component.webkooks.length).toBeGreaterThan(0); + }); + + it('should open modal and set default event type', () => { + component.openModal(); + expect(component.addedWebhook.eventType).toBe(WebhookType.DOMAIN_CREATION); + expect(component.modal.show).toHaveBeenCalled(); + }); + + it('should call service.create and hide modal on closeModalAndSaveWebhook', () => { + component.addedWebhook = { name: 'Test', eventType: 'DOMAIN_CREATION', targetUrl: 'http://test' } as Webhook; + component.closeModalAndSaveWebhook(); + expect(service.create).toHaveBeenCalledWith(component.addedWebhook); + expect(component.modal.hide).toHaveBeenCalled(); + }); + + it('should set addedWebhook.eventType on type select', () => { + component.onTypeSelect('USER_ASSIGNMENT'); + expect(component.addedWebhook.eventType).toBe('USER_ASSIGNMENT'); + }); + }); diff --git a/src/app/shared/left-menu/left-menu.component.html b/src/app/shared/left-menu/left-menu.component.html index dfbe2909c0903e63a3db35d464e4650663a79281..7dd63e0be4b0576c3d95128e3a193b4af5334d3e 100644 --- a/src/app/shared/left-menu/left-menu.component.html +++ b/src/app/shared/left-menu/left-menu.component.html @@ -121,7 +121,7 @@ </li> <li *roles="['ROLE_SYSTEM_ADMIN']" [routerLinkActiveOptions]="{exact:true}" [routerLinkActive]="['active']" [ngClass]="{'collapsed': isCollapsed}"> <a style="display: flex; align-items: center;" [routerLink]="['/admin/webhooks']"> - <i class="pi pi-cog" style="margin-right:10px; font-size: 18px" title="Settings"></i> + <i class="pi pi-share-alt" style="margin-right:10px; font-size: 18px" title="Settings"></i> <span *ngIf="!isCollapsed"> {{ 'WEBHOOKS.TITLE_SHORT' | translate }} </span>