packages feed

cleveland-0.1.1: morley-test/Test/Interpreter/SetDelegate.hs

-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

-- | Tests for 'create_n_transfer.tz' contract. See [#643]
module Test.Interpreter.SetDelegate
  ( test_setDelegate
  ) where

import Test.Tasty (TestTree)

import Morley.Michelson.Typed
import Morley.Tezos.Crypto
import Test.Cleveland

contract :: Contract ('TOption 'TKeyHash) 'TUnit
contract = defaultContract $
  CAR `Seq` SET_DELEGATE `Seq` DIP NIL `Seq` CONS `Seq` DIP UNIT `Seq` PAIR

test_setDelegate :: IO TestTree
test_setDelegate =
  pure $ testScenario "setDelegate works" $ scenario do
    handle <- originateTypedSimple @(Maybe KeyHash) @_ @() "set_delegate" () contract
    getDelegate handle @@== Nothing
    addr <- newAddress "delegate"
    registerDelegate addr
    pk <- getPublicKey addr
    let kh = hashKey pk
    call handle CallDefault (Just kh)
    getDelegate handle @@== Just kh
    call handle CallDefault Nothing
    getDelegate handle @@== Nothing