array_struct_mapping_storage.spec.ts 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import expect from 'expect';
  2. import { weight, createConnection, deploy, aliceKeypair, transaction, query } from './index';
  3. import { ContractPromise } from '@polkadot/api-contract';
  4. describe('Deploy array_struct_mapping_storage contract and test', () => {
  5. it('array_struct_mapping_storage', async function () {
  6. this.timeout(200000);
  7. let conn = await createConnection();
  8. const alice = aliceKeypair();
  9. let deployed_contract = await deploy(conn, alice, 'array_struct_mapping_storage.contract', BigInt(0));
  10. let contract = new ContractPromise(conn, deployed_contract.abi, deployed_contract.address);
  11. // first set a canary
  12. let gasLimit = await weight(conn, contract, "setNumber", [2147483647]);
  13. let tx = contract.tx.setNumber({ gasLimit }, 2147483647);
  14. await transaction(tx, alice);
  15. // let's add two elements to our array
  16. gasLimit = await weight(conn, contract, "push", []);
  17. tx = contract.tx.push({ gasLimit });
  18. await transaction(tx, alice);
  19. gasLimit = await weight(conn, contract, "push", []);
  20. tx = contract.tx.push({ gasLimit });
  21. await transaction(tx, alice);
  22. // set some values
  23. for (let array_no = 0; array_no < 2; array_no += 1) {
  24. for (let i = 0; i < 10; i += 1) {
  25. let index = 102 + i + array_no * 500;
  26. let val = 300331 + i;
  27. gasLimit = await weight(conn, contract, "set", [array_no, index, val]);
  28. tx = contract.tx.set({ gasLimit }, array_no, index, val);
  29. await transaction(tx, alice);
  30. }
  31. }
  32. // test our values
  33. for (let array_no = 0; array_no < 2; array_no += 1) {
  34. for (let i = 0; i < 10; i += 1) {
  35. let { output } = await query(conn, alice, contract, "get", [array_no, 102 + i + array_no * 500]);
  36. let number = Number.parseInt(output!.toString());
  37. expect(number).toEqual(300331 + i);
  38. }
  39. }
  40. // delete one and try again
  41. gasLimit = await weight(conn, contract, "rm", [0, 104]);
  42. tx = contract.tx.rm({ gasLimit }, 0, 104);
  43. await transaction(tx, alice);
  44. for (let i = 0; i < 10; i += 1) {
  45. let { output } = await query(conn, alice, contract, "get", [0, 102 + i]);
  46. let number = Number.parseInt(output!.toString());
  47. if (i != 2) {
  48. expect(number).toEqual(300331 + i);
  49. } else {
  50. expect(number).toEqual(0);
  51. }
  52. }
  53. // test our canary
  54. let { output } = await query(conn, alice, contract, "number");
  55. let number = Number.parseInt(output!.toString());
  56. expect(number).toEqual(2147483647);
  57. conn.disconnect();
  58. });
  59. });