@@ -486,3 +486,49 @@ def test_add_custom_fee_type_error():
486486 with pytest .raises (TypeError , match = "custom_fee must be a CustomFixedFee" ):
487487 tx .add_custom_fee (None ) # type: ignore
488488 assert tx .custom_fees is None , "Invalid input must not change custom_fees"
489+
490+
491+ def test_add_fee_exempt_key ():
492+ """Test adding a fee exempt key to the transaction."""
493+ tx = TopicUpdateTransaction ()
494+
495+ key1 = PrivateKey .generate ().public_key ()
496+ key2 = PrivateKey .generate ().public_key ()
497+
498+ result = tx .add_fee_exempt_key (key1 )
499+
500+ assert len (tx .fee_exempt_keys ) == 1
501+ assert tx .fee_exempt_keys [0 ] == key1
502+ assert result is tx
503+
504+ tx .add_fee_exempt_key (key2 )
505+
506+ assert len (tx .fee_exempt_keys ) == 2
507+ assert tx .fee_exempt_keys [0 ] == key1
508+ assert tx .fee_exempt_keys [1 ] == key2
509+
510+
511+ def test_add_fee_exempt_key_frozen (mock_client , topic_id ):
512+ """Test calling add_fee_exempt_key() after freezing raises an exception."""
513+ tx = TopicUpdateTransaction ()
514+
515+ tx .set_topic_id (topic_id )
516+ tx .freeze_with (mock_client )
517+
518+ key = PrivateKey .generate ().public_key ()
519+
520+ with pytest .raises (Exception , match = "Transaction is immutable; it has been frozen" ):
521+ tx .add_fee_exempt_key (key )
522+
523+
524+ def test_add_fee_exempt_key_type_error ():
525+ """Test passing None or a non-Key argument raises TypeError."""
526+ tx = TopicUpdateTransaction ()
527+
528+ with pytest .raises (TypeError , match = "key must be a Key" ):
529+ tx .add_fee_exempt_key ("this_is_a_string" ) # type: ignore
530+ assert tx .fee_exempt_keys is None , "Invalid input must not change fee_exempt_keys"
531+
532+ with pytest .raises (TypeError , match = "key must be a Key" ):
533+ tx .add_fee_exempt_key (None ) # type: ignore
534+ assert tx .fee_exempt_keys is None , "Invalid input must not change fee_exempt_keys"
0 commit comments