)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c1c47a54556b24f4bd173df09f679f5f8017c548","unresolved":false,"context_lines":[{"line_number":10,"context_line":"specific resource usage. This was missing in the client."},{"line_number":11,"context_line":"This fix should allow fetching tenant specific resource usage"},{"line_number":12,"context_line":"directly from the client."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I3fbd6341f6d018a79e7c343107ac974b6fbb9239"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dab17558_b0c86856","line":13,"updated":"2016-05-11 12:14:09.000000000","message":"Please, add \u0027Closes-Bug: #xxx\u0027 note","commit_id":"9602c605dbf4489f9a9d6c115c71b2a1beb1c74d"}],"cinderclient/tests/unit/v2/test_limits.py":[{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"b470ba722541b325c1a5ed2113a0a175458bcb4c","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class TestLimitsManager(utils.TestCase):"},{"line_number":159,"context_line":"    def test_get(self):"},{"line_number":160,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":161,"context_line":"        api \u003d mock.Mock()"},{"line_number":162,"context_line":"        api.client.get.return_value \u003d ("},{"line_number":163,"context_line":"            None,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_3c499b60","line":160,"range":{"start_line":160,"start_character":25,"end_line":160,"end_character":26},"updated":"2016-07-28 10:34:32.000000000","message":"The case with tenant_id\u003dNone by default is not tested.","commit_id":"5edd18faae2814ebe73bd16b9e72a3f139c1d1cc"},{"author":{"_account_id":10556,"name":"Dimitri Mazmanov","email":"dimitri.mazmanov@ericsson.com","username":"edimmaz"},"change_message_id":"ba5160a6e1aceccbffa52905e93555bb0196a653","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class TestLimitsManager(utils.TestCase):"},{"line_number":159,"context_line":"    def test_get(self):"},{"line_number":160,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":161,"context_line":"        api \u003d mock.Mock()"},{"line_number":162,"context_line":"        api.client.get.return_value \u003d ("},{"line_number":163,"context_line":"            None,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_3f918df1","line":160,"range":{"start_line":160,"start_character":25,"end_line":160,"end_character":26},"in_reply_to":"bacf61ea_3c499b60","updated":"2016-07-28 10:57:14.000000000","message":"Done","commit_id":"5edd18faae2814ebe73bd16b9e72a3f139c1d1cc"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"64818579ee57c14df904b42669184a525a013f0c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def test_get(self):"},{"line_number":160,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":161,"context_line":"        api \u003d mock.Mock()"},{"line_number":162,"context_line":"        api.client.get.return_value \u003d ("},{"line_number":163,"context_line":"            None,"},{"line_number":164,"context_line":"            {\"limits\": {\"absolute\": {\"name1\": \"value1\", }},"},{"line_number":165,"context_line":"             \"no-limits\": {\"absolute\": {\"name2\": \"value2\", }}})"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_0ab85374","line":162,"updated":"2016-07-26 16:00:36.000000000","message":"Do we want to verify that this actually limits by tenant? Not sure what \"test\" has to do with the mocked value here.","commit_id":"5edd18faae2814ebe73bd16b9e72a3f139c1d1cc"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"b470ba722541b325c1a5ed2113a0a175458bcb4c","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        api.client.get.return_value \u003d ("},{"line_number":163,"context_line":"            None,"},{"line_number":164,"context_line":"            {\"limits\": {\"absolute\": {\"name1\": \"value1\", }},"},{"line_number":165,"context_line":"             \"no-limits\": {\"absolute\": {\"name2\": \"value2\", }}})"},{"line_number":166,"context_line":"        l1 \u003d limits.AbsoluteLimit(\"name1\", \"value1\")"},{"line_number":167,"context_line":"        limitsManager \u003d limits.LimitsManager(api)"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_1cfad7bd","line":165,"range":{"start_line":165,"start_character":59,"end_line":165,"end_character":63},"updated":"2016-07-28 10:34:32.000000000","message":"Mocking client in a such a way it should be checked calling it. Something like that:\n\napi.client.get.assert_called_once_with(\u0027/limits\u0027)","commit_id":"5edd18faae2814ebe73bd16b9e72a3f139c1d1cc"},{"author":{"_account_id":10556,"name":"Dimitri Mazmanov","email":"dimitri.mazmanov@ericsson.com","username":"edimmaz"},"change_message_id":"ba5160a6e1aceccbffa52905e93555bb0196a653","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        api.client.get.return_value \u003d ("},{"line_number":163,"context_line":"            None,"},{"line_number":164,"context_line":"            {\"limits\": {\"absolute\": {\"name1\": \"value1\", }},"},{"line_number":165,"context_line":"             \"no-limits\": {\"absolute\": {\"name2\": \"value2\", }}})"},{"line_number":166,"context_line":"        l1 \u003d limits.AbsoluteLimit(\"name1\", \"value1\")"},{"line_number":167,"context_line":"        limitsManager \u003d limits.LimitsManager(api)"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_9fbcf96d","line":165,"range":{"start_line":165,"start_character":59,"end_line":165,"end_character":63},"in_reply_to":"bacf61ea_1cfad7bd","updated":"2016-07-28 10:57:14.000000000","message":"Done","commit_id":"5edd18faae2814ebe73bd16b9e72a3f139c1d1cc"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"63b61427afbc02db45d8cc1bd2bbff5070c27522","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        for l in lim.absolute:"},{"line_number":174,"context_line":"            self.assertEqual(l1, l)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_get_with_tenant(self):"},{"line_number":177,"context_line":"        tenant_id \u003d \u0027test\u0027"},{"line_number":178,"context_line":"        api \u003d mock.Mock()"},{"line_number":179,"context_line":"        api.client.get.return_value \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_e778d52d","line":176,"range":{"start_line":176,"start_character":29,"end_line":176,"end_character":33},"updated":"2016-07-29 08:56:02.000000000","message":"To avoid duplication code you can use ddt module. Thus the lines 158-193 can look like:\n\n@ddt.ddt\nclass TestLimitsManager(utils.TestCase):\n    @ddt.data(None, \u0027test\u0027)\n    def test_get(self, tenant_id):\n        api \u003d mock.Mock()\n        ......\n        query_str \u003d \u0027\u0027\n        if tenant_id:\n            query_str \u003d \u0027?tenant_id\u003d%s\u0027 % tenant_id\n        api.client.get.assert_called_once_with(\u0027/limits%s\u0027 % query_str)\n        .........","commit_id":"30aef499f4c93d4fa7d29a64b7c0f990eda5569f"}]}
