Changing Review Request Ownership
Review Request #6990 — Created Feb. 27, 2015 and submitted
make the ownership changeable on the UI level
Main code describtions:
In builtin_fields.py we change the 'submitter' field to inherit BaseEditableField so that the 'submitter' field will be editable; The override function--record_change_entry disposes what will be showed in change description; Then override the function to render the only one value for a change description string to HTML instead of a list.
In changedescs/models.py we describe the 'new' and 'old' changes in 'submitter' field and render the value to HTML.
Changes in models/review_request_draft.py are to add 'owner' field to override 'submitter' field. Since 'submitter' field is a property attribute of draftreviewrequest, if we change the'submitter' field from property to attribute directly, 'submitter' of older data in the dababase will be null. This will cause troubles.
Changes in reviewboard/reviews/evolutions are about Writing Database Evolutions of adding 'owner' field to the draft table.
In webapi/resources/review_request_draft.py we get the change information of 'submitter' field and set draft.owner if the change is available.
In reviewRequestEditorView.js we make the field can be autocompleted then show in proper format when updated.
In models/reviewRequestEditorModel.js we detect the changes of 'submitter' field in the front end before sending message to the back end. And show the confirm notification only when 'submitter' field was modified.
In models/draftReviewRequestModel.js: parseResourceData we set the 'submitter' info to the data from response message so that we can use it to update the field.
Passed the http://localhost:8000/js-tests/ for the front end.
Passed tests for the back end.Added tests:
./reviewboard/manage.py test -- reviewboard.webapi.tests.test_review_request_draft:ResourceTests.test_put_publish_with_new_submitter
This test is about wether the feature works to set the submitter field.reviewRequestEditorModelTests:
Check to set empty value.
Check if set value successfully.
Check if error thrown when set invalid value.reviewRequestEditorViewTests:
Check confirm notification works before publish.
Check field can be autocomplete.
Check field can edit.
Check save works.
Check value format after update.
Check edit count successfully.draftReviewRequestModelTests:
Check parse works for 'submitter' field.
Description | From | Last Updated |
---|---|---|
Col: 80 E501 line too long (100 > 79 characters) |
reviewbot | |
'model_cache' imported but unused |
reviewbot | |
Col: 80 E501 line too long (98 > 79 characters) |
reviewbot | |
Col: 21 E265 block comment should start with '# ' |
reviewbot | |
Col: 47 E127 continuation line over-indented for visual indent |
reviewbot | |
Col: 47 E127 continuation line over-indented for visual indent |
reviewbot | |
Col: 13 E265 block comment should start with '# ' |
reviewbot | |
Col: 55 E261 at least two spaces before inline comment |
reviewbot | |
Col: 56 E262 inline comment should start with '# ' |
reviewbot | |
Col: 9 E128 continuation line under-indented for visual indent |
reviewbot | |
Col: 21 E265 block comment should start with '# ' |
reviewbot | |
'UserResource' imported but unused |
reviewbot | |
Col: 13 E265 block comment should start with '# ' |
reviewbot | |
Col: 22 E225 missing whitespace around operator |
reviewbot | |
Col: 9 E128 continuation line under-indented for visual indent |
reviewbot | |
I guess assocated is a typo |
Chester | |
Remove trailing commas. |
VT VTL-Developer | |
Use single quotes |
brennie | |
Use single quotes. |
brennie | |
We don't support ternary operators, you can do self.owner or self.review_request.submitter |
VT VTL-Developer | |
how about a white space before else if? |
Chester | |
Use single quotes. |
brennie | |
I think the indentation of each argument should be consistent. Please see line 195-197 |
Chester | |
Remove blank lines. |
VT VTL-Developer | |
Use single quotes for this. The quote marks should line up. You may want to assign confirm(gettext(...)) to a value … |
brennie | |
Should this be 'submitter' instead? |
XU xuanyi | |
"Convert" |
brennie | |
How about makeLink or convertToLink ? |
brennie | |
I guess we could do this also if we do want to explictly return '' if item is null. if … |
XU xuanyi | |
I try to stay away from variables named data because technically all variables are data :) |
brennie | |
We do processing for other fields in this way because we can have multiple values in them. I don't think … |
brennie | |
Blank line between these. |
brennie | |
Col: 36 E128 continuation line under-indented for visual indent |
reviewbot | |
Col: 36 E128 continuation line under-indented for visual indent |
reviewbot | |
Might be worth adding a comment about why we need to put old_value and new_value into tuples. |
mike_conley | |
Col: 80 E501 line too long (82 > 79 characters) |
reviewbot | |
We might want to add some documentation saying that the user will have the chance to cancel the publish in … |
mike_conley | |
I think this might be clearer: 'Are you sure you want to change the ownership of this review request? Doing … |
mike_conley | |
Should start with a capital letter and end in a period. |
david | |
Undo this change (lists in python should have trailing commas) |
david | |
This should have from __future__ import unicode_literals as the first line, and then a blank line, then the rest. |
david | |
There will only ever be one submitter, so we can just use gettext, not ngettext. |
david | |
These two lines can be combined (define and assign in one go) |
david | |
You could even just move the gettext call inline here, since that text is only used once. |
david | |
Col: 80 E501 line too long (81 > 79 characters) |
reviewbot | |
Col: 39 E127 continuation line over-indented for visual indent |
reviewbot | |
Blank line between these. |
brennie | |
You can put $link on the previous line. Make sure to dedent the following two lines. |
brennie | |
You can just build it all at once using a template, e.g. _linkTemplate: _.template('<a href="<%- url %>"><%- label %></a>'), /* … |
brennie | |
Isn't $field.children() already a jQuery wrapper around the DOM elements? |
brennie | |
submitter before summary |
brennie | |
submitter before summary |
brennie | |
Blank line between these. |
brennie | |
Can you either move the template definition into the initialize method (storing it as a variable on the object), or … |
david | |
These should be indented 4 more spaces. |
david | |
This is indented too far. |
david |
-
Could you please make the description more detailed? Because it is kind of hard to understand what you are doing in here.
- Change Summary:
-
fix the bug that nothing shows when modify the submitter
- Description:
-
make the ownership changeable on the UI level
+ + Some fields are unnecessary since WIP
+ + Main code describtions:
+ + Changes in builtin_fields.py are to make the UI shows the 'submitter' field editable.
+ + Changes in models/review_request_draft.py are to add 'owner' field to override 'submitter' field. Since 'submitter' field is a property attribute of draftreviewrequest, if we change the'submitter' field from property to attribute directly, 'submitter' of older data in the dababase will be null. This will cause troubles.
+ + Changes in reviewboard/reviews/evolutions are about Writing Database Evolutions
+ + Changes in models/draftReviewRequestModel.js: parseResourceData set the 'submitter' info to the data from response message.
- Commit:
-
b6161f593972924c3d31511c7b39e23672e08b6babd6e9d61a339a0e595620df7897c3ce14920d1d
- Diff:
-
Revision 2 (+119 -2)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/reviews/evolutions/add_owner_to_draft.py Ignored Files: reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/resources/models/reviewRequestModel.js reviewboard/static/rb/js/views/reviewRequestEditorView.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/reviews/evolutions/add_owner_to_draft.py Ignored Files: reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/resources/models/reviewRequestModel.js reviewboard/static/rb/js/views/reviewRequestEditorView.js
-
-
-
-
- Change Summary:
-
Store submitter field when publish and Make changed field shows correctly after publish.
- Description:
-
make the ownership changeable on the UI level
Some fields are unnecessary since WIP
Main code describtions:
~ Changes in builtin_fields.py are to make the UI shows the 'submitter' field editable.
~ Changes in builtin_fields.py are to make the UI shows the 'submitter' field editable. The override funcs make publish successfully and changed field shows correctly after publish.
Changes in models/review_request_draft.py are to add 'owner' field to override 'submitter' field. Since 'submitter' field is a property attribute of draftreviewrequest, if we change the'submitter' field from property to attribute directly, 'submitter' of older data in the dababase will be null. This will cause troubles.
Changes in reviewboard/reviews/evolutions are about Writing Database Evolutions
Changes in models/draftReviewRequestModel.js: parseResourceData set the 'submitter' info to the data from response message.
- Commit:
-
abd6e9d61a339a0e595620df7897c3ce14920d1d45f78d19a7aebca8c75e6c7afd918bad1b5ff227
- Diff:
-
Revision 3 (+129 -2)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/views/reviewRequestEditorView.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/views/reviewRequestEditorView.js
-
-
- Change Summary:
-
Add tests and fix some bugs
- Description:
-
make the ownership changeable on the UI level
- Some fields are unnecessary since WIP
- Main code describtions:
~ Changes in builtin_fields.py are to make the UI shows the 'submitter' field editable. The override funcs make publish successfully and changed field shows correctly after publish.
~ In builtin_fields.py we change the 'submitter' field to inherit BaseEditableField so that the 'submitter' field will be editable; The override function--record_change_entry disposes what will be showed in change description; Then override the function to render the only one value for a change description string to HTML instead of a list.
+ + In changedescs/models.py we describe the 'new' and 'old' changes in 'submitter' field and render the value to HTML.
Changes in models/review_request_draft.py are to add 'owner' field to override 'submitter' field. Since 'submitter' field is a property attribute of draftreviewrequest, if we change the'submitter' field from property to attribute directly, 'submitter' of older data in the dababase will be null. This will cause troubles.
~ Changes in reviewboard/reviews/evolutions are about Writing Database Evolutions
~ Changes in reviewboard/reviews/evolutions are about Writing Database Evolutions of adding 'owner' field to the draft table.
+ + In webapi/resources/review_request_draft.py we get the change information of 'submitter' field and set draft.owner if the change is available.
+ + In reviewRequestEditorView.js we make the field can be autocompleted then show in proper format when updated.
+ + In models/reviewRequestEditorModel.js we detect the changes of 'submitter' field in the front end before sending message to the back end. And show the confirm notification only when 'submitter' field was modified.
~ Changes in models/draftReviewRequestModel.js: parseResourceData set the 'submitter' info to the data from response message.
~ In models/draftReviewRequestModel.js: parseResourceData we set the 'submitter' info to the data from response message so that we can use it to update the field.
- Testing Done:
-
+ Passed the http://localhost:8000/js-tests/ for the front end.
+ Passed tests for the back end. + + Added tests:
+ + ./reviewboard/manage.py test -- reviewboard.webapi.tests.test_review_request_draft:ResourceTests.test_put_publish_with_new_submitter
+ This test is about wether the feature works to set the submitter field. + + reviewRequestEditorModelTests:
+ Check to set empty value. + Check if set value successfully. + Check if error thrown when set invalid value. + + reviewRequestEditorViewTests:
+ Check confirm notification works before publish. + Check field can be autocomplete. + Check field can edit. + Check save works. + Check value format after update. + Check edit count successfully. + + draftReviewRequestModelTests:
+ Check parse works for 'submitter' field. - Commit:
-
45f78d19a7aebca8c75e6c7afd918bad1b5ff2275d6184e7603d75acab385f697bcaa2aee2acf205
- Groups:
-
- Diff:
Revision 4 (+275 -5)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
-
-
-
-
-
-
-
Use single quotes for this. The quote marks should line up.
You may want to assign
confirm(gettext(...))
to a value and check against that for readability.Also change "the managing privileges" to "all managing privileges."
-
-
-
-
We do processing for other fields in this way because we can have multiple values in them. I don't think we should do this for the
submitter
field because we only expect one value.I think we should just take what we are given and try to look up exactly that.
-
- Change Summary:
-
amend some typo and line up bug
- Commit:
-
5d6184e7603d75acab385f697bcaa2aee2acf2056425e3ed00f8d023d3442de7693a9178bab16fa1
- Diff:
-
Revision 5 (+274 -6)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
-
-
Hey chenxi - this is looking really really good. Not too many more comments frome me. Great job!
-
-
We might want to add some documentation saying that the user will have the chance to cancel the publish in the event that the submitter has been changed.
-
I think this might be clearer:
'Are you sure you want to change the ownership of this review request? Doing so may prevent you from editing the review request afterwards.'
- Change Summary:
-
add some comments
- Commit:
-
6425e3ed00f8d023d3442de7693a9178bab16fa126503c705e9b673f56272d24aeaa3d60807a0b5f
- Diff:
-
Revision 6 (+280 -7)
- Change Summary:
-
combine lines where the text used only once
- Commit:
-
26503c705e9b673f56272d24aeaa3d60807a0b5fae9712f72716d2768baaac29bf223422fd934304
- Diff:
-
Revision 7 (+277 -6)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
-
-
- Change Summary:
-
fix continuation line over-indented
- Commit:
-
ae9712f72716d2768baaac29bf223422fd934304dd93b181d54c3345450b6927783f86a6e037720b
- Diff:
-
Revision 8 (+277 -6)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
-
This looks good. I've just got a few nitpicks.
-
-
-
You can just build it all at once using a template, e.g.
_linkTemplate: _.template('<a href="<%- url %>"><%- label %></a>'), /* * ... */ convertToLink: function(item, urlFunc, textFunc) { if (!item) { return ''; } return _linkTemplate({ url: urlFunc ? urlFunc(item) : item, label: textFunc ? textFunc(item) : item });
-
-
-
-
- Change Summary:
-
rebase and merge
- Commit:
-
dd93b181d54c3345450b6927783f86a6e037720b05c1791ea6a5a20011fb58b9aa458b59844d4af9
- Diff:
-
Revision 9 (+293 -6)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
- Change Summary:
-
fix over-indented lines
- Diff:
-
Revision 10 (+292 -6)
-
Tool: Pyflakes Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js Tool: PEP8 Style Checker Processed Files: reviewboard/reviews/evolutions/__init__.py reviewboard/webapi/resources/review_request_draft.py reviewboard/reviews/models/review_request_draft.py reviewboard/webapi/tests/test_review_request_draft.py reviewboard/reviews/builtin_fields.py reviewboard/reviews/evolutions/add_owner_to_draft.py reviewboard/changedescs/models.py Ignored Files: reviewboard/static/rb/js/resources/models/tests/draftReviewRequestModelTests.js reviewboard/static/rb/js/models/tests/reviewRequestEditorModelTests.js reviewboard/static/rb/js/views/reviewRequestEditorView.js reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js reviewboard/static/rb/js/models/reviewRequestEditorModel.js reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js