Skip to content

Commit

Permalink
test: revert rename and fix *.test.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
boray committed Oct 24, 2024
1 parent c06249d commit 64bc45f
Show file tree
Hide file tree
Showing 3 changed files with 368 additions and 53 deletions.
4 changes: 3 additions & 1 deletion contracts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
"buildw": "tsc --watch",
"coverage": "npm run build && npx vitest run --coverage",
"format": "prettier --write --ignore-unknown **/*",
"test": "npm run build && npx vitest run",
"test": "npm run build && npx vitest run --exclude **/*provable.test.js",
"test:provable": "npm run build && npx vitest run build/src/test/NameService.provable.test.js",
"test:all": "npm run build && npx vitest run",
"lint": "npx eslint src/* --fix"
},
"devDependencies": {
Expand Down
121 changes: 121 additions & 0 deletions contracts/src/test/NameService.provable.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
import { Field, Mina, PrivateKey, PublicKey } from 'o1js';
import { beforeAll, describe, it, expect } from 'vitest';
import {
Name,
NameRecord,
offchainState,
NameService,
} from '../NameService.js';
import { randomAccounts, registerName, settle, testSetup } from './utils.js';

let sender: { address: PublicKey; key: PrivateKey };
let name_service_contract: NameService;
let addresses: Record<string, PublicKey>;
let keys: Record<string, PrivateKey>;

describe('NameService', () => {
beforeAll(async () => {
const Local = await Mina.LocalBlockchain({ proofsEnabled: true });
const { keys: _keys, addresses: _addresses } = randomAccounts(
'contract',
'user1',
'user2'
);
Mina.setActiveInstance(Local);
sender = {
address: Local.testAccounts[0].key.toPublicKey(),
key: Local.testAccounts[0].key,
};
keys = _keys;
addresses = _addresses;
name_service_contract = new NameService(addresses.contract);
name_service_contract.offchainState.setContractInstance(
name_service_contract
);
await offchainState.compile();
await NameService.compile();
console.log('compiled');
await testSetup(name_service_contract, sender, addresses, keys);
});

describe('provable integration test', () => {
it('registers names, transfers names, updates records, and resolves names', async () => {
/**
* Generate and register two names, name1 and name2, with NameRecords nr1 and nr2.
*/
const name1 = Name.fromString('name1');
const name2 = Name.fromString('name2');

const nr1 = new NameRecord({
mina_address: addresses.user1,
avatar: Field(1),
url: Field(1),
});
const nr2 = new NameRecord({
mina_address: addresses.user2,
avatar: Field(2),
url: Field(2),
});

await registerName(name1, nr1, name_service_contract, sender);
await registerName(name2, nr2, name_service_contract, sender);

await settle(name_service_contract, sender);
console.log('settled first registrations');
const name1Record = await name_service_contract.resolve_name(name1);
expect(name1Record.toJSON()).toEqual(nr1.toJSON());
const name2Record = await name_service_contract.resolve_name(name2);
expect(name2Record.toJSON()).toEqual(nr2.toJSON());

/**
* Transfer name1 to user2 and update name2 to nr1.
*/
const transferTx = await Mina.transaction(
{ sender: addresses.user1, fee: 1e5 },
async () => {
await name_service_contract.transfer_name_ownership(
name1,
addresses.user2
);
}
);
transferTx.sign([keys.user1]);
await transferTx.prove();
await transferTx.send().wait();

await settle(name_service_contract, sender);
console.log('settled transfer');
const name1RecordAfterTransfer = await name_service_contract.resolve_name(
name1
);
expect(name1RecordAfterTransfer.mina_address.toBase58()).toEqual(
addresses.user2.toBase58()
);

/**
* Update record at name2
*/
const newNr2 = new NameRecord({
mina_address: addresses.user2,
avatar: Field(42),
url: Field(100),
});
const updateTx = await Mina.transaction(
{ sender: addresses.user2, fee: 1e5 },
async () => {
await name_service_contract.set_record(name2, newNr2);
}
);
updateTx.sign([keys.user2]);
await updateTx.prove();
await updateTx.send().wait();

await settle(name_service_contract, sender);
console.log('settled set record');
const name2RecordAfterUpdate = await name_service_contract.resolve_name(
name2
);
expect(name2RecordAfterUpdate.toJSON()).toEqual(newNr2.toJSON());
});
});
});
Loading

0 comments on commit 64bc45f

Please sign in to comment.