)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"19e25371e7406bc777b4049f968ac7e77023c25c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"babed3cd_74bcb44f","updated":"2025-12-03 11:43:32.000000000","message":"thanks for the improvements! I\u0027ve left  a few small comments","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"2ec10c51035a19ea3a7c75567ea10903b1ee028f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"53c17bc7_c0faa728","updated":"2025-12-04 11:58:12.000000000","message":"lgtm, thanks for the improvements!","commit_id":"2d74df290e7b2720d7ff7034df081abe7ddd7904"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cd2cfc482fbf01b8aab39e5449a43c3af21f627e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4cf10a70_8e3bf583","updated":"2025-12-08 22:31:11.000000000","message":"there is alwasy more cleanup to do but let compelte merge this for now","commit_id":"2d74df290e7b2720d7ff7034df081abe7ddd7904"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4493e842bb35d7f9cc402020b81929e50689aecc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"71c8d7de_b308b75c","updated":"2025-12-17 14:35:58.000000000","message":"this still looks ok to me","commit_id":"64993ae6ad9e3191a33241bcfe9d2f4109ccd0e2"}],"watcher/tests/common/test_nova_helper.py":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"19e25371e7406bc777b4049f968ac7e77023c25c","unresolved":true,"context_lines":[{"line_number":57,"context_line":"            \u0027name\u0027: \u0027fake_instance\u0027,"},{"line_number":58,"context_line":"            \u0027status\u0027: \u0027ACTIVE\u0027,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        for key, value in kwargs.items():"},{"line_number":61,"context_line":"            instance_info[key] \u003d value"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        return servers.Server(servers.ServerManager, info\u003dinstance_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"37e7a504_bf0e9e90","line":60,"updated":"2025-12-03 11:43:32.000000000","message":"nit we can replace the loop with \n\n```suggestion\n        instance_info.update(kwargs)\n```","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027name\u0027: \u0027fake_instance\u0027,"},{"line_number":58,"context_line":"            \u0027status\u0027: \u0027ACTIVE\u0027,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        for key, value in kwargs.items():"},{"line_number":61,"context_line":"            instance_info[key] \u003d value"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        return servers.Server(servers.ServerManager, info\u003dinstance_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ec6731b_a6f419d7","line":60,"in_reply_to":"37e7a504_bf0e9e90","updated":"2025-12-03 12:27:02.000000000","message":"I\u0027ll do, thanks!","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"19e25371e7406bc777b4049f968ac7e77023c25c","unresolved":true,"context_lines":[{"line_number":72,"context_line":"                \u0027host\u0027: args[1]"},{"line_number":73,"context_line":"            }"},{"line_number":74,"context_line":"        }"},{"line_number":75,"context_line":"        for key, value in kwargs.items():"},{"line_number":76,"context_line":"            hypervisor_info[key] \u003d value"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        return hypervisors.Hypervisor("}],"source_content_type":"text/x-python","patch_set":1,"id":"5cd2fb41_e05fc919","line":75,"updated":"2025-12-03 11:43:32.000000000","message":"same point as above","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                \u0027host\u0027: args[1]"},{"line_number":73,"context_line":"            }"},{"line_number":74,"context_line":"        }"},{"line_number":75,"context_line":"        for key, value in kwargs.items():"},{"line_number":76,"context_line":"            hypervisor_info[key] \u003d value"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        return hypervisors.Hypervisor("}],"source_content_type":"text/x-python","patch_set":1,"id":"3b0b80df_c98ee3b5","line":75,"in_reply_to":"5cd2fb41_e05fc919","updated":"2025-12-03 12:27:02.000000000","message":"Done","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return migration"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def fake_nova_find_list(nova_util, fake_find\u003dNone, fake_list\u003dNone):"},{"line_number":89,"context_line":"        nova_util.nova.servers.get.return_value \u003d fake_find"},{"line_number":90,"context_line":"        if list is None:"},{"line_number":91,"context_line":"            nova_util.nova.servers.list.return_value \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"4ff38617_070086e3","line":88,"in_reply_to":"388779a1_70a0e4f2","updated":"2025-12-03 12:27:02.000000000","message":"Done","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"19e25371e7406bc777b4049f968ac7e77023c25c","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        return migration"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @staticmethod"},{"line_number":88,"context_line":"    def fake_nova_find_list(nova_util, fake_find\u003dNone, fake_list\u003dNone):"},{"line_number":89,"context_line":"        nova_util.nova.servers.get.return_value \u003d fake_find"},{"line_number":90,"context_line":"        if list is None:"},{"line_number":91,"context_line":"            nova_util.nova.servers.list.return_value \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"388779a1_70a0e4f2","line":88,"in_reply_to":"ccb6ef77_35bdd958","updated":"2025-12-03 11:43:32.000000000","message":"\u003e Improve fake_nova_find_list method parameter validation\n\u003e \n\u003e **Severity**: SUGGESTION | **Confidence**: 0.8\n\u003e \n\u003e **Benefit**: Better error handling and clearer method behavior\n\u003e \n\u003e **Recommendation**:\n\u003e Add type checking and explicit handling for None values instead of checking \u0027list is None\u0027\n\nthis is correct, the check in line 90 is wrong, should use `fake_list` instead of `list`","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"19e25371e7406bc777b4049f968ac7e77023c25c","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @staticmethod"},{"line_number":104,"context_line":"    def fake_nova_migration_list(nova_util, fake_list\u003dNone):"},{"line_number":105,"context_line":"        if list is None:"},{"line_number":106,"context_line":"            nova_util.nova.server_migrations.list.return_value \u003d None"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            nova_util.nova.server_migration.list.return_value \u003d [fake_list]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5e42955d_dad636b0","line":105,"updated":"2025-12-03 11:43:32.000000000","message":"here we have the same issue as in line 90 with `list` vs `fake_list`","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @staticmethod"},{"line_number":104,"context_line":"    def fake_nova_migration_list(nova_util, fake_list\u003dNone):"},{"line_number":105,"context_line":"        if list is None:"},{"line_number":106,"context_line":"            nova_util.nova.server_migrations.list.return_value \u003d None"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            nova_util.nova.server_migration.list.return_value \u003d [fake_list]"}],"source_content_type":"text/x-python","patch_set":1,"id":"11f761ac_92e69dd5","line":105,"in_reply_to":"5e42955d_dad636b0","updated":"2025-12-03 12:27:02.000000000","message":"Done","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cd2cfc482fbf01b8aab39e5449a43c3af21f627e","unresolved":true,"context_lines":[{"line_number":197,"context_line":"        result \u003d nova_util.stop_instance(instance_id)"},{"line_number":198,"context_line":"        self.assertTrue(result)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        # verify that the method will return False when active"},{"line_number":201,"context_line":"        kwargs \u003d {"},{"line_number":202,"context_line":"            \"OS-EXT-STS:vm_state\": \"active\""},{"line_number":203,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"45861d73_d9abfa1d","line":200,"in_reply_to":"00587fd6_681b47e1","updated":"2025-12-08 22:31:11.000000000","message":"its suggeting this becasue you are passing \n\n```\n   kwargs \u003d {\n            \"OS-EXT-STS:vm_state\": \"active\"\n        }\n        \n```\nquite often i think. that proably should be part of the default on line 58","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":true,"context_lines":[{"line_number":197,"context_line":"        result \u003d nova_util.stop_instance(instance_id)"},{"line_number":198,"context_line":"        self.assertTrue(result)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        # verify that the method will return False when active"},{"line_number":201,"context_line":"        kwargs \u003d {"},{"line_number":202,"context_line":"            \"OS-EXT-STS:vm_state\": \"active\""},{"line_number":203,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"00587fd6_681b47e1","line":200,"in_reply_to":"ee5bb707_a0db9877","updated":"2025-12-03 12:27:02.000000000","message":"\u003e Extract common test patterns into helper methods\n\u003e \n\u003e **Severity**: SUGGESTION | **Confidence**: 0.7\n\u003e \n\u003e **Benefit**: Reduces code duplication and improves test maintainability\n\u003e \n\u003e **Recommendation**:\n\u003e Create helper methods for common test setup patterns like server state verification\n\nI\u0027m already using fake_server helper, I don\u0027t know how i may improve this one here.","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        result \u003d nova_util.start_instance(instance_id)"},{"line_number":276,"context_line":"        self.assertFalse(result)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    @mock.patch.object(servers.Server, \u0027resize\u0027)"},{"line_number":279,"context_line":"    @mock.patch.object(servers.Server, \u0027confirm_resize\u0027)"},{"line_number":280,"context_line":"    def test_resize_instance(self, mock_confirm_resize, mock_resize,"},{"line_number":281,"context_line":"                             mock_cinder, mock_nova):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b0f9040_1e3cf3ae","line":278,"in_reply_to":"27bea81e_788d49fd","updated":"2025-12-03 12:27:02.000000000","message":"\u003e Mock decorators missing autospec\u003dTrue parameter\n\u003e \n\u003e **Severity**: WARNING | **Confidence**: 0.9\n\u003e \n\u003e **Impact**: Tests may not catch interface changes properly and could allow mocking non-existent methods\n\u003e \n\u003e **Suggestion**:\n\u003e Add autospec\u003dTrue to all @mock.patch decorators for better test reliability and adherence to OpenStack guidelines\n\nDone","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                                               self.flavor_name)"},{"line_number":298,"context_line":"        self.assertTrue(is_success)"},{"line_number":299,"context_line":"        mock_resize.assert_called_once_with(flavor\u003dself.flavor_name)"},{"line_number":300,"context_line":"        self.assertEqual(1, mock_confirm_resize.call_count)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        server.status \u003d \u0027SOMETHING_ELSE\u0027"},{"line_number":303,"context_line":"        is_success \u003d nova_util.resize_instance(self.instance_uuid,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3921b157_885dd5d6","line":300,"in_reply_to":"73720afa_0715bb81","updated":"2025-12-03 12:27:02.000000000","message":"\u003e Consider using parameterized tests for similar test scenarios\n\u003e \n\u003e **Severity**: SUGGESTION | **Confidence**: 0.6\n\u003e \n\u003e **Benefit**: Reduces test code duplication and makes test intent clearer\n\u003e \n\u003e **Recommendation**:\n\u003e Use @ddt.ddt or pytest.mark.parametrize for retry tests with different configurations\n\nActually the expected result is different. I\u0027m splitting this test in two.","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":true,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        mock_confirm_resize.return_value \u003d True"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        self.flags(migration_max_retries\u003d20, migration_interval\u003d4,"},{"line_number":326,"context_line":"                   group\u003d\u0027nova\u0027)"},{"line_number":327,"context_line":"        # Resize will succeed because status changes to VERIFY_RESIZE"},{"line_number":328,"context_line":"        is_success \u003d nova_util.resize_instance("}],"source_content_type":"text/x-python","patch_set":1,"id":"5616ed35_f5fd4c4c","line":325,"in_reply_to":"05c1beed_cd0cf4a1","updated":"2025-12-03 12:27:02.000000000","message":"\u003e Consider extracting magic numbers into constants\n\u003e \n\u003e **Severity**: SUGGESTION | **Confidence**: 0.6\n\u003e \n\u003e **Benefit**: Makes test values more readable and easier to maintain\n\u003e \n\u003e **Recommendation**:\n\u003e Extract values like migration_max_retries\u003d20, migration_interval\u003d4 into test constants\n\nGiven that we use different values in different tests, i think it\u0027s more clear to set the values explicitely in the flags call.","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cd2cfc482fbf01b8aab39e5449a43c3af21f627e","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        mock_confirm_resize.return_value \u003d True"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        self.flags(migration_max_retries\u003d20, migration_interval\u003d4,"},{"line_number":326,"context_line":"                   group\u003d\u0027nova\u0027)"},{"line_number":327,"context_line":"        # Resize will succeed because status changes to VERIFY_RESIZE"},{"line_number":328,"context_line":"        is_success \u003d nova_util.resize_instance("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f0eb861_fdddbd6b","line":325,"in_reply_to":"5616ed35_f5fd4c4c","updated":"2025-12-08 22:31:11.000000000","message":"Acknowledged\n\nyou should mark this as resovled if you are discarding the review feedback","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"79b032965de0d75ca6926a9b0d659fd1b834805b","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.mock_sleep.assert_called_with(5)"},{"line_number":456,"context_line":"        mock_migrate.assert_called_with(host\u003dself.destination_node)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027, mock.Mock())"},{"line_number":459,"context_line":"    @mock.patch.object(servers.Server, \u0027live_migrate\u0027)"},{"line_number":460,"context_line":"    def test_live_migrate_instance_no_destination_node("},{"line_number":461,"context_line":"            self, mock_migrate, mock_cinder, mock_nova):"}],"source_content_type":"text/x-python","patch_set":1,"id":"08e9dc43_838399b7","line":458,"in_reply_to":"ffe32354_0d49d0fe","updated":"2025-12-03 12:27:02.000000000","message":"\u003e Time sleep mock cleanup not verified in some test methods\n\u003e \n\u003e **Severity**: WARNING | **Confidence**: 0.6\n\u003e \n\u003e **Impact**: Potential test isolation issues if sleep mocks interfere between tests\n\u003e \n\u003e **Suggestion**:\n\u003e Add assertions to verify mock behavior or use class-level fixture consistently\n\nDone","commit_id":"e41a8f3dae5c62dba6994aaf16c8426980982f22"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cd2cfc482fbf01b8aab39e5449a43c3af21f627e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.mock_sleep \u003d self.useFixture("},{"line_number":51,"context_line":"            fixtures.MockPatchObject(time, \u0027sleep\u0027)).mock"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @staticmethod"},{"line_number":54,"context_line":"    def fake_server(*args, **kwargs):"},{"line_number":55,"context_line":"        instance_info \u003d {"},{"line_number":56,"context_line":"            \u0027id\u0027: args[0],"}],"source_content_type":"text/x-python","patch_set":2,"id":"c850a663_59c82d3a","line":53,"in_reply_to":"6c344aa4_ae9b7387","updated":"2025-12-08 22:31:11.000000000","message":"yes but not now","commit_id":"2d74df290e7b2720d7ff7034df081abe7ddd7904"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cd2cfc482fbf01b8aab39e5449a43c3af21f627e","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        self.assertFalse(is_success)"},{"line_number":318,"context_line":"        mock_resize.assert_called_once_with(server, flavor\u003dself.flavor_name)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    @mock.patch.object(servers.Server, \u0027confirm_resize\u0027, autospec\u003dTrue)"},{"line_number":321,"context_line":"    @mock.patch.object(servers.Server, \u0027resize\u0027, autospec\u003dTrue)"},{"line_number":322,"context_line":"    def test_watcher_resize_instance_retry_success("},{"line_number":323,"context_line":"            self, mock_resize, mock_confirm_resize, mock_cinder, mock_nova):"}],"source_content_type":"text/x-python","patch_set":2,"id":"a5b5f0d7_8aa3667d","line":320,"in_reply_to":"f3f6f0ba_e0b43503","updated":"2025-12-08 22:31:11.000000000","message":"its commeting because in the previous test you did\n\n\n    @mock.patch.object(servers.Server, \u0027resize\u0027, autospec\u003dTrue)\n    @mock.patch.object(servers.Server, \u0027confirm_resize\u0027, autospec\u003dTrue)\n    def test_resize_instance(self, mock_confirm_resize, mock_resize,\n                             mock_cinder, mock_nova):\n                             \n so its basiclly sayign your not passing them in a consitent order between tests.","commit_id":"2d74df290e7b2720d7ff7034df081abe7ddd7904"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cd2cfc482fbf01b8aab39e5449a43c3af21f627e","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    @mock.patch.object(servers.Server, \u0027confirm_resize\u0027, autospec\u003dTrue)"},{"line_number":321,"context_line":"    @mock.patch.object(servers.Server, \u0027resize\u0027, autospec\u003dTrue)"},{"line_number":322,"context_line":"    def test_watcher_resize_instance_retry_success("},{"line_number":323,"context_line":"            self, mock_resize, mock_confirm_resize, mock_cinder, mock_nova):"},{"line_number":324,"context_line":"        \"\"\"Test that resize_instance uses config timeout by default\"\"\""},{"line_number":325,"context_line":"        nova_util \u003d nova_helper.NovaHelper()"}],"source_content_type":"text/x-python","patch_set":2,"id":"460f2f0e_e4211ee0","line":322,"in_reply_to":"b96fa4a0_7b2b7037","updated":"2025-12-08 22:31:11.000000000","message":"i dont think this is relevent.","commit_id":"2d74df290e7b2720d7ff7034df081abe7ddd7904"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4493e842bb35d7f9cc402020b81929e50689aecc","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"},{"line_number":80,"context_line":"    def fake_migration(*args, **kwargs):"},{"line_number":81,"context_line":"        migration \u003d mock.MagicMock()"},{"line_number":82,"context_line":"        migration.id \u003d args[0]"},{"line_number":83,"context_line":"        return migration"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1e41aa77_0861d7f7","line":81,"in_reply_to":"126c8670_cbf575ce","updated":"2025-12-17 14:35:58.000000000","message":"\u003e **Recommendation**:\n\u003e Consider creating a real migration object similar to how server and hypervisor objects are created, using novaclient\u0027s actual migration model if available\n\n\nagain valid but it can be adressed seperatly","commit_id":"64993ae6ad9e3191a33241bcfe9d2f4109ccd0e2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4493e842bb35d7f9cc402020b81929e50689aecc","unresolved":true,"context_lines":[{"line_number":910,"context_line":"            service_uuid\u003dmock.ANY, reason\u003d\u0027test2\u0027)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    @staticmethod"},{"line_number":913,"context_line":"    def fake_volume(**kwargs):"},{"line_number":914,"context_line":"        volume \u003d mock.MagicMock()"},{"line_number":915,"context_line":"        volume.id \u003d kwargs.get(\u0027id\u0027, \u002745a37aeb-95ab-4ddb-a305-7d9f62c2f5ba\u0027)"},{"line_number":916,"context_line":"        volume.size \u003d kwargs.get(\u0027size\u0027, \u00271\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"cd38484a_5296e6ed","line":913,"in_reply_to":"274fcaa4_e98d3d7a","updated":"2025-12-17 14:35:58.000000000","message":"\u003e fake_volume uses MagicMock instead of real cinderclient object\n\u003e \n\u003e **Severity**: SUGGESTION | **Confidence**: 0.7\n\u003e \n\u003e **Benefit**: Maintains consistency with the refactored approach of using real client objects\n\u003e \n\u003e **Recommendation**:\n\u003e Replace MagicMock with a real cinderclient.volumes.Volume object similar to the server/hypervisor refactoring\n\nthis is valid but can be adressed seperately","commit_id":"64993ae6ad9e3191a33241bcfe9d2f4109ccd0e2"}]}
