@caict/bop-typescript-sdk
Version:
287 lines (258 loc) • 11.8 kB
text/typescript
import { ContractByBop } from "../service/contract";
import { expect } from "chai";
import * as sinon from "sinon";
import { BopInterface, Config } from "../../../bop/bop-base";
import {
CheckContractAccountResponse,
GetContractInfoResponse,
CallContractRequest,
CallContractResponse,
} from "../../proto/bop-sdk-interface";
// 使用 Sinon 创建模拟对象
const sandbox = sinon.createSandbox();
const apiKey = "xxx";
const apiSecret = "xxx";
describe("provider-contract-test", () => {
let contract: ContractByBop;
let bopInterface: BopInterface;
let config: Config;
beforeEach(() => {
config = new Config("https://bif-mainnet.bitfactory.cn", apiKey, apiSecret);
bopInterface = new BopInterface(config);
contract = new ContractByBop(bopInterface);
});
afterEach(() => {
// 重置模拟对象
sandbox.restore();
});
describe("contract test", () => {
it("contract.checkContractAccount account exist and not contract address", async () => {
let response: CheckContractAccountResponse;
response = await contract.checkContractAccount(
"did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP",
);
console.log(response);
expect(response.errorCode).to.equal(0);
expect(response.errorDesc).to.equal("ok");
expect(response.result).to.equal(false);
});
it("contract.checkContractAccount account exist and is contract address", async () => {
let response: CheckContractAccountResponse;
response = await contract.checkContractAccount(
"did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
);
console.log(response);
expect(response.errorCode).to.equal(0);
expect(response.errorDesc).to.equal("ok");
expect(response.result).to.equal(true);
});
it("contract.checkContractAccount account not exist", async () => {
let response: CheckContractAccountResponse;
response = await contract.checkContractAccount(
"did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
);
console.log(response);
expect(response.errorCode).to.equal(4);
});
it("contract.checkContractAccount empty", async () => {
let response: CheckContractAccountResponse;
response = await contract.checkContractAccount("");
console.log(response);
expect(response.errorCode).to.equal(-9);
expect(response.errorDesc).to.equal(
"The account address is a required field",
);
});
it("contract.checkContractAccount invalid address", async () => {
let response: CheckContractAccountResponse;
response = await contract.checkContractAccount("xxx");
console.log(response);
expect(response.errorCode).to.equal(4);
});
it("contract.getContractInfo is contract address", async () => {
let response: GetContractInfoResponse;
response = await contract.getContractInfo(
"did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk8",
);
console.log(response);
expect(response.errorCode).to.equal(0);
expect(response.errorDesc).to.equal("ok");
expect(response.result?.type).to.equal(2);
expect(response.result?.payload).to.equal(
'{"params":{},"codeData":{"slogan":"this is config-manager contract"}}',
);
});
it("contract.getContractInfo not contract address", async () => {
let response: GetContractInfoResponse;
response = await contract.getContractInfo(
"did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP",
);
console.log(response);
expect(response.errorCode).to.equal(11038);
expect(response.errorDesc).to.equal("address not contract account");
});
it("contract.getContractInfo account not exist", async () => {
let response: GetContractInfoResponse;
response = await contract.getContractInfo(
"did:bid:efEnXEGWYjHRw1CzK4KpWTdusnaRokk9",
);
console.log(response);
expect(response.errorCode).to.equal(4);
});
it("contract.getContractInfo account empty", async () => {
let response: GetContractInfoResponse;
response = await contract.getContractInfo("");
console.log(response);
expect(response.errorCode).to.equal(-9);
});
it("contract.getContractInfo account invalid", async () => {
let response: GetContractInfoResponse;
response = await contract.getContractInfo("xxx");
console.log(response);
expect(response.errorCode).to.equal(4);
});
it("contract.callContract system", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
input: '{"method":"getsuperlist"}',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
console.log(response.result?.queryRets[0].result);
expect(response.errorCode).to.equal(0);
expect(response.errorDesc).to.equal("ok");
expect(response.result?.queryRets[0].result).to.equal(
'{"data":{"superList":[["did:bid:efuwxbp8mzDt2MyPxXo4fmyYahQVtyMk","0","did:bid:efuwxbp8mzDt2MyPxXo4fmyYahQVtyMk"],["did:bid:efSspDxRFNe2QpeyYJvr2CMxZ35gVvXb","0","did:bid:efSspDxRFNe2QpeyYJvr2CMxZ35gVvXb"],["did:bid:efUZLM7v2FW72eMUiB3zYUKFrYcPmKQE","0","did:bid:efUZLM7v2FW72eMUiB3zYUKFrYcPmKQE"],["did:bid:efyxHe3UrF1PSSHDDrqVygxf8NYHZVuz","0","did:bid:efyxHe3UrF1PSSHDDrqVygxf8NYHZVuz"],["did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP","0","did:bid:efuDacbAeXdwBENVkPCYNQQVE7KvYVkP"],["did:bid:efperBrbfFJrpRUebqDSmXjoLKoBiuGT","0","did:bid:efperBrbfFJrpRUebqDSmXjoLKoBiuGT"],["did:bid:ef16mauW9ukBbLqYpbZ8b7bavXTPeGMC","0","did:bid:ef16mauW9ukBbLqYpbZ8b7bavXTPeGMC"],["did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5","0","did:bid:efk8iXFgo533n7waZAym6WVeZNPKKyX5"]]}}',
);
});
it("contract.callContract js", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:ef2AAQSLB2YAuWJE8mHdUXncGWRVPkoJT",
input:
'{"method":"queryBid", "params":"did:bid:ef2AAQSLB2YAuWJE8mHdUXncGWRVPkoJT"}',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
console.log(response.result?.queryRets[0]?.error);
expect(response.errorCode).to.equal(0);
expect(response.errorDesc).to.equal("ok");
expect(response.result?.queryRets[0]?.error).to.equal(
'{"data":{"contract":"did:bid:ef2AAQSLB2YAuWJE8mHdUXncGWRVPkoJT","exception":"10706,The bid document is not existed","linenum":1}}',
);
});
it("contract.callContract evm", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu",
input:
'{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
console.log(response.result?.queryRets[0]?.result);
expect(response.errorCode).to.equal(0);
expect(response.errorDesc).to.equal("ok");
expect(response.result?.queryRets[0]?.result).to.equal(
'{"code":0,"data":"[0]","desc":"","evmcode":"0000000000000000000000000000000000000000000000000000000000000000","gasused":2767}',
);
});
it("contract.callContract with account not exist", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzx",
input:
'{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
expect(response.errorCode).to.equal(4);
});
it("contract.callContract with account not contract address", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efC5REiFesaBuu1UXbMJWvEsqFRkQKiq",
input:
'{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"}',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
expect(response.errorCode).to.equal(4);
});
it("contract.callContract with empty input", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efC5REiFesaBuu1UXbMJWvEsqFRkQKiq",
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
expect(response.errorCode).to.equal(-9);
});
it("contract.callContract with account empty", async () => {
let request: CallContractRequest = {
contractAddress: "",
input:
'{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"}',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
expect(response.errorCode).to.equal(-9);
});
it("contract.callContract with invalid account address", async () => {
let request: CallContractRequest = {
contractAddress: "xxx",
input:
'{"function":"balanceOf(address)","args":"did:bid:efBcAumwRYrESbpRVTo4J4vYqXXfqBzu","return":"returns(uint256)"}',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
expect(response.errorCode).to.equal(4);
});
it("contract.callContract with sourceAddress equal contractAddress", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
sourceAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
input: '{"method":"getsuperlist"}',
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
console.log(response.result?.queryRets[0].result);
expect(response.errorCode).to.equal(0);
});
it("contract.callContract gasPrice negative", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
input: '{"method":"getsuperlist"}',
gasPrice: -1,
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
console.log(response.result?.queryRets[0].result);
expect(response.errorCode).to.equal(0);
});
it("contract.callContract gasPrice decimal", async () => {
let request: CallContractRequest = {
contractAddress: "did:bid:efRH1Lbsuqwc6jRw3hK4H5Hp2RhHnryS",
input: '{"method":"getsuperlist"}',
gasPrice: 1.6,
};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
console.log(response.result?.queryRets[0].result);
expect(response.errorCode).to.equal(0);
});
it("contract.callContract null request", async () => {
let request: CallContractRequest = {};
let response: CallContractResponse;
response = await contract.callContract(request);
console.log(response);
expect(response.errorCode).to.equal(-9);
});
});
});