)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bbf43bffb96ea292985b80071e97359db70b94f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Simply turns the override off so that backends with immutable user"},{"line_number":10,"context_line":"sources can run this test class."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Instead of modifying this class at a test by test basis I feel like"},{"line_number":13,"context_line":"a majority of these tests are similar enough to do them all at once."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I9ee67c8c99a33fa75fb7faa1efcccd5bba5b05ef"},{"line_number":16,"context_line":"Partial-Bug: #1714277"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ff82abbf_d74aed81","line":13,"range":{"start_line":12,"start_character":0,"end_line":13,"end_character":68},"updated":"2017-12-01 01:35:17.000000000","message":"This seems like it doesn\u0027t belong here, particularly because only 1 test is being updated, so this makes no sense.","commit_id":"46fda42f8f43f4426d498a04bdce7ff66ff42f34"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"fbfb094129da6c2f3cac36d1acdef636acd9230a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Simply turns the override off so that backends with immutable user"},{"line_number":10,"context_line":"sources can run this test class."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Instead of modifying this class at a test by test basis I feel like"},{"line_number":13,"context_line":"a majority of these tests are similar enough to do them all at once."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I9ee67c8c99a33fa75fb7faa1efcccd5bba5b05ef"},{"line_number":16,"context_line":"Partial-Bug: #1714277"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df87a7cf_e7f756d4","line":13,"range":{"start_line":12,"start_character":0,"end_line":13,"end_character":68},"in_reply_to":"df87a7cf_81f43a5d","updated":"2017-12-01 15:01:33.000000000","message":"I guess it can be confusing because test_list_projects is both a file and a test method here. I meant test_list_projects.py in the commit message header.","commit_id":"46fda42f8f43f4426d498a04bdce7ff66ff42f34"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"906ec9e0279addc66069db8722419acc1077be96","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Simply turns the override off so that backends with immutable user"},{"line_number":10,"context_line":"sources can run this test class."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Instead of modifying this class at a test by test basis I feel like"},{"line_number":13,"context_line":"a majority of these tests are similar enough to do them all at once."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I9ee67c8c99a33fa75fb7faa1efcccd5bba5b05ef"},{"line_number":16,"context_line":"Partial-Bug: #1714277"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df87a7cf_81f43a5d","line":13,"range":{"start_line":12,"start_character":0,"end_line":13,"end_character":68},"in_reply_to":"ff82abbf_d74aed81","updated":"2017-12-01 14:19:08.000000000","message":"oh I didn\u0027t realize we count the class as one test. I thought the individual methods with test_* prefix were tests.","commit_id":"46fda42f8f43f4426d498a04bdce7ff66ff42f34"}],"tempest/api/identity/admin/v3/test_list_projects.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c2f752aadcdf24bf181f5acb2e0d27c4d8603710","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(ListProjectsTestJSON, cls).resource_setup()"},{"line_number":29,"context_line":"        cls.project_ids \u003d list()"},{"line_number":30,"context_line":"        # Create a domain"},{"line_number":31,"context_line":"        cls.domain \u003d cls.create_domain()"},{"line_number":32,"context_line":"        # Create project with domain"},{"line_number":33,"context_line":"        cls.projects \u003d list()"},{"line_number":34,"context_line":"        cls.p1_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":35,"context_line":"        cls.p1 \u003d cls.projects_client.create_project("},{"line_number":36,"context_line":"            cls.p1_name, enabled\u003dFalse,"},{"line_number":37,"context_line":"            domain_id\u003dcls.domain[\u0027id\u0027])[\u0027project\u0027]"},{"line_number":38,"context_line":"        cls.projects.append(cls.p1)"},{"line_number":39,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":40,"context_line":"        # Create default project"},{"line_number":41,"context_line":"        p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":42,"context_line":"        cls.p2 \u003d cls.projects_client.create_project(p2_name)[\u0027project\u0027]"},{"line_number":43,"context_line":"        cls.projects.append(cls.p2)"},{"line_number":44,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":45,"context_line":"        # Create a new project (p3) using p2 as parent project"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_d63b7e36","line":42,"range":{"start_line":31,"start_character":0,"end_line":42,"end_character":71},"updated":"2018-07-02 21:46:58.000000000","message":"Domains and projects are created here -- either refactor to work with preprov creds or split this class up such that the tests that don\u0027t utilize created resources are in their own separate class that doesn\u0027t require force_tenant_isolation.","commit_id":"46fda42f8f43f4426d498a04bdce7ff66ff42f34"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"12ac2efbd690869d23b7aaae2b1feb045f2ce735","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(ListProjectsTestJSON, cls).resource_setup()"},{"line_number":29,"context_line":"        cls.project_ids \u003d list()"},{"line_number":30,"context_line":"        # Create a domain"},{"line_number":31,"context_line":"        cls.domain \u003d cls.create_domain()"},{"line_number":32,"context_line":"        # Create project with domain"},{"line_number":33,"context_line":"        cls.projects \u003d list()"},{"line_number":34,"context_line":"        cls.p1_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":35,"context_line":"        cls.p1 \u003d cls.projects_client.create_project("},{"line_number":36,"context_line":"            cls.p1_name, enabled\u003dFalse,"},{"line_number":37,"context_line":"            domain_id\u003dcls.domain[\u0027id\u0027])[\u0027project\u0027]"},{"line_number":38,"context_line":"        cls.projects.append(cls.p1)"},{"line_number":39,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":40,"context_line":"        # Create default project"},{"line_number":41,"context_line":"        p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":42,"context_line":"        cls.p2 \u003d cls.projects_client.create_project(p2_name)[\u0027project\u0027]"},{"line_number":43,"context_line":"        cls.projects.append(cls.p2)"},{"line_number":44,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":45,"context_line":"        # Create a new project (p3) using p2 as parent project"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_98fcb9b7","line":42,"range":{"start_line":31,"start_character":0,"end_line":42,"end_character":71},"in_reply_to":"5f7c97a3_d63b7e36","updated":"2018-07-10 21:46:16.000000000","message":"I decided to refactor because one project here is enabled\u003dFalse and another uses an existing project as a parent, both of these I don\u0027t think I can produce with the existing credentials without making updates to the projects and then adding cleanUp calls to undo the updates.","commit_id":"46fda42f8f43f4426d498a04bdce7ff66ff42f34"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class BaseListProjectsTestJSON(base.BaseIdentityV3AdminTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def resource_setup(cls):"},{"line_number":28,"context_line":"        super(BaseListProjectsTestJSON, cls).resource_setup()"},{"line_number":29,"context_line":"        cls.domain_id \u003d CONF.identity.default_domain_id"},{"line_number":30,"context_line":"        cls.project_ids \u003d list()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_24221c56","line":27,"updated":"2018-07-11 01:30:29.000000000","message":"The changes you made here should go into the resource_setup for ListProjectsStaticTestJSON. See other related comments so the big picture is clear:\n\n1) create the disabled projects dynamically in the non-static test class below and call them cls.p1, cls.p2, cls.p3 -- the way the original ones were. Create as many as are needed to satisfy the test cases remaining in the non-static class.\n2) move this cls.p1 and cls.2 initializations to the static class resource_setup\n\nThat way there is better separation of concerns and the code is easier to read and maintain. The static projects go into the static class and the dynamic classes go into the dynamic class.","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"d5fefbb9640409e99f80c0ac578854a5d684da62","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class BaseListProjectsTestJSON(base.BaseIdentityV3AdminTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def resource_setup(cls):"},{"line_number":28,"context_line":"        super(BaseListProjectsTestJSON, cls).resource_setup()"},{"line_number":29,"context_line":"        cls.domain_id \u003d CONF.identity.default_domain_id"},{"line_number":30,"context_line":"        cls.project_ids \u003d list()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_1d78852a","line":27,"in_reply_to":"5f7c97a3_24221c56","updated":"2018-07-11 17:59:58.000000000","message":"makes sense","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.p1 \u003d cls.projects_client.list_projects("},{"line_number":33,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":34,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":35,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":36,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":37,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":38,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_a4b2ac49","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":15},"updated":"2018-07-11 01:30:29.000000000","message":"nit: Better to make this cls.p2_name for consistency with cls.p1_name","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"d5fefbb9640409e99f80c0ac578854a5d684da62","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.p1 \u003d cls.projects_client.list_projects("},{"line_number":33,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":34,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":35,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":36,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":37,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":38,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d2ed1cb9","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":15},"in_reply_to":"5f7c97a3_a4b2ac49","updated":"2018-07-11 17:59:58.000000000","message":"Done","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":38,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _list_projects_with_params(self, params, key):"},{"line_number":41,"context_line":"        body \u003d self.projects_client.list_projects(params)[\u0027projects\u0027]"},{"line_number":42,"context_line":"        self.assertIn(self.p1[key], map(lambda x: x[key], body))"},{"line_number":43,"context_line":"        self.assertNotIn(self.p2[key], map(lambda x: x[key], body))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_04bda002","line":40,"updated":"2018-07-11 01:30:29.000000000","message":"Can we add a docstring here saying:\n\n\"\"\"Validate that self.p1 belongs to the projects returned that match ``params`` but not self.p2\"\"\"","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"d5fefbb9640409e99f80c0ac578854a5d684da62","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":38,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _list_projects_with_params(self, params, key):"},{"line_number":41,"context_line":"        body \u003d self.projects_client.list_projects(params)[\u0027projects\u0027]"},{"line_number":42,"context_line":"        self.assertIn(self.p1[key], map(lambda x: x[key], body))"},{"line_number":43,"context_line":"        self.assertNotIn(self.p2[key], map(lambda x: x[key], body))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_52fa6c77","line":40,"in_reply_to":"5f7c97a3_04bda002","updated":"2018-07-11 17:59:58.000000000","message":"i modified this function, i\u0027ll add some comments.","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @classmethod"},{"line_number":49,"context_line":"    def resource_setup(cls):"},{"line_number":50,"context_line":"        super(ListProjectsTestJSON, cls).resource_setup()"},{"line_number":51,"context_line":"        # Create a new project (p3) using p2 as parent project"},{"line_number":52,"context_line":"        p3_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":53,"context_line":"        cls.p3 \u003d cls.projects_client.create_project("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_e41bc41a","line":50,"updated":"2018-07-11 01:30:29.000000000","message":"This resource_setup is missing the necessary disabled/enabled projects so that the enabled project list test below passes.","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"d5fefbb9640409e99f80c0ac578854a5d684da62","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @classmethod"},{"line_number":49,"context_line":"    def resource_setup(cls):"},{"line_number":50,"context_line":"        super(ListProjectsTestJSON, cls).resource_setup()"},{"line_number":51,"context_line":"        # Create a new project (p3) using p2 as parent project"},{"line_number":52,"context_line":"        p3_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":53,"context_line":"        cls.p3 \u003d cls.projects_client.create_project("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_9200046c","line":50,"in_reply_to":"5f7c97a3_e41bc41a","updated":"2018-07-11 17:59:58.000000000","message":"Done","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            self.assertEqual(self.p3[\u0027parent_id\u0027], project[\u0027parent_id\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @decorators.idempotent_id(\u00270fe7a334-675a-4509-b00e-1c4b95d5dae8\u0027)"},{"line_number":70,"context_line":"    def test_list_projects_with_enabled(self):"},{"line_number":71,"context_line":"        # List the projects with enabled"},{"line_number":72,"context_line":"        self._list_projects_with_params({\u0027enabled\u0027: False}, \u0027enabled\u0027)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_0442800e","line":70,"updated":"2018-07-11 01:30:29.000000000","message":"++ This test needs to be here because we need to create a disabled project.","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @decorators.idempotent_id(\u00270fe7a334-675a-4509-b00e-1c4b95d5dae8\u0027)"},{"line_number":70,"context_line":"    def test_list_projects_with_enabled(self):"},{"line_number":71,"context_line":"        # List the projects with enabled"},{"line_number":72,"context_line":"        self._list_projects_with_params({\u0027enabled\u0027: False}, \u0027enabled\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_843690b3","line":71,"range":{"start_line":71,"start_character":28,"end_line":71,"end_character":40},"updated":"2018-07-11 01:30:29.000000000","message":"nit: unrelated, but this is better to word as \"that are disabled\"","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"d5fefbb9640409e99f80c0ac578854a5d684da62","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @decorators.idempotent_id(\u00270fe7a334-675a-4509-b00e-1c4b95d5dae8\u0027)"},{"line_number":70,"context_line":"    def test_list_projects_with_enabled(self):"},{"line_number":71,"context_line":"        # List the projects with enabled"},{"line_number":72,"context_line":"        self._list_projects_with_params({\u0027enabled\u0027: False}, \u0027enabled\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_bdfe3102","line":71,"range":{"start_line":71,"start_character":28,"end_line":71,"end_character":40},"in_reply_to":"5f7c97a3_843690b3","updated":"2018-07-11 17:59:58.000000000","message":"Done","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ListProjectsStaticTestJSON(BaseListProjectsTestJSON):"},{"line_number":76,"context_line":"    # NOTE: force_tenant_isolation is false to allow test execution for"},{"line_number":77,"context_line":"    # clouds using the pre-provisioned credentials provider"},{"line_number":78,"context_line":"    force_tenant_isolation \u003d False"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_64cc94be","line":77,"range":{"start_line":76,"start_character":0,"end_line":77,"end_character":59},"updated":"2018-07-11 01:30:29.000000000","message":"nit: May we reword this to:\n\n    # NOTE: force_tenant_isolation is true in the base class by default but\n    # overridden to false here to allow test execution for clouds using the\n    # pre-provisioned credentials provider.","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"d5fefbb9640409e99f80c0ac578854a5d684da62","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ListProjectsStaticTestJSON(BaseListProjectsTestJSON):"},{"line_number":76,"context_line":"    # NOTE: force_tenant_isolation is false to allow test execution for"},{"line_number":77,"context_line":"    # clouds using the pre-provisioned credentials provider"},{"line_number":78,"context_line":"    force_tenant_isolation \u003d False"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_bd2711b6","line":77,"range":{"start_line":76,"start_character":0,"end_line":77,"end_character":59},"in_reply_to":"5f7c97a3_64cc94be","updated":"2018-07-11 17:59:58.000000000","message":"Done","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    force_tenant_isolation \u003d False"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"},{"line_number":81,"context_line":"    def test_list_projects(self):"},{"line_number":82,"context_line":"        # List projects"},{"line_number":83,"context_line":"        list_projects \u003d self.projects_client.list_projects()[\u0027projects\u0027]"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_8475309a","line":81,"updated":"2018-07-11 01:30:29.000000000","message":"All 3 of these look safe to move: http://codesearch.openstack.org/?q\u003dtest_list_projects\u0026i\u003dnope\u0026files\u003d\u0026repos\u003dinterop\n\nWe want to make sure we don\u0027t step on interop\u0027s toes.","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1affaa658e925ae0857c119e450239db3d1de2c4","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        # List projects with domain"},{"line_number":97,"context_line":"        params \u003d {\u0027domain_id\u0027: self.domain_id}"},{"line_number":98,"context_line":"        key \u003d \u0027domain_id\u0027"},{"line_number":99,"context_line":"        body \u003d self.projects_client.list_projects(params)[\u0027projects\u0027]"},{"line_number":100,"context_line":"        self.assertIn(self.p1[key], map(lambda x: x[key], body))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_e491849d","line":99,"updated":"2018-07-11 01:30:29.000000000","message":"Can we put a comment here saying something like:\n\n    \"Verify both projects are in the self.domain_id which is the default domain\"\n\nThen add a self.assertIn for self.p2[key] as well since it should be in the default domain as well, I would imagine","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"d5fefbb9640409e99f80c0ac578854a5d684da62","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        # List projects with domain"},{"line_number":97,"context_line":"        params \u003d {\u0027domain_id\u0027: self.domain_id}"},{"line_number":98,"context_line":"        key \u003d \u0027domain_id\u0027"},{"line_number":99,"context_line":"        body \u003d self.projects_client.list_projects(params)[\u0027projects\u0027]"},{"line_number":100,"context_line":"        self.assertIn(self.p1[key], map(lambda x: x[key], body))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_3d8c6138","line":99,"in_reply_to":"5f7c97a3_e491849d","updated":"2018-07-11 17:59:58.000000000","message":"Done","commit_id":"0a0cb8e300e371f188ec309828523158f74ac5b0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a4cfa41c9469f0b3066382cf0f70aa8c9c0d33e8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        cls.addClassResourceCleanup(cls.projects_client.delete_project,"},{"line_number":49,"context_line":"                                    cls.p1[\u0027id\u0027])"},{"line_number":50,"context_line":"        # Create a new project (p2) using p1 as parent project"},{"line_number":51,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":52,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":53,"context_line":"            cls.p2_name, parent_id\u003dcls.p1[\u0027id\u0027])[\u0027project\u0027]"},{"line_number":54,"context_line":"        cls.addClassResourceCleanup(cls.projects_client.delete_project,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a0d041ca","line":51,"updated":"2018-07-11 20:08:03.000000000","message":"It looks like originally p2 (default domain) -\u003e p3. Now you have p2 (new domain) -\u003e p3 (default domain) causing: \"{u\u0027title\u0027: u\u0027Bad Request\u0027, u\u0027message\u0027: u\u0027Cannot create project, since it specifies its domain_id default, but specifies a parent in a different domain (2273238a62ea42b180740990b59f0add).\u0027, u\u0027code\u0027: 400}\"\n\nLooks like you could add domain_id\u003dcls.domain[\u0027id\u0027] to L53 too.","commit_id":"1a206100c79e8a100bcfd476a7b7ea9273d79bf6"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"3eead8df4e094579337a7423ee138ba46d639b40","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        cls.addClassResourceCleanup(cls.projects_client.delete_project,"},{"line_number":49,"context_line":"                                    cls.p1[\u0027id\u0027])"},{"line_number":50,"context_line":"        # Create a new project (p2) using p1 as parent project"},{"line_number":51,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":52,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":53,"context_line":"            cls.p2_name, parent_id\u003dcls.p1[\u0027id\u0027])[\u0027project\u0027]"},{"line_number":54,"context_line":"        cls.addClassResourceCleanup(cls.projects_client.delete_project,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_5b42800f","line":51,"in_reply_to":"5f7c97a3_a0d041ca","updated":"2018-07-11 20:19:27.000000000","message":"so now with that change its \n\noriginally p2 (default domain) -\u003e p3(default domain). Now you have p1 (new domain) -\u003e p2 (new domain)","commit_id":"1a206100c79e8a100bcfd476a7b7ea9273d79bf6"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5ef6e6dd4d0dcf0a95d3eb878bbcb7007c888820","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class BaseListProjectsTestJSON(base.BaseIdentityV3AdminTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _list_projects_with_params(self, included, excluded, params, key):"},{"line_number":27,"context_line":"        # Validate that projects in ``included`` belongs to the projects"},{"line_number":28,"context_line":"        # returned that match ``params`` but not projects in ``excluded``"},{"line_number":29,"context_line":"        body \u003d self.projects_client.list_projects(params)[\u0027projects\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_563817ca","line":26,"updated":"2018-07-11 21:11:23.000000000","message":"++ This is a better implementation","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5ef6e6dd4d0dcf0a95d3eb878bbcb7007c888820","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    @decorators.idempotent_id(\u00276edc66f5-2941-4a17-9526-4073311c1fac\u0027)"},{"line_number":59,"context_line":"    def test_list_projects_with_parent(self):"},{"line_number":60,"context_line":"        # List projects with parent"},{"line_number":61,"context_line":"        params \u003d {\u0027parent_id\u0027: self.p3[\u0027parent_id\u0027]}"},{"line_number":62,"context_line":"        fetched_projects \u003d self.projects_client.list_projects("},{"line_number":63,"context_line":"            params)[\u0027projects\u0027]"},{"line_number":64,"context_line":"        self.assertNotEmpty(fetched_projects)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_b6472b53","line":61,"range":{"start_line":61,"start_character":31,"end_line":61,"end_character":38},"updated":"2018-07-11 21:11:23.000000000","message":"self.p3 isn\u0027t defined. Should be self.p2.","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"15be87438e60a8e2ffd8f87202c706add2f47fae","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    @decorators.idempotent_id(\u00276edc66f5-2941-4a17-9526-4073311c1fac\u0027)"},{"line_number":59,"context_line":"    def test_list_projects_with_parent(self):"},{"line_number":60,"context_line":"        # List projects with parent"},{"line_number":61,"context_line":"        params \u003d {\u0027parent_id\u0027: self.p3[\u0027parent_id\u0027]}"},{"line_number":62,"context_line":"        fetched_projects \u003d self.projects_client.list_projects("},{"line_number":63,"context_line":"            params)[\u0027projects\u0027]"},{"line_number":64,"context_line":"        self.assertNotEmpty(fetched_projects)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_568fb775","line":61,"range":{"start_line":61,"start_character":31,"end_line":61,"end_character":38},"in_reply_to":"5f7c97a3_b6472b53","updated":"2018-07-11 21:18:42.000000000","message":"Done","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5ef6e6dd4d0dcf0a95d3eb878bbcb7007c888820","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            params)[\u0027projects\u0027]"},{"line_number":64,"context_line":"        self.assertNotEmpty(fetched_projects)"},{"line_number":65,"context_line":"        for project in fetched_projects:"},{"line_number":66,"context_line":"            self.assertEqual(self.p3[\u0027parent_id\u0027], project[\u0027parent_id\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @decorators.idempotent_id(\u00270fe7a334-675a-4509-b00e-1c4b95d5dae8\u0027)"},{"line_number":69,"context_line":"    def test_list_projects_with_enabled(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_9656af05","line":66,"range":{"start_line":66,"start_character":34,"end_line":66,"end_character":36},"updated":"2018-07-11 21:11:23.000000000","message":"p2","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"15be87438e60a8e2ffd8f87202c706add2f47fae","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            params)[\u0027projects\u0027]"},{"line_number":64,"context_line":"        self.assertNotEmpty(fetched_projects)"},{"line_number":65,"context_line":"        for project in fetched_projects:"},{"line_number":66,"context_line":"            self.assertEqual(self.p3[\u0027parent_id\u0027], project[\u0027parent_id\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @decorators.idempotent_id(\u00270fe7a334-675a-4509-b00e-1c4b95d5dae8\u0027)"},{"line_number":69,"context_line":"    def test_list_projects_with_enabled(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f68b6366","line":66,"range":{"start_line":66,"start_character":34,"end_line":66,"end_character":36},"in_reply_to":"5f7c97a3_9656af05","updated":"2018-07-11 21:18:42.000000000","message":"Done","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5ef6e6dd4d0dcf0a95d3eb878bbcb7007c888820","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        cls.domain_id \u003d CONF.identity.default_domain_id"},{"line_number":85,"context_line":"        cls.project_ids \u003d list()"},{"line_number":86,"context_line":"        cls.p1_name \u003d cls.os_primary.credentials.project_name"},{"line_number":87,"context_line":"        cls.p1 \u003d cls.projects_client.list_projects("},{"line_number":88,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":89,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d6fe6703","line":88,"range":{"start_line":87,"start_character":17,"end_line":88,"end_character":56},"updated":"2018-07-11 21:11:23.000000000","message":"nit: It would be cleaner to just do a cls.projects_client.show_project(name\u003dp1_name)[\u0027project\u0027] here","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"15be87438e60a8e2ffd8f87202c706add2f47fae","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        cls.domain_id \u003d CONF.identity.default_domain_id"},{"line_number":85,"context_line":"        cls.project_ids \u003d list()"},{"line_number":86,"context_line":"        cls.p1_name \u003d cls.os_primary.credentials.project_name"},{"line_number":87,"context_line":"        cls.p1 \u003d cls.projects_client.list_projects("},{"line_number":88,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":89,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_56d4974b","line":88,"range":{"start_line":87,"start_character":17,"end_line":88,"end_character":56},"in_reply_to":"5f7c97a3_d6fe6703","updated":"2018-07-11 21:18:42.000000000","message":"Done","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5ef6e6dd4d0dcf0a95d3eb878bbcb7007c888820","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        cls.p1_name \u003d cls.os_primary.credentials.project_name"},{"line_number":87,"context_line":"        cls.p1 \u003d cls.projects_client.list_projects("},{"line_number":88,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":89,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":92,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_560a571e","line":89,"range":{"start_line":89,"start_character":31,"end_line":89,"end_character":68},"updated":"2018-07-11 21:11:23.000000000","message":"Could also be cls.p1[\u0027id\u0027]","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"15be87438e60a8e2ffd8f87202c706add2f47fae","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        cls.p1_name \u003d cls.os_primary.credentials.project_name"},{"line_number":87,"context_line":"        cls.p1 \u003d cls.projects_client.list_projects("},{"line_number":88,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":89,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":92,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f6e0432a","line":89,"range":{"start_line":89,"start_character":31,"end_line":89,"end_character":68},"in_reply_to":"5f7c97a3_560a571e","updated":"2018-07-11 21:18:42.000000000","message":"Done","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5ef6e6dd4d0dcf0a95d3eb878bbcb7007c888820","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":89,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":92,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":93,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_bb14f451","line":92,"range":{"start_line":91,"start_character":17,"end_line":92,"end_character":52},"updated":"2018-07-11 21:11:23.000000000","message":"nit: It would be cleaner to just do a cls.projects_client.show_project(name\u003dp2_name)[\u0027project\u0027] here","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"15be87438e60a8e2ffd8f87202c706add2f47fae","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            params\u003d{\u0027name\u0027: cls.p1_name})[\u0027projects\u0027][0]"},{"line_number":89,"context_line":"        cls.project_ids.append(cls.os_primary.credentials.project_id)"},{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":92,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":93,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_16de1f6a","line":92,"range":{"start_line":91,"start_character":17,"end_line":92,"end_character":52},"in_reply_to":"5f7c97a3_bb14f451","updated":"2018-07-11 21:18:42.000000000","message":"Done","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5ef6e6dd4d0dcf0a95d3eb878bbcb7007c888820","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":92,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":93,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"},{"line_number":96,"context_line":"    def test_list_projects(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f616034b","line":93,"range":{"start_line":93,"start_character":31,"end_line":93,"end_character":66},"updated":"2018-07-11 21:11:23.000000000","message":"Could also be cls.p2[\u0027id\u0027]","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"15be87438e60a8e2ffd8f87202c706add2f47fae","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        p2_name \u003d cls.os_admin.credentials.project_name"},{"line_number":91,"context_line":"        cls.p2 \u003d cls.projects_client.list_projects("},{"line_number":92,"context_line":"            params\u003d{\u0027name\u0027: p2_name})[\u0027projects\u0027][0]"},{"line_number":93,"context_line":"        cls.project_ids.append(cls.os_admin.credentials.project_id)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"},{"line_number":96,"context_line":"    def test_list_projects(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_b6cc0bbf","line":93,"range":{"start_line":93,"start_character":31,"end_line":93,"end_character":66},"in_reply_to":"5f7c97a3_f616034b","updated":"2018-07-11 21:18:42.000000000","message":"Done","commit_id":"81624150be1397dde74dd050e0d14643269dfb3a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9cbd6a2ecf46854704dbda0e69805191ed161204","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        cls.addClassResourceCleanup(cls.projects_client.delete_project,"},{"line_number":49,"context_line":"                                    cls.p1[\u0027id\u0027])"},{"line_number":50,"context_line":"        # Create a new project (p2) using p1 as parent project"},{"line_number":51,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":52,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":53,"context_line":"            cls.p2_name, parent_id\u003dcls.p1[\u0027id\u0027],"},{"line_number":54,"context_line":"            domain_id\u003dcls.domain[\u0027id\u0027])[\u0027project\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_bce149d2","line":51,"updated":"2018-07-12 01:08:21.000000000","message":"This is throwing the following error: cannot create a project in a branch containing a disabled project\n\nBecause a child project cannot be created from a disabled parent project -- but I\u0027d imagine you can create a disabled child project from an enabled parent project.","commit_id":"b4cc5fad17d3faf9aa9264b893132c6c446c9ca6"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f0f805895b5c02f9000318f5ada74cf53f093743","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                                    cls.p2[\u0027id\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @decorators.idempotent_id(\u00276edc66f5-2941-4a17-9526-4073311c1fac\u0027)"},{"line_number":58,"context_line":"    def test_list_projects_with_parent(self):"},{"line_number":59,"context_line":"        # List projects with parent"},{"line_number":60,"context_line":"        params \u003d {\u0027parent_id\u0027: self.p2[\u0027parent_id\u0027]}"},{"line_number":61,"context_line":"        fetched_projects \u003d self.projects_client.list_projects("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_90b0db42","line":58,"updated":"2018-07-12 18:04:41.000000000","message":"++ this makes sense why it\u0027s still here since tempest projects aren\u0027t child projects by default so need to create projects dynamically","commit_id":"b9024cd3cd934eac518791b53c04b0386798cbdb"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f0f805895b5c02f9000318f5ada74cf53f093743","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self._list_projects_with_params("},{"line_number":106,"context_line":"            [self.p1], [self.p2], {\u0027name\u0027: self.p1_name}, \u0027name\u0027)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @decorators.idempotent_id(\u0027fab13f3c-f6a6-4b9f-829b-d32fd44fdf10\u0027)"},{"line_number":109,"context_line":"    def test_list_projects_with_domains(self):"},{"line_number":110,"context_line":"        # List projects with domain"},{"line_number":111,"context_line":"        key \u003d \u0027domain_id\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_f0782f7f","line":108,"updated":"2018-07-12 18:04:41.000000000","message":"++ has same idempotent_id","commit_id":"b9024cd3cd934eac518791b53c04b0386798cbdb"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"98fecc135bd942662e8c2e3b2615b9890b3f937b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2 \u003d cls.projects_client.show_project("},{"line_number":99,"context_line":"            cls.os_admin.credentials.project_id)[\u0027project\u0027]"},{"line_number":100,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_ce911552","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":59},"updated":"2018-08-02 04:09:02.000000000","message":"This is causing a failure here: http://logs.openstack.org/76/523976/15/experimental/legacy-tempest-dsvm-full-test-accounts/2bfb65d/job-output.txt.gz#_2018-08-01_07_27_48_132873\n\nThis project doesn\u0027t exist here. I would suggest using credentials \u003d [\u0027primary\u0027, \u0027alt\u0027] and changing this to os_alt project.","commit_id":"dcad460979419a0199702d852553e569e58b1adf"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"500cd84ec361bacf1189d3bc057cda4023e69412","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2 \u003d cls.projects_client.show_project("},{"line_number":99,"context_line":"            cls.os_admin.credentials.project_id)[\u0027project\u0027]"},{"line_number":100,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_97231613","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":59},"in_reply_to":"5f7c97a3_4634f247","updated":"2018-08-03 05:24:01.000000000","message":"We can\u0027t move to non-admin dir because list projects is admin-only: https://github.com/openstack/keystone/blob/ea774f78e05b37567ada8a0cb6956f9482d24f0a/keystone/common/policies/project.py#L37","commit_id":"dcad460979419a0199702d852553e569e58b1adf"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8f5cacc81994066f51f97b712d0e36abed3b07d2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2 \u003d cls.projects_client.show_project("},{"line_number":99,"context_line":"            cls.os_admin.credentials.project_id)[\u0027project\u0027]"},{"line_number":100,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_4634f247","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":59},"in_reply_to":"5f7c97a3_4f3891ec","updated":"2018-08-03 00:47:22.000000000","message":"thanks nice catch, i missed to catch the job failure. \n\nSame case can be with alt account where there is no alt account mentioned in account file (only 1 creds). I will say we should create a project dynamically for p2 and as this test will not depends on admin cred we need to move this to non-admin dir.","commit_id":"dcad460979419a0199702d852553e569e58b1adf"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"1bd86b5e98ee82f47e82d4e9d064cd86790c2735","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2 \u003d cls.projects_client.show_project("},{"line_number":99,"context_line":"            cls.os_admin.credentials.project_id)[\u0027project\u0027]"},{"line_number":100,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_19e0cb25","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":59},"in_reply_to":"5f7c97a3_7b917c45","updated":"2018-08-15 14:32:11.000000000","message":"looks like non_admin_projects_client does not have permissions to create a project according to policy?\nDetails: {u\u0027code\u0027: 403, u\u0027message\u0027: u\u0027You are not authorized to perform the requested action: identity:create_project.\u0027, u\u0027title\u0027: u\u0027Forbidden\u0027}","commit_id":"dcad460979419a0199702d852553e569e58b1adf"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9fb504860e35e9c6c9cd53ef2b5841ca7f6b281c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2 \u003d cls.projects_client.show_project("},{"line_number":99,"context_line":"            cls.os_admin.credentials.project_id)[\u0027project\u0027]"},{"line_number":100,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_7b917c45","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":59},"in_reply_to":"5f7c97a3_97231613","updated":"2018-08-03 14:06:02.000000000","message":"ill work on making p2 a dynamic project.","commit_id":"dcad460979419a0199702d852553e569e58b1adf"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"e3ce5302b1fa18c627d2b6d1ffe11235d40a2bb4","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2 \u003d cls.projects_client.show_project("},{"line_number":99,"context_line":"            cls.os_admin.credentials.project_id)[\u0027project\u0027]"},{"line_number":100,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00271d830662-22ad-427c-8c3e-4ec854b0af44\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_4f3891ec","line":99,"range":{"start_line":98,"start_character":8,"end_line":99,"end_character":59},"in_reply_to":"5f7c97a3_ce911552","updated":"2018-08-02 17:21:06.000000000","message":"Scratch that, this inherits from admin base class, so this could be a deployment issue with test-accounts job in Zuul, not sure","commit_id":"dcad460979419a0199702d852553e569e58b1adf"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3b94604897a4ee7d4b53f9712cc4ea91044baf40","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":99,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":100,"context_line":"            cls.p2_name, domain_id\u003dcls.domain_id)[\u0027project\u0027]"},{"line_number":101,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_241bd373","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":53},"updated":"2018-08-18 15:20:25.000000000","message":"nit: This doesn\u0027t need to be a class variable.","commit_id":"df1a317f63e4ed51e76a94f585b46b6c68c1a442"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"792626fd54dc18dbb58038a23efb3dfbfd67802a","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":99,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":100,"context_line":"            cls.p2_name, domain_id\u003dcls.domain_id)[\u0027project\u0027]"},{"line_number":101,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_5c0b5821","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":53},"in_reply_to":"3f79a3b5_241bd373","updated":"2018-09-24 17:24:00.000000000","message":"Done","commit_id":"df1a317f63e4ed51e76a94f585b46b6c68c1a442"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"7eaec6a25eca78b59505ce1ecbc80e026cbd3ce8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cls.p1 \u003d cls.projects_client.show_project("},{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":99,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":100,"context_line":"            cls.p2_name, domain_id\u003dcls.domain_id)[\u0027project\u0027]"},{"line_number":101,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_3fd74b52","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":53},"in_reply_to":"3f79a3b5_241bd373","updated":"2018-08-20 13:00:45.000000000","message":"I got a -1 on this before because it wasn\u0027t a class variable \"for consistency\" reasons in a similar class. I vote for it being a class variable only if it needs to, not for consistency reasons.","commit_id":"df1a317f63e4ed51e76a94f585b46b6c68c1a442"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3b94604897a4ee7d4b53f9712cc4ea91044baf40","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":99,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":100,"context_line":"            cls.p2_name, domain_id\u003dcls.domain_id)[\u0027project\u0027]"},{"line_number":101,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_44184f74","line":99,"range":{"start_line":99,"start_character":17,"end_line":99,"end_character":52},"updated":"2018-08-18 15:20:25.000000000","message":"This requires a cleanup via addClassResourceCleanup. See L60 for an example.","commit_id":"df1a317f63e4ed51e76a94f585b46b6c68c1a442"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"792626fd54dc18dbb58038a23efb3dfbfd67802a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":99,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":100,"context_line":"            cls.p2_name, domain_id\u003dcls.domain_id)[\u0027project\u0027]"},{"line_number":101,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_bc238caa","line":99,"range":{"start_line":99,"start_character":17,"end_line":99,"end_character":52},"in_reply_to":"3f79a3b5_44184f74","updated":"2018-09-24 17:24:00.000000000","message":"Done","commit_id":"df1a317f63e4ed51e76a94f585b46b6c68c1a442"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"7eaec6a25eca78b59505ce1ecbc80e026cbd3ce8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            cls.os_primary.credentials.project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        cls.project_ids.append(cls.p1[\u0027id\u0027])"},{"line_number":98,"context_line":"        cls.p2_name \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":99,"context_line":"        cls.p2 \u003d cls.projects_client.create_project("},{"line_number":100,"context_line":"            cls.p2_name, domain_id\u003dcls.domain_id)[\u0027project\u0027]"},{"line_number":101,"context_line":"        cls.project_ids.append(cls.p2[\u0027id\u0027])"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_dfe5f739","line":99,"range":{"start_line":99,"start_character":17,"end_line":99,"end_character":52},"in_reply_to":"3f79a3b5_44184f74","updated":"2018-08-20 13:00:45.000000000","message":"yeah sorry.","commit_id":"df1a317f63e4ed51e76a94f585b46b6c68c1a442"}],"tempest/api/identity/base.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"0790aa355c5af15020f3b98c9c73a149bf0c30c5","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            self.roles_client.delete_role, role[\u0027id\u0027])"},{"line_number":96,"context_line":"        return role"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def list_projects_with_params(self, included, excluded, params, key):"},{"line_number":99,"context_line":"        # Validate that projects in ``included`` belongs to the projects"},{"line_number":100,"context_line":"        # returned that match ``params`` but not projects in ``excluded``"},{"line_number":101,"context_line":"        if \u0027admin\u0027 in self.credentials:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_67792ac6","line":98,"updated":"2018-08-14 21:29:41.000000000","message":"I wasn\u0027t too happy putting this here, especially with the branching on admin vs non-admin credentials, but alternatively, I think we may want to revert the refactor (mentioned in the commit message) and include variations of this small method in both classes instead.","commit_id":"fc640c849cb5be155b339510788e7d7251109a99"}]}
