_session.spec.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const {
  2. assertRequestedUserMatchesSession,
  3. requireAdmin,
  4. requireSession,
  5. } = require('./_session');
  6. describe('cloud function session helper', () => {
  7. const originalFetch = global.fetch;
  8. afterEach(() => {
  9. global.fetch = originalFetch;
  10. });
  11. it('resolves user id from Parse session token', async () => {
  12. global.fetch = vi.fn().mockResolvedValue({
  13. ok: true,
  14. json: async () => ({ objectId: 'user-a', username: 'alice' }),
  15. });
  16. const session = await requireSession({ body: { sessionToken: 'token-a', userId: 'user-a' } });
  17. expect(session.userId).toBe('user-a');
  18. expect(global.fetch).toHaveBeenCalledWith(expect.stringContaining('/parse/users/me?include=company'), expect.objectContaining({
  19. headers: expect.objectContaining({ 'X-Parse-Session-Token': 'token-a' }),
  20. }));
  21. });
  22. it('rejects forged request user id', async () => {
  23. const session = { userId: 'user-a' };
  24. expect(() => assertRequestedUserMatchesSession({ body: { userId: 'user-b' } }, session)).toThrow('没有访问该账号数据的权限');
  25. });
  26. it('requires admin role for admin actions', async () => {
  27. global.fetch = vi.fn().mockResolvedValue({
  28. ok: true,
  29. json: async () => ({ objectId: 'user-a', role: 'user' }),
  30. });
  31. await expect(requireAdmin({ body: { sessionToken: 'token-a' } })).rejects.toMatchObject({ status: 403 });
  32. });
  33. });