#2359 Multiple fixes to the SSE server
Merged 6 years ago by pingou. Opened 6 years ago by pingou.

file modified
+8 -1
@@ -382,6 +382,7 @@ 

          tags = [tags]

  

      added_tags = []

+     added_tags_color = []

      for objtag in tags:

          objtag = objtag.strip()

          known = False
@@ -419,6 +420,7 @@ 

                  issue_uid=obj.uid,

                  tag_id=tagobj.id

              )

+             added_tags_color.append(tagobj.tag_color)

  

          session.add(dbobjtag)

          # Make sure we won't have SQLAlchemy error before we continue
@@ -445,7 +447,11 @@ 

          # Send notification for the event-source server

          if REDIS and not obj.project.private:

              REDIS.publish('pagure.%s' % obj.uid, json.dumps(

-                 {'added_tags': added_tags}))

+                 {

+                     'added_tags': added_tags,

+                     'added_tags_color': added_tags_color,

+                 }

+             ))

  

      if added_tags:

          return 'Issue tagged with: %s' % ', '.join(added_tags)
@@ -1680,6 +1686,7 @@ 

              REDIS.publish('pagure.%s' % issue.uid, json.dumps({

                  'fields': edit,

                  'issue': issue.to_json(public=True, with_comments=False),

+                 'priorities':issue.project.priorities,

              }))

  

      if edit:

file modified
+48 -26
@@ -16,15 +16,20 @@ 

    console.log('adding ' + data.added_tags);

  

    var $select = $('#tag').selectize();

-   var selectize = $select[0].selectize;

+   if ($select.length) {

+     var selectize = $select[0].selectize;

+   }

  

    var field = $('#taglist');

    for (i=0; i<data.added_tags.length; i++ ){

      tag = data.added_tags[i]

-     var html = '\n<a id="tag-' + tag + '" class="label label-default" href="'

-                + _issues_url + '?tags=' + tag + '"> ' + tag + ' </a>';

+     var html = '\n<a id="tag-' + tag + '" class="label label-default" '

+         + 'style="background-color:' + data.added_tags_color[i] + '" '

+         + 'href="' + _issues_url + '?tags=' + tag + '"> ' + tag + ' </a>';

      field.append(html);

-     selectize.createItem(tag);

+     if ($select.length) {

+       selectize.createItem(tag);

+     }

    }

  }

  
@@ -32,11 +37,15 @@ 

    console.log('removing ' + data.removed_tags);

  

    var $select = $('#tag').selectize();

-   var selectize = $select[0].selectize;

+   if ($select.length) {

+     var selectize = $select[0].selectize;

+   }

  

    for (var i=0; i<data.removed_tags.length; i++ ){

      tag = data.removed_tags[i]

-     selectize.removeItem(tag);

+     if ($select.length) {

+       selectize.removeItem(tag);

+     }

      $('#tag-' + tag).remove();

    }

  }
@@ -44,29 +53,29 @@ 

  assigne_issue = function(data, _issues_url) {

    console.log('assigning ' + data.assigned.name);

  

+   var field = $('#assignee_plain');

+   var _url = '\n<a href="'

+         + _issues_url + '?assignee=' + data.assigned.name + '">'

+         + data.assigned.name + '</a>';

+   field.html(_url);

+ 

    var $select = $('#assignee').selectize();

    var selectize = $select[0].selectize;

    selectize.settings.create = true;

    selectize.createItem(data.assigned.name);

    selectize.settings.create = false;

    $('#assignee').val(data.assigned.name);

- 

-   var field = $('#assignee_plain');

-   var _url = '\n<a href="'

-         + _issues_url + '?assignee=' + data.assigned.name + '">'

-         + data.assigned.name + '</a>';

-   field.html(_url);

  }

  

  unassigne_issue = function(data) {

    console.log('un-assigning ');

  

+   var field = $('#assignee_plain');

+   field.html('unassigned');

+ 

    var $select = $('#assignee').selectize();

    var selectize = $select[0].selectize;

    selectize.setValue(null);

- 

-   var field = $('#assignee_plain');

-   field.html('unassigned');

  }

  

  add_deps = function(data, issue_uid, _issue_url) {
@@ -85,6 +94,11 @@ 

      }

    }

  

+   var html = '\n<a id="' + _id + '-' + dep + '" class="label label-default" href="'

+                + _issue_url.replace('/-123456789', '/' + dep) + '">#' + dep + '</a>';

+ 

+   field.append(html);

+ 

    var selectize = $select[0].selectize;

    selectize.settings.create = true;

    selectize.items.push(String(dep));
@@ -93,11 +107,6 @@ 

  

    var input_field = $('#' + _id + 's');

    input_field.val(selectize.items.join(','));

- 

-   var html = '\n<a id="' + _id + '-' + dep + '" class="label label-default" href="'

-                + _issue_url.replace('/-123456789', '/' + dep) + '">#' + dep + '</a>';

- 

-   field.append(html);

  }

  

  remove_deps = function(data, issue_uid, _issue_url) {
@@ -193,9 +202,19 @@ 

      } else if (_f == 'title'){

        var field = $('#issuetitle');

        field.html(data.issue.title);

+     } else if (_f == 'priority'){

+       var field = $('#priority_plain');

+       if (data.issue.priority != null){

+         field.html(data.priorities[data.issue.priority]);

+       } else {

+           field.html('');

+       }

      } else if (_f == 'content'){

        var field = $('#comment-0').parent().find('.comment_body');

        field.html('<p>' + data.issue.content + '</p>');

+     } else if (_f == 'milestone'){

+       var field = $('#milestone_plain');

+       field.html(data.issue.milestone)

      }

    }

  }
@@ -204,7 +223,8 @@ 

    console.log('Adjusting custom fields ' + data.custom_fields);

    for (i=0; i<data.custom_fields.length; i++){

      var _f = data.custom_fields[i];

-     var field = $('#' +  _f);

+     var _f2 = _f.replace(/ /g, '_');

+     var field = $('#' +  _f2);

      var _val = null;

      for (j=0; j<data.issue.custom_fields.length; j++) {

        if (data.issue.custom_fields[j].name == _f){
@@ -220,13 +240,15 @@ 

        console.log('No corresponding custom field/value found');

        return

      }

-     if (_val == true || _val == false) {

-       field[0].checked = _val;

-     } else {

-       field.val(_val);

+     if (field.length){

+       if (_val == true || _val == false) {

+         field[0].checked = _val;

+       } else {

+         field.val(_val);

+       }

      }

  

-     var field = $('#' +  _f + '_plain');

+     var field = $('#' +  _f2 + '_plain');

      field.html(_val);

    }

  }

file modified
+4 -2
@@ -364,7 +364,7 @@ 

          {% for field in repo.issue_keys %}

            <fieldset class="form-group issue-custom-display">

              <label><strong>{{ field.name }}</strong></label>

-             <div id="{{ field.name }}_plain">

+             <div id="{{ field.name | replace(' ', '_') }}_plain">

                <p>

                  {% if field.name in knowns_keys %}

                    {% if field.key_type == 'link' %}
@@ -383,7 +383,9 @@ 

              <fieldset class="form-group issue-custom-form">

                <label for="field"><strong>{{ field.name }}</strong></label>

                {% if field.key_type == 'list' %}

-                 <select class="form-control" name="{{ field.name }}" id="{{ field.name }}>

+                 <select class="form-control"

+                     name="{{ field.name }}"

+                     id="{{ field.name | replace(' ', '_') }}">

                    <option value="None">None</option>

                    {% for item in field.data or [] %}

                      <option value="{{item}}" {% if field.name in knowns_keys and item == knowns_keys[field.name].value %} selected {% endif %}>

file modified
+17 -2
@@ -971,15 +971,21 @@ 

          self.assertEqual(len(issue.comments), 1)

          self.assertEqual(issue.comments[0].comment, 'Edited comment')

  

-     @patch('pagure.lib.REDIS', MagicMock(return_value=True))

      @patch('pagure.lib.git.update_git', MagicMock(return_value=True))

      @patch('pagure.lib.notify.send_email', MagicMock(return_value=True))

-     def test_add_tag_obj(self):

+     @patch('pagure.lib.REDIS')

+     def test_add_tag_obj(self, mock_redis):

          """ Test the add_tag_obj of pagure.lib. """

+         mock_redis.return_value=True

  

          self.test_edit_issue()

          repo = pagure.lib._get_project(self.session, 'test')

          issue = pagure.lib.search_issues(self.session, repo, issueid=1)

+         self.assertFalse(issue.private)

+         self.assertFalse(issue.project.private)

+ 

+         args = mock_redis.publish.call_args_list

+         self.assertEqual(len(args), 8)

  

          # Add a tag to the issue

          msg = pagure.lib.add_tag_obj(
@@ -991,6 +997,15 @@ 

          self.session.commit()

          self.assertEqual(msg, 'Issue tagged with: tag1')

  

+         args = mock_redis.publish.call_args_list

+         self.assertEqual(len(args), 10)

+         # Get the arguments of the last call and get the second of these

+         # arguments (the first one changing for each test run)

+         self.assertEqual(

+             args[-1:][0][0][1],

+             '{"added_tags_color": ["DeepSkyBlue"], "added_tags": ["tag1"]}'

+         )

+ 

          # Try a second time

          msg = pagure.lib.add_tag_obj(

              session=self.session,

  • Include the color of the tags added so the SSE server can display them
    with the right color from the start
  • Include the list of priorities when updating them so the SSE server
    can display their human readable format rather than their rank
  • Fix displaying tags added/removed when logged out
  • Fix displaying assignee added/removed when logged out
  • Fix refreshing live milestone updates
  • Fix refreshing custom fields updates when logged out

Signed-off-by: Pierre-Yves Chibon pingou@pingoured.fr

Looks like the tests are failing.

Actually, it looks like Jenkins is just failing with "resource unavailable" messages.

I recommend adding some tests for the changes in this file.

rebased

6 years ago

Thanks for the review! :)

Pull-Request has been merged by pingou

6 years ago