@@ -669,6 +669,91 @@ func TestCompareResource_IAM_Role_IAMPolicy(t *testing.T) {
669669 assert .Equal (expected , got )
670670}
671671
672+ func TestCompareResource_SNS_Subscription_Document (t * testing.T ) {
673+ assert := assert .New (t )
674+ require := require .New (t )
675+
676+ g := testutil .NewModelForServiceWithOptions (t , "sns" , & testutil.TestingModelOptions {
677+ GeneratorConfigFile : "generator-document.yaml" ,
678+ })
679+
680+ crd := testutil .GetCRDByName (t , g , "Subscription" )
681+ require .NotNil (crd )
682+
683+ // The FilterPolicy field is marked as is_document: true so it should use
684+ // DocumentEqual instead of string comparison (community#2872)
685+ expected := `
686+ if ackcompare.HasNilDifference(a.ko.Spec.DeliveryPolicy, b.ko.Spec.DeliveryPolicy) {
687+ delta.Add("Spec.DeliveryPolicy", a.ko.Spec.DeliveryPolicy, b.ko.Spec.DeliveryPolicy)
688+ } else if a.ko.Spec.DeliveryPolicy != nil && b.ko.Spec.DeliveryPolicy != nil {
689+ if *a.ko.Spec.DeliveryPolicy != *b.ko.Spec.DeliveryPolicy {
690+ delta.Add("Spec.DeliveryPolicy", a.ko.Spec.DeliveryPolicy, b.ko.Spec.DeliveryPolicy)
691+ }
692+ }
693+ if ackcompare.HasNilDifference(a.ko.Spec.Endpoint, b.ko.Spec.Endpoint) {
694+ delta.Add("Spec.Endpoint", a.ko.Spec.Endpoint, b.ko.Spec.Endpoint)
695+ } else if a.ko.Spec.Endpoint != nil && b.ko.Spec.Endpoint != nil {
696+ if *a.ko.Spec.Endpoint != *b.ko.Spec.Endpoint {
697+ delta.Add("Spec.Endpoint", a.ko.Spec.Endpoint, b.ko.Spec.Endpoint)
698+ }
699+ }
700+ if ackcompare.HasNilDifference(a.ko.Spec.FilterPolicy, b.ko.Spec.FilterPolicy) {
701+ delta.Add("Spec.FilterPolicy", a.ko.Spec.FilterPolicy, b.ko.Spec.FilterPolicy)
702+ } else if a.ko.Spec.FilterPolicy != nil && b.ko.Spec.FilterPolicy != nil {
703+ if equal, err := ackcompare.DocumentEqual(*a.ko.Spec.FilterPolicy, *b.ko.Spec.FilterPolicy); err != nil || !equal {
704+ delta.Add("Spec.FilterPolicy", a.ko.Spec.FilterPolicy, b.ko.Spec.FilterPolicy)
705+ }
706+ }
707+ if ackcompare.HasNilDifference(a.ko.Spec.FilterPolicyScope, b.ko.Spec.FilterPolicyScope) {
708+ delta.Add("Spec.FilterPolicyScope", a.ko.Spec.FilterPolicyScope, b.ko.Spec.FilterPolicyScope)
709+ } else if a.ko.Spec.FilterPolicyScope != nil && b.ko.Spec.FilterPolicyScope != nil {
710+ if *a.ko.Spec.FilterPolicyScope != *b.ko.Spec.FilterPolicyScope {
711+ delta.Add("Spec.FilterPolicyScope", a.ko.Spec.FilterPolicyScope, b.ko.Spec.FilterPolicyScope)
712+ }
713+ }
714+ if ackcompare.HasNilDifference(a.ko.Spec.Protocol, b.ko.Spec.Protocol) {
715+ delta.Add("Spec.Protocol", a.ko.Spec.Protocol, b.ko.Spec.Protocol)
716+ } else if a.ko.Spec.Protocol != nil && b.ko.Spec.Protocol != nil {
717+ if *a.ko.Spec.Protocol != *b.ko.Spec.Protocol {
718+ delta.Add("Spec.Protocol", a.ko.Spec.Protocol, b.ko.Spec.Protocol)
719+ }
720+ }
721+ if ackcompare.HasNilDifference(a.ko.Spec.RawMessageDelivery, b.ko.Spec.RawMessageDelivery) {
722+ delta.Add("Spec.RawMessageDelivery", a.ko.Spec.RawMessageDelivery, b.ko.Spec.RawMessageDelivery)
723+ } else if a.ko.Spec.RawMessageDelivery != nil && b.ko.Spec.RawMessageDelivery != nil {
724+ if *a.ko.Spec.RawMessageDelivery != *b.ko.Spec.RawMessageDelivery {
725+ delta.Add("Spec.RawMessageDelivery", a.ko.Spec.RawMessageDelivery, b.ko.Spec.RawMessageDelivery)
726+ }
727+ }
728+ if ackcompare.HasNilDifference(a.ko.Spec.RedrivePolicy, b.ko.Spec.RedrivePolicy) {
729+ delta.Add("Spec.RedrivePolicy", a.ko.Spec.RedrivePolicy, b.ko.Spec.RedrivePolicy)
730+ } else if a.ko.Spec.RedrivePolicy != nil && b.ko.Spec.RedrivePolicy != nil {
731+ if *a.ko.Spec.RedrivePolicy != *b.ko.Spec.RedrivePolicy {
732+ delta.Add("Spec.RedrivePolicy", a.ko.Spec.RedrivePolicy, b.ko.Spec.RedrivePolicy)
733+ }
734+ }
735+ if ackcompare.HasNilDifference(a.ko.Spec.SubscriptionRoleARN, b.ko.Spec.SubscriptionRoleARN) {
736+ delta.Add("Spec.SubscriptionRoleARN", a.ko.Spec.SubscriptionRoleARN, b.ko.Spec.SubscriptionRoleARN)
737+ } else if a.ko.Spec.SubscriptionRoleARN != nil && b.ko.Spec.SubscriptionRoleARN != nil {
738+ if *a.ko.Spec.SubscriptionRoleARN != *b.ko.Spec.SubscriptionRoleARN {
739+ delta.Add("Spec.SubscriptionRoleARN", a.ko.Spec.SubscriptionRoleARN, b.ko.Spec.SubscriptionRoleARN)
740+ }
741+ }
742+ if ackcompare.HasNilDifference(a.ko.Spec.TopicARN, b.ko.Spec.TopicARN) {
743+ delta.Add("Spec.TopicARN", a.ko.Spec.TopicARN, b.ko.Spec.TopicARN)
744+ } else if a.ko.Spec.TopicARN != nil && b.ko.Spec.TopicARN != nil {
745+ if *a.ko.Spec.TopicARN != *b.ko.Spec.TopicARN {
746+ delta.Add("Spec.TopicARN", a.ko.Spec.TopicARN, b.ko.Spec.TopicARN)
747+ }
748+ }
749+ `
750+ got , err := code .CompareResource (
751+ crd .Config (), crd , "delta" , "a.ko" , "b.ko" , 1 ,
752+ )
753+ require .NoError (err )
754+ assert .Equal (expected , got )
755+ }
756+
672757// TestCompareResource_QuickSight_DataSet tests that the delta code generation
673758// correctly handles the QuickSight DataSet resource, specifically the
674759// RowLevelPermissionTagConfiguration.TagRuleConfigurations field which is a
0 commit comments