Files
anonklub/pkgs/cli/tests/query.rs
sripwoud 4c1d809a90 ci: run test coverage in test-rs job (#455)
* ci: run coverage in test-rs job

* ci: upload to coveralls in separate job

* chore: format

* ci: alway run coverage job

* ci: always run `fmt` job

* ci: always run `deps` job

* test: update err message

* ci: exclude halo2-secp256k1-wasm from tests

taking too long

* ci: allow empty report file for coveralls

* ci: get dynamically list of coverage files

* ci: checkout in coveralls job

* ci: exclude halo2wrong-ecdsa from ci tests check

* chore: debug ci

* ci: update coveralls base path input
2024-07-16 17:44:50 +02:00

160 lines
4.1 KiB
Rust

use akli::EnsVoteChoice;
use assert_cmd::prelude::*;
use mockito::Server;
use predicates::prelude::*;
use serde_json::json;
use std::process::Command;
const BIN_NAME: &str = "akli";
fn setup_test() -> (mockito::ServerGuard, Command) {
let server = Server::new();
let mut cmd = Command::cargo_bin(BIN_NAME).unwrap();
cmd.env("QUERY_API_URL", server.url());
(server, cmd)
}
#[test]
fn no_args() -> Result<(), Box<dyn std::error::Error>> {
let (_, mut cmd) = setup_test();
cmd.assert()
.failure()
.stderr(predicate::str::contains("Usage"));
Ok(())
}
#[test]
fn query_eth() {
let (mut server, mut cmd) = setup_test();
const MIN: &str = "100000";
const ADDRESS: &str = "0x2b661d3a28490794000b7FCaA5f9D732501bbb";
server
.mock("GET", format!("/asset/eth?min={}", MIN).as_str())
.with_status(200)
.with_header("content-type", "application/json")
.with_body(json!([ADDRESS]).to_string())
.create();
cmd.arg("query").arg("eth").arg("--min").arg(MIN);
cmd.assert()
.success()
.stdout(predicate::str::contains(ADDRESS));
}
#[test]
fn query_erc20_odd_address() {
let (_, mut cmd) = setup_test();
cmd.arg("query")
.arg("erc20")
.arg("--address")
.arg("0x0")
.arg("--min")
.arg("100000");
cmd.assert()
.failure()
.stderr(predicate::str::contains("Odd number of digits"));
}
#[test]
fn query_erc20_wrong_length_address() {
let (_, mut cmd) = setup_test();
cmd.arg("query")
.arg("erc20")
.arg("--address")
.arg("0x2b661d3a28490794000b7FCaA5f9D732501bbb");
cmd.assert()
.failure()
.stderr(predicate::str::contains("Invalid string length"));
}
#[test]
fn query_erc20_wrong_min() {
let (_, mut cmd) = setup_test();
cmd.arg("query")
.arg("erc20")
.arg("--address")
.arg("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045")
.arg("--min")
.arg("abc");
cmd.assert()
.failure()
.stderr(predicate::str::contains("invalid digit found in string"));
}
#[test]
fn query_erc20() {
let (mut server, mut cmd) = setup_test();
const MIN: &str = "100000";
const ADDRESS: &str = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
server
.mock(
"GET",
format!("/asset/erc20?tokenAddress={}&min={}", ADDRESS, MIN).as_str(),
)
.with_status(200)
.with_header("content-type", "application/json")
.with_body(json!([ADDRESS]).to_string())
.create();
cmd.arg("query")
.arg("erc20")
.arg("--address")
.arg(ADDRESS)
.arg("--min")
.arg(MIN);
cmd.assert()
.success()
.stdout(predicate::str::contains(ADDRESS));
}
#[test]
fn query_ens_wrong_choice() {
let mut cmd = Command::cargo_bin(BIN_NAME).unwrap();
cmd.arg("query")
.arg("ens")
.arg("--id")
.arg("anonklub.eth")
.arg("--choice")
.arg("abc");
cmd.assert()
.failure()
.stderr(predicate::str::contains("invalid value"))
.stderr(predicate::str::contains(
"possible values: yes, no, abstain",
));
}
#[test]
fn query_ens() {
let (mut server, mut cmd) = setup_test();
const ID: &str =
"15706104363492914432572227540113855373051896881975394006732444538096386655538";
#[allow(non_snake_case)]
let CHOICE = EnsVoteChoice::Abstain;
const ADDRESS: &str = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
assert_eq!(CHOICE.as_ref(), "ABSTAIN");
server
.mock(
"GET",
format!("/dao/ens?id={}&choice={}", ID, CHOICE.as_ref()).as_str(),
)
.with_status(200)
.with_header("content-type", "application/json")
.with_body(json!([ADDRESS]).to_string())
.create();
cmd.arg("query")
.arg("ens")
.arg("--id")
.arg(ID)
.arg("--choice")
.arg(CHOICE.as_ref().to_lowercase());
cmd.assert()
.success()
.stdout(predicate::str::contains(ADDRESS));
}