@@ -780,7 +780,9 @@ func TestCertificateTypeMethods(t *testing.T) {
780780 },
781781 {
782782 "PoolRetirement" ,
783- & PoolRetirementCertificate {CertType : uint (CertificateTypePoolRetirement )},
783+ & PoolRetirementCertificate {
784+ CertType : uint (CertificateTypePoolRetirement ),
785+ },
784786 uint (CertificateTypePoolRetirement ),
785787 },
786788 {
@@ -799,17 +801,23 @@ func TestCertificateTypeMethods(t *testing.T) {
799801 },
800802 {
801803 "Registration" ,
802- & RegistrationCertificate {CertType : uint (CertificateTypeRegistration )},
804+ & RegistrationCertificate {
805+ CertType : uint (CertificateTypeRegistration ),
806+ },
803807 uint (CertificateTypeRegistration ),
804808 },
805809 {
806810 "Deregistration" ,
807- & DeregistrationCertificate {CertType : uint (CertificateTypeDeregistration )},
811+ & DeregistrationCertificate {
812+ CertType : uint (CertificateTypeDeregistration ),
813+ },
808814 uint (CertificateTypeDeregistration ),
809815 },
810816 {
811817 "VoteDelegation" ,
812- & VoteDelegationCertificate {CertType : uint (CertificateTypeVoteDelegation )},
818+ & VoteDelegationCertificate {
819+ CertType : uint (CertificateTypeVoteDelegation ),
820+ },
813821 uint (CertificateTypeVoteDelegation ),
814822 },
815823 {
@@ -889,3 +897,78 @@ func TestCertificateTypeMethods(t *testing.T) {
889897 })
890898 }
891899}
900+
901+ // TestCertificateTypeCoverage ensures all CertificateType constants are tested
902+ func TestCertificateTypeCoverage (t * testing.T ) {
903+ // Get all CertificateType constants via reflection
904+ certTypeType := reflect .TypeOf (CertificateTypeStakeRegistration )
905+ if certTypeType .Kind () != reflect .Uint {
906+ t .Fatalf ("CertificateType is not uint, got %s" , certTypeType .Kind ())
907+ }
908+
909+ // Collect all constants from the test table
910+ testedTypes := make (map [uint ]bool )
911+ for _ , tt := range []struct {
912+ name string
913+ cert Certificate
914+ expected uint
915+ }{
916+ {"StakeRegistration" , & StakeRegistrationCertificate {CertType : uint (CertificateTypeStakeRegistration )}, uint (CertificateTypeStakeRegistration )},
917+ {"StakeDeregistration" , & StakeDeregistrationCertificate {CertType : uint (CertificateTypeStakeDeregistration )}, uint (CertificateTypeStakeDeregistration )},
918+ {"StakeDelegation" , & StakeDelegationCertificate {CertType : uint (CertificateTypeStakeDelegation )}, uint (CertificateTypeStakeDelegation )},
919+ {"PoolRegistration" , & PoolRegistrationCertificate {CertType : uint (CertificateTypePoolRegistration )}, uint (CertificateTypePoolRegistration )},
920+ {"PoolRetirement" , & PoolRetirementCertificate {CertType : uint (CertificateTypePoolRetirement )}, uint (CertificateTypePoolRetirement )},
921+ {"GenesisKeyDelegation" , & GenesisKeyDelegationCertificate {CertType : uint (CertificateTypeGenesisKeyDelegation )}, uint (CertificateTypeGenesisKeyDelegation )},
922+ {"MoveInstantaneousRewards" , & MoveInstantaneousRewardsCertificate {CertType : uint (CertificateTypeMoveInstantaneousRewards )}, uint (CertificateTypeMoveInstantaneousRewards )},
923+ {"Registration" , & RegistrationCertificate {CertType : uint (CertificateTypeRegistration )}, uint (CertificateTypeRegistration )},
924+ {"Deregistration" , & DeregistrationCertificate {CertType : uint (CertificateTypeDeregistration )}, uint (CertificateTypeDeregistration )},
925+ {"VoteDelegation" , & VoteDelegationCertificate {CertType : uint (CertificateTypeVoteDelegation )}, uint (CertificateTypeVoteDelegation )},
926+ {"StakeVoteDelegation" , & StakeVoteDelegationCertificate {CertType : uint (CertificateTypeStakeVoteDelegation )}, uint (CertificateTypeStakeVoteDelegation )},
927+ {"StakeRegistrationDelegation" , & StakeRegistrationDelegationCertificate {CertType : uint (CertificateTypeStakeRegistrationDelegation )}, uint (CertificateTypeStakeRegistrationDelegation )},
928+ {"VoteRegistrationDelegation" , & VoteRegistrationDelegationCertificate {CertType : uint (CertificateTypeVoteRegistrationDelegation )}, uint (CertificateTypeVoteRegistrationDelegation )},
929+ {"StakeVoteRegistrationDelegation" , & StakeVoteRegistrationDelegationCertificate {CertType : uint (CertificateTypeStakeVoteRegistrationDelegation )}, uint (CertificateTypeStakeVoteRegistrationDelegation )},
930+ {"AuthCommitteeHot" , & AuthCommitteeHotCertificate {CertType : uint (CertificateTypeAuthCommitteeHot )}, uint (CertificateTypeAuthCommitteeHot )},
931+ {"ResignCommitteeCold" , & ResignCommitteeColdCertificate {CertType : uint (CertificateTypeResignCommitteeCold )}, uint (CertificateTypeResignCommitteeCold )},
932+ {"RegistrationDrep" , & RegistrationDrepCertificate {CertType : uint (CertificateTypeRegistrationDrep )}, uint (CertificateTypeRegistrationDrep )},
933+ {"DeregistrationDrep" , & DeregistrationDrepCertificate {CertType : uint (CertificateTypeDeregistrationDrep )}, uint (CertificateTypeDeregistrationDrep )},
934+ {"UpdateDrep" , & UpdateDrepCertificate {CertType : uint (CertificateTypeUpdateDrep )}, uint (CertificateTypeUpdateDrep )},
935+ {"LeiosEb" , & LeiosEbCertificate {}, uint (CertificateTypeLeiosEb )},
936+ } {
937+ testedTypes [tt .expected ] = true
938+ }
939+
940+ // Check that we have at least one test for each known certificate type constant
941+ // This is a best-effort check - if new constants are added, this test will need updating
942+ expectedTypes := map [uint ]string {
943+ uint (CertificateTypeStakeRegistration ): "CertificateTypeStakeRegistration" ,
944+ uint (CertificateTypeStakeDeregistration ): "CertificateTypeStakeDeregistration" ,
945+ uint (CertificateTypeStakeDelegation ): "CertificateTypeStakeDelegation" ,
946+ uint (CertificateTypePoolRegistration ): "CertificateTypePoolRegistration" ,
947+ uint (CertificateTypePoolRetirement ): "CertificateTypePoolRetirement" ,
948+ uint (CertificateTypeGenesisKeyDelegation ): "CertificateTypeGenesisKeyDelegation" ,
949+ uint (CertificateTypeMoveInstantaneousRewards ): "CertificateTypeMoveInstantaneousRewards" ,
950+ uint (CertificateTypeRegistration ): "CertificateTypeRegistration" ,
951+ uint (CertificateTypeDeregistration ): "CertificateTypeDeregistration" ,
952+ uint (CertificateTypeVoteDelegation ): "CertificateTypeVoteDelegation" ,
953+ uint (CertificateTypeStakeVoteDelegation ): "CertificateTypeStakeVoteDelegation" ,
954+ uint (CertificateTypeStakeRegistrationDelegation ): "CertificateTypeStakeRegistrationDelegation" ,
955+ uint (CertificateTypeVoteRegistrationDelegation ): "CertificateTypeVoteRegistrationDelegation" ,
956+ uint (CertificateTypeStakeVoteRegistrationDelegation ): "CertificateTypeStakeVoteRegistrationDelegation" ,
957+ uint (CertificateTypeAuthCommitteeHot ): "CertificateTypeAuthCommitteeHot" ,
958+ uint (CertificateTypeResignCommitteeCold ): "CertificateTypeResignCommitteeCold" ,
959+ uint (CertificateTypeRegistrationDrep ): "CertificateTypeRegistrationDrep" ,
960+ uint (CertificateTypeDeregistrationDrep ): "CertificateTypeDeregistrationDrep" ,
961+ uint (CertificateTypeUpdateDrep ): "CertificateTypeUpdateDrep" ,
962+ uint (CertificateTypeLeiosEb ): "CertificateTypeLeiosEb" ,
963+ }
964+
965+ for certType , name := range expectedTypes {
966+ if ! testedTypes [certType ] {
967+ t .Errorf (
968+ "Certificate type %s (value %d) is not covered by TestCertificateTypeMethods" ,
969+ name ,
970+ certType ,
971+ )
972+ }
973+ }
974+ }
0 commit comments