-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #61 from fileverse/test-react-pkg
add tests for heartbit react
- Loading branch information
Showing
10 changed files
with
2,091 additions
and
183 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
name: 🚀 Run tests | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
branches: | ||
- main | ||
workflow_dispatch: | ||
|
||
concurrency: ${{ github.workflow }}-${{ github.ref }} | ||
|
||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
jobs: | ||
test: | ||
name: 🚀 Test | ||
strategy: | ||
matrix: | ||
os: [ubuntu-latest] | ||
node-version: [lts/*] | ||
pnpm-version: [latest] | ||
runs-on: ${{ matrix.os }} | ||
|
||
steps: | ||
- name: ⬇️ Checkout | ||
uses: actions/[email protected] | ||
with: | ||
token: ${{ env.GITHUB_TOKEN }} | ||
fetch-depth: 0 | ||
|
||
- name: 🟢 Setup node | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: ${{ matrix.node-version }} | ||
|
||
- name: 🥡 Setup pnpm | ||
uses: pnpm/[email protected] | ||
with: | ||
version: ${{ matrix.pnpm-version }} | ||
run_install: false | ||
|
||
- name: 🔆 Cache pnpm modules | ||
uses: actions/cache@v3 | ||
with: | ||
path: ~/.pnpm-store | ||
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} | ||
restore-keys: | | ||
${{ runner.os }}-pnpm- | ||
- name: 🧩 Install Dependencies | ||
run: pnpm install | ||
working-directory: ./packages/heartbit-core | ||
|
||
- name: 🏗️ Build | ||
run: pnpm run build | ||
working-directory: ./packages/heartbit-core | ||
|
||
- name: 🧪 Run Tests | ||
run: pnpm test | ||
working-directory: ./packages/heartbit-core |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
/** @type {import('ts-jest').JestConfigWithTsJest} */ | ||
module.exports = { | ||
globals: { | ||
'ts-jest': { | ||
useESM: true, | ||
tsconfig: { | ||
verbatimModuleSyntax: false, | ||
}, | ||
}, | ||
}, | ||
preset: 'ts-jest', | ||
testEnvironment: 'node', | ||
transform: {}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
import { HeartBitCore } from '../index'; | ||
import { getMinterContract } from '../utils'; | ||
import { describe, expect, jest, it } from '@jest/globals'; | ||
import { HEART_BIT_CONFIG } from '../constants'; | ||
import { mintData, unsignedMintData } from './mockData'; | ||
|
||
jest.mock('../utils', () => ({ | ||
getMinterContract: jest.fn().mockImplementation(() => { | ||
return { | ||
totalSupply: jest.fn().mockResolvedValue('10' as never), | ||
hashTokenMap: jest.fn().mockResolvedValue('token1' as never), | ||
balanceOf: jest.fn().mockResolvedValue('5' as never), | ||
} | ||
}), | ||
})); | ||
|
||
global.fetch = jest.fn(() => | ||
Promise.resolve(new Response(JSON.stringify({ success: true }), { | ||
status: 200, | ||
headers: { 'Content-Type': 'application/json' }, | ||
})) | ||
); | ||
|
||
describe('HeartBitCore', () => { | ||
const chain = '0xaa36a7'; | ||
const rpcUrl = HEART_BIT_CONFIG[chain].publicRPCUrl; | ||
let core = new HeartBitCore({ chain, rpcUrl }); | ||
|
||
it('should throw an error if chain is not provided', () => { | ||
expect(() => new HeartBitCore({} as any)).toThrow("Chain is required"); | ||
}); | ||
|
||
it('should initialize correctly with the provided options', () => { | ||
expect(core).toBeDefined(); | ||
expect(getMinterContract).toHaveBeenCalledWith(chain, expect.anything()); | ||
}); | ||
|
||
it('should call fetch with the correct parameters on mintHeartBit', async () => { | ||
await core.mintHeartBit(mintData); | ||
|
||
expect(fetch).toHaveBeenCalledWith(`${HEART_BIT_CONFIG[chain].relayerUrl}/signed-mint`, { | ||
method: 'POST', | ||
headers: { 'Content-Type': 'application/json' }, | ||
body: JSON.stringify(mintData), | ||
}); | ||
}); | ||
|
||
it('should call fetch with the correct parameters on unSignedMintHeartBit', async () => { | ||
|
||
const {apiKey, ...rest} = unsignedMintData | ||
await core.unSignedMintHeartBit(unsignedMintData); | ||
|
||
expect(fetch).toHaveBeenCalledWith(HEART_BIT_CONFIG[chain].relayerUrl, { | ||
method: 'POST', | ||
headers: { | ||
'Content-Type': 'application/json', | ||
'x-api-key': apiKey | ||
}, | ||
body: JSON.stringify(rest), | ||
}); | ||
}); | ||
|
||
it('should handle getTotalHeartBitCountByHash correctly', async () => { | ||
const hash = 'dummyHash'; | ||
const count = await core.getTotalHeartBitCountByHash({ hash }); | ||
expect(count).toBe(10); | ||
}); | ||
|
||
it('should handle getHeartbitHashTokenMap correctly', async () => { | ||
const hash = 'dummyHash'; | ||
const tokenMap = await core.getHeartbitHashTokenMap(hash); | ||
|
||
expect(tokenMap).toBe('token1'); | ||
}); | ||
|
||
it('should handle getHeartBitByUser correctly', async () => { | ||
const account = '0x123'; | ||
const hash = 'dummyHash'; | ||
const balance = await core.getHeartBitByUser({ account, hash }); | ||
|
||
expect(balance).toBe(5); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
export const mintData = { | ||
message: "p6f7gr-5173.csb.app wants you to sign in with your Ethereum account:\n0x852bd84A4dcDc150648AE4e8D6D6e59b1797c86f\n\nHello World!\n\nURI: https://p6f7gr-5173.csb.app\nVersion: 1\nChain ID: undefined\nNonce: 6RnPMnIbRS1yQ02ZK\nIssued At: 2024-02-15T09:14:18.897Z", | ||
signature: "0xfff4ce944d488abf2f8b2fd80bf3f585cbd14bbafe37ffd8b88e69ad88bd0c86426898416eb2c9c4f913eaa01430f4cac405c5a5c53a6410652b56874b9bd45e1c", | ||
startTime: 1706898250, | ||
endTime: 1706898251, | ||
hash: "0xba0c379a9b364b41e69a6a00a8652e28cb7dda3ca684309b940807634919a940" | ||
}; | ||
export const unsignedMintData = { | ||
startTime: 1706898250, | ||
endTime: 1706898251, | ||
hash: "ipfs://cid", | ||
account: "0x852bd84A4dcDc150648AE4e8D6D6e59b1797c86f", | ||
apiKey: 'hello' | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/** @type {import('ts-jest').JestConfigWithTsJest} */ | ||
// eslint-disable-next-line no-undef | ||
module.exports = { | ||
globals: { | ||
"ts-jest": { | ||
useESM: true, | ||
tsconfig: { | ||
verbatimModuleSyntax: false, | ||
esModuleInterop: true, | ||
}, | ||
}, | ||
}, | ||
preset: "ts-jest", | ||
testEnvironment: "jsdom", | ||
transform: {}, | ||
moduleNameMapper: { | ||
"\\.(css|sass|scss)$": "identity-obj-proxy", | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.