Skip to content

Commit 80ff6e4

Browse files
authored
Merge pull request #651 from hhatto/add-interface-for-stoken-owner-of
Add interface of stoken ownerOf
2 parents a46a15b + e33e4e9 commit 80ff6e4

4 files changed

Lines changed: 63 additions & 0 deletions

File tree

lib/ethereum/s-tokens/index.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import { ethers } from 'ethers'
22
import { createSTokensContract, STokensContract } from '.'
33
import { sTokensAbi } from './abi'
44
import { createPositionsCaller } from './positions'
5+
import { createOwnerOfCaller } from './ownerOf'
56
import { createRewardsCaller } from './rewards'
67
import { createTokenURICaller } from './tokenURI'
78
import { createPositionsOfPropertyCaller } from './positionsOfProperty'
89
import { createPositionsOfOwnerCaller } from './positionsOfOwner'
910

1011
jest.mock('./positions')
12+
jest.mock('./ownerOf')
1113
jest.mock('./rewards')
1214
jest.mock('./tokenURI')
1315
jest.mock('./positionsOfProperty')
@@ -39,6 +41,7 @@ describe('s-tokens/index.ts', () => {
3941
const contract = new ethers.Contract(address, [...sTokensAbi], provider)
4042
return {
4143
positions: createPositionsCaller(contract),
44+
ownerOf: createOwnerOfCaller(contract),
4245
rewards: createRewardsCaller(contract),
4346
tokenURI: createTokenURICaller(contract),
4447
positionsOfProperty: createPositionsOfPropertyCaller(contract),

lib/ethereum/s-tokens/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ import { Provider } from '@ethersproject/abstract-provider'
33
import { Signer } from '@ethersproject/abstract-signer'
44
import { sTokensAbi } from './abi'
55
import { createPositionsCaller, Positions } from './positions'
6+
import { createOwnerOfCaller } from './ownerOf'
67
import { createRewardsCaller, Rewards } from './rewards'
78
import { createTokenURICaller, TokenURI } from './tokenURI'
89
import { createPositionsOfPropertyCaller } from './positionsOfProperty'
910
import { createPositionsOfOwnerCaller } from './positionsOfOwner'
1011

1112
export type STokensContract = {
1213
readonly positions: (tokenId: number) => Promise<Positions>
14+
readonly ownerOf: (tokenId: number) => Promise<string>
1315
readonly rewards: (tokenId: number) => Promise<Rewards>
1416
readonly tokenURI: (tokenId: number) => Promise<TokenURI>
1517
readonly positionsOfProperty: (
@@ -32,6 +34,7 @@ export const createSTokensContract =
3234

3335
return {
3436
positions: createPositionsCaller(contractClient),
37+
ownerOf: createOwnerOfCaller(contractClient),
3538
rewards: createRewardsCaller(contractClient),
3639
tokenURI: createTokenURICaller(contractClient),
3740
positionsOfProperty: createPositionsOfPropertyCaller(contractClient),
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { createOwnerOfCaller } from './ownerOf'
2+
3+
describe('ownerOf.spec.ts', () => {
4+
describe('createOwnerOfCaller', () => {
5+
it('call success', async () => {
6+
const value = '0x00'
7+
8+
const contract = {
9+
ownerOf: jest
10+
.fn()
11+
.mockImplementation(async () => Promise.resolve(value)),
12+
}
13+
14+
const expected = '0x00'
15+
16+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
17+
const caller = createOwnerOfCaller(contract as any)
18+
19+
const result = await caller(1)
20+
21+
expect(result).toEqual(expected)
22+
})
23+
24+
it('call failure', async () => {
25+
const error = 'error'
26+
27+
const contract = {
28+
ownerOf: jest
29+
.fn()
30+
.mockImplementation(async () => Promise.reject(error)),
31+
}
32+
33+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
34+
const caller = createOwnerOfCaller(contract as any)
35+
36+
const result = await caller(1).catch((err) => err)
37+
38+
expect(result).toEqual(error)
39+
})
40+
})
41+
})

lib/ethereum/s-tokens/ownerOf.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
2+
import { ethers } from 'ethers'
3+
import { execute, QueryOption } from '../../common/utils/execute'
4+
5+
export type CreateOwnerOfCaller = (
6+
contract: ethers.Contract
7+
) => (tokenId: number) => Promise<string>
8+
9+
export const createOwnerOfCaller: CreateOwnerOfCaller =
10+
(contract: ethers.Contract) => async (tokenId: number) =>
11+
execute<QueryOption, string>({
12+
contract,
13+
method: 'ownerOf',
14+
args: [String(tokenId)],
15+
mutation: false,
16+
})

0 commit comments

Comments
 (0)