emerald-cli 0.23.0

Console utility for secure account management
#!/usr/bin/env bats

: ${EMERALD_CLI:=$HOME/.cargo/bin/emerald}


# Setup and teardown are called surrounding EACH @test.
setup() {
	export EMERALD_BASE_PATH=`mktemp -d`
}

teardown() {
	rm -rf $EMERALD_BASE_PATH
    unset EMERALD_BASE_PATH
}

@test "[meta] succeeds: set env var and tmp dir EMERALD_BASE_PATH" {
    run echo "$EMERALD_BASE_PATH"
    [ "$status" -eq 0 ]
	[ -d $EMERALD_BASE_PATH ]
    [ "$output" != "" ]
}

@test "succeeds: --version" {
	run $EMERALD_CLI --version
	[ "$status" -eq 0 ]
	[[ "$output" == *"v"* ]]
}

@test "succeeds: --help" {
    run $EMERALD_CLI --help
    [ "$status" -eq 0 ]
    [[ "$output" == *"emerald"* ]]
    [[ "$output" == *"Command-line"* ]]
    [[ "$output" == *"USAGE"* ]]
    [[ "$output" == *"FLAGS"* ]]
    [[ "$output" == *"OPTIONS"* ]]
    [[ "$output" == *"SUBCOMMANDS"* ]]
}

@test "succeeds: --chain=morden account new [empty options]" {
    run $EMERALD_CLI --chain=morden account new <<< $'foo\n'
    [ "$status" -eq 0 ]
    [[ "$output" == *"Created new account"* ]]
}

@test "succeeds: --chain=mainnet new --security=high --name='Test account' --description='Some description'" {
    run $EMERALD_CLI --chain=mainnet \
        account new \
        --security-level=high \
        --name="Test account" \
        --description="Some description" \
        <<< $'foo\n'
    [ "$status" -eq 0 ]
    [[ "$output" == *"Created new account"* ]]
}

@test "succeeds: account list" {
    run $EMERALD_CLI --chain=morden \
        account new \
        <<< $'foo\n'
    [ "$status" -eq 0 ]
    [[ "$output" == *"Created new account"* ]]

    # FIXME I'm ugly.
    local address=$(echo "$output" | perl -lane 'print $F[-1]' | tr -d '\n')
    local removeme='!passphrase:'
    local replacewith=''
    address="${address//$removeme/$replacewith}"
    [[ "$address" != "" ]]
    [[ "$address" == *"0x"* ]]

    run $EMERALD_CLI --chain=morden account list
    echo "$output" # prints in case fails
    echo "$address"

    [ "$status" -eq 0 ]
    [[ "$output" == *"$address"* ]]
}

@test "succeeds: account update" {
    run $EMERALD_CLI --chain=morden account new \
        <<< $'foo\n'
    [ "$status" -eq 0 ]
    [[ "$output" == *"Created new account"* ]]

    # FIXME I'm ugly.
    local address=$(echo "$output" | perl -lane 'print $F[-1]' | tr -d '\n')
    local removeme='!passphrase:'
    local replacewith=''
    address="${address//$removeme/$replacewith}"
    [[ "$address" != "" ]]
    [[ "$address" == *"0x"* ]]

    run $EMERALD_CLI --chain=morden account update \
        "$address" \
        --name="NewName" \
        --description="NewDescription"
    [ "$status" -eq 0 ]

    run $EMERALD_CLI --chain=morden account list

    [ "$status" -eq 0 ]
    [[ "$output" == *"NewName"* ]]
}

@test "succeeds: account strip" {
    run $EMERALD_CLI --chain=morden account new \
        <<< $'foo\n'
    [ "$status" -eq 0 ]
    [[ "$output" == *"Created new account"* ]]

    # FIXME I'm ugly.
    local address=$(echo "$output" | perl -lane 'print $F[-1]' | tr -d '\n')
    local removeme='!passphrase:'
    local replacewith=''
    address="${address//$removeme/$replacewith}"
    [[ "$address" != "" ]]
    [[ "$address" == *"0x"* ]]

    run $EMERALD_CLI --chain=morden account strip \
        "$address" \
        <<< $'foo\n'

    [ "$status" -eq 0 ]
    [[ "$output" == *"Private key: 0x"* ]]
}

@test "succeeds: account hide && unhide" {
    run $EMERALD_CLI --chain=morden account new \
        <<< $'foo\n'
    [ "$status" -eq 0 ]
    [[ "$output" == *"Created new account"* ]]

    # FIXME I'm ugly.
    local address=$(echo "$output" | perl -lane 'print $F[-1]' | tr -d '\n')
    local removeme='!passphrase:'
    local replacewith=''
    address="${address//$removeme/$replacewith}"
    [[ "$address" != "" ]]
    [[ "$address" == *"0x"* ]]

    # Hide account.
    run $EMERALD_CLI --chain=morden account hide \
        "$address"
    [ "$status" -eq 0 ]

    # Ensure is hidden; doesn't show up in list.
    run $EMERALD_CLI --chain=morden account list \

    [ "$status" -eq 0 ]
    [[ "$output" != *"$address"* ]]

    # Unhide account.
    run $EMERALD_CLI --chain=morden account unhide \
        "$address"

    # Ensure is not hidden; shows up in list.
    run $EMERALD_CLI --chain=morden account list

    [ "$status" -eq 0 ]
    [[ "$output" == *"$address"* ]]
}