)]}'
{"neutronclient/tests/unit/test_cli20.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d3772b8f6f0df5c6820c31860fc6c916be28d087","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        self.assertIn(myid, _str)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def assert_called_multiple_times(self, mocked_method, expected_call):"},{"line_number":607,"context_line":"        self.assertLessEqual(1, mocked_method.call_count)"},{"line_number":608,"context_line":"        mocked_method.assert_has_calls("},{"line_number":609,"context_line":"            [expected_call] * mocked_method.call_count)"},{"line_number":610,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_ac3a8e95","line":607,"range":{"start_line":607,"start_character":8,"end_line":607,"end_character":57},"updated":"2018-03-18 09:14:58.000000000","message":"This seems to simulate mox MultipleTimes() but IMHO it is better to check call count exactly rather than checking multiple times. What do you think?","commit_id":"3de9dafd7c97a256fd8a64f82696d83cf8314279"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"b548cb845e23dbeb5cecf48b67fe5054f16428df","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        self.assertIn(myid, _str)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def assert_called_multiple_times(self, mocked_method, expected_call):"},{"line_number":607,"context_line":"        self.assertLessEqual(1, mocked_method.call_count)"},{"line_number":608,"context_line":"        mocked_method.assert_has_calls("},{"line_number":609,"context_line":"            [expected_call] * mocked_method.call_count)"},{"line_number":610,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_41bb610d","line":607,"range":{"start_line":607,"start_character":8,"end_line":607,"end_character":57},"in_reply_to":"df7087c5_ac3a8e95","updated":"2018-03-19 18:20:36.000000000","message":"In this patch, it is fine. The number of calls is static so we can check the exact call count.\n\nIn another patch (https://review.openstack.org/#/c/553609/4/neutronclient/tests/unit/test_cli20_securitygroup.py@430), the number of calls is not static so we need to use assert_called_multiple_times in there.","commit_id":"3de9dafd7c97a256fd8a64f82696d83cf8314279"}],"neutronclient/tests/unit/test_cli20_network.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7048694f5e549ae311661e7a7f40316cd25fdf8a","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                               return_value\u003dself.client) as mock_get_client, \\"},{"line_number":171,"context_line":"                mock.patch.object(self.client.httpclient, \"request\","},{"line_number":172,"context_line":"                                  return_value\u003dresp) as mock_request, \\"},{"line_number":173,"context_line":"                mock.patch.object(network.ListNetwork,"},{"line_number":174,"context_line":"                                  \"extend_list\") as mock_extend_list:"},{"line_number":175,"context_line":"            cmd_parser \u003d cmd.get_parser(\"list_\" + resources)"},{"line_number":176,"context_line":"            shell.run_command(cmd, cmd_parser, args)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_e12d1a95","line":174,"range":{"start_line":173,"start_character":16,"end_line":174,"end_character":49},"updated":"2018-03-15 21:31:53.000000000","message":"The return value of extend_list is None. IMHO it is better to return None rather than Mock object to ensure unnecessary reference in the code.\n\n mock.patch.object(network.ListNetwork, \u0027extend_list\u0027,\n                   return_value\u003dNone) as mock_extend_list:","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"c614b4b75a5cc7548d96715a33ae7caf1e9a231d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                               return_value\u003dself.client) as mock_get_client, \\"},{"line_number":171,"context_line":"                mock.patch.object(self.client.httpclient, \"request\","},{"line_number":172,"context_line":"                                  return_value\u003dresp) as mock_request, \\"},{"line_number":173,"context_line":"                mock.patch.object(network.ListNetwork,"},{"line_number":174,"context_line":"                                  \"extend_list\") as mock_extend_list:"},{"line_number":175,"context_line":"            cmd_parser \u003d cmd.get_parser(\"list_\" + resources)"},{"line_number":176,"context_line":"            shell.run_command(cmd, cmd_parser, args)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_ddcd4466","line":174,"range":{"start_line":173,"start_character":16,"end_line":174,"end_character":49},"in_reply_to":"df7087c5_e12d1a95","updated":"2018-03-16 15:59:21.000000000","message":"Done","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7048694f5e549ae311661e7a7f40316cd25fdf8a","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            body\u003dNone,"},{"line_number":184,"context_line":"            headers\u003dtest_cli20.ContainsKeyValue("},{"line_number":185,"context_line":"                {\u0027X-Auth-Token\u0027: test_cli20.TOKEN}))"},{"line_number":186,"context_line":"        self.assertIsInstance(mock_extend_list.call_args[0][0], list)"},{"line_number":187,"context_line":"        _str \u003d self.fake_stdout.make_string()"},{"line_number":188,"context_line":"        self.assertEqual(\u0027\\n\u0027, _str)"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_7639d2ef","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":69},"updated":"2018-03-15 21:31:53.000000000","message":"Personally I would like to avoid referring to call_args directly because it is not easy to understand.\n\nHow about defining mock version of IsA?\n\nIf so, we can rewrite it to:\n\n  mock_extend_list.assert_called_once_with(IsA(list), mock.ANY)","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"c614b4b75a5cc7548d96715a33ae7caf1e9a231d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            body\u003dNone,"},{"line_number":184,"context_line":"            headers\u003dtest_cli20.ContainsKeyValue("},{"line_number":185,"context_line":"                {\u0027X-Auth-Token\u0027: test_cli20.TOKEN}))"},{"line_number":186,"context_line":"        self.assertIsInstance(mock_extend_list.call_args[0][0], list)"},{"line_number":187,"context_line":"        _str \u003d self.fake_stdout.make_string()"},{"line_number":188,"context_line":"        self.assertEqual(\u0027\\n\u0027, _str)"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_7de2f8d6","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":69},"in_reply_to":"df7087c5_7639d2ef","updated":"2018-03-16 15:59:21.000000000","message":"Done","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4a8a6c10124e8f88ade6c874ab74b5c75a84f6db","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            body\u003dNone,"},{"line_number":184,"context_line":"            headers\u003dtest_cli20.ContainsKeyValue("},{"line_number":185,"context_line":"                {\u0027X-Auth-Token\u0027: test_cli20.TOKEN}))"},{"line_number":186,"context_line":"        self.assertIsInstance(mock_extend_list.call_args[0][0], list)"},{"line_number":187,"context_line":"        _str \u003d self.fake_stdout.make_string()"},{"line_number":188,"context_line":"        self.assertEqual(\u0027\\n\u0027, _str)"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_41df2668","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":69},"in_reply_to":"df7087c5_7639d2ef","updated":"2018-03-15 21:33:55.000000000","message":"I noticed you already did it in the subnetpool test :)","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7048694f5e549ae311661e7a7f40316cd25fdf8a","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                                      fields_1, fields_2, page_size\u003dpage_size,"},{"line_number":199,"context_line":"                                      sort_key\u003dsort_key, sort_dir\u003dsort_dir,"},{"line_number":200,"context_line":"                                      base_args\u003dbase_args, query\u003dquery)"},{"line_number":201,"context_line":"            self.assertIsInstance(mock_extend_list.call_args[0][0], list)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def test_list_nets_pagination(self):"},{"line_number":204,"context_line":"        cmd \u003d network.ListNetwork(test_cli20.MyApp(sys.stdout), None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_76123264","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":12},"updated":"2018-03-15 21:31:53.000000000","message":"Could you move this to outside of with clause?","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"c614b4b75a5cc7548d96715a33ae7caf1e9a231d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                                      fields_1, fields_2, page_size\u003dpage_size,"},{"line_number":199,"context_line":"                                      sort_key\u003dsort_key, sort_dir\u003dsort_dir,"},{"line_number":200,"context_line":"                                      base_args\u003dbase_args, query\u003dquery)"},{"line_number":201,"context_line":"            self.assertIsInstance(mock_extend_list.call_args[0][0], list)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def test_list_nets_pagination(self):"},{"line_number":204,"context_line":"        cmd \u003d network.ListNetwork(test_cli20.MyApp(sys.stdout), None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_1de5fcdb","line":201,"range":{"start_line":201,"start_character":8,"end_line":201,"end_character":12},"in_reply_to":"df7087c5_76123264","updated":"2018-03-16 15:59:21.000000000","message":"Done","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7048694f5e549ae311661e7a7f40316cd25fdf8a","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        with mock.patch.object(network.ListNetwork,"},{"line_number":335,"context_line":"                               \"extend_list\") as mock_extend_list:"},{"line_number":336,"context_line":"            self._test_list_columns(cmd, resources, returned_body, args\u003dargs)"},{"line_number":337,"context_line":"            self.assertIsInstance(mock_extend_list.call_args[0][0], list)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def test_list_nets_defined_column(self):"},{"line_number":340,"context_line":"        cmd \u003d network.ListNetwork(test_cli20.MyApp(sys.stdout), None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_a1588230","line":337,"range":{"start_line":337,"start_character":8,"end_line":337,"end_character":12},"updated":"2018-03-15 21:31:53.000000000","message":"needs to be outside of with clause.","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"c614b4b75a5cc7548d96715a33ae7caf1e9a231d","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        with mock.patch.object(network.ListNetwork,"},{"line_number":335,"context_line":"                               \"extend_list\") as mock_extend_list:"},{"line_number":336,"context_line":"            self._test_list_columns(cmd, resources, returned_body, args\u003dargs)"},{"line_number":337,"context_line":"            self.assertIsInstance(mock_extend_list.call_args[0][0], list)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def test_list_nets_defined_column(self):"},{"line_number":340,"context_line":"        cmd \u003d network.ListNetwork(test_cli20.MyApp(sys.stdout), None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_3de800b1","line":337,"range":{"start_line":337,"start_character":8,"end_line":337,"end_character":12},"in_reply_to":"df7087c5_a1588230","updated":"2018-03-16 15:59:21.000000000","message":"Done","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7048694f5e549ae311661e7a7f40316cd25fdf8a","unresolved":false,"context_lines":[{"line_number":665,"context_line":"                .parse_known_args()"},{"line_number":666,"context_line":"            cmd.extend_list(data, known_args)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        mock_get_client.assert_called_with()"},{"line_number":669,"context_line":"        self.assertEqual(2, mock_request.call_count)"},{"line_number":670,"context_line":"        mock_request.assert_has_calls(["},{"line_number":671,"context_line":"            mock.call("}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_61acaaec","line":668,"range":{"start_line":668,"start_character":8,"end_line":668,"end_character":44},"updated":"2018-03-15 21:31:53.000000000","message":"Is mock_get_client called multiple times? If so it is better to use assert_has_calls. assert_called_with() just checks the last call.","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"c614b4b75a5cc7548d96715a33ae7caf1e9a231d","unresolved":false,"context_lines":[{"line_number":665,"context_line":"                .parse_known_args()"},{"line_number":666,"context_line":"            cmd.extend_list(data, known_args)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        mock_get_client.assert_called_with()"},{"line_number":669,"context_line":"        self.assertEqual(2, mock_request.call_count)"},{"line_number":670,"context_line":"        mock_request.assert_has_calls(["},{"line_number":671,"context_line":"            mock.call("}],"source_content_type":"text/x-python","patch_set":6,"id":"df7087c5_ddd22400","line":668,"range":{"start_line":668,"start_character":8,"end_line":668,"end_character":44},"in_reply_to":"df7087c5_61acaaec","updated":"2018-03-16 15:59:21.000000000","message":"Done","commit_id":"da8f3264a4ac02fbb8e5acb35a958cc451d0cec1"}]}
