1212# License for the specific language governing permissions and limitations
1313# under the License.
1414
15+ from unittest import mock
16+
1517from openstackclient .image .v2 import metadef_namespaces
1618from openstackclient .tests .unit .image .v2 import fakes as image_fakes
1719
@@ -24,13 +26,15 @@ class TestMetadefNamespaceCreate(image_fakes.TestImagev2):
2426 'display_name' ,
2527 'namespace' ,
2628 'owner' ,
29+ 'tags' ,
2730 'visibility' ,
2831 )
2932 expected_data = (
3033 _metadef_namespace .created_at ,
3134 _metadef_namespace .display_name ,
3235 _metadef_namespace .namespace ,
3336 _metadef_namespace .owner ,
37+ _metadef_namespace .tags ,
3438 _metadef_namespace .visibility ,
3539 )
3640
@@ -114,21 +118,25 @@ def test_namespace_list_no_options(self):
114118
115119
116120class TestMetadefNamespaceSet (image_fakes .TestImagev2 ):
117- _metadef_namespace = image_fakes .create_one_metadef_namespace ()
118-
119121 def setUp (self ):
120122 super ().setUp ()
121123
124+ self .metadef_namespace = image_fakes .create_one_metadef_namespace ()
125+
126+ self .image_client .get_metadef_namespace .return_value = (
127+ self .metadef_namespace
128+ )
122129 self .image_client .update_metadef_namespace .return_value = (
123- self ._metadef_namespace
130+ self .metadef_namespace
124131 )
132+ self .image_client .add_tag_to_metadef_namespace .return_value = None
133+
125134 self .cmd = metadef_namespaces .SetMetadefNamespace (self .app , None )
126- self .datalist = self ._metadef_namespace
127135
128136 def test_namespace_set_no_options (self ):
129- arglist = [self ._metadef_namespace .namespace ]
137+ arglist = [self .metadef_namespace .namespace ]
130138 verifylist = [
131- ('namespace' , self ._metadef_namespace .namespace ),
139+ ('namespace' , self .metadef_namespace .namespace ),
132140 ]
133141
134142 parsed_args = self .check_parser (self .cmd , arglist , verifylist )
@@ -137,6 +145,95 @@ def test_namespace_set_no_options(self):
137145
138146 self .assertIsNone (result )
139147
148+ def test_namespace_set_tag (self ):
149+ arglist = [
150+ self .metadef_namespace .namespace ,
151+ '--tag' ,
152+ 't1' ,
153+ '--tag' ,
154+ 't2' ,
155+ ]
156+ verifylist = [
157+ ('namespace' , self .metadef_namespace .namespace ),
158+ ('tags' , ['t1' , 't2' ]),
159+ ]
160+
161+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
162+
163+ self .cmd .take_action (parsed_args )
164+
165+ self .image_client .add_tag_to_metadef_namespace .assert_has_calls (
166+ [
167+ mock .call (self .metadef_namespace .namespace , 't1' ),
168+ mock .call (self .metadef_namespace .namespace , 't2' ),
169+ ]
170+ )
171+
172+
173+ class TestMetadefNamespaceUnset (image_fakes .TestImagev2 ):
174+ def setUp (self ):
175+ super ().setUp ()
176+
177+ self .metadef_namespace = image_fakes .create_one_metadef_namespace (
178+ attrs = {'tags' : [{'name' : 't1' }]}
179+ )
180+
181+ self .image_client .get_metadef_namespace .return_value = (
182+ self .metadef_namespace
183+ )
184+ self .image_client .update_metadef_namespace .return_value = (
185+ self .metadef_namespace
186+ )
187+ self .image_client .remove_tag_from_metadef_namespace .return_value = None
188+ self .image_client .remove_tags_from_metadef_namespace .return_value = (
189+ None
190+ )
191+
192+ self .cmd = metadef_namespaces .UnsetMetadefNamespace (self .app , None )
193+
194+ def test_namespace_unset_tag (self ):
195+ arglist = [
196+ self .metadef_namespace .namespace ,
197+ '--tag' ,
198+ 't1' ,
199+ '--tag' ,
200+ 't2' ,
201+ ]
202+ verifylist = [
203+ ('namespace' , self .metadef_namespace .namespace ),
204+ ('tags' , ['t1' , 't2' ]),
205+ ]
206+
207+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
208+
209+ self .cmd .take_action (parsed_args )
210+
211+ self .image_client .remove_tag_from_metadef_namespace .assert_has_calls (
212+ [
213+ mock .call (self .metadef_namespace , 't1' ),
214+ mock .call (self .metadef_namespace , 't2' ),
215+ ]
216+ )
217+ self .image_client .remove_tags_from_metadef_namespace .assert_not_called ()
218+
219+ def test_namespace_unset_all_tag (self ):
220+ arglist = [
221+ self .metadef_namespace .namespace ,
222+ '--all-tags' ,
223+ ]
224+ verifylist = [
225+ ('namespace' , self .metadef_namespace .namespace ),
226+ ]
227+
228+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
229+
230+ self .cmd .take_action (parsed_args )
231+
232+ self .image_client .remove_tags_from_metadef_namespace .assert_called_once_with (
233+ self .metadef_namespace
234+ )
235+ self .image_client .remove_tag_from_metadef_namespace .assert_not_called ()
236+
140237
141238class TestMetadefNamespaceShow (image_fakes .TestImagev2 ):
142239 _metadef_namespace = image_fakes .create_one_metadef_namespace ()
@@ -146,13 +243,15 @@ class TestMetadefNamespaceShow(image_fakes.TestImagev2):
146243 'display_name' ,
147244 'namespace' ,
148245 'owner' ,
246+ 'tags' ,
149247 'visibility' ,
150248 )
151249 expected_data = (
152250 _metadef_namespace .created_at ,
153251 _metadef_namespace .display_name ,
154252 _metadef_namespace .namespace ,
155253 _metadef_namespace .owner ,
254+ _metadef_namespace .tags ,
156255 _metadef_namespace .visibility ,
157256 )
158257
0 commit comments