import { TestBed, fakeAsync, tick } from '@angular/core/testing'; import { Router, provideRouter } from '@angular/router'; import { WorkbenchContextService } from '../../../../app/core/services/workbench-context.service'; import { GlobalContextBarComponent } from './global-context-bar.component'; describe('GlobalContextBarComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [GlobalContextBarComponent], providers: [provideRouter([])], }).compileComponents(); }); it('renders only caller-provided business options', () => { const fixture = TestBed.createComponent(GlobalContextBarComponent); fixture.componentInstance.workspaceOptions = [ { value: 'workspace-real', label: '业务空间 A' }, ]; fixture.componentInstance.platformOptions = [ { value: 'jd', label: '京东' }, ]; fixture.detectChanges(); const text = (fixture.nativeElement as HTMLElement).textContent ?? ''; expect(text).toContain('业务空间 A'); expect(text).toContain('京东'); expect(text).not.toContain('示例店铺'); }); it('writes a selection to the shared context and URL', fakeAsync(() => { const fixture = TestBed.createComponent(GlobalContextBarComponent); const service = TestBed.inject(WorkbenchContextService); const router = TestBed.inject(Router); const select = document.createElement('select'); const option = document.createElement('option'); option.value = 'workspace-real'; select.append(option); select.value = 'workspace-real'; fixture.componentInstance.onSelection('workspaceId', { target: select } as unknown as Event); tick(); expect(service.snapshot.workspaceId).toBe('workspace-real'); expect(router.parseUrl(router.url).queryParams['workspaceId']).toBe('workspace-real'); })); it('emits refresh without inventing a last-updated timestamp', () => { const fixture = TestBed.createComponent(GlobalContextBarComponent); const service = TestBed.inject(WorkbenchContextService); let componentRefreshes = 0; let serviceRefreshes = 0; fixture.componentInstance.refreshRequested.subscribe(() => componentRefreshes++); service.refreshRequested$.subscribe(() => serviceRefreshes++); fixture.componentInstance.requestRefresh(); expect(componentRefreshes).toBe(1); expect(serviceRefreshes).toBe(1); expect(service.availabilitySnapshot.lastUpdated).toBeNull(); }); });