UNPKG

@simbachain/simbats

Version:
1,082 lines (894 loc) 71.4 kB
import { Simba, } from "../../src/simba"; import { expect } from 'chai'; import 'mocha'; import { baseApiUrl, orgName, appName, contractName, bundleHash, mumbaiWallet, userEmail, solContractName, Quorum, ethereum, transactionHash, solidity, sourceCode, deploymentID, designID, artifactID, transactionID, mumbai, eventContract, eventName, nonPendingTransactionID, transactionObject, } from "../project_configs" import * as path from 'path'; import {cwd} from 'process'; import * as fs from "fs"; import { FileHandler } from "../../src/filehandler"; import { RequestHandler, } from "../../src/request_handler"; import { callFakeMethod, } from "../tests_setup/fake_method_caller"; import sinon from "sinon"; describe('testing Simba.getSimbaContract', () => { it('simba.simbaContract.baseApiUrl should be baseApiUrl', async () => { const simba = new Simba(); const simbaContract = simba.getSimbaContract(appName, contractName); expect(simbaContract.baseApiURL).to.equal(baseApiUrl); }); }); describe('testing Simba.whoAmI', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("whoAmI")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const iAm = await simba.whoAmI() as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/user/whoami/", sinon.match({}), true, )).to.be.true; expect(iAm.username).to.equal(userEmail); expect(iAm.first_name).to.exist; expect(iAm.last_name).to.exist; expect(iAm.admin).to.equal(true); expect(iAm.email).to.equal(userEmail) expect(iAm.organisations.length).to.be.greaterThan(0); expect(iAm.default_organisation).to.exist; expect(iAm.permissions).to.exist; sandbox.restore(); }); }); describe('testing Simba.balance', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("balance")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const balance = await simba.balance("mumbai", mumbaiWallet) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/user/account/mumbai/balance/0x59D859Da04439AE87Afd689A4CA89C354CB93532/", sinon.match({}), true, )) expect(balance.balance).to.exist; sandbox.restore(); }); }); describe('testing Simba.adminSetWallet', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doPostRequestStub = sandbox.stub(RequestHandler.prototype, "doPostRequest").resolves(await callFakeMethod("adminSetWallet")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const userID = 17; const res: any = await simba.adminSetWallet( userID, "fakeBlockchain", "fakePublicKey", "fakePrivateKey", ); expect(doPostRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/admin/users/17/wallet/set/", sinon.match({}), sinon.match({"blockchain":"fakeBlockchain","identities":[{"pub":"fakePublicKey","priv":"fakePrivateKey"}]}), true, )).to.be.true; expect(res.wallet).to.equal("someWalletData"); sandbox.restore(); }); }); describe('testing Simba.setWallet', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doPostRequestStub = sandbox.stub(RequestHandler.prototype, "doPostRequest").resolves(await callFakeMethod("adminSetWallet")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res: any = await simba.setWallet( "fakeBlockchain", "fakePublicKey", "fakePrivateKey", ); expect(doPostRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/user/wallet/set/", sinon.match({}), sinon.match({"blockchain":"fakeBlockchain","identities":[{"pub":"fakePublicKey","priv":"fakePrivateKey"}]}), true, )).to.be.true; expect(res.wallet).to.equal("someWalletData"); sandbox.restore(); }); }); describe('testing Simba.getWallet', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getWallet")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const walletRes = await simba.getWallet() as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/user/wallet/", sinon.match({}), true, )).to.be.true; const wallet = walletRes.wallet; expect(wallet.principal).to.equal(userEmail); expect(wallet.alias).to.equal(userEmail); expect(wallet.identities).to.exist; sandbox.restore(); }); }); describe('testing Simba.createOrg', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const orgName = "simbats_org"; const display = "simbats_org"; const sandbox = sinon.createSandbox(); const doPostRequestStub = sandbox.stub(RequestHandler.prototype, "doPostRequest").resolves(await callFakeMethod("createOrg")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.createOrg(orgName, display) as Record<any, any>; expect(doPostRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/organisations/", sinon.match({}), sinon.match({"name":"simbats_org","display_name":"simbats_org"}), true, )).to.be.true; expect(res.id).to.equal("3fa85f64-5717-4562-b3fc-2c963f66afa6"); sandbox.restore(); }); }); describe('testing Simba.createApp', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const orgName = "simbats_org"; const appName = "simbats_app"; const display = "simbats_app"; const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); try { // create app will throw an error when doGetRequest resolves await simba.createApp(orgName, appName, display) as Record<any, any>; } catch (error) { // do nothing } expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/organisations/simbats_org/applications/simbats_app/", sinon.match({}), true, )).to.be.true; sandbox.restore(); }); }); describe('testing Simba.getApplication', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getApplication")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const app = await simba.getApplication(orgName, appName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/organisations/brendan_birch_simbachain_com/applications/BrendanTestApp/", sinon.match({}), true, )).to.be.true; expect(app.name).to.equal(appName); expect(app.id).to.equal("fb5fd523-9982-4785-a0ea-89d277f4014b"); expect(app.display_name).to.equal(appName) expect(app.created_on).to.equal("2022-07-15T22:00:42.480234Z"); expect(app.number_of_api).to.equal(40) expect(app.openapi).to.equal("https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/"); sandbox.restore(); }); }); describe('testing Simba.getApplicationTransactions', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getApplicationTransactions")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const txns = await simba.getApplicationTransactions(appName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/transactions/", sinon.match({}), true, )).to.be.true; expect(txns.count).to.be.greaterThan(0); expect(txns.next).to.include("https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/transactions/?limit=10&offset=10"); expect(txns.previous).to.not.equal(undefined); expect(txns.results.length).to.be.greaterThan(0); const txn = txns.results[0]; expect(txn.id).to.exist; expect(txn.request_id).to.exist; expect(txn.created_on).to.exist; expect(Object.keys(txn).includes("finalized_on")).to.equal(true); expect(txn.method).to.exist; expect(txn.inputs).to.exist; expect(txn.receipt).to.exist; expect(Object.keys(txn).includes("error")).to.equal(true); expect(txn.error_details).to.exist; expect(txn.state).to.exist; expect(txn.raw_transaction).to.exist; expect(txn.signed_transaction).to.exist; expect(txn.transaction_hash).to.exist; expect(txn.bundle).to.exist; expect(Object.keys(txn).includes("block")).to.equal(true); expect(txn.nonce).to.exist; expect(txn.from_address).to.exist; expect(Object.keys(txn).includes("to_address")).to.equal(true); expect(txn.created_by).to.exist; expect(txn.contract).to.exist; expect(txn.app).to.exist; expect(txn.blockchain).to.exist; expect(txn.origin).to.exist; expect(txn.transaction_type).to.exist; expect(txn.confirmations).to.exist; expect(txn.value).to.exist; sandbox.restore(); }); }); describe('testing Simba.getApplicationContract', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getApplicationContract")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const contract = await simba.getApplicationContract(appName, contractName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/", sinon.match({}), true, )).to.be.true; expect(contract.id).to.exist; expect(contract.artifact).to.exist; expect(contract.metadata.contract.name).to.equal("TestContractChanged"); expect(contract.has_assets).to.equal(false); expect(contract.blockchain).to.equal("3b288902-8438-492b-857a-58060d9c254a"); expect(contract.storage).to.equal("f82d86ad-9a8f-4730-9765-770d2f72f6df"); expect(contract.created_on).to.equal("2022-08-26T17:12:19.082951Z"); expect(contract.updated_on).to.exist; expect(Object.keys(contract).includes("version")).to.equal(true); expect(contract.display_name).to.equal("BrendanTestApp"); expect(contract.api_name).to.equal(contractName); expect(contract.organisation).to.equal("20e69814-43d0-42b4-8499-d13a9d1afb23"); expect(contract.asset_type).to.equal(contractName); expect(contract.generate_request_id).to.equal(false); sandbox.restore(); }); }); describe('testing Simba.getcontractTransactions', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getContractTransactions")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const txns = await simba.getContractTransactions(appName, contractName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/transactions/", sinon.match({}), true, )).to.be.true; expect(txns.count).to.be.greaterThan(0); expect(txns.next.includes("https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/transactions/?limit=10&offset=10")).to.equal(true); expect(txns.previous).to.equal(null); expect(txns.results.length).to.be.greaterThanOrEqual(0); sandbox.restore(); }); }); describe('testing Simba.getcontractTransactions with queryParams', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const id = "5a2288c6-0562-41e8-8f63-e6820fa3e62a"; const queryParams = { id, } const headersWithQueryParams = { headers: { Authorization: 'Bearer XTTGViuQ7LPi1MCqmfuTxh3zq48PNp', 'Content-Type': 'application/json' }, params: { id: '5a2288c6-0562-41e8-8f63-e6820fa3e62a' } }; const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getContractTransactionsWithQueryParams")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves(headersWithQueryParams); const txn = await simba.getContractTransactions(appName, contractName, queryParams) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/transactions/", sinon.match(headersWithQueryParams), true, )).to.be.true; expect(txn.count).to.equal(1); expect(txn.next).to.equal(null); expect(txn.previous).to.equal(null); expect(txn.results[0].id).to.equal(id); sandbox.restore(); }); }); describe('testing Simba.getContracts', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getContracts")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const contracts = await simba.getContracts(appName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contracts/", sinon.match({}), true, )).to.be.true; expect(contracts.count).to.be.greaterThan(0); expect(contracts.next).to.include("https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contracts/?limit=10&offset=10"); expect(Object.keys(contracts).includes("previous")).to.equal(true); const contract = contracts.results[0] expect(contract.id).to.exist; expect(contract.artifact).to.exist; expect(contract.blockchain).to.exist; expect(contract.storage).to.exist; expect(contract.storage_container).to.exist; expect(contract.created_on).to.exist; expect(contract.updated_on).to.exist; expect(Object.keys(contract).includes("address")).to.equal(true); expect(Object.keys(contract).includes("version")).to.equal(true); expect(contract.display_name).to.exist; expect(contract.api_name).to.exist; expect(contract.organisation).to.exist; expect(contract.contract_type).to.exist; expect(contract.asset_type).to.exist; expect(contract.state).to.exist; expect(contract.generate_request_id).to.exist; sandbox.restore(); }); }); describe('testing Simba.validateBundleHash', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("validateBundleHash")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const ver = await simba.validateBundleHash(appName, contractName, bundleHash) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/validate/test_contract_vds5/57f6ef0fcc97614f899af3f165cabbaec9632b95fc89906837f474a6a2c8a184/", sinon.match({}), true, )).to.be.true; expect(Object.keys(ver).includes("errors")).to.equal(true); expect(ver.alg).to.equal("sha256"); expect(ver.digest).to.equal("hex"); expect(ver.files.length).to.equal(2); const file1 = ver.files[0]; expect(file1.alg).to.equal("sha256"); expect(file1.digest).to.equal("hex"); expect(file1.uid).to.equal("189f55d6-19e8-4b16-8bec-7c31978d3c04.gz"); expect(file1.mime).to.equal("image/png"); expect(file1.name).to.equal("testimage1.png"); expect(file1.hash).to.equal("2296eb9942777137afc109a19b8140feb3f31a5bc816d53362e68506346d6b9a"); expect(file1.size).to.equal(83763); sandbox.restore(); }); }); describe('testing Simba.getManifestForBundleFromBundleHash', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getManifestForBundleFromBundleHash")) sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const manifest = await simba.getManifestForBundleFromBundleHash(appName, contractName, bundleHash) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/bundle/57f6ef0fcc97614f899af3f165cabbaec9632b95fc89906837f474a6a2c8a184/manifest/", sinon.match({}), true, )).to.be.true; expect(manifest.alg).to.equal("sha256"); expect(manifest.digest).to.equal("hex"); expect(manifest.files.length).to.equal(2); const file1 = manifest.files[0]; expect(file1.alg).to.equal("sha256"); expect(file1.digest).to.equal("hex"); expect(file1.uid).to.equal("189f55d6-19e8-4b16-8bec-7c31978d3c04.gz"); expect(file1.mime).to.equal("image/png"); expect(file1.name).to.equal("testimage1.png"); expect(file1.hash).to.equal("2296eb9942777137afc109a19b8140feb3f31a5bc816d53362e68506346d6b9a"); expect(file1.size).to.equal(83763); sandbox.restore(); }); }); describe('testing Simba.getContractInfo', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getContractInfo")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const info = await simba.getContractInfo(appName, contractName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/info/", sinon.match({}), true, )).to.be.true; const contract = info.contract; expect(contract.name).to.equal(solContractName); expect(contract.enums).to.exist; expect("TestContractChanged.Addr" in contract.types).to.equal(true); expect("TestContractChanged.Person" in contract.types).to.equal(true); expect("TestContractChanged.AddressPerson" in contract.types).to.equal(true); expect(contract.assets).to.exist; expect(contract.events).to.exist; expect(contract.source.lang).to.equal("solidity"); expect(contract.source.version).to.equal("^0.8.0"); expect(contract.methods).to.exist; expect(contract.abstract).to.equal(false); expect(contract["constructor"]).to.exist; expect(contract.inheritance.length).to.equal(0); expect(info.api_name).to.equal(contractName); expect(info.name).to.equal(contractName); expect(info.network).to.equal(Quorum); expect(info.network_type).to.equal(ethereum) expect(info.poa).to.equal(true); expect(info.faucet).to.equal(null); expect(info.simba_faucet).to.equal(false); sandbox.restore(); }); }); describe('testing Simba.getEvents', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestSTub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getEvents")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.getEvents( appName, eventContract, eventName, ) as Record<any, any>; expect(doGetRequestSTub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/eventcontract_vds5/events/Log/", sinon.match({}), true, )).to.be.true; expect(res.count).to.exist; expect(Object.keys(res).includes("next")).to.equal(true); expect(Object.keys(res).includes("previous")).to.equal(true); expect(res.results.length).to.exist; if (res.results.length > 0) { const event = res.results[0]; expect(Object.keys(event).includes("id")).to.equal(true); expect(Object.keys(event).includes("created_on")).to.equal(true); expect(Object.keys(event).includes("updated_on")).to.equal(true); expect(Object.keys(event).includes("event_name")).to.equal(true); expect(Object.keys(event).includes("inputs")).to.equal(true); expect(Object.keys(event).includes("transaction")).to.equal(true); } sandbox.restore(); }); }); describe('testing Simba.adminGetEvents', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("adminGetEvents")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.adminGetEvents() as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/admin/events/", sinon.match({}), true, )).to.be.true; expect(res.count).to.be.greaterThan(0); expect(Object.keys(res).includes("next")).to.equal(true); expect(Object.keys(res).includes("previous")).to.equal(true); expect(res.results.length).to.exist; if (res.results.length > 0) { const event = res.results[0]; expect(event.id).to.exist; expect(event.created_on).to.exist; expect(event.updated_on).to.exist; expect(event.event_name).to.exist; expect(event.inputs).to.exist; expect(event.transaction).to.exist; } sandbox.restore(); }); }); describe('testing Simba.getReceipt', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getReceipt")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.getReceipt(appName, contractName, transactionHash) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/receipt/0x2b05a28c90283011054f9299e92b80f045ff3d454f87008c8b67e767393b7d14/", sinon.match({}), true, )).to.be.true; const receipt = res.receipt; expect(receipt.blockHash).to.equal("0x8b86451a944d10019047b9e14c3c423a1d620254733b02bc34c7292b4b82f04e"); expect(receipt.blockNumber).to.equal(13814752); expect(receipt.contractAddress).to.equal(null); expect(receipt.cumulativeGasUsed).to.be.greaterThan(0); expect(receipt.from).to.equal("0xCa47475036474eAc0dF6697e6A6C74386f218236"); expect(receipt.gasUsed).to.be.greaterThan(0); expect(receipt.isPrivacyMarkerTransaction).to.equal(false); expect(receipt.logs.length).to.equal(0); expect(receipt.logsBloom).to.exist; expect(receipt.status).to.exist; expect(receipt.to).equal("0x3daac1c8Bb80406D0eb2e7608C5d2fBcA92eD4a6"); expect(receipt.transactionHash).to.equal(transactionHash); expect(receipt.transactionIndex).to.equal(0); expect(receipt.type).to.equal("0x0"); sandbox.restore(); }); }); describe('testing Simba.getTransaction', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getTransaction")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.getTransaction(appName, contractName, transactionHash) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/transaction/0x2b05a28c90283011054f9299e92b80f045ff3d454f87008c8b67e767393b7d14/", sinon.match({}), true, )).to.be.true; const transaction = res.transaction; expect(transaction.blockHash).to.equal("0x8b86451a944d10019047b9e14c3c423a1d620254733b02bc34c7292b4b82f04e"); expect(transaction.blockNumber).to.equal(13814752); expect(transaction.from).to.equal("0xCa47475036474eAc0dF6697e6A6C74386f218236"); expect(transaction.gas).to.be.greaterThan(0); expect(transaction.gasPrice).to.be.greaterThanOrEqual(0); expect(transaction.hash).to.equal(transactionHash); expect(transaction.input).to.exist; expect(transaction.nonce).to.equal(325) expect(transaction.to).equal("0x3daac1c8Bb80406D0eb2e7608C5d2fBcA92eD4a6"); expect(transaction.value).to.equal(0); expect(transaction.type).to.equal("0x0"); expect(transaction.v).to.equal(709); expect(transaction.r).to.equal("0x2a7f3ad4a253733599528764bfd364443cf3346b32f6a541d803c92cfaf0ff23"); expect(transaction.s).to.equal("0x7f8fdf641c3ecc8c0f8e817885ff9ca1b3c006cc260039328526e093f28540e0"); sandbox.restore(); }); }); describe('testing Simba.getTransactionsByMethod', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getTransactionsByMethod")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.getTransactionsByMethod(appName, contractName, "structTest5") as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/structTest5/", sinon.match({}), true, )).to.be.true; expect(res.count).to.be.greaterThan(0); expect(res.next.includes("https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/structTest5/?limit=10&offset=10")).to.equal(true); expect(res.results.length).to.be.greaterThan(0); sandbox.restore(); }); }); describe('testing Simba.getTransactionsByMethod with queryParams', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const id = "5a2288c6-0562-41e8-8f63-e6820fa3e62a"; const queryParams = { id, } const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getTransactionsByMethodWithQueryParams")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.getTransactionsByMethod(appName, contractName, "structTest5", queryParams) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/structTest5/", sinon.match({}), true, )).to.be.true; expect(res.count).to.be.equal(1); expect(res.next).to.equal(null); expect(res.previous).to.equal(null); expect(res.results[0].id).to.equal(id); sandbox.restore(); }); }); describe('testing Simba.getTransactionsByContract', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getTransactionsByContract")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.getTransactionsByContract(appName, contractName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/transactions/", sinon.match({}), true, )).to.be.true; expect(res.count).to.be.greaterThan(0); expect(res.next.includes("https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/transactions/?limit=10&offset=10")).to.equal(true); expect(res.previous).to.equal(null); expect(res.results.length).to.be.greaterThan(0); sandbox.restore(); }); }); describe('testing Simba.getTransactionsByContract with queryParams', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const id = "5a2288c6-0562-41e8-8f63-e6820fa3e62a"; const queryParams = { id, } const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getTransactionsByMethodWithQueryParams")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.getTransactionsByMethod(appName, contractName, "structTest5", queryParams) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/structTest5/", sinon.match({}), true, )).to.be.true; expect(res.count).to.equal(1); expect(res.next).to.equal(null); expect(res.previous).to.equal(null); expect(res.results[0].id).to.equal(id); sandbox.restore(); }); }); describe('testing Simba.submitContractMethod', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const person = { name: "Lenny's Ghost", age: 1000, addr: { street: "rogers", town: "nyc", number: 1234, }, } const methodName = "structTest5"; const inputs = { person, } const imageFile1Path = path.join(cwd(), "test_data", "testimage1.png"); const imageFile2Path = path.join(cwd(), "test_data", "testimage2.png"); const filePaths = [imageFile1Path, imageFile2Path]; const sandbox = sinon.createSandbox(); const doPostRequestStub = sandbox.stub(RequestHandler.prototype, "doPostRequestWithFormData").resolves(await callFakeMethod("structTest5Submit")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); sandbox.stub(RequestHandler.prototype, "formDataFromFilePathsAndInputs").resolves({}); sandbox.stub(RequestHandler.prototype, "formDataHeaders").resolves({}); const res = await simba.submitContractMethod(appName, contractName, methodName, inputs, filePaths) as Record<any, any>; expect(doPostRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/structTest5/", sinon.match({}), sinon.match({}), )).to.be.true; expect(res.id).to.exist; expect(res.request_id).to.exist; expect(res.created_on).to.exist; expect(res.finalized_on).to.equal(null); expect(res.method).to.equal(methodName); expect(res.inputs.person).to.exist; expect(res.inputs["_bundleHash"]).to.exist; expect(res.receipt).to.exist; expect(Object.keys(res).includes("error")).to.equal(true); expect(res.error_details).to.exist; expect(res.state).to.equal("SUBMITTED"); const raw_transaction = res.raw_transaction; expect(raw_transaction.from).to.exist; expect(raw_transaction.to).to.exist; expect(raw_transaction.chainId).to.exist; expect(raw_transaction.nonce).to.exist; expect(raw_transaction.data).to.exist; expect(raw_transaction.value).to.exist; expect(raw_transaction.gas).to.exist; expect(raw_transaction.gasPrice).to.exist; const signed_transaction = res.signed_transaction; expect(signed_transaction.rawTransaction).to.exist; expect(signed_transaction.hash).to.exist; expect(signed_transaction.r).to.exist; expect(signed_transaction.s).to.exist; expect(signed_transaction.v).to.exist; expect(res.transaction_hash).to.exist expect(res.bundle).to.exist; expect(res.block).to.equal(null); expect(res.nonce).to.be.greaterThan(0); expect(res.from_address).to.exist; expect(res.to_address).to.equal(null); expect(res.created_by).to.exist; expect(res.contract.id).to.equal("f8896066-73c4-40b6-837e-7bcb8307b231"); expect(res.contract.api_name).to.equal(contractName); expect(res.app).to.equal("fb5fd523-9982-4785-a0ea-89d277f4014b"); expect(res.blockchain).to.equal("3b288902-8438-492b-857a-58060d9c254a"); expect(res.origin).to.equal("SCAAS"); expect(res.transaction_type).to.equal("MC"); expect(res.confirmations).to.equal(0); expect(res.value).to.equal("0"); sandbox.restore(); }); }); describe('testing Simba.submitContractMethodSync', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const person = { name: "Lenny's Ghost", age: 1000, addr: { street: "rogers", town: "nyc", number: 1234, }, } const methodName = "structTest5"; const inputs = { person, } const imageFile1Path = path.join(cwd(), "test_data", "testimage1.png"); const imageFile2Path = path.join(cwd(), "test_data", "testimage2.png"); const filePaths = [imageFile1Path, imageFile2Path]; const sandbox = sinon.createSandbox(); const doPostRequestStub = sandbox.stub(RequestHandler.prototype, "doPostRequestWithFormData").resolves(await callFakeMethod("structTest5Submit")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); sandbox.stub(RequestHandler.prototype, "formDataFromFilePathsAndInputs").resolves({}); sandbox.stub(RequestHandler.prototype, "formDataHeaders").resolves({}); const res = await simba.submitContractMethodSync(appName, contractName, methodName, inputs, filePaths) as Record<any, any>; expect(doPostRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/sync/contract/test_contract_vds5/structTest5/", sinon.match({}), sinon.match({}), )).to.be.true; expect(res.id).to.exist; expect(res.request_id).to.exist; expect(res.created_on).to.exist; expect(res.finalized_on).to.equal(null); expect(res.method).to.equal(methodName); expect(res.inputs.person).to.exist; expect(res.inputs["_bundleHash"]).to.exist; expect(res.receipt).to.exist; expect(Object.keys(res).includes("error")).to.equal(true); expect(res.error_details).to.exist; expect(res.state).to.equal("SUBMITTED"); const raw_transaction = res.raw_transaction; expect(raw_transaction.from).to.exist; expect(raw_transaction.to).to.exist; expect(raw_transaction.chainId).to.exist; expect(raw_transaction.nonce).to.exist; expect(raw_transaction.data).to.exist; expect(raw_transaction.value).to.exist; expect(raw_transaction.gas).to.exist; expect(raw_transaction.gasPrice).to.exist; const signed_transaction = res.signed_transaction; expect(signed_transaction.rawTransaction).to.exist; expect(signed_transaction.hash).to.exist; expect(signed_transaction.r).to.exist; expect(signed_transaction.s).to.exist; expect(signed_transaction.v).to.exist; expect(res.transaction_hash).to.exist expect(res.bundle).to.exist; expect(res.block).to.equal(null); expect(res.nonce).to.be.greaterThan(0); expect(res.from_address).to.exist; expect(res.to_address).to.equal(null); expect(res.created_by).to.exist; expect(res.contract.id).to.equal("f8896066-73c4-40b6-837e-7bcb8307b231"); expect(res.contract.api_name).to.equal(contractName); expect(res.app).to.equal("fb5fd523-9982-4785-a0ea-89d277f4014b"); expect(res.blockchain).to.equal("3b288902-8438-492b-857a-58060d9c254a"); expect(res.origin).to.equal("SCAAS"); expect(res.transaction_type).to.equal("MC"); expect(res.confirmations).to.equal(0); expect(res.value).to.equal("0"); sandbox.restore(); }); }); describe('testing Simba.callContractMethod', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const methodName = "getNum"; const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("getNumCall")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.callContractMethod(appName, contractName, methodName) as Record<any, any>; expect(doGetRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/contract/test_contract_vds5/getNum/", sinon.match({}), true, )).to.be.true; expect(res.request_id).to.exist; expect(res.value).to.equal(13); expect(res.state).to.equal("COMPLETED"); sandbox.restore(); }); }); describe('testing Simba.submitSignedTransaction', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const txn = transactionObject; const sandbox = sinon.createSandbox(); const doPostRequestStub = sandbox.stub(RequestHandler.prototype, "doPostRequest").resolves(await callFakeMethod("submitSignedTransaction")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res: any = await simba.submitSignedTransaction( appName, nonPendingTransactionID, txn, ); expect(doPostRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/apps/BrendanTestApp/transactions/8a2c5fbf-340f-4038-a3c0-bb8d088ecf1e/", sinon.match({}), sinon.match({"transaction":{"id":"8a2c5fbf-340f-4038-a3c0-bb8d088ecf1e","request_id":"418d2bc0-0b0c-455f-8ae2-1ba6ffdd63da","created_on":"2022-10-03T16:47:20.099589Z","finalized_on":null,"method":"structTest5","inputs":{"person":{"age":1000,"addr":{"town":"nyc","number":1234,"street":"rogers"},"name":"Lenny's Ghost"},"_bundleHash":"223873f49bb7623bfc7da8806f009bdead8e4aaafe5b6e56c0fb2b46471ca9e7"},"receipt":{},"error":null,"error_details":{},"state":"SUBMITTED","raw_transaction":{"to":"0x3daac1c8Bb80406D0eb2e7608C5d2fBcA92eD4a6","gas":"0x6c54","data":"0x47fb8c0a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d4c656e6e7927732047686f737400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000006726f67657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036e79630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004032323338373366343962623736323362666337646138383036663030396264656164386534616161666535623665353663306662326234363437316361396537","from":"0xCa47475036474eAc0dF6697e6A6C74386f218236","nonce":"0x1a3","value":"0x0","chainId":"0x151","gasPrice":"0x0"},"signed_transaction":{"r":4.2809928544253906e+76,"s":5.268161053606005e+76,"v":710,"hash":"0x2a5b7db8fe8b81905ac602a1f09aedc943efd48cb5fa06e7b35537f636cf0976","rawTransaction":"0xf902898201a380826c54943daac1c8bb80406d0eb2e7608c5d2fbca92ed4a680b9022447fb8c0a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d4c656e6e7927732047686f737400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000006726f67657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036e796300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040323233383733663439626237363233626663376461383830366630303962646561643865346161616665356236653536633066623262343634373163613965378202c6a05ea58f96ab195f30f409c52bba44df15a9e9ba7acdd00ba18f83cfb060309d0ba07478bc2248e434d89e887f7f128085c89018828e002c19caf23d6a138bdbf344"},"transaction_hash":"0x2a5b7db8fe8b81905ac602a1f09aedc943efd48cb5fa06e7b35537f636cf0976","bundle":"def70871-57b3-4711-905d-6935c939529e","block":null,"nonce":419,"from_address":"0xCa47475036474eAc0dF6697e6A6C74386f218236","to_address":null,"created_by":9,"contract":{"id":"f8896066-73c4-40b6-837e-7bcb8307b231","api_name":"test_contract_vds5"},"app":"fb5fd523-9982-4785-a0ea-89d277f4014b","blockchain":"3b288902-8438-492b-857a-58060d9c254a","origin":"SCAAS","transaction_type":"MC","confirmations":0,"value":"0"}}), true, )).to.be.true; expect(res.id).to.equal("3fa85f64-5717-4562-b3fc-2c963f66afa6"); sandbox.restore(); }); }); describe('testing Simba.saveDesign', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const designName = "EventContract99"; const sandbox = sinon.createSandbox(); const doPostRequestStub = sandbox.stub(RequestHandler.prototype, "doPostRequest").resolves(await callFakeMethod("saveDesign")); sandbox.stub(RequestHandler.prototype, "getAuthAndOptions").resolves({}); const res = await simba.saveDesign( orgName, designName, sourceCode, ) as Record<any, any>; expect(doPostRequestStub.calledWith( "https://simba-dev-api.platform.simbachain.com/v2/organisations/brendan_birch_simbachain_com/contract_designs/", sinon.match({}), sinon.match({"name":"EventContract99","code":"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IFVOTElDRU5TRUQKcHJhZ21hIHNvbGlkaXR5IF4wLjguMzsKCmNvbnRyYWN0IEV2ZW50Q29udHJhY3QgewogICAgCiAgICBldmVudCBMb2coYWRkcmVzcyBpbmRleGVkIHNlbmRlciwgc3RyaW5nIG1lc3NhZ2UpOwogICAgbWFwcGluZyhzdHJpbmcgPT4gdWludCkgcHVibGljIHVzZXJCYWxhbmNlczsKCiAgICBmdW5jdGlvbiBhZGRNYXBwaW5nKHN0cmluZyBtZW1vcnkgdXNlcklkKSBwdWJsaWMgewogICAgICAgIHVzZXJCYWxhbmNlc1t1c2VySWRdKys7CiAgICAgICAgZW1pdCBMb2cobXNnLnNlbmRlciwgIkRhdGEgcmVwb3J0ZWQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0QmFsYW5jZShzdHJpbmcgbWVtb3J5IHVzZXJJZCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludCkgewogICAgICAgIHJldHVybiB1c2VyQmFsYW5jZXNbdXNlcklkXTsKICAgIH0KCn0=","language":"solidity"}), true, )).to.be.true; expect(res.id).to.exist; expect(res.name).to.equal(designName); expect(res.version).to.exist; expect(res.created_on).to.exist; expect(res.updated_on).to.exist; expect(res.code).to.exist; expect(res.language).to.exist; expect(res.metadata).to.exist; expect(Object.keys(res).includes("err")).to.equal(true); expect(res.mode).to.exist; expect(Object.keys(res).includes("model")).to.equal(true); expect(res.service_args).to.exist; expect(Object.keys(res).includes("asset_type")).to.equal(true); expect(res.organisation).to.exist; expect(Object.keys(res).includes("designset")).to.equal(true); sandbox.restore(); }); }); describe('testing Simba.waitForDeployment', () => { it('request method(s) should be called with correct params', async () => { const simba = new Simba(); const sandbox = sinon.createSandbox(); const doGetRequestStub = sandbox.stub(RequestHandler.prototype, "doGetRequest").resolves(await callFakeMethod("waitForDeployment")); sandbox.stub(RequestHandler.prototype, "getAuthA