)]}'
{"keystoneclient/tests/functional/v3/test_fixtures.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class UsersFixture(fixtures.Fixture):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def __init__(self, client, domain_id, project_id):"},{"line_number":20,"context_line":"        self.client \u003d client"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_f0e116d2","line":17,"updated":"2016-03-28 22:23:55.000000000","message":"This should be called UserGroupFixture since it isn\u0027t just a user.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class UsersFixture(fixtures.Fixture):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def __init__(self, client, domain_id, project_id):"},{"line_number":20,"context_line":"        self.client \u003d client"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_66ba5425","line":17,"in_reply_to":"ba0121b8_f0e116d2","updated":"2016-03-29 13:53:45.000000000","message":"Done","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class UsersFixture(fixtures.Fixture):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def __init__(self, client, domain_id, project_id):"},{"line_number":20,"context_line":"        self.client \u003d client"},{"line_number":21,"context_line":"        self.domain_id \u003d domain_id"},{"line_number":22,"context_line":"        self.project_id \u003d project_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_d0c4d241","line":19,"updated":"2016-03-28 22:23:55.000000000","message":"call super().__init__()","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class UsersFixture(fixtures.Fixture):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def __init__(self, client, domain_id, project_id):"},{"line_number":20,"context_line":"        self.client \u003d client"},{"line_number":21,"context_line":"        self.domain_id \u003d domain_id"},{"line_number":22,"context_line":"        self.project_id \u003d project_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_86ee8820","line":19,"in_reply_to":"ba0121b8_d0c4d241","updated":"2016-03-29 13:53:45.000000000","message":"Done","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        super(UsersFixture, self).setUp()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        self.user_ref \u003d {\u0027name\u0027: uuid.uuid4().hex,"},{"line_number":28,"context_line":"                         \u0027domain\u0027: self.domain_id,"},{"line_number":29,"context_line":"                         \u0027default_project\u0027: self.project_id,"},{"line_number":30,"context_line":"                         \u0027password\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_f0bab6bf","line":27,"updated":"2016-03-28 22:23:55.000000000","message":"I think it would be helpful to have the name include a string like \u0027keystoneclient-functional\u0027 so that it\u0027ll be easy to see users created for the functional tests.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def setUp(self):"},{"line_number":25,"context_line":"        super(UsersFixture, self).setUp()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"        self.user_ref \u003d {\u0027name\u0027: uuid.uuid4().hex,"},{"line_number":28,"context_line":"                         \u0027domain\u0027: self.domain_id,"},{"line_number":29,"context_line":"                         \u0027default_project\u0027: self.project_id,"},{"line_number":30,"context_line":"                         \u0027password\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_c6cfe0ae","line":27,"in_reply_to":"ba0121b8_f0bab6bf","updated":"2016-03-29 13:53:45.000000000","message":"agreed, good point","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                         \u0027default_project\u0027: self.project_id,"},{"line_number":30,"context_line":"                         \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":31,"context_line":"                         \u0027email\u0027: uuid.uuid4().hex,"},{"line_number":32,"context_line":"                         \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":33,"context_line":"                         \u0027enabled\u0027: True}"},{"line_number":34,"context_line":"        self.user \u003d self.client.users.create(**self.user_ref)"},{"line_number":35,"context_line":"        self.addCleanup(self.client.users.delete, self.user.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_90a37a9e","line":32,"updated":"2016-03-28 22:23:55.000000000","message":"The description should say that this is created by the keystoneclient functional tests so we have some idea.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                         \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":31,"context_line":"                         \u0027email\u0027: uuid.uuid4().hex,"},{"line_number":32,"context_line":"                         \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":33,"context_line":"                         \u0027enabled\u0027: True}"},{"line_number":34,"context_line":"        self.user \u003d self.client.users.create(**self.user_ref)"},{"line_number":35,"context_line":"        self.addCleanup(self.client.users.delete, self.user.id)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_b0731e4d","line":33,"updated":"2016-03-28 22:23:55.000000000","message":"we should keep this to the minimum required. Suggest remove email, description, and enabled.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                         \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":31,"context_line":"                         \u0027email\u0027: uuid.uuid4().hex,"},{"line_number":32,"context_line":"                         \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":33,"context_line":"                         \u0027enabled\u0027: True}"},{"line_number":34,"context_line":"        self.user \u003d self.client.users.create(**self.user_ref)"},{"line_number":35,"context_line":"        self.addCleanup(self.client.users.delete, self.user.id)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_8f317ba5","line":33,"in_reply_to":"ba0121b8_b0731e4d","updated":"2016-03-29 13:53:45.000000000","message":"Done; I changed the create test to make sure the client handles all the attributes correctly","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                         \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":33,"context_line":"                         \u0027enabled\u0027: True}"},{"line_number":34,"context_line":"        self.user \u003d self.client.users.create(**self.user_ref)"},{"line_number":35,"context_line":"        self.addCleanup(self.client.users.delete, self.user.id)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        group_ref \u003d {\u0027name\u0027: uuid.uuid4().hex,"},{"line_number":38,"context_line":"                     \u0027domain\u0027: self.domain_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_10048a7c","line":35,"range":{"start_line":35,"start_character":50,"end_line":35,"end_character":62},"updated":"2016-03-28 22:23:55.000000000","message":"this could be self.user.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                         \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":33,"context_line":"                         \u0027enabled\u0027: True}"},{"line_number":34,"context_line":"        self.user \u003d self.client.users.create(**self.user_ref)"},{"line_number":35,"context_line":"        self.addCleanup(self.client.users.delete, self.user.id)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        group_ref \u003d {\u0027name\u0027: uuid.uuid4().hex,"},{"line_number":38,"context_line":"                     \u0027domain\u0027: self.domain_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_06527867","line":35,"range":{"start_line":35,"start_character":50,"end_line":35,"end_character":62},"in_reply_to":"ba0121b8_10048a7c","updated":"2016-03-29 13:53:45.000000000","message":"Done","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"514d2010e55a9dfb780321291c215735811b8676","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                     \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":40,"context_line":"                     \u0027enabled\u0027: True}"},{"line_number":41,"context_line":"        self.group \u003d self.client.groups.create(**group_ref)"},{"line_number":42,"context_line":"        self.addCleanup(self.client.groups.delete, self.group.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_d8a082a8","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":65},"updated":"2016-03-28 19:04:50.000000000","message":"nice","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                     \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":40,"context_line":"                     \u0027enabled\u0027: True}"},{"line_number":41,"context_line":"        self.group \u003d self.client.groups.create(**group_ref)"},{"line_number":42,"context_line":"        self.addCleanup(self.client.groups.delete, self.group.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_f008f693","line":42,"range":{"start_line":42,"start_character":51,"end_line":42,"end_character":64},"updated":"2016-03-28 22:23:55.000000000","message":"this could be self.group","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                     \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":40,"context_line":"                     \u0027enabled\u0027: True}"},{"line_number":41,"context_line":"        self.group \u003d self.client.groups.create(**group_ref)"},{"line_number":42,"context_line":"        self.addCleanup(self.client.groups.delete, self.group.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_e6d144cf","line":42,"range":{"start_line":42,"start_character":51,"end_line":42,"end_character":64},"in_reply_to":"ba0121b8_f008f693","updated":"2016-03-29 13:53:45.000000000","message":"Done","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da00bd0ade9ee65d53cffd9c128c441aeeb10260","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_3ee6e4e7","line":1,"updated":"2016-04-07 20:50:00.000000000","message":"remove test_ from the name since this module doesn\u0027t contain tests.","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ce18b2f815ed56b853e7671b22a5874c7b1c5390","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a18252c_1fbacf23","line":1,"in_reply_to":"9a061dce_3ee6e4e7","updated":"2016-04-12 14:07:20.000000000","message":"Done","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da00bd0ade9ee65d53cffd9c128c441aeeb10260","unresolved":false,"context_lines":[{"line_number":17,"context_line":"RESOURCE_NAME_PREFIX \u003d \u0027keystoneclient-functional-\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class ClientFixture(fixtures.Fixture):"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self, client, domain_id):"},{"line_number":23,"context_line":"        super(ClientFixture, self).__init__()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_1e004065","line":20,"updated":"2016-04-07 20:50:00.000000000","message":"No need to put \"Fixture\" on the names since the module is called fixtures already.","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ce18b2f815ed56b853e7671b22a5874c7b1c5390","unresolved":false,"context_lines":[{"line_number":17,"context_line":"RESOURCE_NAME_PREFIX \u003d \u0027keystoneclient-functional-\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class ClientFixture(fixtures.Fixture):"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self, client, domain_id):"},{"line_number":23,"context_line":"        super(ClientFixture, self).__init__()"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a18252c_ffb6f33b","line":20,"in_reply_to":"9a061dce_1e004065","updated":"2016-04-12 14:07:20.000000000","message":"Done","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"}],"keystoneclient/tests/functional/v3/test_users.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"e77520f2c223ebdffa50eefe4feec31072a6eabd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":31,"context_line":"        self.assertEqual(params[\u0027name\u0027], user.name)"},{"line_number":32,"context_line":"        self.assertEqual(params[\u0027domain\u0027], user.domain_id)"},{"line_number":33,"context_line":"        # TODO(samueldmq): The name of demo project was provided as"},{"line_number":34,"context_line":"        # default_project argument. The same value (name, not ID), appears back"},{"line_number":35,"context_line":"        # in default_project_id attribute of user. Is this correct ?"},{"line_number":36,"context_line":"        self.assertEqual(params[\u0027default_project\u0027], user.default_project_id)"},{"line_number":37,"context_line":"        self.assertEqual(params[\u0027email\u0027], user.email)"},{"line_number":38,"context_line":"        self.assertEqual(params[\u0027description\u0027], user.description)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_80b5dace","line":35,"range":{"start_line":33,"start_character":0,"end_line":35,"end_character":68},"updated":"2016-03-11 21:24:40.000000000","message":"This comment is invalid in this patchset. But the described happened in a previous patchset and may still be a bug.","commit_id":"464aea6ca4cec7e58e515f536a565b1e4f71989a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c7340d8c6a8adbe7ae02276d93589b0e7a5c5813","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.assertIn(\u0027/users/\u0027 + user.id, user.links[\u0027self\u0027])"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def test_get_user(self):"},{"line_number":31,"context_line":"        user \u003d self.client.users.get(self.user_id)"},{"line_number":32,"context_line":"        self._check_user(user)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_list_users(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afc51ec_3bf9574e","line":31,"range":{"start_line":31,"start_character":37,"end_line":31,"end_character":49},"updated":"2016-03-14 15:29:59.000000000","message":"this makes a pretty big assumption about how we\u0027ll write the tests going forward","commit_id":"33a21995bded661321a6e9ef73bd357707373690"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"b863b33ad52d2922a4af1c8a9407a4933f1e3929","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.assertIn(\u0027/users/\u0027 + user.id, user.links[\u0027self\u0027])"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def test_get_user(self):"},{"line_number":31,"context_line":"        user \u003d self.client.users.get(self.user_id)"},{"line_number":32,"context_line":"        self._check_user(user)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_list_users(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afc51ec_18aa9670","line":31,"range":{"start_line":31,"start_character":37,"end_line":31,"end_character":49},"in_reply_to":"3afc51ec_3bf9574e","updated":"2016-03-14 17:55:48.000000000","message":"Being based on the user provided scope let us run against any cloud, rather than fixing this to devstack (it was using \u0027demo\u0027 user in a previous patchset)\n\nAlso notice that we are splitting read-only and writable tests, this way we can provide \"tox -e functional-readonly\" for those using LDAP :)","commit_id":"33a21995bded661321a6e9ef73bd357707373690"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"80bd5d488b9780da112a2f08a052abf587c6c465","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystoneclient.tests.functional import base"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UsersReadOnlyTestCase(base.V3ClientTestCase):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def _check_user(self, user):"},{"line_number":22,"context_line":"        # Only check mandatory attributes"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_aff2a16d","line":19,"range":{"start_line":19,"start_character":6,"end_line":19,"end_character":27},"updated":"2016-03-15 12:42:12.000000000","message":"what should happen in a ro env and I try to modify a user (create, delete or update)?","commit_id":"59ebf09e0bf71150cfbfc706a17b3f33b16fcfcb"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"06f1ea3ea69c487df5b60a737c121db554e0e551","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystoneclient.tests.functional import base"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UsersReadOnlyTestCase(base.V3ClientTestCase):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def _check_user(self, user):"},{"line_number":22,"context_line":"        # Only check mandatory attributes"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_b9b90dce","line":19,"range":{"start_line":19,"start_character":6,"end_line":19,"end_character":27},"in_reply_to":"1af94dfe_aff2a16d","updated":"2016-03-22 12:24:00.000000000","message":"The operation is expected to be forbidden","commit_id":"59ebf09e0bf71150cfbfc706a17b3f33b16fcfcb"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"9b46ef1515a7ad790cba091fde9fd652c7920510","unresolved":false,"context_lines":[{"line_number":44,"context_line":"class UsersWritableTestCase(base.V3ClientTestCase):"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_create_user(self):"},{"line_number":47,"context_line":"        params \u003d {\u0027name\u0027: uuid.uuid4().hex,"},{"line_number":48,"context_line":"                  \u0027domain\u0027: self.project_domain_id,"},{"line_number":49,"context_line":"                  \u0027default_project\u0027: self.project_id,"},{"line_number":50,"context_line":"                  \u0027password\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_e576733d","line":47,"updated":"2016-03-15 18:42:10.000000000","message":"Maybe we should port over the new_*_ref() from keystone/tests/unit/core.py?","commit_id":"59ebf09e0bf71150cfbfc706a17b3f33b16fcfcb"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"9b46ef1515a7ad790cba091fde9fd652c7920510","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                  \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":53,"context_line":"                  \u0027enabled\u0027: True}"},{"line_number":54,"context_line":"        user \u003d self.client.users.create(**params)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":57,"context_line":"        self.assertEqual(params[\u0027name\u0027], user.name)"},{"line_number":58,"context_line":"        self.assertEqual(params[\u0027domain\u0027], user.domain_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_c5aa5770","line":55,"updated":"2016-03-15 18:42:10.000000000","message":"Repetition of checks just begs for a common helper function.","commit_id":"59ebf09e0bf71150cfbfc706a17b3f33b16fcfcb"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"06f1ea3ea69c487df5b60a737c121db554e0e551","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                  \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":53,"context_line":"                  \u0027enabled\u0027: True}"},{"line_number":54,"context_line":"        user \u003d self.client.users.create(**params)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":57,"context_line":"        self.assertEqual(params[\u0027name\u0027], user.name)"},{"line_number":58,"context_line":"        self.assertEqual(params[\u0027domain\u0027], user.domain_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_39fe9d38","line":55,"in_reply_to":"1af94dfe_c5aa5770","updated":"2016-03-22 12:24:00.000000000","message":"oh I see what you mean ... will do","commit_id":"59ebf09e0bf71150cfbfc706a17b3f33b16fcfcb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"514d2010e55a9dfb780321291c215735811b8676","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class UsersReadOnlyTestCase(UsersTestCaseMixin, base.V3ClientTestCase):"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_get_user(self):"},{"line_number":54,"context_line":"        user \u003d self.client.users.get(self.user.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_98c8ca76","line":51,"range":{"start_line":51,"start_character":6,"end_line":51,"end_character":28},"updated":"2016-03-28 19:04:50.000000000","message":"what about testing the write calls? (and make sure a forbidden is returned)","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class UsersReadOnlyTestCase(UsersTestCaseMixin, base.V3ClientTestCase):"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_get_user(self):"},{"line_number":54,"context_line":"        user \u003d self.client.users.get(self.user.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_d04972d2","line":51,"range":{"start_line":51,"start_character":6,"end_line":51,"end_character":28},"in_reply_to":"ba0121b8_98c8ca76","updated":"2016-03-28 22:23:55.000000000","message":"splitting up the tests into ReadOnly and Writable classes is unnecessarily confusing at this point. No need for this to be as complicated as it is.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class UsersReadOnlyTestCase(UsersTestCaseMixin, base.V3ClientTestCase):"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_get_user(self):"},{"line_number":54,"context_line":"        user \u003d self.client.users.get(self.user.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_293b0fd3","line":51,"range":{"start_line":51,"start_character":6,"end_line":51,"end_character":28},"in_reply_to":"ba0121b8_d04972d2","updated":"2016-03-29 13:53:45.000000000","message":"There is no guarantee that all deployments can create users. However I think we can leave it as a single class for now, and then create a subclass overriding the writable tests once we have ways to do it (a gate with LDAP).","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_get_user(self):"},{"line_number":54,"context_line":"        user \u003d self.client.users.get(self.user.id)"},{"line_number":55,"context_line":"        self.check_user(user)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_list_users(self):"},{"line_number":58,"context_line":"        users \u003d self.client.users.list()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_70518662","line":55,"updated":"2016-03-28 22:23:55.000000000","message":"why isn\u0027t user_ref passed in?","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_get_user(self):"},{"line_number":54,"context_line":"        user \u003d self.client.users.get(self.user.id)"},{"line_number":55,"context_line":"        self.check_user(user)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_list_users(self):"},{"line_number":58,"context_line":"        users \u003d self.client.users.list()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_c9aa53d4","line":55,"in_reply_to":"ba0121b8_70518662","updated":"2016-03-29 13:53:45.000000000","message":"Done","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"514d2010e55a9dfb780321291c215735811b8676","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        users \u003d self.client.users.list()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Fixtures are used; it is guaranteed to not be empty"},{"line_number":61,"context_line":"        self.assertNotEqual([], users)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        for user in users:"},{"line_number":64,"context_line":"            self.check_user(user)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_18b4baf0","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":38},"updated":"2016-03-28 19:04:50.000000000","message":"suggestion: use a different approach do test list. something like:\n\n  users_ids \u003d []\n  for _ in range(3):\n    user \u003d self.client.users.create(...)\n    users_ids.append(user.id)\n\n  user_list \u003d self.client.users.list()\n  ids \u003d [user.id for user in user_list]\n  for user_id in ids:\n    self.assertIn(user_id, ids)\n\nin this way you guarantee the created users are included -\u003e the list call is not missing stuff","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        users \u003d self.client.users.list()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Fixtures are used; it is guaranteed to not be empty"},{"line_number":61,"context_line":"        self.assertNotEqual([], users)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        for user in users:"},{"line_number":64,"context_line":"            self.check_user(user)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_09cf2b57","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":38},"in_reply_to":"ba0121b8_18b4baf0","updated":"2016-03-29 13:53:45.000000000","message":"Done, I have checked only the expected user is returned.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4a596c5f745cd1293ee6edc811d138077bd3139","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test_create_user(self):"},{"line_number":70,"context_line":"        # Just perform checks on the user created in the fixtures"},{"line_number":71,"context_line":"        self.check_user(self.user, self.user_ref)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_update_user(self):"},{"line_number":74,"context_line":"        new_email \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_d0e5f2a8","line":71,"updated":"2016-03-28 22:23:55.000000000","message":"These tests should be a test of the client library, as such if you\u0027ve got a test to create user it should explicitly call client.users.create.","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d2847649ef6c54c9cf0d0df827ec1f4d89f44592","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test_create_user(self):"},{"line_number":70,"context_line":"        # Just perform checks on the user created in the fixtures"},{"line_number":71,"context_line":"        self.check_user(self.user, self.user_ref)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_update_user(self):"},{"line_number":74,"context_line":"        new_email \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_29f94f81","line":71,"in_reply_to":"ba0121b8_d0e5f2a8","updated":"2016-03-29 13:53:45.000000000","message":"Done","commit_id":"75d97c2fc1d89cf4243a3975a85626c24cdaf7a3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb49a1b85fba8247e3b28f4b0bd49f2e2e9bd997","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.assertEqual(user_ref.get(\u0027domain\u0027), user.domain_id)"},{"line_number":41,"context_line":"            # There is no guarantee the attributes below are present in user"},{"line_number":42,"context_line":"            self.assertEqual(user_ref.get(\u0027default_project\u0027),"},{"line_number":43,"context_line":"                             getattr(user, \u0027default_project_id\u0027, None))"},{"line_number":44,"context_line":"            for attribute in [\u0027email\u0027, \u0027description\u0027]:"},{"line_number":45,"context_line":"                self.assertEqual(user_ref.get(attribute),"},{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_49337fab","line":43,"updated":"2016-03-30 22:33:33.000000000","message":"the test should be asserting that default_project is either there or not there as expecting, not guessing about it. This is more confusing for testers than it needs to be.","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fb78a257e8d458fcea354f1c3cc0bfa6fcb1430","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.assertEqual(user_ref.get(\u0027domain\u0027), user.domain_id)"},{"line_number":41,"context_line":"            # There is no guarantee the attributes below are present in user"},{"line_number":42,"context_line":"            self.assertEqual(user_ref.get(\u0027default_project\u0027),"},{"line_number":43,"context_line":"                             getattr(user, \u0027default_project_id\u0027, None))"},{"line_number":44,"context_line":"            for attribute in [\u0027email\u0027, \u0027description\u0027]:"},{"line_number":45,"context_line":"                self.assertEqual(user_ref.get(attribute),"},{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_3f5a9d2a","line":43,"in_reply_to":"ba0121b8_49337fab","updated":"2016-03-31 13:02:47.000000000","message":"Ok, I will use hasattr and perform the check based on it","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb49a1b85fba8247e3b28f4b0bd49f2e2e9bd997","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            # Only check remaining mandatory attributes"},{"line_number":49,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":50,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_c9e66f14","line":49,"updated":"2016-03-30 22:33:33.000000000","message":"we don\u0027t know what the name is?","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b249e538cc7075be64449af3f2cfa2b7cb1dbf31","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            # Only check remaining mandatory attributes"},{"line_number":49,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":50,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_1007c6ca","line":49,"in_reply_to":"ba0121b8_05330a15","updated":"2016-03-31 13:48:12.000000000","message":"Let\u0027s focus on devstack now and worry about existing users in the deployment later.","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"534599703adb54fcfee2c765f2b7839992e28e05","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            # Only check remaining mandatory attributes"},{"line_number":49,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":50,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_05330a15","line":49,"in_reply_to":"ba0121b8_05d5ca1a","updated":"2016-03-31 13:43:14.000000000","message":"No we don\u0027t, test_list_users use this method, and some existing users in the deployment may be returned as well; so we can\u0027t assume anything","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"81f26df516f09a0e634fa5570ce91fa65caaba09","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            # Only check remaining mandatory attributes"},{"line_number":49,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":50,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_b7751065","line":49,"in_reply_to":"ba0121b8_1007c6ca","updated":"2016-04-01 01:08:56.000000000","message":"Even devstack has users (demo, admin) which don\u0027t have test_fixtures.RESOURCE_NAME_PREFIX in their names","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ca0abfbee72972d114eef5aa35ce9904c501f5c8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            # Only check remaining mandatory attributes"},{"line_number":49,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":50,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_05d5ca1a","line":49,"in_reply_to":"ba0121b8_7f39b5d6","updated":"2016-03-31 13:33:40.000000000","message":"Actually we know at least that test_fixtures.RESOURCE_NAME_PREFIX is in it","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fb78a257e8d458fcea354f1c3cc0bfa6fcb1430","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                 getattr(user, attribute, None))"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            # Only check remaining mandatory attributes"},{"line_number":49,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":50,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_7f39b5d6","line":49,"in_reply_to":"ba0121b8_c9e66f14","updated":"2016-03-31 13:02:47.000000000","message":"Not in the case a user_ref is not passed to compare","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb49a1b85fba8247e3b28f4b0bd49f2e2e9bd997","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"},{"line_number":53,"context_line":"        # Perform checks on the user created in the fixtures and on a new user"},{"line_number":54,"context_line":"        self.check_user(self.user, self.user_ref)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        user_ref \u003d {"},{"line_number":57,"context_line":"            \u0027name\u0027: test_fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_c994af44","line":54,"updated":"2016-03-30 22:33:33.000000000","message":"why perform checks on the user created in the fixture? This is confusing.","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fb78a257e8d458fcea354f1c3cc0bfa6fcb1430","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_create_user(self):"},{"line_number":53,"context_line":"        # Perform checks on the user created in the fixtures and on a new user"},{"line_number":54,"context_line":"        self.check_user(self.user, self.user_ref)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        user_ref \u003d {"},{"line_number":57,"context_line":"            \u0027name\u0027: test_fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_7f125558","line":54,"in_reply_to":"ba0121b8_c994af44","updated":"2016-03-31 13:02:47.000000000","message":"Ok, I will remove it","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb49a1b85fba8247e3b28f4b0bd49f2e2e9bd997","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertIn(self.user, users)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_update_user(self):"},{"line_number":80,"context_line":"        new_email \u003d uuid.uuid4().hex"},{"line_number":81,"context_line":"        self.user \u003d self.client.users.update(self.user.id, email\u003dnew_email)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self.user_ref.update({\u0027email\u0027: new_email})"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_c9530f6a","line":80,"updated":"2016-03-30 22:33:33.000000000","message":"I\u0027d prefer if email wasn\u0027t used since it\u0027s not a standard option. description is a better option.","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fb78a257e8d458fcea354f1c3cc0bfa6fcb1430","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertIn(self.user, users)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_update_user(self):"},{"line_number":80,"context_line":"        new_email \u003d uuid.uuid4().hex"},{"line_number":81,"context_line":"        self.user \u003d self.client.users.update(self.user.id, email\u003dnew_email)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self.user_ref.update({\u0027email\u0027: new_email})"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_7c0b832a","line":80,"in_reply_to":"ba0121b8_c9530f6a","updated":"2016-03-31 13:02:47.000000000","message":"Ok","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb49a1b85fba8247e3b28f4b0bd49f2e2e9bd997","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.user_ref.update({\u0027email\u0027: new_email})"},{"line_number":84,"context_line":"        self.check_user(self.user, self.user_ref)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def test_user_grouping(self):"},{"line_number":87,"context_line":"        self.assertRaises(http.NotFound,"},{"line_number":88,"context_line":"                          self.client.users.check_in_group,"},{"line_number":89,"context_line":"                          self.user.id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_c9882fc8","line":86,"updated":"2016-03-30 22:33:33.000000000","message":"This needs an explanation what it\u0027s testing. Looks like it\u0027s testing a lot which makes the test more confusing than it needs to be.","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fb78a257e8d458fcea354f1c3cc0bfa6fcb1430","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.user_ref.update({\u0027email\u0027: new_email})"},{"line_number":84,"context_line":"        self.check_user(self.user, self.user_ref)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def test_user_grouping(self):"},{"line_number":87,"context_line":"        self.assertRaises(http.NotFound,"},{"line_number":88,"context_line":"                          self.client.users.check_in_group,"},{"line_number":89,"context_line":"                          self.user.id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_9c0e5739","line":86,"in_reply_to":"ba0121b8_c9882fc8","updated":"2016-03-31 13:02:47.000000000","message":"I will add it","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cb49a1b85fba8247e3b28f4b0bd49f2e2e9bd997","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                          self.user.id,"},{"line_number":99,"context_line":"                          self.group.id)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_delete_user(self):"},{"line_number":102,"context_line":"        user \u003d self.client.users.create(name\u003duuid.uuid4().hex,"},{"line_number":103,"context_line":"                                        domain\u003dself.project_domain_id)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_6965a31c","line":101,"updated":"2016-03-30 22:33:33.000000000","message":"This test isn\u0027t using the fixture so it should either be in a separate test class or the fixture should be created in the tests that need it.","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fb78a257e8d458fcea354f1c3cc0bfa6fcb1430","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                          self.user.id,"},{"line_number":99,"context_line":"                          self.group.id)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_delete_user(self):"},{"line_number":102,"context_line":"        user \u003d self.client.users.create(name\u003duuid.uuid4().hex,"},{"line_number":103,"context_line":"                                        domain\u003dself.project_domain_id)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_9c2777c9","line":101,"in_reply_to":"ba0121b8_6965a31c","updated":"2016-03-31 13:02:47.000000000","message":"We can\u0027t use the fixture otherwise it will fail on cleanUp (since the resource was already deleted here)","commit_id":"530d7bec74b7f15afbb456cb3aad9a8e2ad74abe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d416654b54fad3e79c63a64db9b88d84a27c819e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def check_user(self, user, user_ref\u003dNone):"},{"line_number":33,"context_line":"        self.assertTrue(user.enabled)"},{"line_number":34,"context_line":"        self.assertIn(\u0027self\u0027, user.links)"},{"line_number":35,"context_line":"        self.assertIn(\u0027/users/\u0027 + user.id, user.links[\u0027self\u0027])"},{"line_number":36,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_8c57f725","line":34,"updated":"2016-04-01 20:30:02.000000000","message":"this is testing how the server works and not anything with how the client works.","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"89af74a38ba4797071ea0afb57df1e599629e1e0","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def check_user(self, user, user_ref\u003dNone):"},{"line_number":33,"context_line":"        self.assertTrue(user.enabled)"},{"line_number":34,"context_line":"        self.assertIn(\u0027self\u0027, user.links)"},{"line_number":35,"context_line":"        self.assertIn(\u0027/users/\u0027 + user.id, user.links[\u0027self\u0027])"},{"line_number":36,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_d2681d8a","line":34,"in_reply_to":"9a061dce_72da2c7a","updated":"2016-04-05 13:25:35.000000000","message":"+1. this is testing if the client has correctly set the attribute, not if the server has sent it","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"657cdea3e37f12138713e35bf0f7a2fd186fcda2","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def check_user(self, user, user_ref\u003dNone):"},{"line_number":33,"context_line":"        self.assertTrue(user.enabled)"},{"line_number":34,"context_line":"        self.assertIn(\u0027self\u0027, user.links)"},{"line_number":35,"context_line":"        self.assertIn(\u0027/users/\u0027 + user.id, user.links[\u0027self\u0027])"},{"line_number":36,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_72da2c7a","line":34,"in_reply_to":"ba0121b8_8c57f725","updated":"2016-04-04 13:40:09.000000000","message":"Isn\u0027t this testing the client has set the user.links attribute correctly ?","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d416654b54fad3e79c63a64db9b88d84a27c819e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def check_user(self, user, user_ref\u003dNone):"},{"line_number":33,"context_line":"        self.assertTrue(user.enabled)"},{"line_number":34,"context_line":"        self.assertIn(\u0027self\u0027, user.links)"},{"line_number":35,"context_line":"        self.assertIn(\u0027/users/\u0027 + user.id, user.links[\u0027self\u0027])"},{"line_number":36,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        if user_ref:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_0c3ac7e7","line":35,"updated":"2016-04-01 20:30:02.000000000","message":"same here.","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d416654b54fad3e79c63a64db9b88d84a27c819e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":52,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_create_user(self):"},{"line_number":55,"context_line":"        user_ref \u003d {"},{"line_number":56,"context_line":"            \u0027name\u0027: test_fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,"},{"line_number":57,"context_line":"            \u0027domain\u0027: self.project_domain_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_0c6c8707","line":54,"updated":"2016-04-01 20:30:02.000000000","message":"tests that don\u0027t use the UserGroupFixture don\u0027t belong in this class, otherwise it\u0027s just wasteful and slow. Either move this to a separate class or have only the tests that use the fixture create it.","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"89af74a38ba4797071ea0afb57df1e599629e1e0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":52,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_create_user(self):"},{"line_number":55,"context_line":"        user_ref \u003d {"},{"line_number":56,"context_line":"            \u0027name\u0027: test_fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,"},{"line_number":57,"context_line":"            \u0027domain\u0027: self.project_domain_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_322cf901","line":54,"in_reply_to":"9a061dce_322b9432","updated":"2016-04-05 13:25:35.000000000","message":"think that while we don\u0027t have another tests (classes) using the fixtures, they can be placed here.","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"657cdea3e37f12138713e35bf0f7a2fd186fcda2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.assertIsNotNone(user.name)"},{"line_number":52,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_create_user(self):"},{"line_number":55,"context_line":"        user_ref \u003d {"},{"line_number":56,"context_line":"            \u0027name\u0027: test_fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,"},{"line_number":57,"context_line":"            \u0027domain\u0027: self.project_domain_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_322b9432","line":54,"in_reply_to":"ba0121b8_0c6c8707","updated":"2016-04-04 13:40:09.000000000","message":"I agree, and I also wonder if a fixture is buying us anything in this case. Maybe the code is more complex than creating the entities (in most cases only 1, if any) we need in the tests themselves ?\n\nPerhaps calling the fixture inside the test (I didn\u0027t know this was possible, since setUp for this tests has already been called) can be a good alternative","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d416654b54fad3e79c63a64db9b88d84a27c819e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.check_user(self.user, self.user_ref)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_user_grouping(self):"},{"line_number":88,"context_line":"        # First, check that the user is not in the group"},{"line_number":89,"context_line":"        self.assertRaises(http.NotFound,"},{"line_number":90,"context_line":"                          self.client.users.check_in_group,"},{"line_number":91,"context_line":"                          self.user.id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_e7a84cde","line":88,"updated":"2016-04-01 20:30:02.000000000","message":"comments should say why the code is here not what it\u0027s doing since we can see what it\u0027s doing. This applies to all the comments in this test.","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d416654b54fad3e79c63a64db9b88d84a27c819e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                          self.user.id,"},{"line_number":103,"context_line":"                          self.group.id)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_delete_user(self):"},{"line_number":106,"context_line":"        user \u003d self.client.users.create(name\u003duuid.uuid4().hex,"},{"line_number":107,"context_line":"                                        domain\u003dself.project_domain_id)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_ac98fb1c","line":105,"updated":"2016-04-01 20:30:02.000000000","message":"here\u0027s another test that doesn\u0027t use the fixture so belongs in a different class, or this class should not be creating the fixture in setUp.","commit_id":"d87ae9f7fef3032e290288301c29da002c045928"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da00bd0ade9ee65d53cffd9c128c441aeeb10260","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if user_ref:"},{"line_number":29,"context_line":"            self.assertEqual(user_ref.get(\u0027name\u0027), user.name)"},{"line_number":30,"context_line":"            self.assertEqual(user_ref.get(\u0027domain\u0027), user.domain_id)"},{"line_number":31,"context_line":"            # There is no guarantee the attributes below are present in user"},{"line_number":32,"context_line":"            if hasattr(user, \u0027description\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_be02f4b1","line":29,"updated":"2016-04-07 20:50:00.000000000","message":"These should be use [] rather than .get(). You can\u0027t have a name of None (line 41 says you can\u0027t have a name that\u0027s None). So name needs to always be there anyways.","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ce18b2f815ed56b853e7671b22a5874c7b1c5390","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.assertIsNotNone(user.id)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if user_ref:"},{"line_number":29,"context_line":"            self.assertEqual(user_ref.get(\u0027name\u0027), user.name)"},{"line_number":30,"context_line":"            self.assertEqual(user_ref.get(\u0027domain\u0027), user.domain_id)"},{"line_number":31,"context_line":"            # There is no guarantee the attributes below are present in user"},{"line_number":32,"context_line":"            if hasattr(user, \u0027description\u0027):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a18252c_0291d4f0","line":29,"in_reply_to":"9a061dce_be02f4b1","updated":"2016-04-12 14:07:20.000000000","message":"Done","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da00bd0ade9ee65d53cffd9c128c441aeeb10260","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            self.assertEqual(user_ref.get(\u0027name\u0027), user.name)"},{"line_number":30,"context_line":"            self.assertEqual(user_ref.get(\u0027domain\u0027), user.domain_id)"},{"line_number":31,"context_line":"            # There is no guarantee the attributes below are present in user"},{"line_number":32,"context_line":"            if hasattr(user, \u0027description\u0027):"},{"line_number":33,"context_line":"                self.assertEqual(user_ref.get(\u0027description\u0027), user.description)"},{"line_number":34,"context_line":"            if hasattr(user, \u0027email\u0027):"},{"line_number":35,"context_line":"                self.assertEqual(user_ref.get(\u0027email\u0027), user.email)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_de0a48d1","line":32,"updated":"2016-04-07 20:50:00.000000000","message":"This should be checking that if the user_ref has a description that the user has the description. Otherwise there could be a bug in the code where the description is dropped by the client and this test would still pass.\n\nThis applies to the other checks here.","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ce18b2f815ed56b853e7671b22a5874c7b1c5390","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            self.assertEqual(user_ref.get(\u0027name\u0027), user.name)"},{"line_number":30,"context_line":"            self.assertEqual(user_ref.get(\u0027domain\u0027), user.domain_id)"},{"line_number":31,"context_line":"            # There is no guarantee the attributes below are present in user"},{"line_number":32,"context_line":"            if hasattr(user, \u0027description\u0027):"},{"line_number":33,"context_line":"                self.assertEqual(user_ref.get(\u0027description\u0027), user.description)"},{"line_number":34,"context_line":"            if hasattr(user, \u0027email\u0027):"},{"line_number":35,"context_line":"                self.assertEqual(user_ref.get(\u0027email\u0027), user.email)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a18252c_3f634bb3","line":32,"in_reply_to":"9a061dce_de0a48d1","updated":"2016-04-12 14:07:20.000000000","message":"Makes sense, thanks","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da00bd0ade9ee65d53cffd9c128c441aeeb10260","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":50,"context_line":"            \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        user \u003d self.client.users.create(**user_ref)"},{"line_number":53,"context_line":"        self.addCleanup(self.client.users.delete, user)"},{"line_number":54,"context_line":"        self.check_user(user, user_ref)"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_de3c0895","line":52,"updated":"2016-04-07 20:50:00.000000000","message":"All of our functional tests should be based off of the documentation, and the documentation doesn\u0027t say what the arguments are to create(). So before tests are added for a function, the documentation should be clear on how the function works so that we know the test is valid.\n\nhttp://docs.openstack.org/developer/python-keystoneclient/api/keystoneclient.v3.html#keystoneclient.v3.users.UserManager.create","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ce18b2f815ed56b853e7671b22a5874c7b1c5390","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":50,"context_line":"            \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        user \u003d self.client.users.create(**user_ref)"},{"line_number":53,"context_line":"        self.addCleanup(self.client.users.delete, user)"},{"line_number":54,"context_line":"        self.check_user(user, user_ref)"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a18252c_7f14a3f4","line":52,"in_reply_to":"9a061dce_de3c0895","updated":"2016-04-12 14:07:20.000000000","message":"I will create the docs in a patch and rebase this one on it","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da00bd0ade9ee65d53cffd9c128c441aeeb10260","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # All users are valid"},{"line_number":70,"context_line":"        for user in users:"},{"line_number":71,"context_line":"            self.check_user(user)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.assertIn(fixture.user, users)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_9ee1f02c","line":71,"updated":"2016-04-07 20:50:00.000000000","message":"this is going to fail if devstack gets a disabled user for whatever reason.","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ce18b2f815ed56b853e7671b22a5874c7b1c5390","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # All users are valid"},{"line_number":70,"context_line":"        for user in users:"},{"line_number":71,"context_line":"            self.check_user(user)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.assertIn(fixture.user, users)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a18252c_9f26df66","line":71,"in_reply_to":"9a061dce_9ee1f02c","updated":"2016-04-12 14:07:20.000000000","message":"Agreed, I changed assertTrue to assertIsNotNone for user.enabled in check_user()","commit_id":"b4a3ccf6480b150613476df26af17d958928c6c8"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bc7f1ff8d8b9137fb4720befef0a31c265c3bdee","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_user(self):"},{"line_number":45,"context_line":"        user_ref \u003d {"},{"line_number":46,"context_line":"            \u0027name\u0027: fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,"},{"line_number":47,"context_line":"            \u0027domain\u0027: self.project_domain_id,"},{"line_number":48,"context_line":"            \u0027default_project\u0027: self.project_id,"},{"line_number":49,"context_line":"            \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":50,"context_line":"            \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        user \u003d self.client.users.create(**user_ref)"},{"line_number":53,"context_line":"        self.addCleanup(self.client.users.delete, user)"},{"line_number":54,"context_line":"        self.check_user(user, user_ref)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_get_user(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a18252c_1e6c0dcf","line":53,"range":{"start_line":45,"start_character":0,"end_line":53,"end_character":55},"updated":"2016-04-14 15:18:45.000000000","message":"why not use the fixture? you can add some kwargs to the setUp method to provide this extra optional attributes.","commit_id":"ef7be4b3f477fc09a874a04e5b25bf70c7db19cb"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"42321ae77dfcefd3e46fad1455037b44d0227f0d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            self.assertIsNotNone(user.domain_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_user(self):"},{"line_number":45,"context_line":"        user_ref \u003d {"},{"line_number":46,"context_line":"            \u0027name\u0027: fixtures.RESOURCE_NAME_PREFIX + uuid.uuid4().hex,"},{"line_number":47,"context_line":"            \u0027domain\u0027: self.project_domain_id,"},{"line_number":48,"context_line":"            \u0027default_project\u0027: self.project_id,"},{"line_number":49,"context_line":"            \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":50,"context_line":"            \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        user \u003d self.client.users.create(**user_ref)"},{"line_number":53,"context_line":"        self.addCleanup(self.client.users.delete, user)"},{"line_number":54,"context_line":"        self.check_user(user, user_ref)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_get_user(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a122d0e_bdd73aec","line":53,"range":{"start_line":45,"start_character":0,"end_line":53,"end_character":55},"in_reply_to":"5a18252c_1e6c0dcf","updated":"2016-04-18 11:58:39.000000000","message":"As it\u0027s testing the user creation, I prefer to explicitly define the creation here, as it may help understanding the test.\n\nFor other tests, they don\u0027t need to understand how the user is created, they just need it.","commit_id":"ef7be4b3f477fc09a874a04e5b25bf70c7db19cb"}]}
