Commit 3ada1d7ec38c48f3f69c5bd2efde4a9546c71ec1

Authored by Jason Blanchard
1 parent a9dcfd85

Added option to remove issue assignee on project issue page and issue edit page

CHANGELOG
... ... @@ -7,6 +7,7 @@ v 6.7.0
7 7 - Piwik Integration (Sebastian Winkler)
8 8 - Show contribution guide link for new issue form (Jeroen van Baarsen)
9 9 - Fix CI status for merge requests from fork
  10 + - Added option to remove issue assignee on project issue page and issue edit page (Jason Blanchard)
10 11  
11 12 v 6.6.2
12 13 - Fix 500 error on branch/tag create or remove via UI
... ... @@ -664,4 +665,4 @@ v 0.8.0
664 665 - stability
665 666 - security fixes
666 667 - increased test coverage
667   - - email notification
668 668 \ No newline at end of file
  669 + - email notification
... ...
app/assets/javascripts/project_users_select.js.coffee
... ... @@ -10,6 +10,16 @@
10 10 query: (query) ->
11 11 Api.projectUsers project_id, query.term, (users) ->
12 12 data = { results: users }
  13 +
  14 + nullUser = {
  15 + name: 'Unassigned',
  16 + avatar: null,
  17 + username: 'none',
  18 + id: ''
  19 + }
  20 +
  21 + data.results.unshift(nullUser)
  22 +
13 23 query.callback(data)
14 24  
15 25 initSelection: (element, callback) ->
... ... @@ -35,8 +45,13 @@
35 45 else
36 46 avatar = gon.relative_url_root + "/assets/no_avatar.png"
37 47  
  48 + if user.id == ''
  49 + avatarMarkup = ''
  50 + else
  51 + avatarMarkup = "<div class='user-image'><img class='avatar s24' src='#{avatar}'></div>"
  52 +
38 53 "<div class='user-result'>
39   - <div class='user-image'><img class='avatar s24' src='#{avatar}'></div>
  54 + #{avatarMarkup}
40 55 <div class='user-name'>#{user.name}</div>
41 56 <div class='user-username'>#{user.username}</div>
42 57 </div>"
... ...
spec/features/issues_spec.rb
... ... @@ -43,6 +43,31 @@ describe &quot;Issues&quot; do
43 43 page.should have_content project.name
44 44 end
45 45 end
  46 +
  47 + end
  48 +
  49 + describe "Editing issue assignee" do
  50 + let!(:issue) do
  51 + create(:issue,
  52 + author: @user,
  53 + assignee: @user,
  54 + project: project)
  55 + end
  56 +
  57 + it 'allows user to select unasigned', :js => true do
  58 + visit edit_project_issue_path(project, issue)
  59 +
  60 + page.should have_content "Assign to #{@user.name}"
  61 +
  62 + page.first('#s2id_issue_assignee_id').click
  63 + sleep 2 # wait for ajax stuff to complete
  64 + page.first('.user-result').click
  65 +
  66 + click_button "Save changes"
  67 +
  68 + page.should have_content "Assignee: Select assignee"
  69 + issue.reload.assignee.should be_nil
  70 + end
46 71 end
47 72  
48 73 describe "Filter issue" do
... ... @@ -245,6 +270,28 @@ describe &quot;Issues&quot; do
245 270 page.should have_content milestone.title
246 271 end
247 272 end
  273 +
  274 + describe 'removing assignee' do
  275 + let(:user2) { create(:user) }
  276 +
  277 + before :each do
  278 + issue.assignee = user2
  279 + issue.save
  280 + end
  281 +
  282 + it 'allows user to remove assignee', :js => true do
  283 + visit project_issue_path(project, issue)
  284 + page.should have_content "Assignee: #{user2.name}"
  285 +
  286 + page.first('#s2id_issue_assignee_id').click
  287 + sleep 2 # wait for ajax stuff to complete
  288 + page.first('.user-result').click
  289 +
  290 + page.should have_content "Assignee: Unassigned"
  291 + sleep 2 # wait for ajax stuff to complete
  292 + issue.reload.assignee.should be_nil
  293 + end
  294 + end
248 295 end
249 296  
250 297 def first_issue
... ...