| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import { provideHttpClient } from '@angular/common/http';
- import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing';
- import { TestBed } from '@angular/core/testing';
- import { CLOUD_FUNCTION_BASE_URL } from './admin.constants';
- import { AdminSessionService } from './admin-session.service';
- import { AppMigrationStatus } from './admin.models';
- import { CloudFunctionsService } from './cloud-functions.service';
- describe('CloudFunctionsService', () => {
- let service: CloudFunctionsService;
- let http: HttpTestingController;
- beforeEach(() => {
- TestBed.configureTestingModule({
- providers: [
- provideHttpClient(),
- provideHttpClientTesting(),
- { provide: AdminSessionService, useValue: { session: () => ({ sessionToken: 'r:admin-session' }), logout: jasmine.createSpy('logout') } },
- ],
- });
- service = TestBed.inject(CloudFunctionsService);
- http = TestBed.inject(HttpTestingController);
- });
- afterEach(() => http.verify());
- it('loads the live app migration matrix with the admin Parse session', async () => {
- const pending = service.app<AppMigrationStatus>('migration_status');
- const request = http.expectOne(`${CLOUD_FUNCTION_BASE_URL}/xiaoshu/app/gateway`);
- expect(request.request.body).toEqual({ token: 'r:admin-session', params: { action: 'migration_status' } });
- request.flush({ retcode: 0, retmsg: '', result: { implemented: ['app_update'], blocked: { cart_list: '目标 Schema 无购物车类' } } });
- await expectAsync(pending).toBeResolvedTo({ implemented: ['app_update'], blocked: { cart_list: '目标 Schema 无购物车类' } });
- });
- it('calls the isolated operations gateway', async () => {
- const pending = service.operations('ops/users/list', { page: 1, pageSize: 20 });
- const request = http.expectOne(`${CLOUD_FUNCTION_BASE_URL}/xiaoshu/ops/gateway-v3`);
- expect(request.request.body).toEqual({ token: 'r:admin-session', params: { operation: 'ops/users/list', page: 1, pageSize: 20 } });
- request.flush({ success: true, data: { page: 1, pageSize: 20, total: 0, items: [] } });
- await expectAsync(pending).toBeResolvedTo({ page: 1, pageSize: 20, total: 0, items: [] });
- });
- it('does not log out an authenticated user for a forbidden account-management action', async () => {
- const pending=service.admin('operatorAccounts/list');
- const assertion=expectAsync(pending).toBeRejected();
- http.expectOne(`${CLOUD_FUNCTION_BASE_URL}/xiaoshu/admin/gateway`).flush({message:'只有运营经理可以管理账号'},{status:403,statusText:'Forbidden'});
- await assertion; expect(TestBed.inject(AdminSessionService).logout).not.toHaveBeenCalled();
- });
- });
|