Superuser.test.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const { expectThrow } = require('../helpers/expectThrow');
  2. const expectEvent = require('../helpers/expectEvent');
  3. const Superuser = artifacts.require('Superuser');
  4. require('chai')
  5. .should();
  6. contract('Superuser', function ([_, firstOwner, newSuperuser, newOwner, anyone]) {
  7. beforeEach(async function () {
  8. this.superuser = await Superuser.new({ from: firstOwner });
  9. });
  10. context('in normal conditions', () => {
  11. it('should set the owner as the default superuser', async function () {
  12. const ownerIsSuperuser = await this.superuser.isSuperuser(firstOwner);
  13. ownerIsSuperuser.should.be.equal(true);
  14. });
  15. it('should change superuser after transferring', async function () {
  16. await this.superuser.transferSuperuser(newSuperuser, { from: firstOwner });
  17. const ownerIsSuperuser = await this.superuser.isSuperuser(firstOwner);
  18. ownerIsSuperuser.should.be.equal(false);
  19. const newSuperuserIsSuperuser = await this.superuser.isSuperuser(newSuperuser);
  20. newSuperuserIsSuperuser.should.be.equal(true);
  21. });
  22. it('should change owner after the superuser transfers the ownership', async function () {
  23. await this.superuser.transferSuperuser(newSuperuser, { from: firstOwner });
  24. await expectEvent.inTransaction(
  25. this.superuser.transferOwnership(newOwner, { from: newSuperuser }),
  26. 'OwnershipTransferred'
  27. );
  28. const currentOwner = await this.superuser.owner();
  29. currentOwner.should.be.equal(newOwner);
  30. });
  31. it('should change owner after the owner transfers the ownership', async function () {
  32. await expectEvent.inTransaction(
  33. this.superuser.transferOwnership(newOwner, { from: firstOwner }),
  34. 'OwnershipTransferred'
  35. );
  36. const currentOwner = await this.superuser.owner();
  37. currentOwner.should.be.equal(newOwner);
  38. });
  39. });
  40. context('in adversarial conditions', () => {
  41. it('should prevent non-superusers from transfering the superuser role', async function () {
  42. await expectThrow(
  43. this.superuser.transferSuperuser(newOwner, { from: anyone })
  44. );
  45. });
  46. it('should prevent users that are not superuser nor owner from setting a new owner', async function () {
  47. await expectThrow(
  48. this.superuser.transferOwnership(newOwner, { from: anyone })
  49. );
  50. });
  51. });
  52. });