resolves #46 Co-authored-by: johba <johba@harb.eth> Reviewed-on: https://codeberg.org/johba/harb/pulls/53
45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { ethers } from 'ethers';
|
|
import { hasRecenterAccess, readRecenterAccess, type RecenterAccessReader } from './recenterAccess.js';
|
|
|
|
const ZERO_ADDRESS = ethers.ZeroAddress;
|
|
|
|
class MockRecenterAccessReader implements RecenterAccessReader {
|
|
constructor(
|
|
private readonly value: string,
|
|
private readonly shouldThrow = false
|
|
) {}
|
|
|
|
async recenterAccess(): Promise<string> {
|
|
if (this.shouldThrow) {
|
|
throw new Error('read failed');
|
|
}
|
|
return this.value;
|
|
}
|
|
}
|
|
|
|
test('readRecenterAccess returns zero address for empty or zero values', async () => {
|
|
const reader = new MockRecenterAccessReader('0x0000000000000000000000000000000000000000');
|
|
assert.equal(await readRecenterAccess(reader, ZERO_ADDRESS), ZERO_ADDRESS);
|
|
|
|
const emptyReader = new MockRecenterAccessReader('');
|
|
assert.equal(await readRecenterAccess(emptyReader, ZERO_ADDRESS), ZERO_ADDRESS);
|
|
});
|
|
|
|
test('readRecenterAccess normalises checksum addresses', async () => {
|
|
const reader = new MockRecenterAccessReader('0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc');
|
|
assert.equal(await readRecenterAccess(reader, ZERO_ADDRESS), '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC');
|
|
});
|
|
|
|
test('readRecenterAccess throws when reader fails', async () => {
|
|
const reader = new MockRecenterAccessReader('0x0', true);
|
|
await assert.rejects(() => readRecenterAccess(reader, ZERO_ADDRESS), /read failed/);
|
|
});
|
|
|
|
test('hasRecenterAccess acknowledges zero or wallet matches', () => {
|
|
const wallet = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC';
|
|
assert.equal(hasRecenterAccess(ZERO_ADDRESS, wallet, ZERO_ADDRESS), true);
|
|
assert.equal(hasRecenterAccess(wallet, wallet, ZERO_ADDRESS), true);
|
|
assert.equal(hasRecenterAccess('0x5cFB5CDd3E8723ba98312c90a43a4d6Ac6121240', wallet, ZERO_ADDRESS), false);
|
|
});
|