From 735ade89d4d0e1529377f44b4f081a9611033fc9 Mon Sep 17 00:00:00 2001 From: bpolania Date: Mon, 21 Apr 2025 16:39:51 -0700 Subject: [PATCH 1/2] Update test_integration_permission.py --- .../test_integration_permission.py | 263 +++++++++++++++++- 1 file changed, 262 insertions(+), 1 deletion(-) diff --git a/tests/integration/test_integration_permission.py b/tests/integration/test_integration_permission.py index 085a228..49262d1 100644 --- a/tests/integration/test_integration_permission.py +++ b/tests/integration/test_integration_permission.py @@ -80,7 +80,7 @@ def test_set_permission_invalid_ip(self, story_client): """Test setting permission for an unregistered IP.""" unregistered_ip = "0x1234567890123456789012345678901234567890" - with pytest.raises(ValueError) as exc_info: + with pytest.raises(Exception) as exc_info: story_client.Permission.set_permission( ip_id=unregistered_ip, signer=account.address, @@ -89,3 +89,264 @@ def test_set_permission_invalid_ip(self, story_client): ) assert f"IP id with {unregistered_ip} is not registered" in str(exc_info.value) + + def test_set_permission_invalid_addresses(self, story_client, ip_id): + """Test that set_permission raises proper exceptions for invalid addresses.""" + invalid_signer = "0xinvalid_address" + + with pytest.raises(Exception) as exc_info: + story_client.Permission.set_permission( + ip_id=ip_id, + signer=invalid_signer, + to=CORE_METADATA_MODULE, + permission=1, # ALLOW + ) + + assert "invalid address" in str(exc_info.value).lower() + + invalid_to = "not_a_hex_address" + + with pytest.raises(Exception) as exc_info: + story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=invalid_to, + permission=1, # ALLOW + ) + + assert "invalid address" in str(exc_info.value).lower() + + lowercase_address = account.address.lower() + try: + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=lowercase_address, + to=CORE_METADATA_MODULE, + permission=1, + tx_options={"wait_for_transaction": True} + ) + assert 'tx_hash' in response + except Exception as e: + pytest.fail(f"set_permission should accept lowercase addresses, but raised: {e}") + + def test_different_permission_levels(self, story_client, ip_id): + """Test setting and changing different permission levels.""" + DISALLOW = 0 + ALLOW = 1 + ABSTAIN = 2 + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=DISALLOW, + func="function setAll(address,string,bytes32,bytes32)", + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + assert isinstance(response['tx_hash'], str) + assert len(response['tx_hash']) > 0 + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ALLOW, + func="function setAll(address,string,bytes32,bytes32)", + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ABSTAIN, + func="function setAll(address,string,bytes32,bytes32)", + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_all_permissions( + ip_id=ip_id, + signer=account.address, + permission=DISALLOW, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_all_permissions( + ip_id=ip_id, + signer=account.address, + permission=ABSTAIN, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + def test_different_function_selectors(self, story_client, ip_id): + """Test setting permissions with different function selectors.""" + ALLOW = 1 + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=1, + # No func parameter provided - should use default + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + assert isinstance(response['tx_hash'], str) + assert len(response['tx_hash']) > 0 + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ALLOW, + func="setAll(address,string,bytes32,bytes32)", + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ALLOW, + func="setName(address,string)", + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ALLOW, + func="setDescription(address,string)", + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + deadline = web3.eth.get_block('latest')['timestamp'] + 60000 + response = story_client.Permission.create_set_permission_signature( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ALLOW, + # No func parameter provided + deadline=deadline, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + def test_permission_hierarchies_and_overrides(self, story_client, ip_id): + """Test permission hierarchies and how permissions override each other.""" + DISALLOW = 0 + ALLOW = 1 + ABSTAIN = 2 + + response = story_client.Permission.set_all_permissions( + ip_id=ip_id, + signer=account.address, + permission=DISALLOW, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + specific_func = "setName(address,string)" + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ALLOW, + func=specific_func, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + alternate_signer = web3.eth.account.create() + + response = story_client.Permission.set_all_permissions( + ip_id=ip_id, + signer=alternate_signer.address, + permission=ALLOW, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_permission( + ip_id=ip_id, + signer=alternate_signer.address, + to=CORE_METADATA_MODULE, + permission=DISALLOW, + func=specific_func, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + deadline = web3.eth.get_block('latest')['timestamp'] + 60000 + + response = story_client.Permission.create_set_permission_signature( + ip_id=ip_id, + signer=account.address, + to=CORE_METADATA_MODULE, + permission=ALLOW, + func="setDescription(address,string)", + deadline=deadline, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_all_permissions( + ip_id=ip_id, + signer=account.address, + permission=ABSTAIN, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + response = story_client.Permission.set_all_permissions( + ip_id=ip_id, + signer=alternate_signer.address, + permission=ABSTAIN, + tx_options={"wait_for_transaction": True} + ) + + assert response is not None + assert 'tx_hash' in response + + From 2b5860a9989c2612aa92ad168add2919d6b51950 Mon Sep 17 00:00:00 2001 From: bpolania Date: Tue, 22 Apr 2025 09:17:57 -0700 Subject: [PATCH 2/2] Update test_integration_permission.py --- .../test_integration_permission.py | 74 +++++++------------ 1 file changed, 25 insertions(+), 49 deletions(-) diff --git a/tests/integration/test_integration_permission.py b/tests/integration/test_integration_permission.py index 49262d1..a27f504 100644 --- a/tests/integration/test_integration_permission.py +++ b/tests/integration/test_integration_permission.py @@ -9,10 +9,6 @@ story_client, get_token_id, MockERC721, - MockERC20, - ZERO_ADDRESS, - ROYALTY_POLICY, - PIL_LICENSE_TEMPLATE, CORE_METADATA_MODULE ) @@ -23,8 +19,7 @@ def ip_id(self, story_client): token_id = get_token_id(MockERC721, story_client.web3, story_client.account) response = story_client.IPAsset.register( nft_contract=MockERC721, - token_id=token_id, - tx_options={"wait_for_transaction": True} + token_id=token_id ) assert 'ip_id' in response, "Failed to register IP" return response['ip_id'] @@ -36,8 +31,7 @@ def test_set_permission(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=1, # ALLOW - func="function setAll(address,string,bytes32,bytes32)", - tx_options={"wait_for_transaction": True} + func="function setAll(address,string,bytes32,bytes32)" ) assert response is not None @@ -50,7 +44,7 @@ def test_set_all_permissions(self, story_client, ip_id): response = story_client.Permission.set_all_permissions( ip_id=ip_id, signer=account.address, - permission=1, # ALLOW + permission=1 # ALLOW ) assert response is not None @@ -68,7 +62,7 @@ def test_create_set_permission_signature(self, story_client, ip_id): to=CORE_METADATA_MODULE, func="setAll(address,string,bytes32,bytes32)", permission=1, # ALLOW - deadline=deadline, + deadline=deadline ) assert response is not None @@ -85,7 +79,7 @@ def test_set_permission_invalid_ip(self, story_client): ip_id=unregistered_ip, signer=account.address, to=CORE_METADATA_MODULE, - permission=1, + permission=1 ) assert f"IP id with {unregistered_ip} is not registered" in str(exc_info.value) @@ -99,7 +93,7 @@ def test_set_permission_invalid_addresses(self, story_client, ip_id): ip_id=ip_id, signer=invalid_signer, to=CORE_METADATA_MODULE, - permission=1, # ALLOW + permission=1 # ALLOW ) assert "invalid address" in str(exc_info.value).lower() @@ -111,7 +105,7 @@ def test_set_permission_invalid_addresses(self, story_client, ip_id): ip_id=ip_id, signer=account.address, to=invalid_to, - permission=1, # ALLOW + permission=1 # ALLOW ) assert "invalid address" in str(exc_info.value).lower() @@ -122,8 +116,7 @@ def test_set_permission_invalid_addresses(self, story_client, ip_id): ip_id=ip_id, signer=lowercase_address, to=CORE_METADATA_MODULE, - permission=1, - tx_options={"wait_for_transaction": True} + permission=1 ) assert 'tx_hash' in response except Exception as e: @@ -140,8 +133,7 @@ def test_different_permission_levels(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=DISALLOW, - func="function setAll(address,string,bytes32,bytes32)", - tx_options={"wait_for_transaction": True} + func="function setAll(address,string,bytes32,bytes32)" ) assert response is not None @@ -154,8 +146,7 @@ def test_different_permission_levels(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=ALLOW, - func="function setAll(address,string,bytes32,bytes32)", - tx_options={"wait_for_transaction": True} + func="function setAll(address,string,bytes32,bytes32)" ) assert response is not None @@ -166,8 +157,7 @@ def test_different_permission_levels(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=ABSTAIN, - func="function setAll(address,string,bytes32,bytes32)", - tx_options={"wait_for_transaction": True} + func="function setAll(address,string,bytes32,bytes32)" ) assert response is not None @@ -176,8 +166,7 @@ def test_different_permission_levels(self, story_client, ip_id): response = story_client.Permission.set_all_permissions( ip_id=ip_id, signer=account.address, - permission=DISALLOW, - tx_options={"wait_for_transaction": True} + permission=DISALLOW ) assert response is not None @@ -186,8 +175,7 @@ def test_different_permission_levels(self, story_client, ip_id): response = story_client.Permission.set_all_permissions( ip_id=ip_id, signer=account.address, - permission=ABSTAIN, - tx_options={"wait_for_transaction": True} + permission=ABSTAIN ) assert response is not None @@ -201,9 +189,8 @@ def test_different_function_selectors(self, story_client, ip_id): ip_id=ip_id, signer=account.address, to=CORE_METADATA_MODULE, - permission=1, + permission=1 # No func parameter provided - should use default - tx_options={"wait_for_transaction": True} ) assert response is not None @@ -216,8 +203,7 @@ def test_different_function_selectors(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=ALLOW, - func="setAll(address,string,bytes32,bytes32)", - tx_options={"wait_for_transaction": True} + func="setAll(address,string,bytes32,bytes32)" ) assert response is not None @@ -228,8 +214,7 @@ def test_different_function_selectors(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=ALLOW, - func="setName(address,string)", - tx_options={"wait_for_transaction": True} + func="setName(address,string)" ) assert response is not None @@ -240,8 +225,7 @@ def test_different_function_selectors(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=ALLOW, - func="setDescription(address,string)", - tx_options={"wait_for_transaction": True} + func="setDescription(address,string)" ) assert response is not None @@ -254,8 +238,7 @@ def test_different_function_selectors(self, story_client, ip_id): to=CORE_METADATA_MODULE, permission=ALLOW, # No func parameter provided - deadline=deadline, - tx_options={"wait_for_transaction": True} + deadline=deadline ) assert response is not None @@ -270,8 +253,7 @@ def test_permission_hierarchies_and_overrides(self, story_client, ip_id): response = story_client.Permission.set_all_permissions( ip_id=ip_id, signer=account.address, - permission=DISALLOW, - tx_options={"wait_for_transaction": True} + permission=DISALLOW ) assert response is not None @@ -283,8 +265,7 @@ def test_permission_hierarchies_and_overrides(self, story_client, ip_id): signer=account.address, to=CORE_METADATA_MODULE, permission=ALLOW, - func=specific_func, - tx_options={"wait_for_transaction": True} + func=specific_func ) assert response is not None @@ -295,8 +276,7 @@ def test_permission_hierarchies_and_overrides(self, story_client, ip_id): response = story_client.Permission.set_all_permissions( ip_id=ip_id, signer=alternate_signer.address, - permission=ALLOW, - tx_options={"wait_for_transaction": True} + permission=ALLOW ) assert response is not None @@ -307,8 +287,7 @@ def test_permission_hierarchies_and_overrides(self, story_client, ip_id): signer=alternate_signer.address, to=CORE_METADATA_MODULE, permission=DISALLOW, - func=specific_func, - tx_options={"wait_for_transaction": True} + func=specific_func ) assert response is not None @@ -322,8 +301,7 @@ def test_permission_hierarchies_and_overrides(self, story_client, ip_id): to=CORE_METADATA_MODULE, permission=ALLOW, func="setDescription(address,string)", - deadline=deadline, - tx_options={"wait_for_transaction": True} + deadline=deadline ) assert response is not None @@ -332,8 +310,7 @@ def test_permission_hierarchies_and_overrides(self, story_client, ip_id): response = story_client.Permission.set_all_permissions( ip_id=ip_id, signer=account.address, - permission=ABSTAIN, - tx_options={"wait_for_transaction": True} + permission=ABSTAIN ) assert response is not None @@ -342,8 +319,7 @@ def test_permission_hierarchies_and_overrides(self, story_client, ip_id): response = story_client.Permission.set_all_permissions( ip_id=ip_id, signer=alternate_signer.address, - permission=ABSTAIN, - tx_options={"wait_for_transaction": True} + permission=ABSTAIN ) assert response is not None