• 
      

    Added new client side hook for validating draft reviews

    Review Request #8052 — Created March 10, 2016 and discarded

    Information

    Review Board
    release-2.5.x

    Reviewers

    Added new client side hook for validating draft reviews.
    The idea behind this hook is that some extensions add client side widgets
    which shouldn't be skipped accidentally when the user is reviewing code.
    For example, with the checklist extension, they shouldn't forget to check off
    all the items on their checklist.

    This code is generic in that it support any type of extension as well as multiple
    extensions hooking into the publish validation simultaneously. Extensions can
    choose to allow, abort, or warn about a review being published. Warnings
    will be presented as a browser confirmation dialog, giving the user the choice to
    either force the publish or cancel it. Abortions will be presented as a simple
    alert box with a message about why the validation failed.

    See the attachement below for an example.

    Manually tested this with the Checklist Extension.
    Tested this feature with multiple hooks at the same time.
    Tested each combination of 2 hooks doing allow, abort, and warning actions.


    Description From Last Updated

    /**

    daviddavid

    Maybe assert _.isFunction(this.get('validatePublish')) ?

    daviddavid

    This should say "validatePublish", not "shouldPublish"

    daviddavid

    Formatting here doesn't follow our style. We never do blocks without {}, because they're error prone (remember the "goto error" …

    daviddavid

    Let's leave this inside the publish method rather than in the promise done method.

    daviddavid

    No space between "function" and "()"

    daviddavid

    No space between "function" and "()"

    daviddavid

    No space between "function" and "()"

    daviddavid
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/staticbundles.py
      
      Ignored Files:
          reviewboard/static/rb/js/extensions/models/publishingDraftReviewHookModel.js
          reviewboard/static/rb/js/resources/models/draftReviewModel.js
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/staticbundles.py
      
      Ignored Files:
          reviewboard/static/rb/js/extensions/models/publishingDraftReviewHookModel.js
          reviewboard/static/rb/js/resources/models/draftReviewModel.js
      
      
    2. 
        
    imadueme
    david
    1. 
        
    2. Show all issues

      Maybe assert _.isFunction(this.get('validatePublish')) ?

    3. Show all issues

      This should say "validatePublish", not "shouldPublish"

    4. reviewboard/static/rb/js/resources/models/draftReviewModel.js (Diff revision 1)
       
       
       
       
       
       
       
       
       
       
       
       
      Show all issues

      Formatting here doesn't follow our style. We never do blocks without {}, because they're error prone (remember the "goto error" bug in openssl recently?).

      Also, all variables should be defined (though not necessarily assigned) at the top of the function, since 'var' is hoisted to the top.

      I also think we probably shouldn't always put "Warning:" into the confirmation message--let's leave that up to the user of the hook.

      This should be formatted as:

      function setValidation(isValid, message, allowContinue) {
          var forcePublish,
              validatePublish;
      
          if (isValid) {
              deferred.resolve();
          } else if (allowContinue) {
              forcePublish = confirm(
                  message + '\n' +
                  gettext('Do you want to continue publishing?'));
      
              if (forcePublish) {
                  deferred.resolve();
              } else {
                  deferred.reject();
              }
          } else {
              deferred.reject();
          }
      
          validatePublish = hook.get('validatePublish');
          validatePublish(this, setValidation);
      }
      
    5. Show all issues

      Let's leave this inside the publish method rather than in the promise done method.

    6. Show all issues

      No space between "function" and "()"

    7. Show all issues

      No space between "function" and "()"

    8. Show all issues

      No space between "function" and "()"

    9. 
        
    imadueme
    reviewbot
    1. Tool: Pyflakes
      Processed Files:
          reviewboard/staticbundles.py
      
      Ignored Files:
          reviewboard/static/rb/js/extensions/models/publishingDraftReviewHookModel.js
          reviewboard/static/rb/js/resources/models/draftReviewModel.js
      
      
      
      Tool: PEP8 Style Checker
      Processed Files:
          reviewboard/staticbundles.py
      
      Ignored Files:
          reviewboard/static/rb/js/extensions/models/publishingDraftReviewHookModel.js
          reviewboard/static/rb/js/resources/models/draftReviewModel.js
      
      
    2. 
        
    david
    Review request changed
    Status:
    Discarded