@@ -62,6 +62,113 @@ func Test_BundleRenderer_CreatesCorrectDefaultOptions(t *testing.T) {
6262 _ , _ = renderer .Render (bundle.RegistryV1 {}, expectedInstallNamespace )
6363}
6464
65+ func Test_BundleRenderer_DefaultTargetNamespaces (t * testing.T ) {
66+ for _ , tc := range []struct {
67+ name string
68+ supportedInstallModes []v1alpha1.InstallModeType
69+ expectedTargetNamespaces []string
70+ expectedErrMsg string
71+ }{
72+ {
73+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces}" ,
74+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces },
75+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
76+ },
77+ {
78+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces, OwnNamespace}" ,
79+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeOwnNamespace },
80+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
81+ },
82+ {
83+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces, SingleNamespace}" ,
84+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeSingleNamespace },
85+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
86+ },
87+ {
88+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces, MultiNamespace}" ,
89+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeMultiNamespace },
90+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
91+ },
92+ {
93+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces, OwnNamespace, SingleNamespace}" ,
94+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeSingleNamespace },
95+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
96+ },
97+ {
98+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces, OwnNamespace, MultiNamespace}" ,
99+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeMultiNamespace },
100+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
101+ },
102+ {
103+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces, SingleNamespace, MultiNamespace}" ,
104+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeMultiNamespace },
105+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
106+ },
107+ {
108+ name : "Default to AllNamespaces when bundle install modes are {AllNamespaces, SingleNamespace, OwnNamespace, MultiNamespace}" ,
109+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeAllNamespaces , v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeMultiNamespace },
110+ expectedTargetNamespaces : []string {corev1 .NamespaceAll },
111+ },
112+ {
113+ name : "No default when bundle install modes are {SingleNamespace}" ,
114+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeSingleNamespace },
115+ expectedErrMsg : "exactly one target namespace must be specified" ,
116+ },
117+ {
118+ name : "No default when bundle install modes are {OwnNamespace}" ,
119+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeOwnNamespace },
120+ expectedErrMsg : "exactly one target namespace must be specified" ,
121+ },
122+ {
123+ name : "No default when bundle install modes are {MultiNamespace}" ,
124+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeMultiNamespace },
125+ expectedErrMsg : "at least one target namespace must be specified" ,
126+ },
127+ {
128+ name : "No default when bundle install modes are {SingleNamespace, OwnNamespace}" ,
129+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeOwnNamespace },
130+ expectedErrMsg : "exactly one target namespace must be specified" ,
131+ },
132+ {
133+ name : "No default when bundle install modes are {SingleNamespace, MultiNamespace}" ,
134+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeMultiNamespace },
135+ expectedErrMsg : "at least one target namespace must be specified" ,
136+ },
137+ {
138+ name : "No default when bundle install modes are {OwnNamespace, MultiNamespace}" ,
139+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeMultiNamespace },
140+ expectedErrMsg : "at least one target namespace must be specified" ,
141+ },
142+ {
143+ name : "No default when bundle install modes are {SingleNamespace, OwnNamespace, MultiNamespace}" ,
144+ supportedInstallModes : []v1alpha1.InstallModeType {v1alpha1 .InstallModeTypeSingleNamespace , v1alpha1 .InstallModeTypeOwnNamespace , v1alpha1 .InstallModeTypeMultiNamespace },
145+ expectedErrMsg : "at least one target namespace must be specified" ,
146+ },
147+ } {
148+ t .Run (tc .name , func (t * testing.T ) {
149+ renderer := render.BundleRenderer {
150+ ResourceGenerators : []render.ResourceGenerator {
151+ func (rv1 * bundle.RegistryV1 , opts render.Options ) ([]client.Object , error ) {
152+ require .Equal (t , tc .expectedTargetNamespaces , opts .TargetNamespaces )
153+ return nil , nil
154+ },
155+ },
156+ }
157+ _ , err := renderer .Render (bundle.RegistryV1 {
158+ CSV : clusterserviceversion .Builder ().
159+ WithName ("test" ).
160+ WithInstallModeSupportFor (tc .supportedInstallModes ... ).Build (),
161+ }, "some-namespace" )
162+ if tc .expectedErrMsg != "" {
163+ require .Error (t , err )
164+ require .Contains (t , err .Error (), tc .expectedErrMsg )
165+ } else {
166+ require .NoError (t , err )
167+ }
168+ })
169+ }
170+ }
171+
65172func Test_BundleRenderer_ValidatesRenderOptions (t * testing.T ) {
66173 for _ , tc := range []struct {
67174 name string
0 commit comments