// Copyright 2015, 2016 Parity Technologies (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import { toJS } from 'mobx'; import sinon from 'sinon'; import Store from './store'; import { ACCOUNT, ADDRESS } from './editMeta.test.js'; let api; let store; function createStore (account) { api = { parity: { setAccountName: sinon.stub().resolves(), setAccountMeta: sinon.stub().resolves() } }; store = new Store(api, account); return store; } describe('modals/EditMeta/Store', () => { describe('constructor', () => { describe('accounts', () => { beforeEach(() => { createStore(ACCOUNT); }); it('flags it as an account', () => { expect(store.isAccount).to.be.true; }); it('extracts the address', () => { expect(store.address).to.equal(ACCOUNT.address); }); it('extracts the name', () => { expect(store.name).to.equal(ACCOUNT.name); }); it('extracts the tags', () => { expect(store.tags.peek()).to.deep.equal(ACCOUNT.meta.tags); }); describe('meta', () => { it('extracts the full meta', () => { expect(toJS(store.meta)).to.deep.equal(ACCOUNT.meta); }); it('extracts the description', () => { expect(store.description).to.equal(ACCOUNT.meta.description); }); }); }); describe('addresses', () => { beforeEach(() => { createStore(ADDRESS); }); it('flags it as not an account', () => { expect(store.isAccount).to.be.false; }); it('extracts the address', () => { expect(store.address).to.equal(ADDRESS.address); }); it('extracts the name', () => { expect(store.name).to.equal(ADDRESS.name); }); it('extracts the tags (empty)', () => { expect(store.tags.peek()).to.deep.equal([]); }); }); }); describe('@computed', () => { beforeEach(() => { createStore(ADDRESS); }); describe('hasError', () => { it('is false when no nameError', () => { store.setNameError(null); expect(store.hasError).to.be.false; }); it('is false with a nameError', () => { store.setNameError('some error'); expect(store.hasError).to.be.true; }); }); }); describe('@actions', () => { beforeEach(() => { createStore(ADDRESS); }); describe('setDescription', () => { it('sets the description', () => { store.setDescription('description'); expect(store.description).to.equal('description'); }); }); describe('setName', () => { it('sets the name', () => { store.setName('valid name'); expect(store.name).to.equal('valid name'); expect(store.nameError).to.be.null; }); it('sets name and error on invalid', () => { store.setName(''); expect(store.name).to.equal(''); expect(store.nameError).not.to.be.null; }); }); describe('setPasswordHint', () => { it('sets the description', () => { store.setPasswordHint('passwordHint'); expect(store.passwordHint).to.equal('passwordHint'); }); }); describe('setTags', () => { it('sets the tags', () => { store.setTags(['taga', 'tagb']); expect(store.tags.peek()).to.deep.equal(['taga', 'tagb']); }); }); }); describe('save', () => { beforeEach(() => { createStore(ACCOUNT); }); it('calls parity.setAccountName with the set value', () => { store.setName('test name'); store.save(); expect(api.parity.setAccountName).to.be.calledWith(ACCOUNT.address, 'test name'); }); it('calls parity.setAccountMeta with the adjusted values', () => { store.setDescription('some new description'); store.setPasswordHint('some new passwordhint'); store.setTags(['taga']); store.save(); expect(api.parity.setAccountMeta).to.have.been.calledWith(ACCOUNT.address, Object.assign({}, ACCOUNT.meta, { description: 'some new description', passwordHint: 'some new passwordhint', tags: ['taga'] })); }); }); });