diff --git a/src/ocean/OceanAccounts.ts b/src/ocean/OceanAccounts.ts index 3a5e025..c289874 100644 --- a/src/ocean/OceanAccounts.ts +++ b/src/ocean/OceanAccounts.ts @@ -1,5 +1,5 @@ import Web3Provider from "../keeper/Web3Provider" - +import Balance from "../models/Balance" import Account from "./Account" /** @@ -36,4 +36,28 @@ export default class OceanAccounts { return ethAccounts.map((address: string) => new Account(address)) } + + /** + * Return account balance. + * @param {Account} account Account instance. + * @return {Promise} Ether and Ocean Token balance. + */ + public balance(account: Account): Promise { + return account.getBalance() + } + + /** + * Request tokens for a account. + * @param {Account} account Account instance. + * @param {number} amount Token amount. + * @return {Promise} Success. + */ + public async requestTokens(account: Account, amount: number): Promise { + try { + await account.requestTokens(amount) + return true + } catch(e) { + return false + } + } } diff --git a/test/ocean/OceanAccounts.test.ts b/test/ocean/OceanAccounts.test.ts new file mode 100644 index 0000000..0b78be1 --- /dev/null +++ b/test/ocean/OceanAccounts.test.ts @@ -0,0 +1,56 @@ +import { assert, /*expect,*/ spy, use } from "chai" +import * as spies from "chai-spies" + +import Account from "../../src/ocean/Account" +import OceanAccounts from "../../src/ocean/OceanAccounts" + +use(spies) + +describe("OceanAccounts", () => { + + let oceanAccounts: OceanAccounts + + before(async () => { + oceanAccounts = await OceanAccounts.getInstance() + }) + + afterEach(() => { + spy.restore() + }) + + describe("#getInstance()", () => { + it("should get an instance of OceanAccounts", async () => { + const oceanAccounts: OceanAccounts = await OceanAccounts.getInstance() + + assert.instanceOf(oceanAccounts, OceanAccounts, "No returned OceanAccounts instance") + }) + }) + + describe("#list()", () => { + it("should return the list of accounts", async () => { + const accounts = await oceanAccounts.list() + + accounts.map(account => assert.instanceOf(account, Account)) + }) + }) + + describe("#balance()", () => { + it("should return the balance of an account", async () => { + const [account] = await oceanAccounts.list() + spy.on(account, 'getBalance', () => ({eth: 1, ocn: 5})) + const balance = await oceanAccounts.balance(account) + + assert.deepEqual(balance, {eth: 1, ocn: 5}) + }) + }) + + describe("#requestTokens()", () => { + it("should return the balance of an account", async () => { + const [account] = await oceanAccounts.list() + spy.on(account, 'requestTokens', () => 10) + const success = await oceanAccounts.requestTokens(account, 10) + + assert.isTrue(success) + }) + }) +})