From e4029070a205351ca9677311c9675f4f933e8f45 Mon Sep 17 00:00:00 2001
From: Jacopo <beschi.jacopo@gmail.com>
Date: Sat, 28 Jan 2017 23:39:24 +0100
Subject: [PATCH] Filter todos by manual add

Added the option to filter todo by Added and Pipelines
---
 app/helpers/todos_helper.rb                   |  4 +-
 .../26705-filter-todos-by-manual-add.yml      |  4 ++
 spec/factories/todos.rb                       |  4 ++
 spec/features/todos/todos_filtering_spec.rb   | 57 ++++++++++++++++---
 4 files changed, 61 insertions(+), 8 deletions(-)
 create mode 100644 changelogs/unreleased/26705-filter-todos-by-manual-add.yml

diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb
index c568cca9e5..d7d51c9997 100644
--- a/app/helpers/todos_helper.rb
+++ b/app/helpers/todos_helper.rb
@@ -86,7 +86,9 @@ module TodosHelper
     [
       { id: '', text: 'Any Action' },
       { id: Todo::ASSIGNED, text: 'Assigned' },
-      { id: Todo::MENTIONED, text: 'Mentioned' }
+      { id: Todo::MENTIONED, text: 'Mentioned' },
+      { id: Todo::MARKED, text: 'Added' },
+      { id: Todo::BUILD_FAILED, text: 'Pipelines' }
     ]
   end
 
diff --git a/changelogs/unreleased/26705-filter-todos-by-manual-add.yml b/changelogs/unreleased/26705-filter-todos-by-manual-add.yml
new file mode 100644
index 0000000000..3521496a20
--- /dev/null
+++ b/changelogs/unreleased/26705-filter-todos-by-manual-add.yml
@@ -0,0 +1,4 @@
+---
+title: Filter todos by manual add
+merge_request: 8691
+author: Jacopo Beschi @jacopo-beschi
diff --git a/spec/factories/todos.rb b/spec/factories/todos.rb
index 91d6f39a5b..275561502c 100644
--- a/spec/factories/todos.rb
+++ b/spec/factories/todos.rb
@@ -24,6 +24,10 @@ FactoryGirl.define do
       target factory: :merge_request
     end
 
+    trait :marked do
+      action { Todo::MARKED }
+    end
+
     trait :approval_required do
       action { Todo::APPROVAL_REQUIRED }
     end
diff --git a/spec/features/todos/todos_filtering_spec.rb b/spec/features/todos/todos_filtering_spec.rb
index d1f2bc7888..e8f06916d5 100644
--- a/spec/features/todos/todos_filtering_spec.rb
+++ b/spec/features/todos/todos_filtering_spec.rb
@@ -98,15 +98,58 @@ describe 'Dashboard > User filters todos', feature: true, js: true do
     expect(find('.todos-list')).not_to have_content merge_request.to_reference
   end
 
-  it 'filters by action' do
-    click_button 'Action'
-    within '.dropdown-menu-action' do
-      click_link 'Assigned'
+  describe 'filter by action' do
+    before do
+      create(:todo, :build_failed, user: user_1, author: user_2, project: project_1)
+      create(:todo, :marked, user: user_1, author: user_2, project: project_1, target: issue)
     end
 
-    wait_for_ajax
+    it 'filters by Assigned' do
+      filter_action('Assigned')
+
+      expect_to_see_action(:assigned)
+    end
+
+    it 'filters by Mentioned' do
+      filter_action('Mentioned')
+
+      expect_to_see_action(:mentioned)
+    end
+
+    it 'filters by Added' do
+      filter_action('Added')
+
+      expect_to_see_action(:marked)
+    end
+
+    it 'filters by Pipelines' do
+      filter_action('Pipelines')
 
-    expect(find('.todos-list')).to     have_content ' assigned you '
-    expect(find('.todos-list')).not_to have_content ' mentioned '
+      expect_to_see_action(:build_failed)
+    end
+
+    def filter_action(name)
+      click_button 'Action'
+      within '.dropdown-menu-action' do
+        click_link name
+      end
+
+      wait_for_ajax
+    end
+
+    def expect_to_see_action(action_name)
+      action_names = {
+        assigned: ' assigned you ',
+        mentioned: ' mentioned ',
+        marked: ' added a todo for ',
+        build_failed: ' build failed for '
+      }
+
+      action_name_text = action_names.delete(action_name)
+      expect(find('.todos-list')).to have_content action_name_text
+      action_names.each_value do |other_action_text|
+        expect(find('.todos-list')).not_to have_content other_action_text
+      end
+    end
   end
 end
-- 
2.30.9