array_struct_mapping_storage.spec.ts 2.8 KB

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