)]}'
{"keystone/tests/test_v3_assignment.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"eeb47abe26b92f082af6a673a06402e3b24a0c17","unresolved":false,"context_lines":[{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"    def test_inherited_effective_group_project_assignment(self):"},{"line_number":1443,"context_line":"        # Does not Apply"},{"line_number":1444,"context_line":"        pass"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"    def test_inherited_effective_group_domain_assignment(self):"},{"line_number":1447,"context_line":"        self._test_inherited_effective_assignment(project_id\u003dself.project_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_62a31bb2","line":1444,"updated":"2014-11-26 00:20:21.000000000","message":"Since this test does not apply, the server should return 403?","commit_id":"55b9c2258f6c1e1ae97688ac5f1fd2533cdddc23"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    query_params \u003d \u0027?effective\u0027 if effective else \u0027\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    for k, v in filters.iteritems():"},{"line_number":30,"context_line":"        query_params +\u003d \u0027?\u0027 if not query_params else \u0027\u0026\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        if k \u003d\u003d \u0027inherited_to_projects\u0027:"},{"line_number":33,"context_line":"            query_params +\u003d \u0027scope.OS-INHERIT:inherited_to\u003dprojects\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_bb9e21b6","line":30,"updated":"2015-01-16 14:04:19.000000000","message":"nice","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"    def config_overrides(self):"},{"line_number":1404,"context_line":"        super(RoleAssignmentBaseTestCase, self).config_overrides()"},{"line_number":1405,"context_line":"        self.config_fixture.config(group\u003d\u0027os_inherit\u0027, enabled\u003dTrue)"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def load_sample_data(self):"},{"line_number":1408,"context_line":"        \"\"\"Creates sample data to be used on tests"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_5b19bd78","line":1405,"updated":"2015-01-16 14:04:19.000000000","message":"should this be active in a base class? Since it is not the default behavior, maybe this need to be inactive for the base class.","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"    def config_overrides(self):"},{"line_number":1404,"context_line":"        super(RoleAssignmentBaseTestCase, self).config_overrides()"},{"line_number":1405,"context_line":"        self.config_fixture.config(group\u003d\u0027os_inherit\u0027, enabled\u003dTrue)"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def load_sample_data(self):"},{"line_number":1408,"context_line":"        \"\"\"Creates sample data to be used on tests"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_3e54d520","line":1405,"in_reply_to":"3a961159_5b19bd78","updated":"2015-01-16 20:43:57.000000000","message":"It is needed by RoleAssignmentFailureTestCase and RoleAssignmentInheritedTestCase.\n\nI will set this config in both, makes more sense. ++","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"        self.config_fixture.config(group\u003d\u0027os_inherit\u0027, enabled\u003dTrue)"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def load_sample_data(self):"},{"line_number":1408,"context_line":"        \"\"\"Creates sample data to be used on tests"},{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"        Created data are i) a role and ii) a domain containing: a project"},{"line_number":1411,"context_line":"        hierarchy and 3 users within 3 groups."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_bb29c18a","line":1408,"updated":"2015-01-16 14:04:19.000000000","message":"nit: .","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"        self.config_fixture.config(group\u003d\u0027os_inherit\u0027, enabled\u003dTrue)"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def load_sample_data(self):"},{"line_number":1408,"context_line":"        \"\"\"Creates sample data to be used on tests"},{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"        Created data are i) a role and ii) a domain containing: a project"},{"line_number":1411,"context_line":"        hierarchy and 3 users within 3 groups."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_9e34e9fb","line":1408,"in_reply_to":"3a961159_bb29c18a","updated":"2015-01-16 20:43:57.000000000","message":"Done","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"            return sub_project_ids"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"        # Create a domain"},{"line_number":1428,"context_line":"        self.smp_domain \u003d self.new_domain_ref()"},{"line_number":1429,"context_line":"        self.smp_domain_id \u003d self.smp_domain[\u0027id\u0027]"},{"line_number":1430,"context_line":"        self.assignment_api.create_domain(self.smp_domain_id, self.smp_domain)"},{"line_number":1431,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_3b3cf1be","line":1428,"updated":"2015-01-16 14:04:19.000000000","message":"smp?","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"            return sub_project_ids"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"        # Create a domain"},{"line_number":1428,"context_line":"        self.smp_domain \u003d self.new_domain_ref()"},{"line_number":1429,"context_line":"        self.smp_domain_id \u003d self.smp_domain[\u0027id\u0027]"},{"line_number":1430,"context_line":"        self.assignment_api.create_domain(self.smp_domain_id, self.smp_domain)"},{"line_number":1431,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_c70ea43c","line":1428,"in_reply_to":"3a961159_3b3cf1be","updated":"2015-01-16 20:43:57.000000000","message":"It should mean sample.\nI will improve naming.","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1468,"context_line":""},{"line_number":1469,"context_line":"    def get_role_assignments(self, expected_status\u003d200,"},{"line_number":1470,"context_line":"                             effective\u003dFalse, **filters):"},{"line_number":1471,"context_line":"        \"\"\"Returns the result from querying role assignment API + queried URL"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"        Calls GET /v3/role_assignments?\u003cparams\u003e and returns its result, where"},{"line_number":1474,"context_line":"        \u003cparams\u003e is the HTTP query parameters form of effective option plus"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_1b6815b9","line":1471,"updated":"2015-01-16 14:04:19.000000000","message":"nit: .","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1468,"context_line":""},{"line_number":1469,"context_line":"    def get_role_assignments(self, expected_status\u003d200,"},{"line_number":1470,"context_line":"                             effective\u003dFalse, **filters):"},{"line_number":1471,"context_line":"        \"\"\"Returns the result from querying role assignment API + queried URL"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"        Calls GET /v3/role_assignments?\u003cparams\u003e and returns its result, where"},{"line_number":1474,"context_line":"        \u003cparams\u003e is the HTTP query parameters form of effective option plus"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_de11115d","line":1471,"in_reply_to":"3a961159_1b6815b9","updated":"2015-01-16 20:43:57.000000000","message":"Done","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1479,"context_line":""},{"line_number":1480,"context_line":"        \"\"\""},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"        query_url \u003d self.get_role_assignments_query_url(effective, **filters)"},{"line_number":1483,"context_line":"        response \u003d self.get(query_url, expected_status\u003dexpected_status)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"        return (response, query_url)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_fbf26903","line":1482,"updated":"2015-01-16 14:04:19.000000000","message":"why do you need get_role_assignments_query_url() method since it just pass to _build_role_assignment_query_url() method? Just to have \"effective\" set to False by default?","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1479,"context_line":""},{"line_number":1480,"context_line":"        \"\"\""},{"line_number":1481,"context_line":""},{"line_number":1482,"context_line":"        query_url \u003d self.get_role_assignments_query_url(effective, **filters)"},{"line_number":1483,"context_line":"        response \u003d self.get(query_url, expected_status\u003dexpected_status)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"        return (response, query_url)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_61140041","line":1482,"in_reply_to":"3a961159_fbf26903","updated":"2015-01-16 20:43:57.000000000","message":"You got the idea at line 1715.","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1498,"context_line":"        return _build_role_assignment_query_url(effective, **filters)"},{"line_number":1499,"context_line":""},{"line_number":1500,"context_line":""},{"line_number":1501,"context_line":"class RoleAssignmentFailureTestCase(RoleAssignmentBaseTestCase):"},{"line_number":1502,"context_line":"    \"\"\"Class for testing invalid query params on /v3/role_assignments API."},{"line_number":1503,"context_line":""},{"line_number":1504,"context_line":"    Querying domain and project, or user and group results in a HTTP 400, since"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_1bf9f5c7","line":1501,"updated":"2015-01-16 14:04:19.000000000","message":"nice!","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"        According to the provided filters, this method:"},{"line_number":1550,"context_line":"        - creates a new role assignment;"},{"line_number":1551,"context_line":"        - asserts that list role assignments API reponds conrrectly;"},{"line_number":1552,"context_line":"        - deletes the created role assignment."},{"line_number":1553,"context_line":""},{"line_number":1554,"context_line":"        :param filters: filters to be considered when listing role assignments."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_fb8189fa","line":1551,"updated":"2015-01-16 14:04:19.000000000","message":"nit: s/conrrectly/correctly","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"        According to the provided filters, this method:"},{"line_number":1550,"context_line":"        - creates a new role assignment;"},{"line_number":1551,"context_line":"        - asserts that list role assignments API reponds conrrectly;"},{"line_number":1552,"context_line":"        - deletes the created role assignment."},{"line_number":1553,"context_line":""},{"line_number":1554,"context_line":"        :param filters: filters to be considered when listing role assignments."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_a129888a","line":1551,"in_reply_to":"3a961159_fb8189fa","updated":"2015-01-16 20:43:57.000000000","message":"Done","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1559,"context_line":""},{"line_number":1560,"context_line":"        # Get info about existing role assignments"},{"line_number":1561,"context_line":"        response, query_url \u003d self.get_role_assignments(**filters)"},{"line_number":1562,"context_line":"        base_length \u003d len(response.result.get(\u0027role_assignments\u0027))"},{"line_number":1563,"context_line":""},{"line_number":1564,"context_line":"        # Create new role assignment"},{"line_number":1565,"context_line":"        self.configure_assignment(**filters)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_9bdde516","line":1562,"updated":"2015-01-16 14:04:19.000000000","message":"response_length?","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1559,"context_line":""},{"line_number":1560,"context_line":"        # Get info about existing role assignments"},{"line_number":1561,"context_line":"        response, query_url \u003d self.get_role_assignments(**filters)"},{"line_number":1562,"context_line":"        base_length \u003d len(response.result.get(\u0027role_assignments\u0027))"},{"line_number":1563,"context_line":""},{"line_number":1564,"context_line":"        # Create new role assignment"},{"line_number":1565,"context_line":"        self.configure_assignment(**filters)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_c11cd468","line":1562,"in_reply_to":"3a961159_9bdde516","updated":"2015-01-16 20:43:57.000000000","message":"response_length could be confusing, since this var is used only at line 1576, when another response is already got (line 1573)\n\nwill change it to:\n\n    existing_assignments \u003d response.result.get(\u0027role_assignments\u0027)\n\nand use\n\n    len(existing_assignments)\n\nat line 1576","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"        # Delete created role assignment"},{"line_number":1585,"context_line":"        self.configure_assignment(cleanup\u003dTrue, **filters)"},{"line_number":1586,"context_line":""},{"line_number":1587,"context_line":"    def configure_assignment(self, cleanup\u003dFalse, **attributes):"},{"line_number":1588,"context_line":"        \"\"\"Configure a role assignment, according to provided attributes."},{"line_number":1589,"context_line":""},{"line_number":1590,"context_line":"        Creates or deletes a role assignment, according to provided attributes."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_5b1c5dc2","line":1587,"updated":"2015-01-16 14:04:19.000000000","message":"I\u0027d separate this method into 2:\n  delete_assignment\n  create_assignment\n\nAnd would extract the first lines before \"if cleanup:\" to a method.","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"        # Delete created role assignment"},{"line_number":1585,"context_line":"        self.configure_assignment(cleanup\u003dTrue, **filters)"},{"line_number":1586,"context_line":""},{"line_number":1587,"context_line":"    def configure_assignment(self, cleanup\u003dFalse, **attributes):"},{"line_number":1588,"context_line":"        \"\"\"Configure a role assignment, according to provided attributes."},{"line_number":1589,"context_line":""},{"line_number":1590,"context_line":"        Creates or deletes a role assignment, according to provided attributes."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_013a5ccc","line":1587,"in_reply_to":"3a961159_5b1c5dc2","updated":"2015-01-16 20:43:57.000000000","message":"++","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"            role_id\u003dself.smp_role_id, **filters)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"class RoleAssignmentInheritedTestCase(RoleAssignmentDirectTestCase):"},{"line_number":1687,"context_line":"    \"\"\"Class for testing inherited assignments on /v3/role_assignments API."},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    Inherited assignments on a domain or project have no effect on them"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_5b4a9dad","line":1686,"updated":"2015-01-16 14:04:19.000000000","message":"would enable the inherited flag just here.","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"            role_id\u003dself.smp_role_id, **filters)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"class RoleAssignmentInheritedTestCase(RoleAssignmentDirectTestCase):"},{"line_number":1687,"context_line":"    \"\"\"Class for testing inherited assignments on /v3/role_assignments API."},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    Inherited assignments on a domain or project have no effect on them"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_213598da","line":1686,"in_reply_to":"3a961159_5b4a9dad","updated":"2015-01-16 20:43:57.000000000","message":"Done","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1687,"context_line":"    \"\"\"Class for testing inherited assignments on /v3/role_assignments API."},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    Inherited assignments on a domain or project have no effect on them"},{"line_number":1690,"context_line":"    directly, but on their project hierarchy instead."},{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"    Tests on this class do not make assertions on the effect of inherited"},{"line_number":1693,"context_line":"    assignments, but in their representation and API filtering."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_7b459999","line":1690,"updated":"2015-01-16 14:04:19.000000000","message":"the last sentence is true for projects, but not for domains.","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1687,"context_line":"    \"\"\"Class for testing inherited assignments on /v3/role_assignments API."},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    Inherited assignments on a domain or project have no effect on them"},{"line_number":1690,"context_line":"    directly, but on their project hierarchy instead."},{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"    Tests on this class do not make assertions on the effect of inherited"},{"line_number":1693,"context_line":"    assignments, but in their representation and API filtering."}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_e1e630e6","line":1690,"in_reply_to":"3a961159_7b459999","updated":"2015-01-16 20:43:57.000000000","message":"Done","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"    \"\"\""},{"line_number":1714,"context_line":""},{"line_number":1715,"context_line":"    def get_role_assignments_query_url(self, effective\u003dTrue, **filters):"},{"line_number":1716,"context_line":"        \"\"\"Returns role assignments query URL according to provided params."},{"line_number":1717,"context_line":""},{"line_number":1718,"context_line":"        For test methods in this class, effetive will always be true. As in"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_7bdcb9e1","line":1715,"updated":"2015-01-16 14:04:19.000000000","message":"ahh, now I get why this method. Seems like the effective argument is redundant, since you can pass True / False directly (see comment below).","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"    \"\"\""},{"line_number":1714,"context_line":""},{"line_number":1715,"context_line":"    def get_role_assignments_query_url(self, effective\u003dTrue, **filters):"},{"line_number":1716,"context_line":"        \"\"\"Returns role assignments query URL according to provided params."},{"line_number":1717,"context_line":""},{"line_number":1718,"context_line":"        For test methods in this class, effetive will always be true. As in"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_5efd2108","line":1715,"in_reply_to":"3a961159_7bdcb9e1","updated":"2015-01-16 20:43:57.000000000","message":"Done","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1734,"context_line":"        query_filters.pop(\u0027domain_id\u0027, None)"},{"line_number":1735,"context_line":"        query_filters.pop(\u0027project_id\u0027, None)"},{"line_number":1736,"context_line":""},{"line_number":1737,"context_line":"        return _build_role_assignment_query_url(effective\u003dTrue,"},{"line_number":1738,"context_line":"                                                **query_filters)"},{"line_number":1739,"context_line":""},{"line_number":1740,"context_line":"    def list_expected_role_assignments(self, **filters):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_fbe7c9a8","line":1737,"updated":"2015-01-16 14:04:19.000000000","message":"you are not using the argument","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1734,"context_line":"        query_filters.pop(\u0027domain_id\u0027, None)"},{"line_number":1735,"context_line":"        query_filters.pop(\u0027project_id\u0027, None)"},{"line_number":1736,"context_line":""},{"line_number":1737,"context_line":"        return _build_role_assignment_query_url(effective\u003dTrue,"},{"line_number":1738,"context_line":"                                                **query_filters)"},{"line_number":1739,"context_line":""},{"line_number":1740,"context_line":"    def list_expected_role_assignments(self, **filters):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_c105b410","line":1737,"in_reply_to":"3a961159_fbe7c9a8","updated":"2015-01-16 20:43:57.000000000","message":"Done","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d6d249e68339073d661649c2fdb71d9713e40a70","unresolved":false,"context_lines":[{"line_number":1773,"context_line":"        # Get assignment link, to be put on \u0027links\u0027: {\u0027assignment\u0027: link}"},{"line_number":1774,"context_line":"        assignment_link \u003d _build_role_assignment_link(**filters)"},{"line_number":1775,"context_line":""},{"line_number":1776,"context_line":"        # Compute expected role assignments and their counts"},{"line_number":1777,"context_line":"        assignments, counts \u003d [], []"},{"line_number":1778,"context_line":"        for project_id in project_ids:"},{"line_number":1779,"context_line":"            filters[\u0027project_id\u0027] \u003d project_id"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_cd26d4b9","line":1776,"updated":"2015-01-16 14:04:19.000000000","message":"maybe use \"amount\" or \"quantity\" instead of \"counts\" here and in the other occurrences in the file.","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"557cf053516dd8a03c1c11f99295cefeb4013058","unresolved":false,"context_lines":[{"line_number":1773,"context_line":"        # Get assignment link, to be put on \u0027links\u0027: {\u0027assignment\u0027: link}"},{"line_number":1774,"context_line":"        assignment_link \u003d _build_role_assignment_link(**filters)"},{"line_number":1775,"context_line":""},{"line_number":1776,"context_line":"        # Compute expected role assignments and their counts"},{"line_number":1777,"context_line":"        assignments, counts \u003d [], []"},{"line_number":1778,"context_line":"        for project_id in project_ids:"},{"line_number":1779,"context_line":"            filters[\u0027project_id\u0027] \u003d project_id"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_922698b8","line":1776,"in_reply_to":"3a961159_cd26d4b9","updated":"2015-01-16 20:43:57.000000000","message":"Count is how it\u0027s called in the method that asserts it. [1]\nLet\u0027s see other people views.\n\n[1] \nhttps://github.com/openstack/keystone/blob/master/keystone/tests/test_v3.py#L1077-L1090","commit_id":"1763473842048ce0f39a3fb97f6fe95eb1834d2b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6fd17181b403e1a4503ae1d1266ffcf29c583393","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def _build_role_assignment_query_url(effective\u003dFalse, **filters):"},{"line_number":28,"context_line":"    \u0027\u0027\u0027Build and return a role assignment query url with provided params.\u0027\u0027\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    query_params \u003d \u0027?effective\u0027 if effective else \u0027\u0027"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_2109a2dd","line":28,"updated":"2015-02-10 09:38:47.000000000","message":"it might be useful to list what the accepted params are...","commit_id":"b0d6016626dd391d332a2792fc2826b32235ac88"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"c6a64d606518a5d330e676c46a0b3d14ab88f2b5","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def _build_role_assignment_query_url(effective\u003dFalse, **filters):"},{"line_number":28,"context_line":"    \u0027\u0027\u0027Build and return a role assignment query url with provided params.\u0027\u0027\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    query_params \u003d \u0027?effective\u0027 if effective else \u0027\u0027"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_64fb4cc1","line":28,"in_reply_to":"da86d52c_2109a2dd","updated":"2015-02-12 02:57:52.000000000","message":"Done","commit_id":"b0d6016626dd391d332a2792fc2826b32235ac88"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6fd17181b403e1a4503ae1d1266ffcf29c583393","unresolved":false,"context_lines":[{"line_number":1485,"context_line":"    Querying domain and project, or user and group results in a HTTP 400, since"},{"line_number":1486,"context_line":"    a role assignment must contain only a single pair of (actor, target). In"},{"line_number":1487,"context_line":"    addition, since filtering on role assignments applies only to the final"},{"line_number":1488,"context_line":"    result, effective mode cannot be combined with group or domain and"},{"line_number":1489,"context_line":"    inherited, because it would always result in an empty list."},{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_e115cae5","line":1488,"updated":"2015-02-10 09:38:47.000000000","message":"not true for domain...you can ask for effective+domain","commit_id":"b0d6016626dd391d332a2792fc2826b32235ac88"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"c6a64d606518a5d330e676c46a0b3d14ab88f2b5","unresolved":false,"context_lines":[{"line_number":1485,"context_line":"    Querying domain and project, or user and group results in a HTTP 400, since"},{"line_number":1486,"context_line":"    a role assignment must contain only a single pair of (actor, target). In"},{"line_number":1487,"context_line":"    addition, since filtering on role assignments applies only to the final"},{"line_number":1488,"context_line":"    result, effective mode cannot be combined with group or domain and"},{"line_number":1489,"context_line":"    inherited, because it would always result in an empty list."},{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_a401c4b0","line":1488,"in_reply_to":"da86d52c_e115cae5","updated":"2015-02-12 02:57:52.000000000","message":"We are saying domain *and inherited* here, not just domain\nSo I think this sentence is correct.\n\nI\u0027ll make it clearer:\n\n... effective mode cannot be combined with i) group or ii) domain and inherited, ...","commit_id":"b0d6016626dd391d332a2792fc2826b32235ac88"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import random"},{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_1b9bd473","line":13,"updated":"2015-02-18 23:58:27.000000000","message":"import six","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import random"},{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_ef38e7ef","line":13,"in_reply_to":"da86d52c_1b9bd473","updated":"2015-02-19 11:41:18.000000000","message":"Done","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    query_params \u003d \u0027?effective\u0027 if effective else \u0027\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    for k, v in filters.iteritems():"},{"line_number":38,"context_line":"        query_params +\u003d \u0027?\u0027 if not query_params else \u0027\u0026\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        if k \u003d\u003d \u0027inherited_to_projects\u0027:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_3ba6d8ab","line":37,"updated":"2015-02-18 23:58:27.000000000","message":"use six for compatibility\n\nfor k, v in six.iteritems(filters):","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    query_params \u003d \u0027?effective\u0027 if effective else \u0027\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    for k, v in filters.iteritems():"},{"line_number":38,"context_line":"        query_params +\u003d \u0027?\u0027 if not query_params else \u0027\u0026\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        if k \u003d\u003d \u0027inherited_to_projects\u0027:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_4fa9f48e","line":37,"in_reply_to":"da86d52c_3ba6d8ab","updated":"2015-02-19 11:41:18.000000000","message":"Done","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            query_params +\u003d \u0027scope.OS-INHERIT:inherited_to\u003dprojects\u0027"},{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            if k in [\u0027domain_id\u0027, \u0027project_id\u0027]:"},{"line_number":44,"context_line":"                query_params +\u003d \u0027scope.\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"            query_params +\u003d \u0027%s\u003d%s\u0027 % (k.replace(\u0027_\u0027, \u0027.\u0027), v)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_db3e9c28","line":44,"updated":"2015-02-18 23:58:27.000000000","message":"elif k in [\u0027user_id\u0027, \u0027group_id\u0027, \u0027role_id\u0027]:\nelse:\n   raise an error","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            query_params +\u003d \u0027scope.OS-INHERIT:inherited_to\u003dprojects\u0027"},{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            if k in [\u0027domain_id\u0027, \u0027project_id\u0027]:"},{"line_number":44,"context_line":"                query_params +\u003d \u0027scope.\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"            query_params +\u003d \u0027%s\u003d%s\u0027 % (k.replace(\u0027_\u0027, \u0027.\u0027), v)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_6f0077ab","line":44,"in_reply_to":"da86d52c_db3e9c28","updated":"2015-02-19 11:41:18.000000000","message":"Done","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":1571,"context_line":"        self.assignment_api.create_project(self.project_id, self.project)"},{"line_number":1572,"context_line":""},{"line_number":1573,"context_line":"        # Create a random project hierarchy"},{"line_number":1574,"context_line":"        MAX_BREADTH, MAX_DEPTH \u003d 3, CONF.max_project_tree_depth - 1"},{"line_number":1575,"context_line":""},{"line_number":1576,"context_line":"        parent_id \u003d self.project_id"},{"line_number":1577,"context_line":"        for i in range(random.randint(1, MAX_DEPTH)):"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_36c18f4e","line":1574,"updated":"2015-02-18 23:58:27.000000000","message":"put the constants at the top, line 1553","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":1571,"context_line":"        self.assignment_api.create_project(self.project_id, self.project)"},{"line_number":1572,"context_line":""},{"line_number":1573,"context_line":"        # Create a random project hierarchy"},{"line_number":1574,"context_line":"        MAX_BREADTH, MAX_DEPTH \u003d 3, CONF.max_project_tree_depth - 1"},{"line_number":1575,"context_line":""},{"line_number":1576,"context_line":"        parent_id \u003d self.project_id"},{"line_number":1577,"context_line":"        for i in range(random.randint(1, MAX_DEPTH)):"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_2f7d9f1c","line":1574,"in_reply_to":"da86d52c_36c18f4e","updated":"2015-02-19 11:41:18.000000000","message":"Done","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":1574,"context_line":"        MAX_BREADTH, MAX_DEPTH \u003d 3, CONF.max_project_tree_depth - 1"},{"line_number":1575,"context_line":""},{"line_number":1576,"context_line":"        parent_id \u003d self.project_id"},{"line_number":1577,"context_line":"        for i in range(random.randint(1, MAX_DEPTH)):"},{"line_number":1578,"context_line":"            breadth \u003d random.randint(1, MAX_BREADTH)"},{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"            subprojects \u003d [self.new_project_ref(domain_id\u003dself.domain_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_7694e736","line":1577,"updated":"2015-02-18 23:58:27.000000000","message":"may want to refactor this block into a recursive call","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":1574,"context_line":"        MAX_BREADTH, MAX_DEPTH \u003d 3, CONF.max_project_tree_depth - 1"},{"line_number":1575,"context_line":""},{"line_number":1576,"context_line":"        parent_id \u003d self.project_id"},{"line_number":1577,"context_line":"        for i in range(random.randint(1, MAX_DEPTH)):"},{"line_number":1578,"context_line":"            breadth \u003d random.randint(1, MAX_BREADTH)"},{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"            subprojects \u003d [self.new_project_ref(domain_id\u003dself.domain_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_2f03df42","line":1577,"in_reply_to":"da86d52c_7694e736","updated":"2015-02-19 11:41:18.000000000","message":"Done","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"        :returns: role assignments query URL."},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"        \"\"\""},{"line_number":1650,"context_line":"        return _build_role_assignment_query_url(**filters)"},{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"class RoleAssignmentFailureTestCase(RoleAssignmentBaseTestCase):"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_11c0152a","line":1650,"updated":"2015-02-18 23:58:27.000000000","message":"this is weird, why do we need a wrapper around _build_role_assignment_query_url()? Why can\u0027t we call it directly?","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"        :returns: role assignments query URL."},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"        \"\"\""},{"line_number":1650,"context_line":"        return _build_role_assignment_query_url(**filters)"},{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"class RoleAssignmentFailureTestCase(RoleAssignmentBaseTestCase):"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_6f031710","line":1650,"in_reply_to":"da86d52c_11c0152a","updated":"2015-02-19 11:41:18.000000000","message":"Yes, this is weird in this case.\nBut this method is override by RoleAssignmentEffectiveTestCase, which has some additional logic to be put in it.","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"                                  expected_status\u003d400)"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def test_get_role_assignments_by_effective_and_inherited(self):"},{"line_number":1675,"context_line":"        self.config_fixture.config(group\u003d\u0027os_inherit\u0027, enabled\u003dTrue)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        self.get_role_assignments(domain_id\u003dself.domain_id, effective\u003dTrue,"},{"line_number":1678,"context_line":"                                  inherited_to_projects\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_91e405a9","line":1675,"updated":"2015-02-18 23:58:27.000000000","message":"we still need this? thought we are enabling all the extensions by default in Kilo","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9ed0adcaf773067034900e4993b8c428777e7440","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"                                  expected_status\u003d400)"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def test_get_role_assignments_by_effective_and_inherited(self):"},{"line_number":1675,"context_line":"        self.config_fixture.config(group\u003d\u0027os_inherit\u0027, enabled\u003dTrue)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        self.get_role_assignments(domain_id\u003dself.domain_id, effective\u003dTrue,"},{"line_number":1678,"context_line":"                                  inherited_to_projects\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_d4a73d4e","line":1675,"in_reply_to":"da86d52c_91e405a9","updated":"2015-02-19 10:31:34.000000000","message":"so we\u0027ll load the extensions in the pipeline by default...but it might still be disabled if that \"extension\" has a config switch..","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"                                  expected_status\u003d400)"},{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    def test_get_role_assignments_by_effective_and_inherited(self):"},{"line_number":1675,"context_line":"        self.config_fixture.config(group\u003d\u0027os_inherit\u0027, enabled\u003dTrue)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        self.get_role_assignments(domain_id\u003dself.domain_id, effective\u003dTrue,"},{"line_number":1678,"context_line":"                                  inherited_to_projects\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_cf1c037a","line":1675,"in_reply_to":"da86d52c_d4a73d4e","updated":"2015-02-19 11:41:18.000000000","message":"Right!","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d38d992a3e2cafe23b5b2d7644842cf31a9c389f","unresolved":false,"context_lines":[{"line_number":1757,"context_line":""},{"line_number":1758,"context_line":"        return attribs"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def _list_expected_role_assignments(self, **filters):"},{"line_number":1761,"context_line":"        \"\"\"Given the filters, it returns expected direct role assignments."},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"        :param filters: filters that will be considered when listing role"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_c1886a6d","line":1760,"updated":"2015-02-18 23:58:27.000000000","message":"same as above, why a separate wrapper?","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"dcb26d3394f907bdf8d01847621c6371de9d9fcb","unresolved":false,"context_lines":[{"line_number":1757,"context_line":""},{"line_number":1758,"context_line":"        return attribs"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def _list_expected_role_assignments(self, **filters):"},{"line_number":1761,"context_line":"        \"\"\"Given the filters, it returns expected direct role assignments."},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"        :param filters: filters that will be considered when listing role"}],"source_content_type":"text/x-python","patch_set":32,"id":"da86d52c_32142843","line":1760,"in_reply_to":"da86d52c_c1886a6d","updated":"2015-02-19 11:41:18.000000000","message":"Same logic as for the previous \u0027wrapper\u0027: RoleAssignmentEffectiveTestCase has a different list of expected role assignments to be returned, because it takes into account inherited roles and grouping expansion logic.","commit_id":"b461e649cd2274fdffd038ccf1797a382ddda59f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9fc772376d575ebc1c337064d80e57b52650e4aa","unresolved":false,"context_lines":[{"line_number":1557,"context_line":"    MAX_HIERARCHY_BREADTH \u003d 3"},{"line_number":1558,"context_line":"    MAX_HIERARCHY_DEPTH \u003d CONF.max_project_tree_depth - 1"},{"line_number":1559,"context_line":""},{"line_number":1560,"context_line":"    def load_sample_data(self):"},{"line_number":1561,"context_line":"        \"\"\"Creates sample data to be used on tests."},{"line_number":1562,"context_line":""},{"line_number":1563,"context_line":"        Created data are i) a role and ii) a domain containing: a project"}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_0342740e","line":1560,"updated":"2015-02-19 13:30:11.000000000","message":"I believe we have something similar to this workflow in test_v3.py that populates a bunch of sample data for us. It would be nice to have this all in one place so when we go to look for how the data is wired, we only have to look in one spot.","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f58450dca65958df3994c1e4fbe2dea7d2250b8b","unresolved":false,"context_lines":[{"line_number":1557,"context_line":"    MAX_HIERARCHY_BREADTH \u003d 3"},{"line_number":1558,"context_line":"    MAX_HIERARCHY_DEPTH \u003d CONF.max_project_tree_depth - 1"},{"line_number":1559,"context_line":""},{"line_number":1560,"context_line":"    def load_sample_data(self):"},{"line_number":1561,"context_line":"        \"\"\"Creates sample data to be used on tests."},{"line_number":1562,"context_line":""},{"line_number":1563,"context_line":"        Created data are i) a role and ii) a domain containing: a project"}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_9e4ebb6d","line":1560,"in_reply_to":"da86d52c_0342740e","updated":"2015-02-19 13:37:48.000000000","message":"Yes, we have something similar there.\n\nSample data in test_v3 is intended to be generic (as test_v3 is), being used everywhere (on test_v3_*).\n\nThe reasons we create different entities here are i) they are specific and not generic enough to be placed on test_v3, as stated above; ii) when we recreate, we don\u0027t get existing assignments and then this fact ease assertions on this class when we do list_role_assignment(filters).","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9fc772376d575ebc1c337064d80e57b52650e4aa","unresolved":false,"context_lines":[{"line_number":1803,"context_line":"    def test_get_role_assignments_by_role(self, **filters):"},{"line_number":1804,"context_line":"        self._test_get_role_assignments(role_id\u003dself.role_id, **filters)"},{"line_number":1805,"context_line":""},{"line_number":1806,"context_line":"    def test_get_role_assignments_by_domain_and_user(self, **filters):"},{"line_number":1807,"context_line":"        self.test_get_role_assignments_by_domain(user_id\u003dself.default_user_id,"},{"line_number":1808,"context_line":"                                                 **filters)"},{"line_number":1809,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_63efb0b1","line":1806,"updated":"2015-02-19 13:30:11.000000000","message":"This is the same call as test_get_role_assignments_by_user(). Does getting roles by user assume a domain?","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f58450dca65958df3994c1e4fbe2dea7d2250b8b","unresolved":false,"context_lines":[{"line_number":1803,"context_line":"    def test_get_role_assignments_by_role(self, **filters):"},{"line_number":1804,"context_line":"        self._test_get_role_assignments(role_id\u003dself.role_id, **filters)"},{"line_number":1805,"context_line":""},{"line_number":1806,"context_line":"    def test_get_role_assignments_by_domain_and_user(self, **filters):"},{"line_number":1807,"context_line":"        self.test_get_role_assignments_by_domain(user_id\u003dself.default_user_id,"},{"line_number":1808,"context_line":"                                                 **filters)"},{"line_number":1809,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_8350242d","line":1806,"in_reply_to":"da86d52c_63efb0b1","updated":"2015-02-19 13:37:48.000000000","message":"They call different methods: test_get_role_assignments_by_user calls _test_get_role_assignments, this one calls test_get_role_assignments_by_domain, which already add filtering by domain.\n\nSo yes, this one tests filtering by both domain and user.","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9fc772376d575ebc1c337064d80e57b52650e4aa","unresolved":false,"context_lines":[{"line_number":1812,"context_line":"            group_id\u003dself.default_group_id, **filters)"},{"line_number":1813,"context_line":""},{"line_number":1814,"context_line":"    def test_get_role_assignments_by_project_and_user(self, **filters):"},{"line_number":1815,"context_line":"        self.test_get_role_assignments_by_project(user_id\u003dself.default_user_id,"},{"line_number":1816,"context_line":"                                                  **filters)"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":"    def test_get_role_assignments_by_project_and_group(self, **filters):"}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_a31368b6","line":1815,"updated":"2015-02-19 13:30:11.000000000","message":"Same comment here as above.","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f58450dca65958df3994c1e4fbe2dea7d2250b8b","unresolved":false,"context_lines":[{"line_number":1812,"context_line":"            group_id\u003dself.default_group_id, **filters)"},{"line_number":1813,"context_line":""},{"line_number":1814,"context_line":"    def test_get_role_assignments_by_project_and_user(self, **filters):"},{"line_number":1815,"context_line":"        self.test_get_role_assignments_by_project(user_id\u003dself.default_user_id,"},{"line_number":1816,"context_line":"                                                  **filters)"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":"    def test_get_role_assignments_by_project_and_group(self, **filters):"}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_232698ce","line":1815,"in_reply_to":"da86d52c_a31368b6","updated":"2015-02-19 13:37:48.000000000","message":"Similar response to above. :)","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9fc772376d575ebc1c337064d80e57b52650e4aa","unresolved":false,"context_lines":[{"line_number":1833,"context_line":""},{"line_number":1834,"context_line":"    def test_get_role_assignments_by_project_group_and_role(self, **filters):"},{"line_number":1835,"context_line":"        self.test_get_role_assignments_by_project_and_group("},{"line_number":1836,"context_line":"            role_id\u003dself.role_id, **filters)"},{"line_number":1837,"context_line":""},{"line_number":1838,"context_line":""},{"line_number":1839,"context_line":"class RoleAssignmentInheritedTestCase(RoleAssignmentDirectTestCase):"}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_038434d1","line":1836,"updated":"2015-02-19 13:30:11.000000000","message":"These last three tests all use the same call. How are we sure there is different behavior between them?","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"f58450dca65958df3994c1e4fbe2dea7d2250b8b","unresolved":false,"context_lines":[{"line_number":1833,"context_line":""},{"line_number":1834,"context_line":"    def test_get_role_assignments_by_project_group_and_role(self, **filters):"},{"line_number":1835,"context_line":"        self.test_get_role_assignments_by_project_and_group("},{"line_number":1836,"context_line":"            role_id\u003dself.role_id, **filters)"},{"line_number":1837,"context_line":""},{"line_number":1838,"context_line":""},{"line_number":1839,"context_line":"class RoleAssignmentInheritedTestCase(RoleAssignmentDirectTestCase):"}],"source_content_type":"text/x-python","patch_set":33,"id":"da86d52c_832744c6","line":1836,"in_reply_to":"da86d52c_038434d1","updated":"2015-02-19 13:37:48.000000000","message":"Similar response to above :)\n\nThey call different methods.","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b61c836b70d749ad0a3ffe72a35700a097a3f3d","unresolved":false,"context_lines":[{"line_number":1833,"context_line":""},{"line_number":1834,"context_line":"    def test_get_role_assignments_by_project_group_and_role(self, **filters):"},{"line_number":1835,"context_line":"        self.test_get_role_assignments_by_project_and_group("},{"line_number":1836,"context_line":"            role_id\u003dself.role_id, **filters)"},{"line_number":1837,"context_line":""},{"line_number":1838,"context_line":""},{"line_number":1839,"context_line":"class RoleAssignmentInheritedTestCase(RoleAssignmentDirectTestCase):"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_356205d9","line":1836,"in_reply_to":"da86d52c_832744c6","updated":"2015-02-20 14:50:57.000000000","message":"Ahh, I see it now. Thanks for clarifying.","commit_id":"748c1ed9a5e0a34ffb15a35dfa892539fbcb6b43"}]}
