)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"591b089d0e1c6409da8491067a097960e3ef8e25","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add comprehensive functional tests for Identity v3 Service resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implement complete test coverage for OpenStack Identity Service operations"},{"line_number":10,"context_line":"including CRUD workflows, exception handling, and edge cases. Tests validate:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"- Service creation, retrieval, update, and deletion operations"},{"line_number":13,"context_line":"- Service listing and search functionality"},{"line_number":14,"context_line":"- Error handling for non-existent resources"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"a55d6ef0_92c5e3af","line":11,"range":{"start_line":9,"start_character":1,"end_line":11,"end_character":1},"updated":"2025-09-25 10:03:36.000000000","message":"nit: can you wrap at \u003c\u003d 72 characters?","commit_id":"dcdf6a1911d5f3d423f59794afaeca44073a8c0f"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b1f25f7d9432edb7455046d37a9e97571650666","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"974eb4b6_3ca408ab","updated":"2025-09-09 21:30:38.000000000","message":"The test failure is real. Can you please check the logs for one of the failed voting jobs and address it?","commit_id":"95a50e6a2de37d8cf16629ebb9cadfe1ead6d97d"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"7557e4e80d059ed3734945abf4fde8ebf63a6a50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e9c59348_0246ee7d","updated":"2025-08-31 04:13:31.000000000","message":"recheck","commit_id":"95a50e6a2de37d8cf16629ebb9cadfe1ead6d97d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"37cb54f76eb79d2533376c033d4ca553944e0fd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3ea47519_eb3e1ff5","updated":"2025-11-12 12:45:03.000000000","message":"My comments from PS7 still apply here","commit_id":"ace0ee14fcac403eb1998eb5606461696a57e3cc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"adfa27d12c56be997225bd349c17143877cc61f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ced8885d_6f273e99","in_reply_to":"3ea47519_eb3e1ff5","updated":"2025-11-12 12:45:16.000000000","message":"*patchset 7","commit_id":"ace0ee14fcac403eb1998eb5606461696a57e3cc"}],"openstack/tests/functional/identity/v3/test_service.py":[{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"9dc0f388ef010fd0700418764d5e02bbd3ef48b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# openstack/tests/functional/identity/v3/test_service.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import uuid"},{"line_number":4,"context_line":"from openstack.tests.functional import base  # OpenStack SDK functional test base class"}],"source_content_type":"text/x-python","patch_set":1,"id":"ef33d48a_1bea0f00","line":1,"in_reply_to":"07f0dc8f_5ef3e5a1","updated":"2025-08-30 02:20:54.000000000","message":"Done","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9edd0cc40b07f417309a496b79f886f78523ecf1","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# openstack/tests/functional/identity/v3/test_service.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import uuid"},{"line_number":4,"context_line":"from openstack.tests.functional import base  # OpenStack SDK functional test base class"}],"source_content_type":"text/x-python","patch_set":1,"id":"07f0dc8f_5ef3e5a1","line":1,"in_reply_to":"75b88c9a_30f6ac91","updated":"2025-08-20 16:38:42.000000000","message":"Can you fix this and also fix the formatting. [Repeating from another change](https://review.opendev.org/c/openstack/openstacksdk/+/958061):\n\n\u003e You can fix this by running the `tox -e pep8`, or by installing and running pre-commit:\n\u003e \n\u003e ```\n\u003e pip install --user pre-commit  # or sudo dnf/apt install pre-commit\n\u003e pre-commit install\n\u003e pre-commit run -a\n\u003e ```","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9edd0cc40b07f417309a496b79f886f78523ecf1","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# openstack/tests/functional/identity/v3/test_service.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import uuid"},{"line_number":4,"context_line":"from openstack.tests.functional import base  # OpenStack SDK functional test base class"},{"line_number":5,"context_line":"from openstack import exceptions  # OpenStack exception classes"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestService(base.BaseFunctionalTest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a75ab855_f2c8d76f","line":5,"range":{"start_line":3,"start_character":11,"end_line":5,"end_character":63},"updated":"2025-08-20 16:38:42.000000000","message":"These comments (and most of the comments in this file) don\u0027t add any value, since they are overly verbose and describe *what* you\u0027re doing, not *why*. Can you remove them?\n\nPS: LLMs are very prone to adding these. If this was generated with the help of copilot, claude, etc., please note [the policy on AI generated content](https://openinfra.org/legal/ai-policy).","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"9dc0f388ef010fd0700418764d5e02bbd3ef48b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# openstack/tests/functional/identity/v3/test_service.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import uuid"},{"line_number":4,"context_line":"from openstack.tests.functional import base  # OpenStack SDK functional test base class"},{"line_number":5,"context_line":"from openstack import exceptions  # OpenStack exception classes"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestService(base.BaseFunctionalTest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ec92236_49106f62","line":5,"range":{"start_line":3,"start_character":11,"end_line":5,"end_character":63},"in_reply_to":"a75ab855_f2c8d76f","updated":"2025-08-30 02:20:54.000000000","message":"Done","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9edd0cc40b07f417309a496b79f886f78523ecf1","unresolved":true,"context_lines":[{"line_number":5,"context_line":"from openstack import exceptions  # OpenStack exception classes"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestService(base.BaseFunctionalTest):"},{"line_number":9,"context_line":"    \"\"\"Identity v3 Service resource functional tests."},{"line_number":10,"context_line":"    "},{"line_number":11,"context_line":"    Functional tests for OpenStack Identity Service resource"},{"line_number":12,"context_line":"    Validated through API calls in actual DevStack environment"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    def setUp(self):"},{"line_number":16,"context_line":"        \"\"\"Initial setup before test execution\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"f043c665_d93848c3","line":13,"range":{"start_line":8,"start_character":43,"end_line":13,"end_character":7},"updated":"2025-08-20 16:38:42.000000000","message":"As above, this comment isn\u0027t very helpful. Can you remove it?","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"9dc0f388ef010fd0700418764d5e02bbd3ef48b2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"from openstack import exceptions  # OpenStack exception classes"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class TestService(base.BaseFunctionalTest):"},{"line_number":9,"context_line":"    \"\"\"Identity v3 Service resource functional tests."},{"line_number":10,"context_line":"    "},{"line_number":11,"context_line":"    Functional tests for OpenStack Identity Service resource"},{"line_number":12,"context_line":"    Validated through API calls in actual DevStack environment"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    def setUp(self):"},{"line_number":16,"context_line":"        \"\"\"Initial setup before test execution\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"2ace9f57_6dd6c231","line":13,"range":{"start_line":8,"start_character":43,"end_line":13,"end_character":7},"in_reply_to":"f043c665_d93848c3","updated":"2025-08-30 02:20:54.000000000","message":"Done","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9edd0cc40b07f417309a496b79f886f78523ecf1","unresolved":true,"context_lines":[{"line_number":139,"context_line":"        self.assertIsNotNone(found_service)  # Search successful"},{"line_number":140,"context_line":"        self.assertEqual(found_service.id, service.id)  # Verify same service"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_service_crud_workflow(self):"},{"line_number":143,"context_line":"        \"\"\"Complete CRUD operations sequence test\"\"\""},{"line_number":144,"context_line":"        service_name \u003d self.getUniqueString(\u0027crud-service\u0027)"},{"line_number":145,"context_line":"        service_type \u003d self.getUniqueString(\u0027crud-type\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9bf076b9_932a1d61","line":142,"updated":"2025-08-20 16:38:42.000000000","message":"This test handles many of the same things as the test above. Can you combine the above tests into this one, removing any redundancy?\n\nYou can look at the keypair test for an idea of how this should be structured:\n\nhttps://github.com/openstack/openstacksdk/blob/f1e2760a6f040e710d77a7ed30250c3de2e28dde/openstack/tests/functional/compute/v2/test_keypair.py#L29-L58","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"9dc0f388ef010fd0700418764d5e02bbd3ef48b2","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        self.assertIsNotNone(found_service)  # Search successful"},{"line_number":140,"context_line":"        self.assertEqual(found_service.id, service.id)  # Verify same service"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_service_crud_workflow(self):"},{"line_number":143,"context_line":"        \"\"\"Complete CRUD operations sequence test\"\"\""},{"line_number":144,"context_line":"        service_name \u003d self.getUniqueString(\u0027crud-service\u0027)"},{"line_number":145,"context_line":"        service_type \u003d self.getUniqueString(\u0027crud-type\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c410ae58_ff508ffe","line":142,"in_reply_to":"9bf076b9_932a1d61","updated":"2025-08-30 02:20:54.000000000","message":"Done","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9edd0cc40b07f417309a496b79f886f78523ecf1","unresolved":true,"context_lines":[{"line_number":202,"context_line":"        except Exception as e:"},{"line_number":203,"context_line":"            self.fail(f\"delete_service with ignore_missing\u003dTrue should not raise: {e}\")"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def test_service_name_uniqueness(self):"},{"line_number":206,"context_line":"        \"\"\"Service name duplication allowance test\"\"\""},{"line_number":207,"context_line":"        service_name \u003d self.getUniqueString(\u0027unique-service\u0027)"},{"line_number":208,"context_line":"        service_type1 \u003d self.getUniqueString(\u0027unique-type1\u0027)"},{"line_number":209,"context_line":"        service_type2 \u003d self.getUniqueString(\u0027unique-type2\u0027)"},{"line_number":210,"context_line":"        "},{"line_number":211,"context_line":"        # Create first service"},{"line_number":212,"context_line":"        service1 \u003d self.conn.identity.create_service("},{"line_number":213,"context_line":"            name\u003dservice_name,"},{"line_number":214,"context_line":"            type\u003dservice_type1"},{"line_number":215,"context_line":"        )"},{"line_number":216,"context_line":"        self.addCleanup(self._cleanup_service, service1.id)"},{"line_number":217,"context_line":"        "},{"line_number":218,"context_line":"        # Create second service with same name, different type"},{"line_number":219,"context_line":"        # OpenStack allows name duplication"},{"line_number":220,"context_line":"        service2 \u003d self.conn.identity.create_service("},{"line_number":221,"context_line":"            name\u003dservice_name,"},{"line_number":222,"context_line":"            type\u003dservice_type2"},{"line_number":223,"context_line":"        )"},{"line_number":224,"context_line":"        self.addCleanup(self._cleanup_service, service2.id)"},{"line_number":225,"context_line":"        "},{"line_number":226,"context_line":"        # Verify both services were created (different IDs)"},{"line_number":227,"context_line":"        self.assertNotEqual(service1.id, service2.id)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def _cleanup_service(self, service_id):"},{"line_number":230,"context_line":"        \"\"\"Test service cleanup helper method"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d41742c_7992f129","line":227,"range":{"start_line":205,"start_character":0,"end_line":227,"end_character":53},"updated":"2025-08-20 16:38:42.000000000","message":"I feel this is testing keystone, not openstacksdk, and therefore shouldn\u0027t be included in here. Can you remove this test?","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"9dc0f388ef010fd0700418764d5e02bbd3ef48b2","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        except Exception as e:"},{"line_number":203,"context_line":"            self.fail(f\"delete_service with ignore_missing\u003dTrue should not raise: {e}\")"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def test_service_name_uniqueness(self):"},{"line_number":206,"context_line":"        \"\"\"Service name duplication allowance test\"\"\""},{"line_number":207,"context_line":"        service_name \u003d self.getUniqueString(\u0027unique-service\u0027)"},{"line_number":208,"context_line":"        service_type1 \u003d self.getUniqueString(\u0027unique-type1\u0027)"},{"line_number":209,"context_line":"        service_type2 \u003d self.getUniqueString(\u0027unique-type2\u0027)"},{"line_number":210,"context_line":"        "},{"line_number":211,"context_line":"        # Create first service"},{"line_number":212,"context_line":"        service1 \u003d self.conn.identity.create_service("},{"line_number":213,"context_line":"            name\u003dservice_name,"},{"line_number":214,"context_line":"            type\u003dservice_type1"},{"line_number":215,"context_line":"        )"},{"line_number":216,"context_line":"        self.addCleanup(self._cleanup_service, service1.id)"},{"line_number":217,"context_line":"        "},{"line_number":218,"context_line":"        # Create second service with same name, different type"},{"line_number":219,"context_line":"        # OpenStack allows name duplication"},{"line_number":220,"context_line":"        service2 \u003d self.conn.identity.create_service("},{"line_number":221,"context_line":"            name\u003dservice_name,"},{"line_number":222,"context_line":"            type\u003dservice_type2"},{"line_number":223,"context_line":"        )"},{"line_number":224,"context_line":"        self.addCleanup(self._cleanup_service, service2.id)"},{"line_number":225,"context_line":"        "},{"line_number":226,"context_line":"        # Verify both services were created (different IDs)"},{"line_number":227,"context_line":"        self.assertNotEqual(service1.id, service2.id)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def _cleanup_service(self, service_id):"},{"line_number":230,"context_line":"        \"\"\"Test service cleanup helper method"}],"source_content_type":"text/x-python","patch_set":1,"id":"86f486f0_68b75595","line":227,"range":{"start_line":205,"start_character":0,"end_line":227,"end_character":53},"in_reply_to":"8d41742c_7992f129","updated":"2025-08-30 02:20:54.000000000","message":"Done","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9edd0cc40b07f417309a496b79f886f78523ecf1","unresolved":true,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def _cleanup_service(self, service_id):"},{"line_number":230,"context_line":"        \"\"\"Test service cleanup helper method"},{"line_number":231,"context_line":"        "},{"line_number":232,"context_line":"        Args:"},{"line_number":233,"context_line":"            service_id: Service ID to delete"},{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        try:"},{"line_number":236,"context_line":"            # ignore_missing\u003dTrue: Ignore error if already deleted"}],"source_content_type":"text/x-python","patch_set":1,"id":"2d809b96_a01077fe","line":233,"range":{"start_line":231,"start_character":8,"end_line":233,"end_character":44},"updated":"2025-08-20 16:38:42.000000000","message":"Please use sphinx-style docstrings\n\n```\n:param service_id: ID of service to delete.\n```\n\nOr just drop this docstring","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"9dc0f388ef010fd0700418764d5e02bbd3ef48b2","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def _cleanup_service(self, service_id):"},{"line_number":230,"context_line":"        \"\"\"Test service cleanup helper method"},{"line_number":231,"context_line":"        "},{"line_number":232,"context_line":"        Args:"},{"line_number":233,"context_line":"            service_id: Service ID to delete"},{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        try:"},{"line_number":236,"context_line":"            # ignore_missing\u003dTrue: Ignore error if already deleted"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b32db46_adb7e8ad","line":233,"range":{"start_line":231,"start_character":8,"end_line":233,"end_character":44},"in_reply_to":"2d809b96_a01077fe","updated":"2025-08-30 02:20:54.000000000","message":"Thank you for the feedback. I\u0027ll review the duplicate functionalities and improve the code by removing redundancy and unnecessary comments.","commit_id":"7b05cefe9126b712f91abb9ba0f9937c83305146"},{"author":{"_account_id":35119,"name":"jihyun huh","email":"huhji.elha@gmail.com","username":"jhhuh"},"change_message_id":"aeb0c2cb27653f16e10363605b8d3a622ae9f214","unresolved":true,"context_lines":[{"line_number":24,"context_line":"        self.svc_name \u003d self.getUniqueString(\"crud-service\")"},{"line_number":25,"context_line":"        self.svc_type \u003d self.getUniqueString(\"crud-type\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_service_flow(self):"},{"line_number":28,"context_line":"        # CREATE"},{"line_number":29,"context_line":"        service \u003d self.conn.identity.create_service("},{"line_number":30,"context_line":"            name\u003dself.svc_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"58251a21_4febf33d","line":27,"updated":"2025-08-30 06:03:44.000000000","message":"Can you change the function name to be the same as the class name? `test_service_flow` to `test_service`","commit_id":"f4c9867e456835a2485ddfecea37c224557d5240"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"991c7ce2554e3c346190696dd12d6016f900b56b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.svc_name \u003d self.getUniqueString(\"crud-service\")"},{"line_number":25,"context_line":"        self.svc_type \u003d self.getUniqueString(\"crud-type\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_service_flow(self):"},{"line_number":28,"context_line":"        # CREATE"},{"line_number":29,"context_line":"        service \u003d self.conn.identity.create_service("},{"line_number":30,"context_line":"            name\u003dself.svc_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a66399b6_c0461ddc","line":27,"in_reply_to":"58251a21_4febf33d","updated":"2025-08-31 03:55:57.000000000","message":"done","commit_id":"f4c9867e456835a2485ddfecea37c224557d5240"},{"author":{"_account_id":35119,"name":"jihyun huh","email":"huhji.elha@gmail.com","username":"jhhuh"},"change_message_id":"aeb0c2cb27653f16e10363605b8d3a622ae9f214","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(self.svc_type, service.type)"},{"line_number":42,"context_line":"        self.assertTrue(service.is_enabled)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # READ: get"},{"line_number":45,"context_line":"        got \u003d self.conn.identity.get_service(svc_id)"},{"line_number":46,"context_line":"        self.assertEqual(svc_id, got.id)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"be6d8cfe_afeb28b8","line":44,"updated":"2025-08-30 06:03:44.000000000","message":"It\u0027s not that important, but the \"comment\" would contain more information about the following feature. for example, \"retreive details of the created service\"","commit_id":"f4c9867e456835a2485ddfecea37c224557d5240"},{"author":{"_account_id":38258,"name":"LEESUNGHYUN","display_name":"sunghyunlee","email":"jjinjukks1227@gmail.com","username":"sunghyunlee"},"change_message_id":"991c7ce2554e3c346190696dd12d6016f900b56b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(self.svc_type, service.type)"},{"line_number":42,"context_line":"        self.assertTrue(service.is_enabled)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # READ: get"},{"line_number":45,"context_line":"        got \u003d self.conn.identity.get_service(svc_id)"},{"line_number":46,"context_line":"        self.assertEqual(svc_id, got.id)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"08c089fe_1196ea44","line":44,"in_reply_to":"be6d8cfe_afeb28b8","updated":"2025-08-31 03:55:57.000000000","message":"Thank you for taking the time to provide even the smallest pieces of feedback","commit_id":"f4c9867e456835a2485ddfecea37c224557d5240"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ba9034ac0082a273332e0168ea389cb906daab4a","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # negative checks with random UUID"},{"line_number":71,"context_line":"        fake_id \u003d str(uuid.uuid4())"},{"line_number":72,"context_line":"        with self.assertRaises(sdk_exc.ResourceNotFound):"},{"line_number":73,"context_line":"            self.conn.identity.get_service(fake_id)"},{"line_number":74,"context_line":"        with self.assertRaises(sdk_exc.ResourceNotFound):"},{"line_number":75,"context_line":"            self.conn.identity.update_service(fake_id, description\u003d\"fail\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # ensure ignore_missing\u003dTrue suppresses exceptions"},{"line_number":78,"context_line":"        self.conn.identity.delete_service(fake_id, ignore_missing\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ae2a03ef_c51f4736","line":75,"range":{"start_line":71,"start_character":35,"end_line":75,"end_character":74},"updated":"2025-09-09 21:32:58.000000000","message":"You can\u0027t use `assertRaises` like that here. We use testtools which provides a different implementation from the standard Python one. Search for other uses of this function to figure out how it _should_ be called. Alternatively, feel free to simply drop these as what you have here is already very good.","commit_id":"95a50e6a2de37d8cf16629ebb9cadfe1ead6d97d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"591b089d0e1c6409da8491067a097960e3ef8e25","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # negative checks with random UUID"},{"line_number":71,"context_line":"        fake_id \u003d str(uuid.uuid4())"},{"line_number":72,"context_line":"        with self.assertRaises(sdk_exc.ResourceNotFound):"},{"line_number":73,"context_line":"            self.conn.identity.get_service(fake_id)"},{"line_number":74,"context_line":"        with self.assertRaises(sdk_exc.ResourceNotFound):"},{"line_number":75,"context_line":"            self.conn.identity.update_service(fake_id, description\u003d\"fail\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # ensure ignore_missing\u003dTrue suppresses exceptions"},{"line_number":78,"context_line":"        self.conn.identity.delete_service(fake_id, ignore_missing\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ed1ce77a_4b5f806a","line":75,"range":{"start_line":71,"start_character":35,"end_line":75,"end_character":74},"in_reply_to":"ae2a03ef_c51f4736","updated":"2025-09-25 10:03:36.000000000","message":"Done","commit_id":"95a50e6a2de37d8cf16629ebb9cadfe1ead6d97d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ba9034ac0082a273332e0168ea389cb906daab4a","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        with self.assertRaises(sdk_exc.ResourceNotFound):"},{"line_number":75,"context_line":"            self.conn.identity.update_service(fake_id, description\u003d\"fail\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # ensure ignore_missing\u003dTrue suppresses exceptions"},{"line_number":78,"context_line":"        self.conn.identity.delete_service(fake_id, ignore_missing\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ef9e66e_85a7a22c","line":78,"range":{"start_line":77,"start_character":0,"end_line":78,"end_character":71},"updated":"2025-09-09 21:32:58.000000000","message":"I think we can drop this since it\u0027s not specific to this resource (you\u0027re testing the general `ignore_missing` functionality.","commit_id":"95a50e6a2de37d8cf16629ebb9cadfe1ead6d97d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"591b089d0e1c6409da8491067a097960e3ef8e25","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        with self.assertRaises(sdk_exc.ResourceNotFound):"},{"line_number":75,"context_line":"            self.conn.identity.update_service(fake_id, description\u003d\"fail\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # ensure ignore_missing\u003dTrue suppresses exceptions"},{"line_number":78,"context_line":"        self.conn.identity.delete_service(fake_id, ignore_missing\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1522218b_0b228b49","line":78,"range":{"start_line":77,"start_character":0,"end_line":78,"end_character":71},"in_reply_to":"5ef9e66e_85a7a22c","updated":"2025-09-25 10:03:36.000000000","message":"Done","commit_id":"95a50e6a2de37d8cf16629ebb9cadfe1ead6d97d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"591b089d0e1c6409da8491067a097960e3ef8e25","unresolved":true,"context_lines":[{"line_number":19,"context_line":"class TestService(base.BaseFunctionalTest):"},{"line_number":20,"context_line":"    def setUp(self):"},{"line_number":21,"context_line":"        super().setUp()"},{"line_number":22,"context_line":"        self.conn \u003d self.operator_cloud"},{"line_number":23,"context_line":"        self.svc_name \u003d self.getUniqueString(\"crud-service\")"},{"line_number":24,"context_line":"        self.svc_type \u003d self.getUniqueString(\"crud-type\")"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"79ffd860_2c067afc","line":22,"updated":"2025-09-25 10:03:36.000000000","message":"Rather than doing this assignment, can you just use `self.operator_cloud` throughout instead of `self.conn`?","commit_id":"dcdf6a1911d5f3d423f59794afaeca44073a8c0f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"591b089d0e1c6409da8491067a097960e3ef8e25","unresolved":true,"context_lines":[{"line_number":67,"context_line":"            self.conn.identity.find_service(svc_id, ignore_missing\u003dTrue)"},{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # negative checks with random UUID"},{"line_number":71,"context_line":"        fake_id \u003d str(uuid.uuid4())"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # use testtools style: pass the callable and its arguments"},{"line_number":74,"context_line":"        self.assertRaises("},{"line_number":75,"context_line":"            sdk_exc.ResourceNotFound, self.conn.identity.get_service, fake_id"},{"line_number":76,"context_line":"        )"},{"line_number":77,"context_line":"        self.assertRaises("},{"line_number":78,"context_line":"            sdk_exc.ResourceNotFound,"},{"line_number":79,"context_line":"            self.conn.identity.update_service,"},{"line_number":80,"context_line":"            fake_id,"},{"line_number":81,"context_line":"            description\u003d\"fail\","},{"line_number":82,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"e30c3a18_670ab442","line":82,"range":{"start_line":70,"start_character":0,"end_line":82,"end_character":9},"updated":"2025-09-25 10:03:36.000000000","message":"Thinking on this more, I think you can get rid of these negative checks entirely. The positive checks are sufficient.","commit_id":"dcdf6a1911d5f3d423f59794afaeca44073a8c0f"}]}
