141 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { blockchainTests, constants } from '@0x/contracts-test-utils';
 | |
| import { BigNumber } from '@0x/utils';
 | |
| import * as _ from 'lodash';
 | |
| 
 | |
| import { artifacts, TestRefundableContract, TestRefundableReceiverContract } from '../src';
 | |
| 
 | |
| blockchainTests('Refundable', env => {
 | |
|     let refundable: TestRefundableContract;
 | |
|     let receiver: TestRefundableReceiverContract;
 | |
| 
 | |
|     const ONE_HUNDRED = new BigNumber(100);
 | |
|     const ONE_THOUSAND = new BigNumber(1000);
 | |
| 
 | |
|     before(async () => {
 | |
|         // Create the refundable contract.
 | |
|         refundable = await TestRefundableContract.deployFrom0xArtifactAsync(
 | |
|             artifacts.TestRefundable,
 | |
|             env.provider,
 | |
|             env.txDefaults,
 | |
|             {},
 | |
|         );
 | |
| 
 | |
|         // Create the receiver contract.
 | |
|         receiver = await TestRefundableReceiverContract.deployFrom0xArtifactAsync(
 | |
|             artifacts.TestRefundableReceiver,
 | |
|             env.provider,
 | |
|             env.txDefaults,
 | |
|             {},
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     // The contents of these typescript tests is not adequate to understand the assertions that are made during
 | |
|     // these calls. For a more accurate picture, checkout out "./contracts/test/TestRefundableReceiver.sol". Specifically,
 | |
|     // the function `testRefundNonzeroBalance()` is used in this test suite.
 | |
|     blockchainTests.resets('refundNonzeroBalance', () => {
 | |
|         it('should not send a refund when no value is sent', async () => {
 | |
|             // Send 100 wei to the refundable contract that should be refunded.
 | |
|             await receiver.testRefundNonZeroBalance.awaitTransactionSuccessAsync(refundable.address, {
 | |
|                 value: constants.ZERO_AMOUNT,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('should send a full refund when nonzero value is sent', async () => {
 | |
|             // Send 100 wei to the refundable contract that should be refunded.
 | |
|             await receiver.testRefundNonZeroBalance.awaitTransactionSuccessAsync(refundable.address, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     // The contents of these typescript tests is not adequate to understand the assertions that are made during
 | |
|     // these calls. For a more accurate picture, checkout out "./contracts/test/TestRefundableReceiver.sol".
 | |
|     blockchainTests.resets('refundFinalBalance', () => {
 | |
|         it('should fully refund the sender when `shouldNotRefund` is false', async () => {
 | |
|             // Send 100 wei to the refundable contract that should be refunded to the receiver contract.
 | |
|             await receiver.testRefundFinalBalance.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         // This test may not be necessary, but it is included here as a sanity check.
 | |
|         it('should fully refund the sender when `shouldNotRefund` is false for two calls in a row', async () => {
 | |
|             // Send 100 wei to the refundable contract that should be refunded to the receiver contract.
 | |
|             await receiver.testRefundFinalBalance.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
| 
 | |
|             // Send 1000 wei to the refundable contract that should be refunded to the receiver contract.
 | |
|             await receiver.testRefundFinalBalance.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: new BigNumber(1000),
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('should not refund the sender if `shouldNotRefund` is true', async () => {
 | |
|             /// Send 100 wei to the refundable contract that should not be refunded.
 | |
|             await receiver.testRefundFinalBalance.awaitTransactionSuccessAsync(refundable.address, true, {
 | |
|                 value: new BigNumber(1000),
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     // The contents of these typescript tests is not adequate to understand the assertions that are made during
 | |
|     // these calls. For a more accurate picture, checkout out "./contracts/test/TestRefundableReceiver.sol".
 | |
|     blockchainTests.resets('disableRefundUntilEnd', () => {
 | |
|         it('should fully refund the sender when `shouldNotRefund` is false', async () => {
 | |
|             // Send 100 wei to the refundable contract that should be refunded to the receiver contract.
 | |
|             await receiver.testDisableRefundUntilEnd.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         // This test may not be necessary, but it is included here as a sanity check.
 | |
|         it('should fully refund the sender when `shouldNotRefund` is false for two calls in a row', async () => {
 | |
|             // Send 100 wei to the refundable contract that should be refunded to the receiver contract.
 | |
|             await receiver.testDisableRefundUntilEnd.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
| 
 | |
|             // Send 1000 wei to the refundable contract that should be refunded to the receiver contract.
 | |
|             await receiver.testDisableRefundUntilEnd.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_THOUSAND,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('should not refund the sender if `shouldNotRefund` is true', async () => {
 | |
|             /// Send 100 wei to the refundable contract that should not be refunded.
 | |
|             await receiver.testDisableRefundUntilEnd.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('should disable the `disableRefundUntilEnd` modifier and refund when `shouldNotRefund` is false', async () => {
 | |
|             /// Send 100 wei to the refundable contract that should be refunded.
 | |
|             await receiver.testNestedDisableRefundUntilEnd.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('should disable the `refundFinalBalance` modifier and send no refund when `shouldNotRefund` is true', async () => {
 | |
|             /// Send 100 wei to the refundable contract that should not be refunded.
 | |
|             await receiver.testNestedDisableRefundUntilEnd.awaitTransactionSuccessAsync(refundable.address, true, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('should disable the `refundFinalBalance` modifier and refund when `shouldNotRefund` is false', async () => {
 | |
|             /// Send 100 wei to the refundable contract that should be refunded.
 | |
|             await receiver.testMixedRefunds.awaitTransactionSuccessAsync(refundable.address, false, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         it('should disable the `refundFinalBalance` modifier and send no refund when `shouldNotRefund` is true', async () => {
 | |
|             /// Send 100 wei to the refundable contract that should not be refunded.
 | |
|             await receiver.testMixedRefunds.awaitTransactionSuccessAsync(refundable.address, true, {
 | |
|                 value: ONE_HUNDRED,
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| });
 |