Skip to content

Commit 25d6e5f

Browse files
authored
Merge pull request NethermindEth#138 from stellar/fix/claim-nft-options
fix (backend): claim nft options supply find
2 parents d6d6db3 + edee8ad commit 25d6e5f

2 files changed

Lines changed: 37 additions & 19 deletions

File tree

apps/backend/src/api/embedded-wallets/use-cases/claim-nft-options/index.test.ts

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ describe('ClaimNftOptions', () => {
131131
const res = mockResponse()
132132

133133
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
134-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(mockNftSupply)
134+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(mockNftSupply)
135135
mockedNftRepository.getNftByUserAndSessionId.mockResolvedValue(null)
136136

137137
await claimNftOptions.executeHttp(req, res)
@@ -155,7 +155,7 @@ describe('ClaimNftOptions', () => {
155155
const res = mockResponse()
156156

157157
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
158-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(mockNftSupply)
158+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(mockNftSupply)
159159
mockedNftRepository.getNftByUserAndSessionId.mockResolvedValue(null)
160160

161161
await claimNftOptions.executeHttp(req, res)
@@ -189,8 +189,8 @@ describe('ClaimNftOptions', () => {
189189
})
190190
mockedUserRepository.getUserByEmail.mockResolvedValue(userWithoutWallet)
191191
// Ensure NFT supply repository returns null to prevent the function from continuing
192-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(null)
193-
mockedNftSupplyRepository.getNftSupplyByContractAddress.mockResolvedValue(null)
192+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(null)
193+
mockedNftSupplyRepository.getNftSupplyByContractAndSessionId.mockResolvedValue(null)
194194

195195
const payload: RequestSchemaT = {
196196
email: 'test@example.com',
@@ -224,8 +224,8 @@ describe('ClaimNftOptions', () => {
224224

225225
it('should throw ResourceNotFoundException if NFT supply is not found by resource', async () => {
226226
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
227-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(null)
228-
mockedNftSupplyRepository.getNftSupplyByContractAddress.mockResolvedValue(null)
227+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(null)
228+
mockedNftSupplyRepository.getNftSupplyByContractAndSessionId.mockResolvedValue(null)
229229

230230
const payload: RequestSchemaT = {
231231
email: 'test@example.com',
@@ -234,14 +234,20 @@ describe('ClaimNftOptions', () => {
234234
}
235235

236236
await expect(claimNftOptions.handle(payload)).rejects.toThrow(ResourceNotFoundException)
237-
expect(mockedNftSupplyRepository.getNftSupplyByResource).toHaveBeenCalledWith('nonexistent-resource')
238-
expect(mockedNftSupplyRepository.getNftSupplyByContractAddress).toHaveBeenCalledWith('nonexistent-resource')
237+
expect(mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId).toHaveBeenCalledWith(
238+
'nonexistent-resource',
239+
'session-123'
240+
)
241+
expect(mockedNftSupplyRepository.getNftSupplyByContractAndSessionId).toHaveBeenCalledWith(
242+
'nonexistent-resource',
243+
'session-123'
244+
)
239245
})
240246

241247
it('should find NFT supply by contract address when not found by resource', async () => {
242248
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
243-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(null)
244-
mockedNftSupplyRepository.getNftSupplyByContractAddress.mockResolvedValue(mockNftSupply)
249+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(null)
250+
mockedNftSupplyRepository.getNftSupplyByContractAndSessionId.mockResolvedValue(mockNftSupply)
245251
mockedNftRepository.getNftByUserAndSessionId.mockResolvedValue(null)
246252

247253
const payload: RequestSchemaT = {
@@ -260,8 +266,14 @@ describe('ClaimNftOptions', () => {
260266
},
261267
message: 'Retrieved NFT options successfully',
262268
})
263-
expect(mockedNftSupplyRepository.getNftSupplyByResource).toHaveBeenCalledWith('contract-address')
264-
expect(mockedNftSupplyRepository.getNftSupplyByContractAddress).toHaveBeenCalledWith('contract-address')
269+
expect(mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId).toHaveBeenCalledWith(
270+
'contract-address',
271+
'session-123'
272+
)
273+
expect(mockedNftSupplyRepository.getNftSupplyByContractAndSessionId).toHaveBeenCalledWith(
274+
'contract-address',
275+
'session-123'
276+
)
265277
})
266278

267279
it('should throw ResourceNotFoundException if NFT supply is insufficient', async () => {
@@ -272,7 +284,7 @@ describe('ClaimNftOptions', () => {
272284
} as unknown as NftSupply
273285

274286
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
275-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(insufficientSupply)
287+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(insufficientSupply)
276288

277289
const payload: RequestSchemaT = {
278290
email: 'test@example.com',
@@ -301,7 +313,7 @@ describe('ClaimNftOptions', () => {
301313
} as unknown as Nft
302314

303315
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
304-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(mockNftSupply)
316+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(mockNftSupply)
305317
mockedNftRepository.getNftByUserAndSessionId.mockResolvedValue(existingNft)
306318

307319
const payload: RequestSchemaT = {
@@ -316,7 +328,7 @@ describe('ClaimNftOptions', () => {
316328

317329
it('should return NFT options successfully when all conditions are met', async () => {
318330
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
319-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(mockNftSupply)
331+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(mockNftSupply)
320332
mockedNftRepository.getNftByUserAndSessionId.mockResolvedValue(null)
321333

322334
const payload: RequestSchemaT = {
@@ -357,7 +369,7 @@ describe('ClaimNftOptions', () => {
357369
} as unknown as NftSupply
358370

359371
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
360-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(edgeCaseSupply)
372+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(edgeCaseSupply)
361373

362374
const payload: RequestSchemaT = {
363375
email: 'test@example.com',
@@ -376,7 +388,7 @@ describe('ClaimNftOptions', () => {
376388
} as unknown as NftSupply
377389

378390
mockedUserRepository.getUserByEmail.mockResolvedValue(mockUser)
379-
mockedNftSupplyRepository.getNftSupplyByResource.mockResolvedValue(invalidSupply)
391+
mockedNftSupplyRepository.getNftSupplyByResourceAndSessionId.mockResolvedValue(invalidSupply)
380392

381393
const payload: RequestSchemaT = {
382394
email: 'test@example.com',

apps/backend/src/api/embedded-wallets/use-cases/claim-nft-options/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,15 @@ export class ClaimNftOptions extends UseCaseBase implements IUseCaseHttp<Respons
6565
}
6666

6767
// Get NFT Supply data
68-
let nftSupply = await this.nftSupplyRepository.getNftSupplyByResource(validatedData.resource)
68+
let nftSupply = await this.nftSupplyRepository.getNftSupplyByResourceAndSessionId(
69+
validatedData.resource,
70+
validatedData.session_id
71+
)
6972
if (!nftSupply) {
70-
nftSupply = await this.nftSupplyRepository.getNftSupplyByContractAddress(validatedData.resource)
73+
nftSupply = await this.nftSupplyRepository.getNftSupplyByContractAndSessionId(
74+
validatedData.resource,
75+
validatedData.session_id
76+
)
7177
}
7278

7379
if (!nftSupply) {

0 commit comments

Comments
 (0)