123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- const RBACMock = artifacts.require('./mocks/RBACMock.sol')
- import expectThrow from './helpers/expectThrow'
- import expectEvent from './helpers/expectEvent'
- require('chai')
- .use(require('chai-as-promised'))
- .should()
- const ROLE_ADVISOR = 'advisor';
- contract('RBAC', function(accounts) {
- let mock
- const [
- admin,
- anyone,
- futureAdvisor,
- ...advisors
- ] = accounts
- before(async () => {
- mock = await RBACMock.new(advisors, { from: admin })
- })
- context('in normal conditions', () => {
- it('allows admin to call #onlyAdminsCanDoThis', async () => {
- await mock.onlyAdminsCanDoThis({ from: admin })
- .should.be.fulfilled
- })
- it('allows admin to call #onlyAdvisorsCanDoThis', async () => {
- await mock.onlyAdvisorsCanDoThis({ from: admin })
- .should.be.fulfilled
- })
- it('allows advisors to call #onlyAdvisorsCanDoThis', async () => {
- await mock.onlyAdvisorsCanDoThis({ from: advisors[0] })
- .should.be.fulfilled
- })
- it('allows admin to call #eitherAdminOrAdvisorCanDoThis', async () => {
- await mock.eitherAdminOrAdvisorCanDoThis({ from: admin })
- .should.be.fulfilled
- })
- it('allows advisors to call #eitherAdminOrAdvisorCanDoThis', async () => {
- await mock.eitherAdminOrAdvisorCanDoThis({ from: advisors[0] })
- .should.be.fulfilled
- })
- it('does not allow admins to call #nobodyCanDoThis', async () => {
- expectThrow(
- mock.nobodyCanDoThis({ from: admin })
- )
- })
- it('does not allow advisors to call #nobodyCanDoThis', async () => {
- expectThrow(
- mock.nobodyCanDoThis({ from: advisors[0] })
- )
- })
- it('does not allow anyone to call #nobodyCanDoThis', async () => {
- expectThrow(
- mock.nobodyCanDoThis({ from: anyone })
- )
- })
- it('allows an admin to remove an advisor\'s role', async () => {
- await mock.removeAdvisor(advisors[0], { from: admin })
- .should.be.fulfilled
- })
- it('allows admins to #adminRemoveRole', async () => {
- await mock.adminRemoveRole(advisors[3], ROLE_ADVISOR, { from: admin })
- .should.be.fulfilled
- })
- it('announces a RoleAdded event on addRole', async () => {
- expectEvent.inTransaction(
- mock.adminAddRole(futureAdvisor, ROLE_ADVISOR, { from: admin }),
- 'RoleAdded'
- )
- })
- it('announces a RoleRemoved event on removeRole', async () => {
- expectEvent.inTransaction(
- mock.adminRemoveRole(futureAdvisor, ROLE_ADVISOR, { from: admin }),
- 'RoleRemoved'
- )
- })
- })
- context('in adversarial conditions', () => {
- it('does not allow an advisor to remove another advisor', async () => {
- expectThrow(
- mock.removeAdvisor(advisors[1], { from: advisors[0] })
- )
- })
- it('does not allow "anyone" to remove an advisor', async () => {
- expectThrow(
- mock.removeAdvisor(advisors[0], { from: anyone })
- )
- })
- })
- })
|