def test_mutable_delete(self, mock_send_request):
        model = Mutable()
        self.assertRaises(dockercloud.ApiError, model.delete)

        Mutable.endpoint = 'fake'
        model._resource_uri = 'fake/uuid'
        mock_send_request.side_effect = [{'key': 'value'}, None]
        self.assertTrue(model.delete())
        self.assertEqual('value', model.key)
        mock_send_request.assert_called_with('DELETE', 'fake/uuid')

        model = Mutable()
        model._resource_uri = 'fake/uuid'
        self.assertTrue(model.delete())
        self.assertIsNone(model._resource_uri)
        self.assertFalse(model.is_dirty)
    def test_mutable_save(self, mock_send_request):
        self.assertTrue(Mutable().save())

        model = Mutable()
        model.key = 'value'
        try:
            delattr(Immutable, 'endpoint')
            delattr(Immutable, 'subsystem')
        except:
            pass
        self.assertRaises(AssertionError, model.save)

        Mutable.endpoint = 'resource_uri'
        Mutable.subsystem = 'subsystem'
        mock_send_request.return_value = None
        result = model.save()
        mock_send_request.assert_called_with('POST',
                                             'api/subsystem/%s/resource_uri' %
                                             Mutable._api_version,
                                             data=json.dumps({'key': 'value'}))
        self.assertFalse(result)

        mock_send_request.return_value = {'newkey': 'newvalue'}
        result = model.save()
        mock_send_request.assert_called_with('POST',
                                             'api/subsystem/%s/resource_uri' %
                                             Mutable._api_version,
                                             data=json.dumps({'key': 'value'}))
        self.assertTrue(result)
        self.assertEqual('newvalue', model.newkey)

        model.key = 'another value'
        mock_send_request.return_value = {'newkey2': 'newvalue2'}
        model._resource_uri = 'api/subsystem/%s/resource_uri/uuid' % Immutable._api_version
        result = model.save()
        mock_send_request.assert_called_with(
            'PATCH',
            'api/subsystem/%s/resource_uri/uuid' % Mutable._api_version,
            data=json.dumps({'key': 'another value'}))
        self.assertTrue(result)
        self.assertEqual('another value', model.key)
        self.assertEqual('newvalue2', model.newkey2)