cloud-functions.service.spec.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { provideHttpClient } from '@angular/common/http';
  2. import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing';
  3. import { TestBed } from '@angular/core/testing';
  4. import { CLOUD_FUNCTION_BASE_URL } from './admin.constants';
  5. import { AdminSessionService } from './admin-session.service';
  6. import { AppMigrationStatus } from './admin.models';
  7. import { CloudFunctionsService } from './cloud-functions.service';
  8. describe('CloudFunctionsService', () => {
  9. let service: CloudFunctionsService;
  10. let http: HttpTestingController;
  11. beforeEach(() => {
  12. TestBed.configureTestingModule({
  13. providers: [
  14. provideHttpClient(),
  15. provideHttpClientTesting(),
  16. { provide: AdminSessionService, useValue: { session: () => ({ sessionToken: 'r:admin-session' }), logout: jasmine.createSpy('logout') } },
  17. ],
  18. });
  19. service = TestBed.inject(CloudFunctionsService);
  20. http = TestBed.inject(HttpTestingController);
  21. });
  22. afterEach(() => http.verify());
  23. it('loads the live app migration matrix with the admin Parse session', async () => {
  24. const pending = service.app<AppMigrationStatus>('migration_status');
  25. const request = http.expectOne(`${CLOUD_FUNCTION_BASE_URL}/xiaoshu/app/gateway`);
  26. expect(request.request.body).toEqual({ token: 'r:admin-session', params: { action: 'migration_status' } });
  27. request.flush({ retcode: 0, retmsg: '', result: { implemented: ['app_update'], blocked: { cart_list: '目标 Schema 无购物车类' } } });
  28. await expectAsync(pending).toBeResolvedTo({ implemented: ['app_update'], blocked: { cart_list: '目标 Schema 无购物车类' } });
  29. });
  30. it('calls the isolated operations gateway', async () => {
  31. const pending = service.operations('ops/users/list', { page: 1, pageSize: 20 });
  32. const request = http.expectOne(`${CLOUD_FUNCTION_BASE_URL}/xiaoshu/ops/gateway-v3`);
  33. expect(request.request.body).toEqual({ token: 'r:admin-session', params: { operation: 'ops/users/list', page: 1, pageSize: 20 } });
  34. request.flush({ success: true, data: { page: 1, pageSize: 20, total: 0, items: [] } });
  35. await expectAsync(pending).toBeResolvedTo({ page: 1, pageSize: 20, total: 0, items: [] });
  36. });
  37. it('does not log out an authenticated user for a forbidden account-management action', async () => {
  38. const pending=service.admin('operatorAccounts/list');
  39. const assertion=expectAsync(pending).toBeRejected();
  40. http.expectOne(`${CLOUD_FUNCTION_BASE_URL}/xiaoshu/admin/gateway`).flush({message:'只有运营经理可以管理账号'},{status:403,statusText:'Forbidden'});
  41. await assertion; expect(TestBed.inject(AdminSessionService).logout).not.toHaveBeenCalled();
  42. });
  43. });