import { assert, expect, spy, use } from 'chai' import * as spies from 'chai-spies' import config from '../config' import Account from '../../src/ocean/Account' import { Ocean } from '../../src/ocean/Ocean' import { OceanAuth } from '../../src/ocean/OceanAuth' use(spies) describe('OceanAuth', () => { let oceanAuth: OceanAuth let account: Account before(async () => { const ocean = await Ocean.getInstance(config) oceanAuth = ocean.auth account = (await ocean.accounts.list())[0] }) afterEach(() => { spy.restore() }) describe('#get()', () => { it('should return the token for a account', async () => { const token = await oceanAuth.get(account) assert.match(token, /^0x[a-f0-9]{130}-[0-9]{0,14}/i) }) }) // Not valid using providers without support for `personal_ecRecover` xdescribe('#check()', () => { it('should return the account of a signature', async () => { const token = await oceanAuth.get(account) const address = await oceanAuth.check(token) assert.equal(address, account.getId()) }) it('should return empty address if the token is expired', async () => { const token = [ '0x0cfe59ce5c35461728b4126431096e4e021a842ca1f679532c537be5f895a3607e498', 'f2cc22f787f9c7c8a967c346d717ef50ccb9f0af418d87a86dad899e6d61b-1234567890' ].join('') const address = await oceanAuth.check(token) assert.equal(address, `0x${'0'.repeat(40)}`) }) }) describe('#store()', () => { it('should sign and store the token', async () => { const writeTokenSpy = spy.on( oceanAuth as any, 'writeToken', () => {} ) await oceanAuth.store(account) expect(writeTokenSpy).to.has.been.called() }) }) describe('#restore()', () => { it('should return a stored token', async () => { spy.on(oceanAuth as any, 'readToken', () => 'token') spy.on(oceanAuth as any, 'check', () => account.getId()) const token = await oceanAuth.restore(account) assert.equal(token, 'token') }) it('should not return values if there is any error', async () => { spy.on(oceanAuth as any, 'readToken', () => 'token') spy.on(oceanAuth as any, 'check', () => '0x...') const token = await oceanAuth.restore(account) assert.isUndefined(token) }) }) describe('#isStored()', () => { it('should know if the token is stored', async () => { spy.on(oceanAuth as any, 'restore', () => account.getId()) const isStored = await oceanAuth.isStored(account) assert.isTrue(isStored) }) it('should know if the token is not stored', async () => { spy.on(oceanAuth as any, 'restore', () => undefined) const isStored = await oceanAuth.isStored(account) assert.isFalse(isStored) }) }) })