Smart Update Notification
Review Request #8738 — Created Feb. 10, 2017 and discarded
When viewing a review request, Review Board periodically checks to see if there have been any updates to the review request.Currently we only receive the last update regarding the type of change and who it was made by.
The goal of this project is to retrieve and display all sorts of updates since a specific timestamp with the type of change, who it was made by, and other useful details.
Manual tests in the browsers have been done on both UpdateBubble and TextBubble:
- No update: no update bubble was opened
- 1 update: update bubble was shown the 1 update with the update type and username
- Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot
- Hovering over the UpdateBubble will expand the bubble to display the text bubbles with some CSS transition
- All the texts are capped at 300 character per with a [...] indicator
- The text pane is vertically scrollable when necessary
- "Ship it!" label is displayed on middle top of text box when appliable
- For review/reply, text is either "body-top" content or first comment.
- For update, text is a short summary with some relevant description.
- Clicking on each text bubble will refresh the page and navigate to the specific location.Python testing cases for review_request_last_update API include as following:
- New reviews/comments: pass
- New replies: pass
- New udpates (diffsets, field changes and file attachments): pass
- default case for no/improperly-formatted timestamp: pass
- Test case for no updates: passJasmine JavaScript Unit tests have been added for:
- UpdateBubbleView: pass
- TextBubbleView: pass
Description | From | Last Updated |
---|---|---|
Col: 80 E501 line too long (90 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (85 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (93 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (97 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (89 > 79 characters) |
reviewbot | |
Col: 9 E303 too many blank lines (2) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (80 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (80 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (105 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (98 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (84 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (94 > 79 characters) |
reviewbot | |
Col: 5 E303 too many blank lines (3) |
reviewbot | |
Col: 80 E501 line too long (103 > 79 characters) |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
Col: 80 E501 line too long (82 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (81 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (85 > 79 characters) |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
Col: 80 E501 line too long (90 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (85 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (93 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (97 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (89 > 79 characters) |
reviewbot | |
Col: 9 E303 too many blank lines (2) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (86 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (80 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (80 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (105 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (98 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (84 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (94 > 79 characters) |
reviewbot | |
Col: 5 E303 too many blank lines (3) |
reviewbot | |
Col: 80 E501 line too long (103 > 79 characters) |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
Col: 80 E501 line too long (82 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (81 > 79 characters) |
reviewbot | |
Col: 80 E501 line too long (85 > 79 characters) |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
'timedelta' imported but unused |
reviewbot | |
'timezone' imported but unused |
reviewbot | |
'DiffSet' imported but unused |
reviewbot | |
'Review' imported but unused |
reviewbot | |
Col: 80 E501 line too long (82 > 79 characters) |
reviewbot | |
Col: 1 E302 expected 2 blank lines, found 1 |
reviewbot | |
Col: 80 E501 line too long (84 > 79 characters) |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
Col: 63 W292 no newline at end of file |
reviewbot | |
Small nit, put a space after `<%=' |
KH khp | |
Just eyeing this comment, I think this comment can be one line possibly? |
KH khp | |
I believe this line should be indented one more (see other comments below!) Also, "returned" instead of "return" |
KH khp | |
Could do this in one line Capitalize "the" in the beginning |
KH khp | |
Since this is an es6 file, this should probably be a const or use let. |
mike_conley | |
Why do we need to check if hasOwnProperty? |
mike_conley | |
Maybe I'm just getting old, but I'm having a hard time parsing this bit. Here's what I think is happening: … |
mike_conley | |
2 spaces between return and updateCountByUserName |
KH khp | |
IMO using distinct strings for username and fullname could catch more bugs that involve the two values. |
KH khp | |
If we're getting rid of the type argument, we should update this documentation. |
mike_conley | |
We probably don't want to have this change land in the tree. |
mike_conley | |
Col: 29 E126 continuation line over-indented for hanging indent |
reviewbot | |
Would something like this here and similar code below be preferable? new_reply = { 'id': review.pk, 'user': review.user, ... |
KH khp | |
Col: 41 E126 continuation line over-indented for hanging indent |
reviewbot | |
I think you need a new line above the for |
KH khp | |
Col: 37 E126 continuation line over-indented for hanging indent |
reviewbot | |
New line here too |
KH khp | |
New line above the if I think |
KH khp | |
Col: 37 E126 continuation line over-indented for hanging indent |
reviewbot | |
I'm not 100% sure but other comments seem to do this; """ and Retrieve might need to be on the … |
KH khp | |
Missing periods at the end of some of these lines |
KH khp | |
reiview -> review |
KH khp | |
Might need to move this line up one like above |
KH khp | |
Missing periods here "the updated" "the timestamp" "the new" needs to be capitalized |
KH khp | |
New line here |
KH khp | |
Periods |
KH khp | |
Why is this commented out? Should it be removed instead? |
mike_conley | |
Col: 21 E122 continuation line missing indentation or outdented |
reviewbot | |
Col: 17 E122 continuation line missing indentation or outdented |
reviewbot | |
Col: 80 E501 line too long (83 > 79 characters) |
reviewbot | |
Col: 9 E303 too many blank lines (2) |
reviewbot | |
Col: 21 E122 continuation line missing indentation or outdented |
reviewbot | |
Col: 25 E122 continuation line missing indentation or outdented |
reviewbot | |
I think this line should be indented as per the new documentation style being phased into Review Board. More information … |
sharleenfisher | |
Also indented here. |
sharleenfisher | |
Do we need the white-space on line 116? It looks like, from other code that I've seen, sometimes they put … |
sharleenfisher | |
I think given the new documentation format, the type that 'username' is should be in brackets? For example, username (String): |
sharleenfisher | |
Here too! |
sharleenfisher | |
The type should be added in brackets here as well. |
sharleenfisher | |
And here as well, I believe? |
sharleenfisher | |
'_' imported but unused |
reviewbot | |
Col: 5 E303 too many blank lines (2) |
reviewbot | |
I'm not sure these changes should be in this review request. They are already in https://reviews.reviewboard.org/r/8800/, no? |
szhang | |
Same with this test here. |
szhang | |
Col: 39 Missing semicolon. |
reviewbot | |
Col: 28 Missing semicolon. |
reviewbot | |
Col: 61 Missing semicolon. |
reviewbot | |
Col: 34 Missing semicolon. |
reviewbot | |
Col: 41 Missing semicolon. |
reviewbot | |
Col: 25 ['username'] is better written in dot notation. |
reviewbot | |
Col: 25 ['count'] is better written in dot notation. |
reviewbot | |
Col: 45 Missing semicolon. |
reviewbot | |
Col: 25 ['user'] is better written in dot notation. |
reviewbot | |
Col: 67 Missing semicolon. |
reviewbot | |
Col: 25 ['list'] is better written in dot notation. |
reviewbot | |
Col: 66 Missing semicolon. |
reviewbot | |
Col: 38 Missing semicolon. |
reviewbot | |
Col: 49 Missing semicolon. |
reviewbot | |
Col: 37 Missing semicolon. |
reviewbot | |
Col: 45 ['username'] is better written in dot notation. |
reviewbot | |
Col: 39 ['user'] is better written in dot notation. |
reviewbot | |
Col: 47 Missing semicolon. |
reviewbot | |
Col: 22 Missing semicolon. |
reviewbot | |
Col: 45 ['username'] is better written in dot notation. |
reviewbot | |
Col: 43 Missing semicolon. |
reviewbot | |
Col: 57 Missing semicolon. |
reviewbot | |
Col: 13 'info' is defined but never used. |
reviewbot | |
Col: 21 Expected '}' to match '{' from line 152 and instead saw 'user'. |
reviewbot | |
Col: 25 Expected ']' to match '[' from line 152 and instead saw ':'. |
reviewbot | |
Col: 27 Expected '}' to match '{' from line 130 and instead saw '{'. |
reviewbot | |
Col: 28 Missing semicolon. |
reviewbot | |
Col: 30 Label 'url' on /users/cherry statement. |
reviewbot | |
Col: 30 Expected an assignment or function call and instead saw an expression. |
reviewbot | |
Col: 45 Missing semicolon. |
reviewbot | |
Col: 39 Missing semicolon. |
reviewbot | |
Col: 28 Missing semicolon. |
reviewbot | |
Col: 61 Missing semicolon. |
reviewbot | |
Col: 34 Missing semicolon. |
reviewbot | |
Col: 25 ['username'] is better written in dot notation. |
reviewbot | |
Col: 41 Missing semicolon. |
reviewbot | |
Col: 25 ['count'] is better written in dot notation. |
reviewbot | |
Col: 45 Missing semicolon. |
reviewbot | |
Col: 25 ['user'] is better written in dot notation. |
reviewbot | |
Col: 67 Missing semicolon. |
reviewbot | |
Col: 25 ['list'] is better written in dot notation. |
reviewbot | |
Col: 66 Missing semicolon. |
reviewbot | |
Col: 38 Missing semicolon. |
reviewbot | |
Col: 49 Missing semicolon. |
reviewbot | |
Col: 37 Missing semicolon. |
reviewbot | |
Col: 45 ['username'] is better written in dot notation. |
reviewbot | |
Col: 39 ['user'] is better written in dot notation. |
reviewbot | |
Col: 47 Missing semicolon. |
reviewbot | |
Col: 22 Missing semicolon. |
reviewbot | |
Col: 45 ['username'] is better written in dot notation. |
reviewbot | |
Col: 43 Missing semicolon. |
reviewbot | |
Col: 13 'info' is defined but never used. |
reviewbot | |
Col: 21 Expected '}' to match '{' from line 152 and instead saw 'user'. |
reviewbot | |
Col: 25 Expected ']' to match '[' from line 152 and instead saw ':'. |
reviewbot | |
Col: 27 Expected '}' to match '{' from line 130 and instead saw '{'. |
reviewbot | |
Col: 28 Missing semicolon. |
reviewbot | |
Col: 30 Label 'url' on /users/cherry statement. |
reviewbot | |
Col: 45 Missing semicolon. |
reviewbot | |
Col: 30 Expected an assignment or function call and instead saw an expression. |
reviewbot | |
Col: 13 Expected ')' and instead saw '}'. |
reviewbot | |
Col: 10 Missing semicolon. |
reviewbot | |
Col: 20 Missing semicolon. |
reviewbot | |
Col: 23 Missing semicolon. |
reviewbot | |
Col: 10 Missing semicolon. |
reviewbot | |
Why the variable rename? server_timestamp makes it sound like the current time on the server. |
chipx86 | |
Blank line before if statements. |
chipx86 | |
And after. Any time there's a block level change. |
chipx86 | |
Can you add a comment explaining why we're doing the save_base? We'll probably forget down the road. |
chipx86 | |
All the HTML here should be using proper indentation to make the code more readable. |
chipx86 | |
Should use <%- ... %> for any user-controllable content (username, full name, etc.). This will escape the content so users … |
chipx86 | |
This function's iterating through everything but timestamps. I think we really just have a few types of entries in here … |
chipx86 | |
Blank line between code and new blocks. |
chipx86 | |
Here too. |
chipx86 | |
Here too. |
chipx86 | |
This can all be one statement. |
chipx86 | |
Here too. Also there's an alignment problem. |
chipx86 | |
Blank line here too. |
chipx86 | |
Blank line. |
chipx86 | |
Blank line. |
chipx86 | |
This template also needs indentation. |
chipx86 | |
Best to hide before adding the HTML, to reduce what needs to be done in the DOM. |
chipx86 | |
Col: 10 Missing semicolon. |
reviewbot | |
This can be one import. |
chipx86 | |
We have to maintain full backwards-compatibility. All the old fields must remain using the same behavior we used to have. … |
chipx86 | |
"server_timestamp" is the wrong name here. That sounds like the current time on the server. |
chipx86 | |
Docstrings don't belong in the middle of code blocks. You need to use comments. |
chipx86 | |
Blank line here. |
chipx86 | |
Blank line. |
chipx86 | |
This can be one statement. |
chipx86 | |
One statement. |
chipx86 | |
id is a reserved word in Python. This should be pk. |
chipx86 | |
Blank line. |
chipx86 |
- Commit:
-
f907035ea6901437eada2f44f24eb846707e28ef96e714152e15283e9fb14eac16de7d01598fcb44
- Diff:
-
Revision 2 (+635 -88)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Testing Done:
-
Manual tests in the browsers have been done in following cases:
- No update: no update bubble was opened - 1 update: update bubble was shown the 1 update with the update type and username - Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot + + Python testing cases for review_request_last_update API include as following:
+ - New diffsets: pass + - New reviews: pass + - New replies: pass + - New comments: pass + - default case for no/improperly-formatted timestamp: fail + + Javascript testing for updated UpdateBubbleView has been passed.
- Commit:
-
96e714152e15283e9fb14eac16de7d01598fcb4438c6cb98aab72406b8acfa27679b85f75bb88d1b
- Diff:
-
Revision 3 (+640 -88)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js
-
-
-
-
-
Wow that's a lot of code! Mostly formatting nits and comments.
-
-
-
I believe this line should be indented one more (see other comments below!)
Also, "returned" instead of "return"
-
-
-
IMO using distinct strings for
username
andfullname
could catch more bugs that involve the two values. -
Would something like this here and similar code below be preferable?
new_reply = { 'id': review.pk, 'user': review.user, ...
-
-
-
-
I'm not 100% sure but other comments seem to do this; """ and Retrieve might need to be on the same line, like:
"""Retrieve the new ...
Missing a period at the end
-
-
-
-
-
-
-
-
-
-
Maybe I'm just getting old, but I'm having a hard time parsing this bit.
Here's what I think is happening:
You're constructing a count of how many times a particular username has an update in the last-update object... That will look something like:
{'<username>': 12}, in the event that some username has 12 updates.
Then you're going through that returned object, and constructing a very similar object and putting it on result.
Why is this inner loop necessary? Why do we need to check hasOwnProperty? Can we not just take the return value from _.countBy and assign it to result? If not, why not?
-
-
- Commit:
-
38c6cb98aab72406b8acfa27679b85f75bb88d1b6e8a75fb993863b4d4daa013b734f576278e6edd
- Diff:
-
Revision 4 (+636 -89)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js
- Commit:
-
6e8a75fb993863b4d4daa013b734f576278e6edd1d19e02ecf3f473e4788f9b805985679eab8806d
- Diff:
-
Revision 5 (+767 -93)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js
-
-
-
-
-
-
- Testing Done:
-
Manual tests in the browsers have been done in following cases:
- No update: no update bubble was opened - 1 update: update bubble was shown the 1 update with the update type and username - Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot Python testing cases for review_request_last_update API include as following:
- New diffsets: pass - New reviews: pass - New replies: pass - New comments: pass ~ - default case for no/improperly-formatted timestamp: fail ~ - default case for no/improperly-formatted timestamp: pass + - Test case for no updates: pass Javascript testing for updated UpdateBubbleView has been passed.
- Removed Files:
- Added Files:
- Commit:
-
1d19e02ecf3f473e4788f9b805985679eab8806d397d9a2434338e8391dbb928c3d1fdff92ca2894
- Diff:
-
Revision 6 (+785 -93)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js
- Commit:
-
397d9a2434338e8391dbb928c3d1fdff92ca2894a712413a59bf49799593c435ec9baac4ded67d9c
- Diff:
-
Revision 7 (+775 -93)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js
-
It looks like a lot of work has been done here already! Since this is just my first review, I'll probably just look over things stylistically.
-
Sorry about the previous review. Here are the formatting issues I found within the first file.
-
I think this line should be indented as per the new documentation style being phased into Review Board. More information can be found here.
https://www.notion.so/reviewboard/Writing-Codebase-Documentation-e16312b5f061437cb73cbfa369ac3cb5
-
-
Do we need the white-space on line 116? It looks like, from other code that I've seen, sometimes they put a white line before and after a conditional or a for loop.
-
I think given the new documentation format, the type that 'username' is should be in brackets?
For example,
username (String):
-
-
-
- Testing Done:
-
Manual tests in the browsers have been done in following cases:
- No update: no update bubble was opened - 1 update: update bubble was shown the 1 update with the update type and username - Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot Python testing cases for review_request_last_update API include as following:
- - New diffsets: pass - New reviews: pass - New replies: pass ~ - New comments: pass ~ - New udpates (diffsets, field changes and file attachments): pass - default case for no/improperly-formatted timestamp: pass - Test case for no updates: pass Javascript testing for updated UpdateBubbleView has been passed.
- Commit:
-
a712413a59bf49799593c435ec9baac4ded67d9c5828c98fa8c51f1fb8153c4f933f258389fbb9ab
- Diff:
-
Revision 8 (+660 -102)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/reviews/tests/test_review_request.py reviewboard/reviews/models/review_request.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/reviews/tests/test_review_request.py reviewboard/reviews/models/review_request.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js
-
-
- Summary:
-
Smart Update NotificationSmart Update Notification [WIP]
- Commit:
-
5828c98fa8c51f1fb8153c4f933f258389fbb9abd601df2a1443284e666e06283cb5d8409e7478d2
- Diff:
-
Revision 9 (+981 -103)
-
Tool: Pyflakes Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/reviews/tests/test_review_request.py reviewboard/reviews/models/review_request.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js reviewboard/static/rb/css/pages/review-request.less reviewboard/static/rb/css/pages/reviews.less reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js Tool: PEP8 Style Checker Processed Files: reviewboard/testing/testcase.py reviewboard/webapi/tests/test_review_request_last_update.py reviewboard/reviews/tests/test_review_request.py reviewboard/reviews/models/review_request.py reviewboard/webapi/resources/review_request_last_update.py reviewboard/webapi/tests/urls.py reviewboard/webapi/tests/mimetypes.py Ignored Files: reviewboard/static/rb/js/pages/views/tests/reviewablePageViewTests.js reviewboard/static/rb/js/resources/models/reviewRequestModel.es6.js reviewboard/static/rb/css/pages/review-request.less reviewboard/static/rb/css/pages/reviews.less reviewboard/static/rb/js/pages/views/reviewablePageView.es6.js
- Commit:
-
d601df2a1443284e666e06283cb5d8409e7478d2a734c522ed39b7e8d46f3e8f5542a453011e1008
- Diff:
-
Revision 10 (+1222 -111)
Checks run (1 failed, 1 succeeded, 1 failed with error)
JSHint
-
Warning: Showing 30 of 44 failures.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Commit:
-
a734c522ed39b7e8d46f3e8f5542a453011e1008bb9f8f5b24108ed5a11c44782ac1e6169279efab
- Diff:
-
Revision 11 (+1213 -111)
Checks run (1 failed, 1 succeeded, 1 failed with error)
JSHint
-
Warning: Showing 30 of 43 failures.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Commit:
-
bb9f8f5b24108ed5a11c44782ac1e6169279efab1cc94b5cab9fdf6d04c852f4fb1bf942b205d907
- Diff:
-
Revision 12 (+1248 -113)
- Testing Done:
-
~ Manual tests in the browsers have been done in following cases:
~ Manual tests in the browsers have been done on both UpdateBubble and TextBubble:
- No update: no update bubble was opened - 1 update: update bubble was shown the 1 update with the update type and username ~ - Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot ~ - Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot + - Hovering over the UpdateBubble will expand the bubble to display the text bubbles with some CSS transition + - All the texts are capped at 300 character per with a [...] indicator + - The text pane is vertically scrollable when necessary + - "Ship it!" label is displayed on middle top of text box when appliable + - For review/reply, text is either "body-top" content or first comment. + - For update, text is a short summary with some relevant description. Python testing cases for review_request_last_update API include as following:
~ - New reviews: pass ~ - New reviews/comments: pass - New replies: pass - New udpates (diffsets, field changes and file attachments): pass - default case for no/improperly-formatted timestamp: pass - Test case for no updates: pass ~ Javascript testing for updated UpdateBubbleView has been passed.
~ Jasmine testing for the UpdateBubbleView has been passed.
- Testing Done:
-
Manual tests in the browsers have been done on both UpdateBubble and TextBubble:
- No update: no update bubble was opened - 1 update: update bubble was shown the 1 update with the update type and username - Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot - Hovering over the UpdateBubble will expand the bubble to display the text bubbles with some CSS transition - All the texts are capped at 300 character per with a [...] indicator - The text pane is vertically scrollable when necessary - "Ship it!" label is displayed on middle top of text box when appliable - For review/reply, text is either "body-top" content or first comment. ~ - For update, text is a short summary with some relevant description. ~ - For update, text is a short summary with some relevant description. + - Clicking on each text bubble will refresh the page and navigate to the specific location. Python testing cases for review_request_last_update API include as following:
- New reviews/comments: pass - New replies: pass - New udpates (diffsets, field changes and file attachments): pass - default case for no/improperly-formatted timestamp: pass - Test case for no updates: pass Jasmine testing for the UpdateBubbleView has been passed.
- Commit:
-
1cc94b5cab9fdf6d04c852f4fb1bf942b205d90783ca097857c903acb0401dddacd8fe37ff5d6b4e
- Diff:
-
Revision 13 (+1248 -113)
- Testing Done:
-
Manual tests in the browsers have been done on both UpdateBubble and TextBubble:
- No update: no update bubble was opened - 1 update: update bubble was shown the 1 update with the update type and username - Multiple updates: update bubble was shown with counts by username and update type. Please refer to attached file screenshot - Hovering over the UpdateBubble will expand the bubble to display the text bubbles with some CSS transition - All the texts are capped at 300 character per with a [...] indicator - The text pane is vertically scrollable when necessary - "Ship it!" label is displayed on middle top of text box when appliable - For review/reply, text is either "body-top" content or first comment. - For update, text is a short summary with some relevant description. - Clicking on each text bubble will refresh the page and navigate to the specific location. Python testing cases for review_request_last_update API include as following:
- New reviews/comments: pass - New replies: pass - New udpates (diffsets, field changes and file attachments): pass - default case for no/improperly-formatted timestamp: pass - Test case for no updates: pass ~ Jasmine testing for the UpdateBubbleView has been passed.
~ Jasmine JavaScript Unit tests have been added for:
+ - UpdateBubbleView: pass + - TextBubbleView: pass - Commit:
-
83ca097857c903acb0401dddacd8fe37ff5d6b4e9cbbbc19d5d258e1265f59a42a9316097531bfab
- Diff:
-
Revision 14 (+1308 -124)
-
-
-
-
-
Can you add a comment explaining why we're doing the
save_base
? We'll probably forget down the road. -
-
Should use
<%- ... %>
for any user-controllable content (username, full name, etc.). This will escape the content so users can't insert HTML. -
This function's iterating through everything but timestamps. I think we really just have a few types of entries in here we care about, right? If so, can we handle those specifically?
-
-
-
-
-
-
-
-
-
-
-
-
We have to maintain full backwards-compatibility. All the old fields must remain using the same behavior we used to have. The new fields should just be new optional fields.
So in other words, the older UI code using the newer API should behave the way it did before.
-
-
-
-
-
-
-
-
- Commit:
-
9cbbbc19d5d258e1265f59a42a9316097531bfabd22aabee1fec9611714c8245e1ab42edb9b9d3dd
- Diff:
-
Revision 15 (+1329 -124)
Checks run (2 succeeded, 1 failed with error)
- Commit:
-
d22aabee1fec9611714c8245e1ab42edb9b9d3dd50678fbd044e5dc67ddc7ff34a1f882bc8016ff1
- Diff:
-
Revision 16 (+1350 -126)