test: add bun tests for group-sync service
							parent
							
								
									4644e7a588
								
							
						
					
					
						commit
						3be7783aa8
					
				| @ -0,0 +1,92 @@ | ||||
| import { describe, it, expect, beforeEach, mock, spyOn } from 'bun:test'; | ||||
| import { GroupSyncService } from '../../src/services/group-sync'; | ||||
| import { db } from '../../src/db'; | ||||
| import { env } from '../../src/env'; | ||||
| 
 | ||||
| // Mock the environment variables
 | ||||
| const originalEnv = { ...env }; | ||||
| const mockEnv = { | ||||
|   WHATSAPP_COMMUNITY_ID: 'test-community', | ||||
|   EVOLUTION_API_URL: 'http://test-api', | ||||
|   EVOLUTION_API_INSTANCE: 'test-instance', | ||||
|   EVOLUTION_API_KEY: 'test-key' | ||||
| }; | ||||
| 
 | ||||
| // Mock fetch
 | ||||
| const mockFetch = mock.global('fetch', () => { | ||||
|   return Promise.resolve({ | ||||
|     ok: true, | ||||
|     json: () => Promise.resolve([ | ||||
|       { id: 'group1', subject: 'Group 1', linkedParent: 'test-community' }, | ||||
|       { id: 'group2', subject: 'Group 2', linkedParent: 'other-community' }, | ||||
|       { id: 'group3', subject: 'Group 3' } // No linkedParent
 | ||||
|     ]) | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| describe('GroupSyncService', () => { | ||||
|   beforeEach(() => { | ||||
|     db.exec('DELETE FROM groups'); | ||||
|     GroupSyncService['lastSyncAttempt'] = 0; | ||||
|     Object.assign(env, mockEnv); | ||||
|   }); | ||||
| 
 | ||||
|   afterAll(() => { | ||||
|     Object.assign(env, originalEnv); | ||||
|   }); | ||||
| 
 | ||||
|   describe('syncGroups', () => { | ||||
|     it('should skip sync if called too soon', async () => { | ||||
|       GroupSyncService['lastSyncAttempt'] = Date.now() - 1000; | ||||
|       const result = await GroupSyncService.syncGroups(); | ||||
|       expect(result).toEqual({ added: 0, updated: 0 }); | ||||
|       expect(mockFetch).not.toHaveBeenCalled(); | ||||
|     }); | ||||
| 
 | ||||
|     it('should throw if WHATSAPP_COMMUNITY_ID is missing', async () => { | ||||
|       env.WHATSAPP_COMMUNITY_ID = ''; | ||||
|       await expect(GroupSyncService.syncGroups()).rejects.toThrow('WHATSAPP_COMMUNITY_ID is not set'); | ||||
|     }); | ||||
| 
 | ||||
|     it('should filter groups by community ID', async () => { | ||||
|       const result = await GroupSyncService.syncGroups(); | ||||
|       expect(result.added).toBe(1); | ||||
|       expect(result.updated).toBe(0); | ||||
|        | ||||
|       const groups = db.query('SELECT * FROM groups').all(); | ||||
|       expect(groups).toHaveLength(1); | ||||
|       expect(groups[0].id).toBe('group1'); | ||||
|     }); | ||||
| 
 | ||||
|     it('should update existing groups', async () => { | ||||
|       // Add initial group
 | ||||
|       db.exec( | ||||
|         "INSERT INTO groups (id, community_id, name, active) VALUES ('group1', 'test-community', 'Old Name', TRUE)" | ||||
|       ); | ||||
| 
 | ||||
|       const result = await GroupSyncService.syncGroups(); | ||||
|       expect(result.added).toBe(0); | ||||
|       expect(result.updated).toBe(1); | ||||
| 
 | ||||
|       const group = db.query('SELECT * FROM groups WHERE id = ?').get('group1'); | ||||
|       expect(group.name).toBe('Group 1'); | ||||
|       expect(group.active).toBe(1); | ||||
|     }); | ||||
| 
 | ||||
|     it('should mark non-matching groups as inactive', async () => { | ||||
|       // Add initial group not in current sync
 | ||||
|       db.exec( | ||||
|         "INSERT INTO groups (id, community_id, name, active) VALUES ('old-group', 'test-community', 'Old Group', TRUE)" | ||||
|       ); | ||||
| 
 | ||||
|       await GroupSyncService.syncGroups(); | ||||
|       const group = db.query('SELECT active FROM groups WHERE id = ?').get('old-group'); | ||||
|       expect(group.active).toBe(0); | ||||
|     }); | ||||
| 
 | ||||
|     it('should handle API errors', async () => { | ||||
|       mockFetch.mockImplementationOnce(() => Promise.resolve({ ok: false, statusText: 'Not Found' })); | ||||
|       await expect(GroupSyncService.syncGroups()).rejects.toThrow('API request failed: Not Found'); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
					Loading…
					
					
				
		Reference in New Issue