)]}'
{"tempest/api/identity/admin/v3/test_tokens.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7550182efc5a7b8c0ea06ae563946035c492facf","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.assertRaises(lib_exc.NotFound, self.client.show_token,"},{"line_number":50,"context_line":"                          subject_token)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @decorators.idempotent_id(\u0027565fa210-1da1-4563-999b-f7b5b67cf112\u0027)"},{"line_number":54,"context_line":"    def test_rescope_token(self):"},{"line_number":55,"context_line":"        \"\"\"Rescope a token."}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_452ccd46","line":52,"updated":"2017-05-28 14:41:15.000000000","message":"This is a stray whitespace, it\u0027ll fail pep8 because there should only be 1 blank line here","commit_id":"54e12e4f6c2885a238c706b3181930c7b8a15d41"}],"tempest/api/identity/v3/test_tokens.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e5176b05cb039f7b95c2cdb2849f5c5e6504a429","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        u_name \u003d data_utils.rand_name(\u0027user\u0027)"},{"line_number":30,"context_line":"        u_desc \u003d \u0027%s-description\u0027 % u_name"},{"line_number":31,"context_line":"        u_password \u003d data_utils.rand_password()"},{"line_number":32,"context_line":"        user \u003d self.create_test_user("},{"line_number":33,"context_line":"            name\u003du_name, description\u003du_desc, password\u003du_password)"},{"line_number":34,"context_line":"        # Perform Authentication"},{"line_number":35,"context_line":"        resp \u003d self.token.auth(user_id\u003duser[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff0f0b1f_7bac42ec","line":32,"updated":"2017-05-24 16:38:22.000000000","message":"Creating a user is an admin action. I agree that testing a token can be created by a user should not require admin creds, but isn\u0027t that what test_create_token() below is testing?\n\nIs there something in this test which we\u0027re not doing below?","commit_id":"e8e5f54615be327f9f0f0fc2a1511b465fb1bf53"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"0ccc02fc8c98250f435d36507b4a2fb1ebae5df2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        u_name \u003d data_utils.rand_name(\u0027user\u0027)"},{"line_number":30,"context_line":"        u_desc \u003d \u0027%s-description\u0027 % u_name"},{"line_number":31,"context_line":"        u_password \u003d data_utils.rand_password()"},{"line_number":32,"context_line":"        user \u003d self.create_test_user("},{"line_number":33,"context_line":"            name\u003du_name, description\u003du_desc, password\u003du_password)"},{"line_number":34,"context_line":"        # Perform Authentication"},{"line_number":35,"context_line":"        resp \u003d self.token.auth(user_id\u003duser[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff0f0b1f_f62939f2","line":32,"in_reply_to":"ff0f0b1f_7bac42ec","updated":"2017-05-26 18:20:09.000000000","message":"For interop, we need to test crud operations. We use the test below for create, but don\u0027t have a test for validate. I\u0027m wondering if the two operations are inextricably linked together?\n\nAgree that we should use an existing user, and that the test still requires admin access. Question, does it make sense for a new non-admin test for token validation?","commit_id":"e8e5f54615be327f9f0f0fc2a1511b465fb1bf53"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7550182efc5a7b8c0ea06ae563946035c492facf","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            user_domain_id\u003duser_domain_id,"},{"line_number":36,"context_line":"            password\u003dpassword,"},{"line_number":37,"context_line":"            auth_data\u003dTrue)"},{"line_number":38,"context_line":"        subject_token \u003d resp[\u0027X-Subject-Token\u0027]"},{"line_number":39,"context_line":"        created_token \u003d self.client.show_token(subject_token)[\u0027token\u0027]"},{"line_number":40,"context_line":"        # check to make sure the token was properly validated"},{"line_number":41,"context_line":"        self.assertEqual(resp[\u0027X-Subject-Token\u0027], created_token)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_6527d166","line":38,"updated":"2017-05-28 14:41:15.000000000","message":"Looking at the results from keystone http://logs.openstack.org/93/467493/4/check/gate-tempest-dsvm-neutron-full-ubuntu-xenial/928ab7f/console.html#_2017-05-28_02_50_55_661049 this hould be lower case \u0027x-subject-token\u0027","commit_id":"54e12e4f6c2885a238c706b3181930c7b8a15d41"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"5d9c33d20aac18ed585e8f1f7ddda41fd362ef69","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        username \u003d creds.username"},{"line_number":29,"context_line":"        password \u003d creds.password"},{"line_number":30,"context_line":"        user_domain_id \u003d creds.user_domain_id"},{"line_number":31,"context_line":"        # GET and validate token"},{"line_number":32,"context_line":"        token_id, resp \u003d self.non_admin_token.get_token("},{"line_number":33,"context_line":"            user_id\u003duser_id,"},{"line_number":34,"context_line":"            username\u003dusername,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_87f2e405","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":32},"updated":"2017-05-29 07:38:07.000000000","message":"do we need this comment?","commit_id":"2a4fbdc934657cb7bd4d44e36a78511b882bee67"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"5d9c33d20aac18ed585e8f1f7ddda41fd362ef69","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            auth_data\u003dTrue)"},{"line_number":38,"context_line":"        subject_token \u003d resp[\u0027x-subject-token\u0027]"},{"line_number":39,"context_line":"        created_token \u003d self.client.show_token(subject_token)[\u0027token\u0027]"},{"line_number":40,"context_line":"        # check to make sure the token was properly validated"},{"line_number":41,"context_line":"        self.assertEqual(resp[\u0027x-subject-token\u0027], created_token)"},{"line_number":42,"context_line":"        self.assertEqual(created_token[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":43,"context_line":"        self.assertEqual(created_token[\u0027user\u0027][\u0027name\u0027], username)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_a7d6084f","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":61},"updated":"2017-05-29 07:38:07.000000000","message":"this","commit_id":"2a4fbdc934657cb7bd4d44e36a78511b882bee67"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"5d9c33d20aac18ed585e8f1f7ddda41fd362ef69","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(resp[\u0027x-subject-token\u0027], created_token)"},{"line_number":42,"context_line":"        self.assertEqual(created_token[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":43,"context_line":"        self.assertEqual(created_token[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":44,"context_line":"        # DELETE the token"},{"line_number":45,"context_line":"        self.client.delete_token(subject_token)"},{"line_number":46,"context_line":"        # raise exceptions"},{"line_number":47,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_47dccc73","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":26},"updated":"2017-05-29 07:38:07.000000000","message":"this too","commit_id":"2a4fbdc934657cb7bd4d44e36a78511b882bee67"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"5d9c33d20aac18ed585e8f1f7ddda41fd362ef69","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.assertEqual(created_token[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":44,"context_line":"        # DELETE the token"},{"line_number":45,"context_line":"        self.client.delete_token(subject_token)"},{"line_number":46,"context_line":"        # raise exceptions"},{"line_number":47,"context_line":"        self.assertRaises("},{"line_number":48,"context_line":"            lib_exc.NotFound, self.client.show_token, subject_token)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df140735_27d9d882","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":26},"updated":"2017-05-29 07:38:07.000000000","message":"and this too","commit_id":"2a4fbdc934657cb7bd4d44e36a78511b882bee67"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"5382df63395503f74222beb642d850364ea6f45e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            user_domain_id\u003duser_domain_id,"},{"line_number":37,"context_line":"            password\u003dpassword,"},{"line_number":38,"context_line":"            auth_data\u003dTrue)"},{"line_number":39,"context_line":"        subject_token \u003d resp[\u0027x-subject-token\u0027]"},{"line_number":40,"context_line":"        created_token \u003d self.client.show_token(subject_token)[\u0027token\u0027]"},{"line_number":41,"context_line":"        # check to make sure the token was properly validated"},{"line_number":42,"context_line":"        self.assertEqual(resp[\u0027x-subject-token\u0027], created_token)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_49bccd04","line":39,"updated":"2017-05-30 03:50:26.000000000","message":"So it looks like this is actually a header (which makes sense because of the x-) so you\u0027ll need do do resp.response to get the header dict. Sorry for missing that in my earlier review","commit_id":"71a1944eb8e87fbce7b5a99a8d3efaecd0920541"},{"author":{"_account_id":23709,"name":"Duc Truong","email":"dkt26111@gmail.com","username":"dtruong"},"change_message_id":"e0b7093ee082e585db47ea9ec98b8b67d055839b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            user_domain_id\u003duser_domain_id,"},{"line_number":37,"context_line":"            password\u003dpassword,"},{"line_number":38,"context_line":"            auth_data\u003dTrue)"},{"line_number":39,"context_line":"        subject_token \u003d resp.response[\u0027x-subject-token\u0027]"},{"line_number":40,"context_line":"        created_token \u003d self.client.show_token(subject_token)[\u0027token\u0027]"},{"line_number":41,"context_line":"        # check to make sure the token was properly validated"},{"line_number":42,"context_line":"        self.assertEqual(resp.response[\u0027x-subject-token\u0027], subject_token)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_5863671b","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":21},"updated":"2017-05-30 17:28:13.000000000","message":"The X-Subject-Token is already returned directly by non_admin_token.get_token and stored in your token_id parameter.  So you can just use it without dealing with resp parameter","commit_id":"d4c4e734183372c679e1d218dab29dd5b260b0d3"},{"author":{"_account_id":23709,"name":"Duc Truong","email":"dkt26111@gmail.com","username":"dtruong"},"change_message_id":"e0b7093ee082e585db47ea9ec98b8b67d055839b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        subject_token \u003d resp.response[\u0027x-subject-token\u0027]"},{"line_number":40,"context_line":"        created_token \u003d self.client.show_token(subject_token)[\u0027token\u0027]"},{"line_number":41,"context_line":"        # check to make sure the token was properly validated"},{"line_number":42,"context_line":"        self.assertEqual(resp.response[\u0027x-subject-token\u0027], subject_token)"},{"line_number":43,"context_line":"        self.assertEqual(created_token[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":44,"context_line":"        self.assertEqual(created_token[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":45,"context_line":"        # DELETE the token"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_787d0bb0","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":73},"updated":"2017-05-30 17:28:13.000000000","message":"This check can be removed because it only validates your assignment on line 39.","commit_id":"d4c4e734183372c679e1d218dab29dd5b260b0d3"},{"author":{"_account_id":23709,"name":"Duc Truong","email":"dkt26111@gmail.com","username":"dtruong"},"change_message_id":"1b9249aa77ec519872edb0065da5f802c62e53c6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            user_domain_id\u003duser_domain_id,"},{"line_number":37,"context_line":"            password\u003dpassword,"},{"line_number":38,"context_line":"            auth_data\u003dTrue)"},{"line_number":39,"context_line":"        subject_token \u003d token[\u0027x-subject-token\u0027]"},{"line_number":40,"context_line":"        # check to make sure the token was properly validated"},{"line_number":41,"context_line":"        self.assertEqual(token_body[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":42,"context_line":"        self.assertEqual(token_body[\u0027user\u0027][\u0027name\u0027], username)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df140735_61ed4e8a","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":21},"updated":"2017-05-30 23:33:07.000000000","message":"get_token() returns the token id that you can use as subject token to call show_token().\nI.e. subject_token \u003d token","commit_id":"b22bae9f63695b23c87158d88d9c6410f5810f32"},{"author":{"_account_id":23709,"name":"Duc Truong","email":"dkt26111@gmail.com","username":"dtruong"},"change_message_id":"1b9249aa77ec519872edb0065da5f802c62e53c6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            auth_data\u003dTrue)"},{"line_number":39,"context_line":"        subject_token \u003d token[\u0027x-subject-token\u0027]"},{"line_number":40,"context_line":"        # check to make sure the token was properly validated"},{"line_number":41,"context_line":"        self.assertEqual(token_body[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":42,"context_line":"        self.assertEqual(token_body[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":43,"context_line":"        # DELETE the token"},{"line_number":44,"context_line":"        self.client.delete_token(subject_token)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df140735_81b86276","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":59},"updated":"2017-05-30 23:33:07.000000000","message":"You are missing the call to show_token() from your previous patch set.  Without it this only verifies that the authentication service was able to obtain a valid token, which is already covered by test_create_token below.","commit_id":"b22bae9f63695b23c87158d88d9c6410f5810f32"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"6f976981e3e3f1e5d48de828db9f26d1b035a41b","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_utils import timeutils"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":"from tempest.api.identity import base"},{"line_number":19,"context_line":"from tempest.lib import decorators"},{"line_number":20,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_ac75cc9a","line":18,"updated":"2017-06-10 05:54:29.000000000","message":"Please separate importing third party lib and local module.","commit_id":"b158b6a6e429dceeb6098e2f017d02cf669f9478"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b3160f65303a483686bde8c7cc3eccf6e34ae138","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        # test to see if token has been properly authenticated"},{"line_number":44,"context_line":"        self.assertEqual(authenticated_token[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":45,"context_line":"        self.assertEqual(authenticated_token[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":46,"context_line":"        self.non_admin_client.delete_token(subject_token)"},{"line_number":47,"context_line":"        self.assertRaises("},{"line_number":48,"context_line":"            lib_exc.NotFound, self.non_admin_client.show_token, subject_token)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @decorators.idempotent_id(\u00276f8e4436-fc96-4282-8122-e41df57197a9\u0027)"},{"line_number":51,"context_line":"    def test_create_token(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_ca1b5371","line":48,"range":{"start_line":46,"start_character":0,"end_line":48,"end_character":78},"updated":"2017-06-09 17:58:43.000000000","message":"Most part is the same as the following test_create_token() and this part is only different.\n\nDo you just want to check the deleted token disappear as the main purpose?","commit_id":"b158b6a6e429dceeb6098e2f017d02cf669f9478"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"b750e425d8eb2a4c0aedbb1849e81c85f87d89af","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_utils import timeutils"},{"line_number":17,"context_line":"from datetime import datetime"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from tempest.api.identity import base"},{"line_number":21,"context_line":"from tempest.lib import decorators"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f231b9d_f3befcfd","line":18,"updated":"2017-06-11 06:30:54.000000000","message":"Please import six as a third party lib","commit_id":"227c8847e3c82f2e832270ebef042d138203dec3"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"b750e425d8eb2a4c0aedbb1849e81c85f87d89af","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.assertEqual(authenticated_token[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":47,"context_line":"        self.assertEqual(authenticated_token[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":48,"context_line":"        self.assertGreater(authenticated_token[\u0027expires_at\u0027],"},{"line_number":49,"context_line":"            datetime.now().isoformat())"},{"line_number":50,"context_line":"        self.non_admin_client.delete_token(subject_token)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @decorators.idempotent_id(\u00276f8e4436-fc96-4282-8122-e41df57197a9\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f231b9d_334a3427","line":49,"updated":"2017-06-11 06:30:54.000000000","message":"You are missing to fix pep8 on this line :D","commit_id":"227c8847e3c82f2e832270ebef042d138203dec3"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"668b9f496cab555d59c93920f949887d459435d9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_utils import timeutils"},{"line_number":17,"context_line":"from datetime import datetime"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f231b9d_8783d4cc","line":16,"updated":"2017-06-12 23:57:22.000000000","message":"Oslo.utils should be considered as a third party lib.","commit_id":"ca5b57f63f2a688e65365240adb4d3dd13e501ef"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"668b9f496cab555d59c93920f949887d459435d9","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.api.identity import base"},{"line_number":22,"context_line":"from tempest.lib import decorators"},{"line_number":23,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TokensV3Test(base.BaseIdentityV3Test):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f231b9d_a7bb70c2","line":23,"updated":"2017-06-12 23:57:22.000000000","message":"Where did you plan to use this \"lib_exc\"?","commit_id":"ca5b57f63f2a688e65365240adb4d3dd13e501ef"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1f8279bb3c36761fe36005f8dadc71d3b577c409","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # test to see if token has been properly authenticated"},{"line_number":46,"context_line":"        self.assertEqual(authenticated_token[\u0027user\u0027][\u0027id\u0027], user_id)"},{"line_number":47,"context_line":"        self.assertEqual(authenticated_token[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":48,"context_line":"        self.assertGreater(authenticated_token[\u0027expires_at\u0027],"},{"line_number":49,"context_line":"                           datetime.now().isoformat())"},{"line_number":50,"context_line":"        self.non_admin_client.delete_token(subject_token)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_d807d1c9","line":48,"updated":"2017-06-18 09:30:23.000000000","message":"I get really twitchy when we start to compare timestamps in tests. There are a lot of assumptions that get baked into a check like this which just make non-deterministic failures pop up. For example, are the system clocks for the machine keystone is running on and the machine tempest is running on in sync. Or the token expiry configuration on keystone being greater than the time to execute L35-47.\n\nSo I think we should just remove this check, or change it to something that doesn\u0027t involved actual time. (like checking it\u0027s a valid timestamp or something)","commit_id":"1006662c2b4ad87b274d06812c20c85131c42cee"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1f8279bb3c36761fe36005f8dadc71d3b577c409","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.assertEqual(authenticated_token[\u0027user\u0027][\u0027name\u0027], username)"},{"line_number":48,"context_line":"        self.assertGreater(authenticated_token[\u0027expires_at\u0027],"},{"line_number":49,"context_line":"                           datetime.now().isoformat())"},{"line_number":50,"context_line":"        self.non_admin_client.delete_token(subject_token)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @decorators.idempotent_id(\u00276f8e4436-fc96-4282-8122-e41df57197a9\u0027)"},{"line_number":53,"context_line":"    def test_create_token(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_7810bd00","line":50,"updated":"2017-06-18 09:30:23.000000000","message":"Do we want to check that we get a 404 on the show token after this. Since we\u0027re explicitly deleting the token as part of the test it makes me feel like we want to verify it actually isn\u0027t valid anymore.","commit_id":"1006662c2b4ad87b274d06812c20c85131c42cee"}]}
