)]}'
{"keystone/assignment/controllers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4ade12f1c6578745e71255c3bda7668a5b829d59","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        super(ProjectAssignmentV3, self).__init__()"},{"line_number":268,"context_line":"        self.get_member_from_driver \u003d self.resource_api.get_project"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @controller.filterprotected(\u0027enabled\u0027, \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":271,"context_line":"    def list_user_projects(self, context, filters, user_id):"},{"line_number":272,"context_line":"        hints \u003d ProjectAssignmentV3.build_driver_hints(context, filters)"},{"line_number":273,"context_line":"        refs \u003d self.assignment_api.list_projects_for_user(user_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_5820c4f7","line":270,"updated":"2015-06-01 21:58:01.000000000","message":"keep these in alphabetical order.","commit_id":"b579f7f98abb12defe55eb144220a3d14b037628"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"679e08ba91dbb202164601c623b61deb7e001d2d","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        super(ProjectAssignmentV3, self).__init__()"},{"line_number":268,"context_line":"        self.get_member_from_driver \u003d self.resource_api.get_project"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @controller.filterprotected(\u0027domain_id\u0027, \u0027enabled\u0027, \u0027name\u0027)"},{"line_number":271,"context_line":"    def list_user_projects(self, context, filters, user_id):"},{"line_number":272,"context_line":"        hints \u003d ProjectAssignmentV3.build_driver_hints(context, filters)"},{"line_number":273,"context_line":"        refs \u003d self.assignment_api.list_projects_for_user(user_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_80eab872","line":270,"updated":"2015-08-31 14:09:35.000000000","message":"this needs to be tested.","commit_id":"74d3c93a2b85a1505f974e7b9096935db5d8bd58"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"99c505fa9d287941f0217786b6ba057de4e221f5","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        super(ProjectAssignmentV3, self).__init__()"},{"line_number":268,"context_line":"        self.get_member_from_driver \u003d self.resource_api.get_project"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @controller.filterprotected(\u0027domain_id\u0027, \u0027enabled\u0027, \u0027name\u0027)"},{"line_number":271,"context_line":"    def list_user_projects(self, context, filters, user_id):"},{"line_number":272,"context_line":"        hints \u003d ProjectAssignmentV3.build_driver_hints(context, filters)"},{"line_number":273,"context_line":"        refs \u003d self.assignment_api.list_projects_for_user(user_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_5a7464fc","line":270,"in_reply_to":"da20952f_80eab872","updated":"2015-11-20 02:02:07.000000000","message":"++","commit_id":"74d3c93a2b85a1505f974e7b9096935db5d8bd58"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"761ac7a158d9dcaeb0490ecb091e8a21d649604f","unresolved":false,"context_lines":[{"line_number":2773,"context_line":"        self.roles \u003d []"},{"line_number":2774,"context_line":"        self.users \u003d []"},{"line_number":2775,"context_line":""},{"line_number":2776,"context_line":"        # Create 3 sets of domain, roles, projects, and users to demonstrate"},{"line_number":2777,"context_line":"        # the right user\u0027s data is loaded and only projects they can access"},{"line_number":2778,"context_line":"        # are returned."},{"line_number":2779,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_8f723a48","line":2776,"range":{"start_line":2776,"start_character":10,"end_line":2776,"end_character":33},"updated":"2016-03-04 22:21:15.000000000","message":"why create 3 of them if you are going to perform the exact same call? If you are not creating a more complex user/role/project/domain relationship, think 1 is enough","commit_id":"6b0efbce1dbd612efb40459ffb27556ccbb3ba13"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"761ac7a158d9dcaeb0490ecb091e8a21d649604f","unresolved":false,"context_lines":[{"line_number":2825,"context_line":"            # There are no disabled projects"},{"line_number":2826,"context_line":"            url \u003d \u0027/users/%s/projects?enabled\u003dTrue\u0027 % user[\u0027id\u0027]"},{"line_number":2827,"context_line":"            result \u003d self.get(url, auth\u003dauth)"},{"line_number":2828,"context_line":"            self.assertEqual(1, len(result.json[\u0027projects\u0027]))"},{"line_number":2829,"context_line":""},{"line_number":2830,"context_line":"    def test_list_disabled(self):"},{"line_number":2831,"context_line":"        for i in range(len(self.users)):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_5469e924","line":2828,"range":{"start_line":2828,"start_character":12,"end_line":2828,"end_character":61},"updated":"2016-03-04 22:21:15.000000000","message":"I think that comparing just the returned length is not enough here, you need to make sure that the project which the user has an assignment was returned.\n\n(same for the tests below)","commit_id":"6b0efbce1dbd612efb40459ffb27556ccbb3ba13"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6540a9ec54f77767dcf9616ce86578f56b835799","unresolved":false,"context_lines":[{"line_number":2765,"context_line":"    \"\"\"Tests for /users/\u003cuser\u003e/projects\"\"\""},{"line_number":2766,"context_line":""},{"line_number":2767,"context_line":"    def load_sample_data(self):"},{"line_number":2768,"context_line":"        # do not load base class\u0027s data, keep it focused on the tests"},{"line_number":2769,"context_line":""},{"line_number":2770,"context_line":"        self.auths \u003d []"},{"line_number":2771,"context_line":"        self.domains \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_0377093b","line":2768,"updated":"2016-03-07 20:29:14.000000000","message":"nice!","commit_id":"3425c1fffe9cb40c759ccec516483e06225d65cd"}],"keystone/tests/unit/test_v3_protection.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fd7a9e3dff7435e6b3303e3c0cb7dd190715b18b","unresolved":false,"context_lines":[{"line_number":954,"context_line":"        # other than its own domain or not"},{"line_number":955,"context_line":"        self._test_project_management(self.domainA[\u0027id\u0027])"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"    def test_list_user_projects(self):"},{"line_number":958,"context_line":"        self.auth \u003d self.build_authentication_request("},{"line_number":959,"context_line":"            user_id\u003dself.just_a_user[\u0027id\u0027],"},{"line_number":960,"context_line":"            password\u003dself.just_a_user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_f59c215f","line":957,"range":{"start_line":957,"start_character":8,"end_line":957,"end_character":38},"updated":"2016-03-02 14:24:59.000000000","message":"don\u0027t think this is the correct place for this test, it should be placed in test_v3_assignment (since it is related to user assignments in projects)","commit_id":"32ca58c9786d481cc21a7481d55730dea42b3f64"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1d3cdc8fa7a241b92e5bd1656b651e3f5574a1eb","unresolved":false,"context_lines":[{"line_number":954,"context_line":"        # other than its own domain or not"},{"line_number":955,"context_line":"        self._test_project_management(self.domainA[\u0027id\u0027])"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"    def test_list_user_projects(self):"},{"line_number":958,"context_line":"        self.auth \u003d self.build_authentication_request("},{"line_number":959,"context_line":"            user_id\u003dself.just_a_user[\u0027id\u0027],"},{"line_number":960,"context_line":"            password\u003dself.just_a_user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_cac2c633","line":957,"range":{"start_line":957,"start_character":8,"end_line":957,"end_character":38},"in_reply_to":"7af24918_ddb01546","updated":"2016-03-03 15:55:02.000000000","message":"I agree with moving the test since this isn\u0027t about policy. If the setUp machinery doesn\u0027t exist there then we should make a new test class and include it.","commit_id":"32ca58c9786d481cc21a7481d55730dea42b3f64"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"cc38bcdb56b9278a022eefbd4e7e9796b9cb9a75","unresolved":false,"context_lines":[{"line_number":954,"context_line":"        # other than its own domain or not"},{"line_number":955,"context_line":"        self._test_project_management(self.domainA[\u0027id\u0027])"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"    def test_list_user_projects(self):"},{"line_number":958,"context_line":"        self.auth \u003d self.build_authentication_request("},{"line_number":959,"context_line":"            user_id\u003dself.just_a_user[\u0027id\u0027],"},{"line_number":960,"context_line":"            password\u003dself.just_a_user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_ddb01546","line":957,"range":{"start_line":957,"start_character":8,"end_line":957,"end_character":38},"in_reply_to":"7af24918_f59c215f","updated":"2016-03-02 18:52:51.000000000","message":"I put it here because I did not see any matching URLs in the assignment file. All of the machinery was in place for the test here.\n\nI can move it if that is the consensus.","commit_id":"32ca58c9786d481cc21a7481d55730dea42b3f64"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fd7a9e3dff7435e6b3303e3c0cb7dd190715b18b","unresolved":false,"context_lines":[{"line_number":965,"context_line":"        self.assertEqual(1, len(result.json[\u0027projects\u0027]))"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        # There are no disabled projects"},{"line_number":968,"context_line":"        url \u003d \u0027/users/%s/projects?enabled\u003dFalse\u0027 % self.just_a_user[\u0027id\u0027]"},{"line_number":969,"context_line":"        result \u003d self.get(url, auth\u003dself.auth)"},{"line_number":970,"context_line":"        self.assertEqual(0, len(result.json[\u0027projects\u0027]))"},{"line_number":971,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_b563b940","line":968,"range":{"start_line":968,"start_character":34,"end_line":968,"end_character":47},"updated":"2016-03-02 14:24:59.000000000","message":"according to the API spec, this is a key-only query param: https://github.com/openstack/keystone-specs/blob/master/api/v3/identity-api-v3.rst#list-user-projects - I guess we have a bug in the spec?","commit_id":"32ca58c9786d481cc21a7481d55730dea42b3f64"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"cc38bcdb56b9278a022eefbd4e7e9796b9cb9a75","unresolved":false,"context_lines":[{"line_number":965,"context_line":"        self.assertEqual(1, len(result.json[\u0027projects\u0027]))"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        # There are no disabled projects"},{"line_number":968,"context_line":"        url \u003d \u0027/users/%s/projects?enabled\u003dFalse\u0027 % self.just_a_user[\u0027id\u0027]"},{"line_number":969,"context_line":"        result \u003d self.get(url, auth\u003dself.auth)"},{"line_number":970,"context_line":"        self.assertEqual(0, len(result.json[\u0027projects\u0027]))"},{"line_number":971,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_5d836556","line":968,"range":{"start_line":968,"start_character":34,"end_line":968,"end_character":47},"in_reply_to":"7af24918_b563b940","updated":"2016-03-02 18:52:51.000000000","message":"My bad, I misread it.","commit_id":"32ca58c9786d481cc21a7481d55730dea42b3f64"}]}
