diff --git a/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.spec.ts b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.spec.ts new file mode 100644 index 00000000000..8b4962a503d --- /dev/null +++ b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.spec.ts @@ -0,0 +1,84 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormCloudSpinnerService } from './form-cloud-spinner.service'; +import { OverlayModule } from '@angular/cdk/overlay'; +import { FormService, FormSpinnerEvent } from '@alfresco/adf-core'; +import { Subject } from 'rxjs'; +import { TranslateModule } from '@ngx-translate/core'; +import { Component } from '@angular/core'; +import { FormSpinnerComponent } from '../../components/spinner/form-spinner.component'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatProgressSpinnerHarness } from '@angular/material/progress-spinner/testing'; +import { PortalModule } from '@angular/cdk/portal'; +import { HarnessLoader } from '@angular/cdk/testing'; +import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed'; + +@Component({ + selector: 'adf-cloud-overlay-test', + template: `
adf-cloud-overlay-test
` +}) +class SpinnerTestComponent {} + +describe('FormCloudSpinnerService', () => { + let fixture: ComponentFixture; + let rootLoader: HarnessLoader; + let spinnerService: FormCloudSpinnerService; + let formService: FormService; + + const showSpinnerEvent = new FormSpinnerEvent('toggle-spinner', { showSpinner: true, message: 'LOAD_SPINNER_MESSAGE' }); + const hideSpinnerEvent = new FormSpinnerEvent('toggle-spinner', { showSpinner: false }); + + const onDestroy$ = new Subject(); + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [FormSpinnerComponent, SpinnerTestComponent], + providers: [ + FormCloudSpinnerService, + { + provide: FormService, + useValue: { + toggleFormSpinner: new Subject() + } + } + ], + imports: [OverlayModule, PortalModule, MatProgressSpinnerModule, TranslateModule.forRoot()] + }); + + fixture = TestBed.createComponent(SpinnerTestComponent); + rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture); + spinnerService = TestBed.inject(FormCloudSpinnerService); + formService = TestBed.inject(FormService); + }); + + it('should toggle spinner', async () => { + spinnerService.initSpinnerHandling(onDestroy$); + formService.toggleFormSpinner.next(showSpinnerEvent); + fixture.detectChanges(); + + let hasSpinner = await rootLoader.hasHarness(MatProgressSpinnerHarness); + expect(hasSpinner).toBeTrue(); + + formService.toggleFormSpinner.next(hideSpinnerEvent); + fixture.detectChanges(); + + hasSpinner = await rootLoader.hasHarness(MatProgressSpinnerHarness); + expect(hasSpinner).toBeFalse(); + }); +}); diff --git a/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts index a407be2ccce..c59908a71e9 100644 --- a/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts +++ b/lib/process-services-cloud/src/lib/form/services/spinner/form-cloud-spinner.service.ts @@ -15,21 +15,21 @@ * limitations under the License. */ -import { FormService, FormSpinnerEvent } from '@alfresco/adf-core'; +import { Injectable, inject } from '@angular/core'; import { Overlay, OverlayRef } from '@angular/cdk/overlay'; import { ComponentPortal } from '@angular/cdk/portal'; -import { Injectable, inject } from '@angular/core'; -import { FormSpinnerComponent } from '../../components/spinner/form-spinner.component'; +import { FormService, FormSpinnerEvent } from '@alfresco/adf-core'; import { Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; +import { FormSpinnerComponent } from '../../components/spinner/form-spinner.component'; @Injectable() export class FormCloudSpinnerService { - private overlayRef?: OverlayRef; - private formService = inject(FormService); private overlay = inject(Overlay); + private overlayRef?: OverlayRef; + initSpinnerHandling(onDestroy$: Observable): void { this.formService.toggleFormSpinner.pipe(takeUntil(onDestroy$)).subscribe((event: FormSpinnerEvent) => { if (event?.payload.showSpinner) {