@@ -171,10 +171,10 @@ describe("SemaphoreEthers", () => {
171171 )
172172 getEventsMocked . mockReturnValueOnce (
173173 Promise . resolve ( [
174- [ , , "110" ] ,
175- [ , , "111" ] ,
176- [ , , "112" ] ,
177- [ , , "113" ]
174+ [ , "0" , "110" ] ,
175+ [ , "1" , "111" ] ,
176+ [ , "2" , "112" ] ,
177+ [ , "3" , "113" ]
178178 ] )
179179 )
180180
@@ -199,6 +199,33 @@ describe("SemaphoreEthers", () => {
199199
200200 await expect ( fun ) . rejects . toThrow ( "Group '666' not found" )
201201 } )
202+
203+ it ( "Should correctly handle mixed batch and single additions where single additions don't align with array index" , async ( ) => {
204+ // Scenario: Batch add members at index 0-1, then single add at index 2
205+ // The MemberAdded events array will have only 1 element (for index 2),
206+ ContractMocked . mockReturnValueOnce ( {
207+ getGroupAdmin : ( ) => "0xA9C2B639a28cDa8b59C4377e980F75A93dD8605F" ,
208+ getMerkleTreeSize : ( ) => BigInt ( 3 )
209+ } as any )
210+
211+ const semaphore = new SemaphoreEthers ( )
212+
213+ // MemberRemoved events - none
214+ getEventsMocked . mockReturnValueOnce ( Promise . resolve ( [ ] ) )
215+ // MemberUpdated events - none
216+ getEventsMocked . mockReturnValueOnce ( Promise . resolve ( [ ] ) )
217+ // MembersAdded events - batch add at index 0
218+ getEventsMocked . mockReturnValueOnce ( Promise . resolve ( [ [ , "0" , [ "100" , "101" ] ] ] ) )
219+ // MemberAdded events - single add at index 2 (only 1 event, but index is 2)
220+ getEventsMocked . mockReturnValueOnce ( Promise . resolve ( [ [ , "2" , "102" ] ] ) )
221+
222+ const members = await semaphore . getGroupMembers ( "42" )
223+
224+ expect ( members ) . toHaveLength ( 3 )
225+ expect ( members [ 0 ] ) . toBe ( "100" )
226+ expect ( members [ 1 ] ) . toBe ( "101" )
227+ expect ( members [ 2 ] ) . toBe ( "102" )
228+ } )
202229 } )
203230
204231 describe ( "# getGroupVerifiedProofs" , ( ) => {
0 commit comments