@@ -313,6 +313,90 @@ def test_reduce_boolean_same_value(self, fake_rsrc):
313313 assert msg == ex .value .message
314314
315315
316+ class TestResource_modify (object ):
317+
318+ def test__meta_data_state (self ):
319+ r = Resource (mock .MagicMock ())
320+ r ._meta_data ['allowed_lazy_attributes' ] = []
321+ r ._meta_data ['uri' ] = 'URI'
322+ r ._meta_data ['bigip' ]._meta_data ['icr_session' ].get .return_value = \
323+ MockResponse ({u"generation" : 0 })
324+ r ._meta_data ['bigip' ]._meta_data ['icr_session' ].patch .return_value = \
325+ MockResponse ({u"generation" : 0 })
326+ r .generation = 0
327+ pre_meta = r ._meta_data .copy ()
328+ r .modify (a = u"b" )
329+ assert pre_meta == r ._meta_data
330+
331+ def test_Collection_removal (self ):
332+ r = Resource (mock .MagicMock ())
333+ r ._meta_data ['allowed_lazy_attributes' ] = []
334+ r ._meta_data ['uri' ] = 'URI'
335+ attrs = {'put.return_value' : MockResponse ({u"generation" : 0 }),
336+ 'get.return_value' : MockResponse ({u"generation" : 0 })}
337+ mock_session = mock .MagicMock (** attrs )
338+ r ._meta_data ['bigip' ]._meta_data = {'icr_session' : mock_session }
339+ r .generation = 0
340+ r .contained = Collection (mock .MagicMock ())
341+ assert 'contained' in r .__dict__
342+ r .modify (a = u"b" )
343+ submitted = r ._meta_data ['bigip' ]. \
344+ _meta_data ['icr_session' ].patch .call_args [1 ]['json' ]
345+
346+ assert 'contained' not in submitted
347+
348+ def test_read_only_removal (self ):
349+ r = Resource (mock .MagicMock ())
350+ r ._meta_data ['allowed_lazy_attributes' ] = []
351+ r ._meta_data ['uri' ] = 'URI'
352+ r ._meta_data ['read_only_attributes' ] = [u"READONLY" ]
353+ attrs = {'put.return_value' : MockResponse ({u"generation" : 0 }),
354+ 'get.return_value' : MockResponse ({u"generation" : 0 })}
355+ mock_session = mock .MagicMock (** attrs )
356+ r ._meta_data ['bigip' ]._meta_data = {'icr_session' : mock_session }
357+ r .generation = 0
358+ r .READONLY = True
359+ assert 'READONLY' in r .__dict__
360+ r .update (a = u"b" )
361+ submitted = r ._meta_data ['bigip' ].\
362+ _meta_data ['icr_session' ].put .call_args [1 ]['json' ]
363+ assert 'READONLY' not in submitted
364+
365+ def test_reduce_boolean_removes_enabled (self , fake_rsrc ):
366+ fake_rsrc .update (enabled = False )
367+ pos , kwargs = fake_rsrc ._meta_data ['bigip' ]._meta_data ['icr_session' ].put .\
368+ call_args
369+ assert kwargs ['json' ]['disabled' ] is True
370+ assert 'enabled' not in kwargs ['json' ]
371+
372+ def test_reduce_boolean_removes_disabled (self , fake_rsrc ):
373+ fake_rsrc .update (disabled = False )
374+ pos , kwargs = fake_rsrc ._meta_data ['bigip' ]._meta_data ['icr_session' ].put .\
375+ call_args
376+ assert kwargs ['json' ]['enabled' ] is True
377+ assert 'disabled' not in kwargs ['json' ]
378+
379+ def test_reduce_boolean_removes_nothing (self , fake_rsrc ):
380+ fake_rsrc .update (partition = 'Common' , name = 'test_create' , enabled = True )
381+ pos , kwargs = fake_rsrc ._meta_data ['bigip' ]._meta_data ['icr_session' ].put .\
382+ call_args
383+ assert kwargs ['json' ]['enabled' ] is True
384+ assert 'disabled' not in kwargs ['json' ]
385+
386+ def test_reduce_boolean_same_value (self , fake_rsrc ):
387+ with pytest .raises (BooleansToReduceHaveSameValue ) as ex :
388+ fake_rsrc .update (
389+ partition = 'Common' ,
390+ name = 'test_create' ,
391+ enabled = True ,
392+ disabled = True
393+ )
394+ msg = 'Boolean pair, enabled and disabled, have same value: True. ' \
395+ 'If both are given to this method, they cannot be the same, as ' \
396+ 'this method cannot decide which one should be True.'
397+ assert msg == ex .value .message
398+
399+
316400class TestResource_delete (object ):
317401 def test_success (self ):
318402 r = Resource (mock .MagicMock ())
0 commit comments