)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d4ca6d08f3ba942bfbaa929b2e3e988784ebbb9a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Anna Pankiewicz \u003canna.pankiewicz@att.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-06-19 10:34:35 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve Tempest workspace manager unit test coverage"},{"line_number":8,"context_line":"Partially Implements: blueprint tempset-cmd-test-coverage"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: Id5ee90ec9c8f4453f28e9852d6965668f76b4e81"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f7c97a3_be734216","line":7,"updated":"2018-06-19 16:49:41.000000000","message":"We should add a newline between these 2 lines so it renders correctly. The Partially Implements line should have a link but isn\u0027t rendering right.","commit_id":"94c0ff3d9d0bc3954d12e795cd9bba13115d4582"}],"tempest/tests/cmd/test_workspace.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d4ca6d08f3ba942bfbaa929b2e3e988784ebbb9a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.assertIsNotNone(self.workspace_manager.get_workspace(name))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_workspace_name_not_exists(self):"},{"line_number":145,"context_line":"        nonexistent_name \u003d data_utils.rand_uuid()"},{"line_number":146,"context_line":"        ex \u003d self.assertRaises(SystemExit,"},{"line_number":147,"context_line":"                               self.workspace_manager._name_exists,"},{"line_number":148,"context_line":"                               nonexistent_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7ec4ca0e","line":145,"range":{"start_line":145,"start_character":43,"end_line":145,"end_character":47},"updated":"2018-06-19 16:49:41.000000000","message":"nit: use rand_name()","commit_id":"94c0ff3d9d0bc3954d12e795cd9bba13115d4582"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d4ca6d08f3ba942bfbaa929b2e3e988784ebbb9a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                               self.workspace_manager._name_exists,"},{"line_number":148,"context_line":"                               nonexistent_name)"},{"line_number":149,"context_line":"        self.assertEqual(1, ex.code)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def test_workspace_name_already_exists(self):"},{"line_number":152,"context_line":"        duplicate_name \u003d self.name"},{"line_number":153,"context_line":"        ex \u003d self.assertRaises(SystemExit,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_fe73fae6","line":150,"updated":"2018-06-19 16:49:41.000000000","message":"You can make slightly more robust by doing this:\n\n    @patch(\u0027sys.stdout\u0027, new_callable\u003dStringIO)\n    def test_workspace_name_already_exists(self, mock_stdout):\n        duplicate_name \u003d self.name\n        ex \u003d self.assertRaises(SystemExit,\n                               self.workspace_manager._workspace_name_exists,\n                               duplicate_name)\n        self.assertEqual(1, ex.code)\n        self.assertRegexp(\"^A workspace was not found with name .*$\", mock_stdout.getvalue())\n\nThough not 100% sure if that\u0027s compatible with py27 and py35. Ditto elsewhere if it works for you.","commit_id":"94c0ff3d9d0bc3954d12e795cd9bba13115d4582"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"ab0277ac2673388ce5380dfcd60a4f75ca74213e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                               self.workspace_manager._name_exists,"},{"line_number":148,"context_line":"                               nonexistent_name)"},{"line_number":149,"context_line":"        self.assertEqual(1, ex.code)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def test_workspace_name_already_exists(self):"},{"line_number":152,"context_line":"        duplicate_name \u003d self.name"},{"line_number":153,"context_line":"        ex \u003d self.assertRaises(SystemExit,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_84a95425","line":150,"in_reply_to":"5f7c97a3_d96e582b","updated":"2018-06-19 19:23:07.000000000","message":"That\u0027s the correct pattern, the try catch around imports. Example: http://git.openstack.org/cgit/openstack/ansible-role-k8s-tripleo/tree/action_plugins/config_template.py#n27","commit_id":"94c0ff3d9d0bc3954d12e795cd9bba13115d4582"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"42b58b6b9e4aa7f241d42d794d650bae3ec619fc","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                               self.workspace_manager._name_exists,"},{"line_number":148,"context_line":"                               nonexistent_name)"},{"line_number":149,"context_line":"        self.assertEqual(1, ex.code)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def test_workspace_name_already_exists(self):"},{"line_number":152,"context_line":"        duplicate_name \u003d self.name"},{"line_number":153,"context_line":"        ex \u003d self.assertRaises(SystemExit,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_d96e582b","line":150,"in_reply_to":"5f7c97a3_fe73fae6","updated":"2018-06-19 18:44:46.000000000","message":"With a little tweaking, it is compatible with both. However in order to import StringIO, I had to handle the module\u0027s name change from \"StringIO\" in py27 to \"io\" in py35 with a try/except block. Is there a better way to handle that? \n\nAlso I\u0027ll be making the other similar tests more robust in the same way, thanks for the pointer.","commit_id":"94c0ff3d9d0bc3954d12e795cd9bba13115d4582"}]}
