60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { blockchainTests, constants, expect, filterLogsToArguments } from '@0x/contracts-test-utils';
 | 
						|
import { OwnableRevertErrors } from '@0x/utils';
 | 
						|
 | 
						|
import { artifacts } from './artifacts';
 | 
						|
import { IOwnableEvents, IOwnableOwnershipTransferredEventArgs, TestOwnableContract } from './wrappers';
 | 
						|
 | 
						|
blockchainTests.resets('Ownable', env => {
 | 
						|
    let ownable: TestOwnableContract;
 | 
						|
    let owner: string;
 | 
						|
    let nonOwner: string;
 | 
						|
 | 
						|
    before(async () => {
 | 
						|
        const accounts = await env.getAccountAddressesAsync();
 | 
						|
        owner = await accounts[0];
 | 
						|
        nonOwner = await accounts[1];
 | 
						|
        ownable = await TestOwnableContract.deployFrom0xArtifactAsync(
 | 
						|
            artifacts.TestOwnable,
 | 
						|
            env.provider,
 | 
						|
            { ...env.txDefaults, from: owner },
 | 
						|
            artifacts,
 | 
						|
        );
 | 
						|
    });
 | 
						|
 | 
						|
    describe('onlyOwner', () => {
 | 
						|
        it('should revert if sender is not the owner', async () => {
 | 
						|
            const expectedError = new OwnableRevertErrors.OnlyOwnerError(nonOwner, owner);
 | 
						|
            return expect(ownable.externalOnlyOwner().callAsync({ from: nonOwner })).to.revertWith(expectedError);
 | 
						|
        });
 | 
						|
 | 
						|
        it('should succeed if sender is the owner', async () => {
 | 
						|
            const isSuccessful = await ownable.externalOnlyOwner().callAsync({ from: owner });
 | 
						|
            expect(isSuccessful).to.be.true();
 | 
						|
        });
 | 
						|
    });
 | 
						|
 | 
						|
    describe('transferOwnership', () => {
 | 
						|
        it('should revert if the specified new owner is the zero address', async () => {
 | 
						|
            const expectedError = new OwnableRevertErrors.TransferOwnerToZeroError();
 | 
						|
            const tx = ownable.transferOwnership(constants.NULL_ADDRESS).sendTransactionAsync({ from: owner });
 | 
						|
            return expect(tx).to.revertWith(expectedError);
 | 
						|
        });
 | 
						|
 | 
						|
        it('should transfer ownership if the specified new owner is not the zero address', async () => {
 | 
						|
            const receipt = await ownable.transferOwnership(nonOwner).awaitTransactionSuccessAsync({ from: owner });
 | 
						|
 | 
						|
            // Ensure that the correct logs were emitted.
 | 
						|
            expect(receipt.logs.length).to.be.eq(1);
 | 
						|
            const [event] = filterLogsToArguments<IOwnableOwnershipTransferredEventArgs>(
 | 
						|
                receipt.logs,
 | 
						|
                IOwnableEvents.OwnershipTransferred,
 | 
						|
            );
 | 
						|
            expect(event).to.be.deep.eq({ previousOwner: owner, newOwner: nonOwner });
 | 
						|
 | 
						|
            // Ensure that the owner was actually updated
 | 
						|
            const updatedOwner = await ownable.owner().callAsync();
 | 
						|
            expect(updatedOwner).to.be.eq(nonOwner);
 | 
						|
        });
 | 
						|
    });
 | 
						|
});
 |