global-context-bar.component.spec.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { TestBed, fakeAsync, tick } from '@angular/core/testing';
  2. import { Router, provideRouter } from '@angular/router';
  3. import { WorkbenchContextService } from '../../../../app/core/services/workbench-context.service';
  4. import { GlobalContextBarComponent } from './global-context-bar.component';
  5. describe('GlobalContextBarComponent', () => {
  6. beforeEach(async () => {
  7. await TestBed.configureTestingModule({
  8. imports: [GlobalContextBarComponent],
  9. providers: [provideRouter([])],
  10. }).compileComponents();
  11. });
  12. it('renders only caller-provided business options', () => {
  13. const fixture = TestBed.createComponent(GlobalContextBarComponent);
  14. fixture.componentInstance.workspaceOptions = [
  15. { value: 'workspace-real', label: '业务空间 A' },
  16. ];
  17. fixture.componentInstance.platformOptions = [
  18. { value: 'jd', label: '京东' },
  19. ];
  20. fixture.detectChanges();
  21. const text = (fixture.nativeElement as HTMLElement).textContent ?? '';
  22. expect(text).toContain('业务空间 A');
  23. expect(text).toContain('京东');
  24. expect(text).not.toContain('示例店铺');
  25. });
  26. it('writes a selection to the shared context and URL', fakeAsync(() => {
  27. const fixture = TestBed.createComponent(GlobalContextBarComponent);
  28. const service = TestBed.inject(WorkbenchContextService);
  29. const router = TestBed.inject(Router);
  30. const select = document.createElement('select');
  31. const option = document.createElement('option');
  32. option.value = 'workspace-real';
  33. select.append(option);
  34. select.value = 'workspace-real';
  35. fixture.componentInstance.onSelection('workspaceId', { target: select } as unknown as Event);
  36. tick();
  37. expect(service.snapshot.workspaceId).toBe('workspace-real');
  38. expect(router.parseUrl(router.url).queryParams['workspaceId']).toBe('workspace-real');
  39. }));
  40. it('emits refresh without inventing a last-updated timestamp', () => {
  41. const fixture = TestBed.createComponent(GlobalContextBarComponent);
  42. const service = TestBed.inject(WorkbenchContextService);
  43. let componentRefreshes = 0;
  44. let serviceRefreshes = 0;
  45. fixture.componentInstance.refreshRequested.subscribe(() => componentRefreshes++);
  46. service.refreshRequested$.subscribe(() => serviceRefreshes++);
  47. fixture.componentInstance.requestRefresh();
  48. expect(componentRefreshes).toBe(1);
  49. expect(serviceRefreshes).toBe(1);
  50. expect(service.availabilitySnapshot.lastUpdated).toBeNull();
  51. });
  52. });