reading-cloud.service.spec.ts 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 { API_CONFIG } from '../../core/app.constants';
  5. import { SessionService } from '../../core/session.service';
  6. import { ReadingCloudService } from './reading-cloud.service';
  7. describe('ReadingCloudService', () => {
  8. let service: ReadingCloudService;
  9. let http: HttpTestingController;
  10. let token: string;
  11. beforeEach(() => {
  12. localStorage.removeItem('NCloud/dev/User');
  13. localStorage.removeItem('xiaoshu.reading.user');
  14. localStorage.setItem('NCloud/dev/User', JSON.stringify({ objectId: 'legacy-user', sessionToken: 'r:legacy-token' }));
  15. token = '';
  16. TestBed.configureTestingModule({ providers: [
  17. provideHttpClient(),
  18. provideHttpClientTesting(),
  19. { provide: SessionService, useValue: { token: () => token } },
  20. ] });
  21. service = TestBed.inject(ReadingCloudService);
  22. http = TestBed.inject(HttpTestingController);
  23. });
  24. afterEach(() => {
  25. http.verify();
  26. localStorage.removeItem('NCloud/dev/User');
  27. localStorage.removeItem('xiaoshu.reading.user');
  28. });
  29. it('uses the current H5 login session to load the migrated reading profile', async () => {
  30. token = 'r:token-1';
  31. const result = service.ensureUser({ userId: 7, objectId: 'user-1', mobile: '13800000000', honeyName: '小树' });
  32. const request = http.expectOne(API_CONFIG.cloudFunctionUrl);
  33. expect(request.request.body).toEqual({ token: 'r:token-1', params: { action: 'reading/me' } });
  34. request.flush({ retcode: 0, result: { objectId: 'user-1', username: 'member-7', nickname: '小树' } });
  35. expect((await result).objectId).toBe('user-1');
  36. expect(JSON.parse(localStorage.getItem('xiaoshu.reading.user') || '{}').sessionToken).toBe('r:token-1');
  37. expect(localStorage.getItem('NCloud/dev/User')).toBeNull();
  38. });
  39. it('sends filters and the active session token only to the reading cloud gateway', async () => {
  40. token = 'r:token-1';
  41. const profile = service.ensureUser({ userId: 7, objectId: 'user-1', mobile: '13800000000' });
  42. http.expectOne(API_CONFIG.cloudFunctionUrl).flush({ retcode: 0, result: { objectId: 'user-1', username: 'member-7' } });
  43. await profile;
  44. const query = service.query('SurveyItem', { type: 'reading', isDeleted: { '$ne': true } }, { order: '-createdAt', limit: 3 });
  45. const request = http.expectOne(API_CONFIG.cloudFunctionUrl);
  46. expect(request.request.body).toEqual({
  47. token: 'r:token-1',
  48. params: { action: 'reading/query', className: 'SurveyItem', where: { type: 'reading', isDeleted: { '$ne': true } }, order: '-createdAt', limit: 3 },
  49. });
  50. request.flush({ retcode: 0, result: [] });
  51. expect(await query).toEqual([]);
  52. });
  53. });