From 2b93201533d0d5c7fdcb9b6e74f0eec944ed0ea9 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 2 Dec 2012 22:18:03 +0200 Subject: [PATCH 1/8] Tests on EventFilters added --- features/dashboard/event_filters.feature | 14 +++++ .../dashboard/dashboard_event_filters.rb | 63 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 features/dashboard/event_filters.feature create mode 100644 features/steps/dashboard/dashboard_event_filters.rb diff --git a/features/dashboard/event_filters.feature b/features/dashboard/event_filters.feature new file mode 100644 index 00000000000..e3e6eced8fb --- /dev/null +++ b/features/dashboard/event_filters.feature @@ -0,0 +1,14 @@ +Feature: Event filters + Background: + Given I sign in as a user + And I own a project + And this project has push event + And this project has new member event + And this project has merge request event + And I visit dashboard page + + Scenario: I should see all events + Then I should see push event + Then I should see new member event + Then I should see merge request event + diff --git a/features/steps/dashboard/dashboard_event_filters.rb b/features/steps/dashboard/dashboard_event_filters.rb new file mode 100644 index 00000000000..cb821ca327a --- /dev/null +++ b/features/steps/dashboard/dashboard_event_filters.rb @@ -0,0 +1,63 @@ +class EventFilters < Spinach::FeatureSteps + include SharedAuthentication + include SharedPaths + include SharedProject + + Then 'I should see push event' do + page.find('span.pushed').should have_content('pushed') + end + + Then 'I should see new member event' do + page.find('span.joined').should have_content('joined') + end + + Then 'I should see merge request event' do + page.find('span.merged').should have_content('merged') + end + + And 'this project has push event' do + data = { + before: "0000000000000000000000000000000000000000", + after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", + ref: "refs/heads/new_design", + user_id: @user.id, + user_name: @user.name, + repository: { + name: @project.name, + url: "localhost/rubinius", + description: "", + homepage: "localhost/rubinius", + private: true + } + } + + @event = Event.create( + project: @project, + action: Event::Pushed, + data: data, + author_id: @user.id + ) + end + + And 'this project has new member event' do + user = create(:user, {name: "John Doe"}) + Event.create( + project: @project, + author_id: user.id, + action: Event::Joined + ) + end + + And 'this project has merge request event' do + merge_request = create :merge_request, author: @user, project: @project + Event.create( + project: @project, + action: Event::Merged, + target_id: merge_request.id, + target_type: "MergeRequest", + author_id: @user.id + ) + end + +end + From b255c3c44b849510e19be88833bb73425b8d0e9d Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Sun, 2 Dec 2012 22:54:19 +0200 Subject: [PATCH 2/8] Tests on events filtering added --- app/helpers/events_helper.rb | 2 +- features/dashboard/event_filters.feature | 21 +++++++++++-- .../dashboard/dashboard_event_filters.rb | 30 +++++++++++++++++-- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 2b9e7186bcd..85378400e2a 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -32,7 +32,7 @@ module EventsHelper end content_tag :div, class: "filter_icon #{inactive}" do - link_to dashboard_path(event_filter: filter), class: 'has_tooltip', 'data-original-title' => tooltip do + link_to dashboard_path(event_filter: filter), class: 'has_tooltip', id: "#{key}_event_filter", 'data-original-title' => tooltip do image_tag "event_filter_#{key}.png" end end diff --git a/features/dashboard/event_filters.feature b/features/dashboard/event_filters.feature index e3e6eced8fb..050d98951a8 100644 --- a/features/dashboard/event_filters.feature +++ b/features/dashboard/event_filters.feature @@ -9,6 +9,23 @@ Feature: Event filters Scenario: I should see all events Then I should see push event - Then I should see new member event - Then I should see merge request event + And I should see new member event + And I should see merge request event + Scenario: I should see only pushed events + When I click "push" event filter + Then I should see push event + And I should not see new member event + And I should not see merge request event + + Scenario: I should see only joined events + When I click "team" event filter + Then I should see new member event + And I should not see push event + And I should not see merge request event + + Scenario: I should see only merged events + When I click "merge" event filter + Then I should see merge request event + And I should not see push event + And I should not see new member event diff --git a/features/steps/dashboard/dashboard_event_filters.rb b/features/steps/dashboard/dashboard_event_filters.rb index cb821ca327a..03a0bd85e43 100644 --- a/features/steps/dashboard/dashboard_event_filters.rb +++ b/features/steps/dashboard/dashboard_event_filters.rb @@ -4,15 +4,27 @@ class EventFilters < Spinach::FeatureSteps include SharedProject Then 'I should see push event' do - page.find('span.pushed').should have_content('pushed') + page.has_selector?('span.pushed').should be_true + end + + Then 'I should not see push event' do + page.has_selector?('span.pushed').should be_false end Then 'I should see new member event' do - page.find('span.joined').should have_content('joined') + page.has_selector?('span.joined').should be_true + end + + And 'I should not see new member event' do + page.has_selector?('span.joined').should be_false end Then 'I should see merge request event' do - page.find('span.merged').should have_content('merged') + page.has_selector?('span.merged').should be_true + end + + And 'I should not see merge request event' do + page.has_selector?('span.merged').should be_false end And 'this project has push event' do @@ -59,5 +71,17 @@ class EventFilters < Spinach::FeatureSteps ) end + When 'I click "push" event filter' do + click_link("push_event_filter") + end + + When 'I click "team" event filter' do + click_link("team_event_filter") + end + + When 'I click "merge" event filter' do + click_link("merged_event_filter") + end + end From 97d17cf835ebe5121330a3775ae58bcab792851e Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 3 Dec 2012 02:29:07 +0200 Subject: [PATCH 3/8] Event filters stores at cookies. --- app/assets/javascripts/dashboard.js | 27 +++++++++++++++++++ app/controllers/dashboard_controller.rb | 3 ++- app/helpers/events_helper.rb | 5 +--- app/views/dashboard/index.html.haml | 1 + features/dashboard/event_filters.feature | 19 +++++++++++++ .../dashboard/dashboard_event_filters.rb | 12 ++++----- 6 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 app/assets/javascripts/dashboard.js diff --git a/app/assets/javascripts/dashboard.js b/app/assets/javascripts/dashboard.js new file mode 100644 index 00000000000..0261926af2b --- /dev/null +++ b/app/assets/javascripts/dashboard.js @@ -0,0 +1,27 @@ +/** + * Init dashboard page + * + */ +function dashboardPage(){ + $(".event_filter_link").bind('click',(function(){ + enableFilter(this.id); + })); +} + +function enableFilter(sender_id){ + var event_filters = $.cookie('event_filter'); + var filter = sender_id.split('_')[0]; + if (!event_filters) { + event_filters = new Array(); + } else { + event_filters = event_filters.split(','); + } + var index = event_filters.indexOf(filter); + if (index == -1) { + event_filters.push(filter); + } else { + event_filters.splice(index, 1); + } + $.cookie('event_filter', event_filters.join(',')); +}; + diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 4bd840a07fb..c0ec4708e0a 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -60,6 +60,7 @@ class DashboardController < ApplicationController end def event_filter - @event_filter ||= EventFilter.new(params[:event_filter]) + filters = cookies['event_filter'].split(',') if cookies['event_filter'] + @event_filter ||= EventFilter.new(filters) end end diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 85378400e2a..9b9d2a913e9 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -22,9 +22,6 @@ module EventsHelper def event_filter_link key, tooltip key = key.to_s - - filter = @event_filter.options key - inactive = if @event_filter.active? key nil else @@ -32,7 +29,7 @@ module EventsHelper end content_tag :div, class: "filter_icon #{inactive}" do - link_to dashboard_path(event_filter: filter), class: 'has_tooltip', id: "#{key}_event_filter", 'data-original-title' => tooltip do + link_to dashboard_path, class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do image_tag "event_filter_#{key}.png" end end diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml index d1422bda617..266d66aa6aa 100644 --- a/app/views/dashboard/index.html.haml +++ b/app/views/dashboard/index.html.haml @@ -1,3 +1,4 @@ += javascript_include_tag 'dashboard' - if @has_authorized_projects .projects .activities.span8 diff --git a/features/dashboard/event_filters.feature b/features/dashboard/event_filters.feature index 050d98951a8..158d3e1cfa9 100644 --- a/features/dashboard/event_filters.feature +++ b/features/dashboard/event_filters.feature @@ -12,20 +12,39 @@ Feature: Event filters And I should see new member event And I should see merge request event + @javascript Scenario: I should see only pushed events When I click "push" event filter Then I should see push event And I should not see new member event And I should not see merge request event + @javascript Scenario: I should see only joined events When I click "team" event filter Then I should see new member event And I should not see push event And I should not see merge request event + @javascript Scenario: I should see only merged events When I click "merge" event filter Then I should see merge request event And I should not see push event And I should not see new member event + + @javascript + Scenario: I should see only selected events while page reloaded + When I click "push" event filter + And I visit dashboard page + Then I should see push event + And I should not see new member event + When I click "team" event filter + And I visit dashboard page + Then I should see push event + And I should see new member event + And I should not see merge request event + When I click "push" event + Then I should not see push event + And I should see new member event + And I should not see merge request event diff --git a/features/steps/dashboard/dashboard_event_filters.rb b/features/steps/dashboard/dashboard_event_filters.rb index 03a0bd85e43..bfc053631ab 100644 --- a/features/steps/dashboard/dashboard_event_filters.rb +++ b/features/steps/dashboard/dashboard_event_filters.rb @@ -4,27 +4,27 @@ class EventFilters < Spinach::FeatureSteps include SharedProject Then 'I should see push event' do - page.has_selector?('span.pushed').should be_true + page.should have_selector('span.pushed') end Then 'I should not see push event' do - page.has_selector?('span.pushed').should be_false + page.should_not have_selector('span.pushed') end Then 'I should see new member event' do - page.has_selector?('span.joined').should be_true + page.should have_selector('span.joined') end And 'I should not see new member event' do - page.has_selector?('span.joined').should be_false + page.should_not have_selector('span.joined') end Then 'I should see merge request event' do - page.has_selector?('span.merged').should be_true + page.should have_selector('span.merged') end And 'I should not see merge request event' do - page.has_selector?('span.merged').should be_false + page.should_not have_selector('span.merged') end And 'this project has push event' do From f038057b9d75ce6ef8e6a2706152a23f045f91da Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Mon, 3 Dec 2012 07:09:05 +0200 Subject: [PATCH 4/8] Typo fixed --- features/dashboard/event_filters.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/dashboard/event_filters.feature b/features/dashboard/event_filters.feature index 158d3e1cfa9..635bf40570d 100644 --- a/features/dashboard/event_filters.feature +++ b/features/dashboard/event_filters.feature @@ -44,7 +44,7 @@ Feature: Event filters Then I should see push event And I should see new member event And I should not see merge request event - When I click "push" event + When I click "push" event filter Then I should not see push event And I should see new member event And I should not see merge request event From 0d9f73fa1e3d9f0c97b20b4bc85cd71b3df95df7 Mon Sep 17 00:00:00 2001 From: AlexDenisov <1101.debian@gmail.com> Date: Wed, 9 Jan 2013 05:58:27 +0000 Subject: [PATCH 5/8] JavaScript removed from dashboard#index template. --- app/assets/javascripts/dashboard.js | 6 ++++++ app/views/dashboard/index.html.haml | 3 --- features/dashboard/event_filters.feature | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/dashboard.js b/app/assets/javascripts/dashboard.js index 0261926af2b..11eead9771f 100644 --- a/app/assets/javascripts/dashboard.js +++ b/app/assets/javascripts/dashboard.js @@ -2,6 +2,12 @@ * Init dashboard page * */ + +$(function(){ + Pager.init(20, true); + dashboardPage(); +}); + function dashboardPage(){ $(".event_filter_link").bind('click',(function(){ enableFilter(this.id); diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml index 266d66aa6aa..abbe3101fc3 100644 --- a/app/views/dashboard/index.html.haml +++ b/app/views/dashboard/index.html.haml @@ -1,4 +1,3 @@ -= javascript_include_tag 'dashboard' - if @has_authorized_projects .projects .activities.span8 @@ -8,5 +7,3 @@ - else = render "zero_authorized_projects" -:javascript - $(function(){ Pager.init(20, true); }); diff --git a/features/dashboard/event_filters.feature b/features/dashboard/event_filters.feature index 635bf40570d..e0c6b84b008 100644 --- a/features/dashboard/event_filters.feature +++ b/features/dashboard/event_filters.feature @@ -7,6 +7,7 @@ Feature: Event filters And this project has merge request event And I visit dashboard page + @javascript Scenario: I should see all events Then I should see push event And I should see new member event From 3cc0458312a0d230050b09679da80497052769c8 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 9 Jan 2013 18:14:24 +0000 Subject: [PATCH 6/8] Reloading of events via ajax instead of page reloading. --- app/assets/javascripts/dashboard.js | 13 ++++++++++--- app/helpers/events_helper.rb | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/dashboard.js b/app/assets/javascripts/dashboard.js index 11eead9771f..575fa471655 100644 --- a/app/assets/javascripts/dashboard.js +++ b/app/assets/javascripts/dashboard.js @@ -10,13 +10,20 @@ $(function(){ function dashboardPage(){ $(".event_filter_link").bind('click',(function(){ - enableFilter(this.id); + toggleFilter($(this)); + reloadActivities(); })); } -function enableFilter(sender_id){ +function reloadActivities(){ + $('.content_list').html(''); + Pager.init(20, true); +} + +function toggleFilter(sender){ + sender.parent().toggleClass('inactive'); var event_filters = $.cookie('event_filter'); - var filter = sender_id.split('_')[0]; + var filter = sender.attr('id').split('_')[0]; if (!event_filters) { event_filters = new Array(); } else { diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 9b9d2a913e9..771a6364bbd 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -29,7 +29,7 @@ module EventsHelper end content_tag :div, class: "filter_icon #{inactive}" do - link_to dashboard_path, class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do + link_to 'javascript:void(0)', class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do image_tag "event_filter_#{key}.png" end end From 5133fe8efb0f58f3a8fe0fe8e5474fa7db98cac1 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 9 Jan 2013 19:28:31 +0000 Subject: [PATCH 7/8] dashboard js -> coffee --- app/assets/javascripts/dashboard.js | 40 ---------------------- app/assets/javascripts/dashboard.js.coffee | 29 ++++++++++++++++ 2 files changed, 29 insertions(+), 40 deletions(-) delete mode 100644 app/assets/javascripts/dashboard.js create mode 100644 app/assets/javascripts/dashboard.js.coffee diff --git a/app/assets/javascripts/dashboard.js b/app/assets/javascripts/dashboard.js deleted file mode 100644 index 575fa471655..00000000000 --- a/app/assets/javascripts/dashboard.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Init dashboard page - * - */ - -$(function(){ - Pager.init(20, true); - dashboardPage(); -}); - -function dashboardPage(){ - $(".event_filter_link").bind('click',(function(){ - toggleFilter($(this)); - reloadActivities(); - })); -} - -function reloadActivities(){ - $('.content_list').html(''); - Pager.init(20, true); -} - -function toggleFilter(sender){ - sender.parent().toggleClass('inactive'); - var event_filters = $.cookie('event_filter'); - var filter = sender.attr('id').split('_')[0]; - if (!event_filters) { - event_filters = new Array(); - } else { - event_filters = event_filters.split(','); - } - var index = event_filters.indexOf(filter); - if (index == -1) { - event_filters.push(filter); - } else { - event_filters.splice(index, 1); - } - $.cookie('event_filter', event_filters.join(',')); -}; - diff --git a/app/assets/javascripts/dashboard.js.coffee b/app/assets/javascripts/dashboard.js.coffee new file mode 100644 index 00000000000..0f52793f053 --- /dev/null +++ b/app/assets/javascripts/dashboard.js.coffee @@ -0,0 +1,29 @@ +$ -> + dashboardPage() + +dashboardPage = -> + Pager.init 20, true + $(".event_filter_link").bind "click", -> + toggleFilter $(this) + reloadActivities() + +reloadActivities = -> + $(".content_list").html '' + Pager.init 20, true + +toggleFilter = (sender) -> + sender.parent().toggleClass "inactive" + event_filters = $.cookie("event_filter") + filter = sender.attr("id").split("_")[0] + if event_filters + event_filters = event_filters.split(",") + else + event_filters = new Array() + + index = event_filters.indexOf(filter) + if index is -1 + event_filters.push filter + else + event_filters.splice index, 1 + + $.cookie "event_filter", event_filters.join(",") From d7bc1214748564604eb544c56dabb0b551737ae6 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Wed, 9 Jan 2013 21:02:41 +0000 Subject: [PATCH 8/8] replace javascript:void with preventDefault --- app/assets/javascripts/dashboard.js.coffee | 3 ++- app/helpers/events_helper.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/dashboard.js.coffee b/app/assets/javascripts/dashboard.js.coffee index 0f52793f053..b0ae6bf8a02 100644 --- a/app/assets/javascripts/dashboard.js.coffee +++ b/app/assets/javascripts/dashboard.js.coffee @@ -3,7 +3,8 @@ $ -> dashboardPage = -> Pager.init 20, true - $(".event_filter_link").bind "click", -> + $(".event_filter_link").bind "click", (event) -> + event.preventDefault() toggleFilter $(this) reloadActivities() diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 771a6364bbd..9b9d2a913e9 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -29,7 +29,7 @@ module EventsHelper end content_tag :div, class: "filter_icon #{inactive}" do - link_to 'javascript:void(0)', class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do + link_to dashboard_path, class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do image_tag "event_filter_#{key}.png" end end