)]}'
{"openstack_dashboard/dashboards/project/security_groups/tables.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0d8a65e97d0a4c4a77b266d1bf155904438c5b4d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def allowed(self, request, security_group\u003dNone):"},{"line_number":139,"context_line":"        usages \u003d quotas.tenant_quota_usages(request,"},{"line_number":140,"context_line":"                                            targets\u003d(\u0027security_group_rule\u0027, ))"},{"line_number":141,"context_line":"        if usages[\u0027security_group_rule\u0027].get(\u0027available\u0027, 1) \u003c\u003d 0:"},{"line_number":142,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":143,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"},{"line_number":144,"context_line":"                self.verbose_name \u003d _(\"Add Rule (Quota exceeded)\")"},{"line_number":145,"context_line":"        else:"},{"line_number":146,"context_line":"            self.verbose_name \u003d _(\"Add Rule\")"},{"line_number":147,"context_line":"            self.classes \u003d [c for c in self.classes if c !\u003d \"disabled\"]"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        return True"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_834eb835","line":147,"range":{"start_line":141,"start_character":8,"end_line":147,"end_character":71},"updated":"2019-05-29 10:33:39.000000000","message":"Let\u0027s simplify it to:\nself.classes \u003d [c for c in self.classes if c !\u003d \"disabled\"]\n\nif usages[\u0027security_group_rule\u0027].get(\u0027available\u0027, 1) \u003c\u003d 0:\n    self.classes.append(\"disabled\")\n    self.verbose_name \u003d _(\"Add Rule (Quota exceeded)\")\nelse:\n    self.verbose_name \u003d _(\"Add Rule\")","commit_id":"6653ce95021b37999c9ca1c5a211932df16f1826"}],"openstack_dashboard/dashboards/project/security_groups/tests.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8ec2ee758b448032f55b75c47686becc071dbc98","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertTemplateUsed(res, SG_DETAIL_TEMPLATE)"},{"line_number":296,"context_line":"        self.mock_security_group_get.assert_called_once_with("},{"line_number":297,"context_line":"            test.IsHttpRequest(), sec_group.id)"},{"line_number":298,"context_line":"        self.mock_is_extension_supported.assert_has_calls(["},{"line_number":299,"context_line":"            mock.call(test.IsHttpRequest(), \u0027standard-attr-description\u0027)])"},{"line_number":300,"context_line":"        self.assertEqual(2, self.mock_is_extension_supported.call_count)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    @test.create_mocks({api.neutron: (\u0027security_group_get\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_382da7a7","line":299,"range":{"start_line":298,"start_character":8,"end_line":299,"end_character":74},"updated":"2019-05-30 02:12:35.000000000","message":"mock_is_extension_supported is called twice. Could you check all calls? You just checked one of them now.","commit_id":"1fa9d35459722e6543eb4ce359f136d879a4afe9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5598aec5c4de8b615205411106b13239fe5c7d0e","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertTemplateUsed(res, SG_DETAIL_TEMPLATE)"},{"line_number":296,"context_line":"        self.mock_security_group_get.assert_called_once_with("},{"line_number":297,"context_line":"            test.IsHttpRequest(), sec_group.id)"},{"line_number":298,"context_line":"        self.mock_is_extension_supported.assert_has_calls(["},{"line_number":299,"context_line":"            mock.call(test.IsHttpRequest(), \u0027standard-attr-description\u0027)])"},{"line_number":300,"context_line":"        self.mock_is_extension_supported.assert_has_calls(["},{"line_number":301,"context_line":"            mock.call(test.IsHttpRequest(), \u0027security-group\u0027)])"},{"line_number":302,"context_line":"        self.assertEqual(2, self.mock_is_extension_supported.call_count)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    @test.create_mocks({api.neutron: (\u0027security_group_get\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_d3a7574f","line":301,"range":{"start_line":298,"start_character":8,"end_line":301,"end_character":63},"updated":"2019-06-01 08:13:49.000000000","message":"Could you merge two lines into one? assert_has_calls accepts a list so I don\u0027t see any reason to have two assert_has_calls.","commit_id":"395ef44e41d853e48c4c45f756bde9513127658a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3c21f69066c2c330573bdeae8abfb472faa4ac2f","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self.mock_is_extension_supported.assert_has_calls(["},{"line_number":299,"context_line":"            mock.call(test.IsHttpRequest(), \u0027standard-attr-description\u0027),"},{"line_number":300,"context_line":"            mock.call(test.IsHttpRequest(), \u0027security-group\u0027)])"},{"line_number":301,"context_line":"        self.assertEqual(2, self.mock_is_extension_supported.call_count)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @test.create_mocks({api.neutron: (\u0027security_group_get\u0027,"},{"line_number":304,"context_line":"                                      \u0027is_extension_supported\u0027)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_75752b98","line":301,"updated":"2019-06-03 04:43:20.000000000","message":"why is tenant_quota_usges not mocked? You added a logic to retrieve how many SG rules exist but I don\u0027t see any logic in the test code handle it.","commit_id":"94d0db78d2729916d5724054913a908963533c79"}]}
