)]}'
{"openstack_dashboard/test/integration_tests/pages/project/compute/volumes/volumespage.py":[{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"08961e285b3046764e3190d4779e15550aa741dd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    DEFAULT_SIZE \u003d 1"},{"line_number":24,"context_line":"    DEFAULT_AVAILABILITY_ZONE \u003d \u0027Any Availability Zone\u0027"},{"line_number":25,"context_line":"    DEFAULT_VOLUME_SOURCE \u003d \u0027No source, empty volume\u0027"},{"line_number":26,"context_line":"    DEFAULT_VOLUME_IMAGE_SOURCE \u003d \u0027cirros-0.3.2-x86_64-uec (24.0 MB)\u0027"},{"line_number":27,"context_line":"    DEFAULT_VOLUME_TYPE \u003d \u0027No volume type\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    _volumes_table_locator \u003d (by.By.CSS_SELECTOR, \u0027table#volumes\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_4a4936cf","line":26,"updated":"2015-03-02 19:18:05.000000000","message":"Can you please move this default on the configuration file, which already contains a key related to cirros? So that it\u0027s easier to update the values in one shot (also because the test included in this review does not override the value).","commit_id":"4f3f012dc5d237fa27e4dd3ec784643932464a76"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"08961e285b3046764e3190d4779e15550aa741dd","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        volume_form.availability_zone.text \u003d availability_zone"},{"line_number":90,"context_line":"        volume_form.submit.click()"},{"line_number":91,"context_line":"        wait.WebDriverWait(self.driver, self.explicit_wait).until("},{"line_number":92,"context_line":"            lambda x: self.is_volume_present(volume_name))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def terminate_volume(self, volume_name):"},{"line_number":95,"context_line":"        row \u003d self._get_row_with_volume_name(volume_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_ca5a8682","line":92,"updated":"2015-03-02 19:18:05.000000000","message":"I know, it was introduced recently, after your patch, but there is now a generic wrapper for WebDriverWait in BaseWebObject, called _wait_until, maybe you want to use it.","commit_id":"4f3f012dc5d237fa27e4dd3ec784643932464a76"},{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"d9c958ba5dac0795ff82a17dd79b1451e9d70158","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        volume_form.availability_zone.text \u003d availability_zone"},{"line_number":90,"context_line":"        volume_form.submit.click()"},{"line_number":91,"context_line":"        wait.WebDriverWait(self.driver, self.explicit_wait).until("},{"line_number":92,"context_line":"            lambda x: self.is_volume_present(volume_name))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def terminate_volume(self, volume_name):"},{"line_number":95,"context_line":"        row \u003d self._get_row_with_volume_name(volume_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_946de534","line":92,"in_reply_to":"ba7be1f8_ca5a8682","updated":"2015-03-03 15:02:23.000000000","message":"+","commit_id":"4f3f012dc5d237fa27e4dd3ec784643932464a76"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"08961e285b3046764e3190d4779e15550aa741dd","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.volumes_table.delete_volumes.click()"},{"line_number":98,"context_line":"        self.confirm_delete_volumes_form.submit.click()"},{"line_number":99,"context_line":"        wait.WebDriverWait(self.driver, self.explicit_wait).until_not("},{"line_number":100,"context_line":"            lambda x: self.is_volume_present(volume_name))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def is_volume_active(self, volume_name):"},{"line_number":103,"context_line":"        row \u003d self._get_row_with_volume_name(volume_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_ea5d8a7a","line":100,"updated":"2015-03-02 19:18:05.000000000","message":"See above","commit_id":"4f3f012dc5d237fa27e4dd3ec784643932464a76"}],"openstack_dashboard/test/integration_tests/pages/projectpage.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"39d63530e982a529732363a872b192bc375c8ee1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        access_security_locator_flag \u003d self.is_element_visible("},{"line_number":31,"context_line":"            self.navaccordion._project_access_security_locator)"},{"line_number":32,"context_line":"        if not access_security_locator_flag:"},{"line_number":33,"context_line":"            self.navaccordion.project_bar.click()"},{"line_number":34,"context_line":"        self.navaccordion.access_security.click()"},{"line_number":35,"context_line":"        return accesssecuritypage.AccessSecurityPage("},{"line_number":36,"context_line":"            self.driver, self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_fa65e4ae","line":33,"updated":"2014-09-06 04:48:29.000000000","message":"This four lines can be moved to a different method and made reusable for the go_to_volumes_page()","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"39d63530e982a529732363a872b192bc375c8ee1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return accesssecuritypage.AccessSecurityPage("},{"line_number":36,"context_line":"            self.driver, self.conf)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def go_to_volumes_page(self):"},{"line_number":39,"context_line":"        self.navaccordion._click_on_volumes()"},{"line_number":40,"context_line":"        return volumespage.VolumesPage(self.driver,self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_baf6fcd4","line":38,"updated":"2014-09-06 04:48:29.000000000","message":"You would need to call the four lines in the above comment too, this covers the case when the user is not in the project dashboard. It would navigate to the project dashboard first clicking the volume link.","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"39d63530e982a529732363a872b192bc375c8ee1","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def go_to_volumes_page(self):"},{"line_number":39,"context_line":"        self.navaccordion._click_on_volumes()"},{"line_number":40,"context_line":"        return volumespage.VolumesPage(self.driver,self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_3a64ccb7","line":40,"updated":"2014-09-06 04:48:29.000000000","message":"missing a space after the comma","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"}],"openstack_dashboard/test/integration_tests/pages/volumespage.py":[{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"c941a384ce9859b1c57a86d41be515d2290966a4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self._page_title \u003d \"Volumes\""},{"line_number":27,"context_line":"        self.Volume_name \u003d \u0027Volume_\u0027 + str(datetime.datetime.now()."},{"line_number":28,"context_line":"                                       strftime(\"%Y%m%d%H%M%S\")[2:])"},{"line_number":29,"context_line":"        self.Volume_snapshot_name \u003d self.Volume_name + \u0027_snapshot\u0027"},{"line_number":30,"context_line":"        self._volumes_tab \u003d (by.By.CSS_SELECTOR, \u0027\\"},{"line_number":31,"context_line":"             a[href\u003d\"?tab\u003dvolumes_and_snapshots__volumes_tab\"]\u0027)"},{"line_number":32,"context_line":"        self._volumes_volume_snapshots_tab_locator \u003d (by.By.CSS_SELECTOR, \u0027\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_942ba893","line":29,"updated":"2014-09-08 14:48:56.000000000","message":"Why do you use capital letters for name of variable ?","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"7791d9f56db8f7b2d146c60cbba104e82a349509","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.Volume_name \u003d \u0027Volume_\u0027 + str(datetime.datetime.now()."},{"line_number":28,"context_line":"                                       strftime(\"%Y%m%d%H%M%S\")[2:])"},{"line_number":29,"context_line":"        self.Volume_snapshot_name \u003d self.Volume_name + \u0027_snapshot\u0027"},{"line_number":30,"context_line":"        self._volumes_tab \u003d (by.By.CSS_SELECTOR, \u0027\\"},{"line_number":31,"context_line":"             a[href\u003d\"?tab\u003dvolumes_and_snapshots__volumes_tab\"]\u0027)"},{"line_number":32,"context_line":"        self._volumes_volume_snapshots_tab_locator \u003d (by.By.CSS_SELECTOR, \u0027\\"},{"line_number":33,"context_line":"             a[href\u003d\"?tab\u003dvolumes_and_snapshots__snapshots_tab\"]\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_e692a2f5","line":30,"updated":"2014-12-07 14:20:06.000000000","message":"I agree with Vlad. Could you please add comment with explanation why \u0027Volume\u0027 is capitalized, or just use small letters if it is mistake?","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"c941a384ce9859b1c57a86d41be515d2290966a4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                                          self.conf)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @property"},{"line_number":65,"context_line":"    def Volumes_tab(self):"},{"line_number":66,"context_line":"        return self.get_element(*self._volumes_tab)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_9719ea7b","line":65,"updated":"2014-09-08 14:48:56.000000000","message":".... and for name of function ?","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"c941a384ce9859b1c57a86d41be515d2290966a4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def Volume_delete_cnf_button(self):"},{"line_number":70,"context_line":"        return self.get_element(*self._volumes_delete_volume_conf_locator)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _click_on_Volumes_tab(self):"},{"line_number":73,"context_line":"        self.Volumes_tab.click()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _click_on_Volume_delete_cnf_button(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_b7e8ae17","line":72,"updated":"2014-09-08 14:48:56.000000000","message":"if you have _locator and have @property(for this locator), you should be don\u0027t use  _click_on_Volumes_tab (and etc). In the right places -- use: self._click_on_Volumes_tab.click()","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"c941a384ce9859b1c57a86d41be515d2290966a4","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                *self.volumes_modal._volumes_status_locator))"},{"line_number":99,"context_line":"        return self.get_element(*self.volumes_modal._volumes_status_locator)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def delete_Volume(self):"},{"line_number":102,"context_line":"        self.volumes_modal.Volume_actions_drop_down.click()"},{"line_number":103,"context_line":"        self.get_element("},{"line_number":104,"context_line":"            *self.volumes_modal._delete_volume_button_locator).click()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_b45fcc74","line":101,"updated":"2014-09-08 14:48:56.000000000","message":"delete_Volume  ---\u003e  delete_volume","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"c941a384ce9859b1c57a86d41be515d2290966a4","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                a#volumes__action_create\u0027)"},{"line_number":179,"context_line":"            self._volumes_actions_dropdown_locator \u003d (by.By.CSS_SELECTOR, \"\\"},{"line_number":180,"context_line":"                tr[data-display\u003d%s] a[data-toggle\u003d\u0027dropdown\u0027]\\"},{"line_number":181,"context_line":"                \" % (self.Volume_name))"},{"line_number":182,"context_line":"            self._edit_volume_button_locator \u003d (by.By.CSS_SELECTOR, \"\\"},{"line_number":183,"context_line":"                tr[data-display\u003d%s] [id$\u003d__action_edit]\" % (self.Volume_name))"},{"line_number":184,"context_line":"            self._extend_volume_button_locator \u003d (by.By.CSS_SELECTOR, \"\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_77c72665","line":181,"updated":"2014-09-08 14:48:56.000000000","message":"For all locators --- please don\u0027t use \"\\\". For example:\n\nself._volumes_actions_dropdown_locator \u003d (\n    by.By.CSS_SELECTOR,\n    \"tr[data-display\u003d%s] \"\n    \"a[data-toggle\u003d\u0027dropdown\u0027]\"\n    % (self.Volume_name)\n)","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"}],"openstack_dashboard/test/integration_tests/tests/test_volumes.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"39d63530e982a529732363a872b192bc375c8ee1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        volumes_page \u003d self.home_pg.go_to_volumes_page()"},{"line_number":36,"context_line":"        self.Volume_check_locator \u003d volumes_page.create_Volume("},{"line_number":37,"context_line":"            **volume_attributes)"},{"line_number":38,"context_line":"        self.assertTrue(self.Volume_check_locator.text \u003d\u003d \u0027Available\u0027)"},{"line_number":39,"context_line":"        self.Volume_check_locator \u003d volumes_page.delete_Volume()"},{"line_number":40,"context_line":"        volume_status \u003d volumes_page.is_element_present("},{"line_number":41,"context_line":"            *self.Volume_check_locator)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_daef40e7","line":38,"updated":"2014-09-06 04:48:29.000000000","message":"Could just use assertEqual(result, expected) here","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"39d63530e982a529732363a872b192bc375c8ee1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        volumes_page \u003d self.home_pg.go_to_volumes_page()"},{"line_number":51,"context_line":"        self.Volume_check_locator \u003d volumes_page.create_Volume("},{"line_number":52,"context_line":"            **volume_attributes)"},{"line_number":53,"context_line":"        self.assertTrue(self.Volume_check_locator.text \u003d\u003d \u0027Available\u0027)"},{"line_number":54,"context_line":"        self.Volume_check_locator \u003d volumes_page.extend_volume("},{"line_number":55,"context_line":"            volume_extend_new_size)"},{"line_number":56,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_bae43c0d","line":53,"updated":"2014-09-06 04:48:29.000000000","message":"Could just use assertEqual(result, expected) here","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"39d63530e982a529732363a872b192bc375c8ee1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        volumes_page \u003d self.home_pg.go_to_volumes_page()"},{"line_number":70,"context_line":"        self.Volume_check_locator \u003d volumes_page.create_Volume("},{"line_number":71,"context_line":"            **volume_attributes)"},{"line_number":72,"context_line":"        self.assertTrue(self.Volume_check_locator.text \u003d\u003d \u0027Available\u0027)"},{"line_number":73,"context_line":"        self.Volume_check_locator \u003d volumes_page.filter_volumes()"},{"line_number":74,"context_line":"        volume_status \u003d volumes_page.is_element_present("},{"line_number":75,"context_line":"            *self.Volume_check_locator)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_9ae938e8","line":72,"updated":"2014-09-06 04:48:29.000000000","message":"Could just use assertEqual(result, expected) here","commit_id":"b878e755e531c9aafc912e9db5efe50a5d6071c7"},{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"b779c7b5e0915eae56d59fe4d02ce913393d0ff9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations\r"},{"line_number":11,"context_line":"#    under the License.\r"},{"line_number":12,"context_line":"import datetime\r"},{"line_number":13,"context_line":"\r"},{"line_number":14,"context_line":"from openstack_dashboard.test.integration_tests import helpers\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"VOLUME_NAME \u003d \u0027Volume_\u0027 + str(datetime.datetime.now().\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_936d8ccf","line":13,"updated":"2014-12-16 08:47:31.000000000","message":"what is it ?","commit_id":"f434a8ace887baaa7b27248980e7f2fa65024c53"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"08961e285b3046764e3190d4779e15550aa741dd","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from openstack_dashboard.test.integration_tests import helpers"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"VOLUME_NAME \u003d \u0027Volume_\u0027 + str(uuid.uuid4())"},{"line_number":17,"context_line":"VOLUME_DESCRIPTION \u003d \u0027test_\u0027 + VOLUME_NAME"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_6aa51a46","line":16,"updated":"2015-03-02 19:18:05.000000000","message":"Another new helper functions has landed in the meantime, see gen_random_resource_name in openstack_dashboard/test/integration_tests/helpers.py","commit_id":"4f3f012dc5d237fa27e4dd3ec784643932464a76"},{"author":{"_account_id":12355,"name":"Vlad Okhrimenko","email":"vokhrimenko@mirantis.com","username":"vokhrimenko"},"change_message_id":"d0a01d80efef54121809107398b67f4315adb1af","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    \"\"\"This is a basic scenario test:"},{"line_number":22,"context_line":"    * checks able to login as a regular user"},{"line_number":23,"context_line":"    * checks that the user able to create/delete volumes"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_create_delete_volume(self):"},{"line_number":27,"context_line":"        \"\"\"tests create volume"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_01c15e2e","line":24,"updated":"2015-03-04 08:58:27.000000000","message":"Does it comment really need ?","commit_id":"4f3f012dc5d237fa27e4dd3ec784643932464a76"}]}
