Carving out worklock agent tests.

pull/1550/head
Kieran Prasch 2019-09-03 14:46:47 -07:00 committed by Kieran R. Prasch
parent cdc8696855
commit 496f73680a
3 changed files with 78 additions and 11 deletions

View File

@ -954,12 +954,14 @@ class WorkLockAgent(EthereumContractAgent):
registry_contract_name = "WorkLock"
def bid(self, amount: int, sender_address: str) -> dict:
def bid(self, eth_amount: int, sender_address: str) -> dict:
"""
Bid for tokens with ETH.
"""
contract_function = self.contract.functions.bid({'value': amount})
receipt = self.blockchain.send_transaction(contract_function=contract_function, sender_address=sender_address)
contract_function = self.contract.functions.bid()
receipt = self.blockchain.send_transaction(contract_function=contract_function,
sender_address=sender_address,
payload={'value': eth_amount})
return receipt
def claim(self, sender_address: str) -> dict:

View File

@ -0,0 +1,65 @@
import pytest
from web3 import Web3
from nucypher.blockchain.eth.agents import WorkLockAgent, ContractAgency
from nucypher.blockchain.eth.deployers import WorkLockDeployer
from nucypher.blockchain.eth.token import NU
@pytest.fixture(scope="module", autouse=True)
def deploy_worklock(testerchain, agency, test_registry, token_economics):
# TODO: Move to "WorkLockEconomics" class #1126
now = testerchain.w3.eth.getBlock(block_identifier='latest').timestamp
start_bid_date = now + (60 * 60) # 1 Hour
end_bid_date = start_bid_date + (60 * 60)
deposit_rate = 100
refund_rate = 200
locked_periods = 2 * token_economics.minimum_locked_periods
# Deploy
deployer = WorkLockDeployer(registry=test_registry,
deployer_address=testerchain.etherbase_account,
start_date=start_bid_date,
end_date=end_bid_date,
refund_rate=refund_rate,
deposit_rate=deposit_rate,
locked_periods=locked_periods)
_deployment_receipts = deployer.deploy()
def test_create_worklock_agent(testerchain, test_registry, agency, token_economics, deploy_worklock):
agent = WorkLockAgent(registry=test_registry)
assert agent.contract_address
same_agent = ContractAgency.get_agent(WorkLockAgent, registry=test_registry)
assert agent == same_agent
def test_bid(testerchain, agency, token_economics, test_registry):
agent = ContractAgency.get_agent(WorkLockAgent, registry=test_registry)
big_bidder = testerchain.unassigned_accounts[-1]
receipt = agent.bid(sender_address=big_bidder,
eth_amount=int(Web3.fromWei(1, 'ether')))
assert receipt
def test_get_remaining_work(testerchain, agency, token_economics, test_registry):
agent = ContractAgency.get_agent(WorkLockAgent, registry=test_registry)
bidder = testerchain.unassigned_accounts[-1]
receipt = agent.get_remaining_work(target_address=bidder)
assert receipt
def test_claim(testerchain, agency, token_economics, test_registry):
agent = ContractAgency.get_agent(WorkLockAgent, registry=test_registry)
bidder = testerchain.unassigned_accounts[-1]
receipt = agent.claim(sender_address=bidder)
assert receipt
def test_refund(testerchain, agency, token_economics, test_registry):
agent = ContractAgency.get_agent(WorkLockAgent, registry=test_registry)
bidder = testerchain.unassigned_accounts[-1]
receipt = agent.refund(sender_address=bidder)
assert receipt

View File

@ -19,20 +19,20 @@ along with nucypher. If not, see <https://www.gnu.org/licenses/>.
import pytest
from eth_utils import is_checksum_address
from nucypher.blockchain.eth.agents import NucypherTokenAgent, WorkLockAgent
from nucypher.blockchain.eth.deployers import NucypherTokenDeployer, WorkLockDeployer
from nucypher.blockchain.eth.interfaces import EthereumContractRegistry
from nucypher.blockchain.eth.agents import WorkLockAgent
from nucypher.blockchain.eth.deployers import WorklockDeployer
from nucypher.blockchain.eth.registry import BaseContractRegistry
def test_token_deployer_and_agent(testerchain, agency, token_economics):
def test_token_deployer(testerchain, test_registry, agency, token_economics):
origin = testerchain.etherbase_account
# Trying to get token from blockchain before it's been published fails
with pytest.raises(EthereumContractRegistry.UnknownContract):
WorkLockAgent(blockchain=testerchain)
with pytest.raises(BaseContractRegistry.UnknownContract):
WorkLockAgent(registry=test_registry)
# Generate WorkLock params
# TODO: Move to "economics" class?
# TODO: Move to "WorkLockEconomics" class #1126
now = testerchain.w3.eth.getBlock(block_identifier='latest').timestamp
start_bid_date = now + (60 * 60) # 1 Hour
end_bid_date = start_bid_date + (60 * 60)
@ -41,7 +41,7 @@ def test_token_deployer_and_agent(testerchain, agency, token_economics):
locked_periods = 2 * token_economics.minimum_locked_periods
# Create WorkLock Deployer
deployer = WorkLockDeployer(blockchain=testerchain,
deployer = WorklockDeployer(blockchain=testerchain,
deployer_address=origin,
start_date=start_bid_date,
end_date=end_bid_date,