From 72bda3b40ea60bcc3038430984591de1806e4118 Mon Sep 17 00:00:00 2001 From: Joachim Back Date: Tue, 21 Jul 2015 23:52:19 +0200 Subject: [PATCH 1/6] Ergebnisse vom Gamification-Abend. --- app/models/merit/badge_rules.rb | 15 +++++++++++++++ app/models/merit/point_rules.rb | 2 ++ config/initializers/merit.rb | 25 +++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/app/models/merit/badge_rules.rb b/app/models/merit/badge_rules.rb index 691d50269..13712ca09 100644 --- a/app/models/merit/badge_rules.rb +++ b/app/models/merit/badge_rules.rb @@ -33,6 +33,21 @@ def initialize grant_on 'comments#create', badge: 'commentator', level: 10 do |comment| comment.author.comments.count == 10 end + + #If it has 1 search button, grant detective-1 badge + grant_on 'search#index', badge: 'detective', lavel: 1, to: :user + + #If it has 2 search button, grant host badge + grant_on 'events#update', badge: 'host', lavel: 2 + + #If it has 10 search button, grant great host badge + grant_on 'events#update', badge: 'great host', lavel: 10 + + #If it has 2 search button, grant participant badge + grant_on 'events#join', badge: 'particpant', lavel: 2 + + #If it has 40 search button, grant party checker badge + grant_on 'events#join', badge: 'party checker', lavel: 40 # If it has 5 votes, grant relevant-commenter badge # grant_on 'comments#vote', badge: 'relevant-commenter', diff --git a/app/models/merit/point_rules.rb b/app/models/merit/point_rules.rb index eaab3fa2f..bff3fe190 100644 --- a/app/models/merit/point_rules.rb +++ b/app/models/merit/point_rules.rb @@ -30,6 +30,8 @@ def initialize score 5, on: ['blog_posts#create', 'pages#create'], category: 'information' score 5, on: 'posts#create', category: 'communication' score 2, on: 'comments#create', category: 'communication' + score 1, on: 'events#join', category: 'social activity' + score 2, on: 'events#update', category: 'social activity' end end end diff --git a/config/initializers/merit.rb b/config/initializers/merit.rb index f42d6799e..1ac35282b 100644 --- a/config/initializers/merit.rb +++ b/config/initializers/merit.rb @@ -91,6 +91,31 @@ name: 'damsel-in-distress', description: 'only a true hero is honest enough to ask for help: create a support-request with the help button', custom_fields: { difficulty: :silver } +}, { + id: (badge_id = badge_id+1), + name: 'detective', + description: 'who searches will find it: search something with the search button', + custom_fields: { difficulty: :bronce } +}, { + id: (badge_id = badge_id+1), + name: 'host', + description: 'creates 2 events', + custom_fields: { difficulty: :bronce } +}, { + id: (badge_id = badge_id+1), + name: 'great host', + description: 'creates 10 events', + custom_fields: { difficulty: :silver } +}, { + id: (badge_id = badge_id+1), + name: 'participant', + description: 'creates 2 events', + custom_fields: { difficulty: :bronce } +}, { + id: (badge_id = badge_id+1), + name: 'party checker', + description: 'creates 40 events', + custom_fields: { difficulty: :silver } }].each do |attrs| From 32e8307da5832dd55cbd815bb34dc67c30e212b3 Mon Sep 17 00:00:00 2001 From: Joachim Back Date: Wed, 22 Jul 2015 22:18:45 +0200 Subject: [PATCH 2/6] spec for merit --- app/models/merit/badge_rules.rb | 14 ++++----- app/models/merit/point_rules.rb | 2 +- config/initializers/merit.rb | 2 +- spec/models/merit/point_rules_spec.rb | 44 +++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 spec/models/merit/point_rules_spec.rb diff --git a/app/models/merit/badge_rules.rb b/app/models/merit/badge_rules.rb index 13712ca09..b0c7b6420 100644 --- a/app/models/merit/badge_rules.rb +++ b/app/models/merit/badge_rules.rb @@ -35,19 +35,19 @@ def initialize end #If it has 1 search button, grant detective-1 badge - grant_on 'search#index', badge: 'detective', lavel: 1, to: :user + grant_on 'search#index', badge: 'detective', level: 1 - #If it has 2 search button, grant host badge - grant_on 'events#update', badge: 'host', lavel: 2 + #If it has 3 search button, grant host badge + grant_on 'events#update', badge: 'host', level: 3 - #If it has 10 search button, grant great host badge - grant_on 'events#update', badge: 'great host', lavel: 10 + #If it has 30 search button, grant great host badge + grant_on 'events#update', badge: 'great host', level: 30 #If it has 2 search button, grant participant badge - grant_on 'events#join', badge: 'particpant', lavel: 2 + grant_on 'events#join', badge: 'particpant', level: 2 #If it has 40 search button, grant party checker badge - grant_on 'events#join', badge: 'party checker', lavel: 40 + grant_on 'events#join', badge: 'party checker', level: 40 # If it has 5 votes, grant relevant-commenter badge # grant_on 'comments#vote', badge: 'relevant-commenter', diff --git a/app/models/merit/point_rules.rb b/app/models/merit/point_rules.rb index bff3fe190..a4dd9cd6d 100644 --- a/app/models/merit/point_rules.rb +++ b/app/models/merit/point_rules.rb @@ -31,7 +31,7 @@ def initialize score 5, on: 'posts#create', category: 'communication' score 2, on: 'comments#create', category: 'communication' score 1, on: 'events#join', category: 'social activity' - score 2, on: 'events#update', category: 'social activity' + score 1, on: 'events#update', category: 'social activity' end end end diff --git a/config/initializers/merit.rb b/config/initializers/merit.rb index 1ac35282b..fbfd5a0d5 100644 --- a/config/initializers/merit.rb +++ b/config/initializers/merit.rb @@ -94,7 +94,7 @@ }, { id: (badge_id = badge_id+1), name: 'detective', - description: 'who searches will find it: search something with the search button', + description: 'Seek, and ye shall find: search something with the search button', custom_fields: { difficulty: :bronce } }, { id: (badge_id = badge_id+1), diff --git a/spec/models/merit/point_rules_spec.rb b/spec/models/merit/point_rules_spec.rb new file mode 100644 index 000000000..ea1cd59e9 --- /dev/null +++ b/spec/models/merit/point_rules_spec.rb @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +require 'spec_helper' + +describe User do + + before do + @user = create( :user ) + @user.save + @points = @user.points + end + + subject { @user } + + # Validation + # ========================================================================================== + + it { should be_valid } + + + # Basic Properties + # ========================================================================================== + + describe "events#join" do + subject { @user } + [ :first_name, :last_name, :alias, :email, :create_account, :female, :add_to_group ].each do |attr| + it { should respond_to( attr ) } + it { should respond_to( "#{attr}=".to_sym ) } + end + end + + describe "events#join" do + subject { @user.join(@event); time_travel(2.seconds) } + describe "(joining an event)" do + before { @event = create(:event); subject } + specify { @event.attendees.should include @user} + specify { @event.attendees_group.members.should include @user } + specify "the user should have earned points" do + @user.points > @points + end + end + + end + +end From 7f5e897e0b6a00712735a004e6e163f79507c96b Mon Sep 17 00:00:00 2001 From: Joachim Back Date: Wed, 22 Jul 2015 22:23:23 +0200 Subject: [PATCH 3/6] schreibfehler particpant --- app/models/merit/badge_rules.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/merit/badge_rules.rb b/app/models/merit/badge_rules.rb index b0c7b6420..dc0501913 100644 --- a/app/models/merit/badge_rules.rb +++ b/app/models/merit/badge_rules.rb @@ -44,7 +44,7 @@ def initialize grant_on 'events#update', badge: 'great host', level: 30 #If it has 2 search button, grant participant badge - grant_on 'events#join', badge: 'particpant', level: 2 + grant_on 'events#join', badge: 'participant', level: 2 #If it has 40 search button, grant party checker badge grant_on 'events#join', badge: 'party checker', level: 40 From 423b140a82003adb8ec5e43f2201c7a251204ddf Mon Sep 17 00:00:00 2001 From: Joachim Back Date: Thu, 23 Jul 2015 07:30:13 +0200 Subject: [PATCH 4/6] Add level to badges --- config/initializers/merit.rb | 54 +++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/config/initializers/merit.rb b/config/initializers/merit.rb index fbfd5a0d5..cb9c42fb0 100644 --- a/config/initializers/merit.rb +++ b/config/initializers/merit.rb @@ -92,31 +92,35 @@ description: 'only a true hero is honest enough to ask for help: create a support-request with the help button', custom_fields: { difficulty: :silver } }, { - id: (badge_id = badge_id+1), - name: 'detective', - description: 'Seek, and ye shall find: search something with the search button', - custom_fields: { difficulty: :bronce } -}, { - id: (badge_id = badge_id+1), - name: 'host', - description: 'creates 2 events', - custom_fields: { difficulty: :bronce } -}, { - id: (badge_id = badge_id+1), - name: 'great host', - description: 'creates 10 events', - custom_fields: { difficulty: :silver } -}, { - id: (badge_id = badge_id+1), - name: 'participant', - description: 'creates 2 events', - custom_fields: { difficulty: :bronce } -}, { - id: (badge_id = badge_id+1), - name: 'party checker', - description: 'creates 40 events', - custom_fields: { difficulty: :silver } - + id: (badge_id = badge_id+1), + name: 'detective', + description: 'Seek, and ye shall find: search something with the search button', + level: 1, + custom_fields: { difficulty: :bronce } +}, { + id: (badge_id = badge_id+1), + name: 'host', + description: 'creates 2 events', + level: 3, + custom_fields: { difficulty: :bronce } +}, { + id: (badge_id = badge_id+1), + name: 'great host', + description: 'creates 10 events', + level: 30, + custom_fields: { difficulty: :silver } +}, { + id: (badge_id = badge_id+1), + name: 'participant', + description: 'creates 2 events', + level: 2, + custom_fields: { difficulty: :bronce } +}, { + id: (badge_id = badge_id+1), + name: 'party checker', + description: 'creates 40 events', + level: 40, + custom_fields: { difficulty: :silver } }].each do |attrs| Merit::Badge.create! attrs From d79a2cb6593b664dc4548a2b57987bf5b2416083 Mon Sep 17 00:00:00 2001 From: Joachim Back Date: Thu, 23 Jul 2015 22:07:03 +0200 Subject: [PATCH 5/6] Feature spec for event's joining, fixing errors in badge names and comments --- app/models/merit/badge_rules.rb | 9 ++----- app/models/merit/point_rules.rb | 3 +-- config/initializers/merit.rb | 8 +++--- spec/features/merit_point_rules_spec.rb | 34 +++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 spec/features/merit_point_rules_spec.rb diff --git a/app/models/merit/badge_rules.rb b/app/models/merit/badge_rules.rb index dc0501913..003d7d77d 100644 --- a/app/models/merit/badge_rules.rb +++ b/app/models/merit/badge_rules.rb @@ -34,20 +34,15 @@ def initialize comment.author.comments.count == 10 end - #If it has 1 search button, grant detective-1 badge grant_on 'search#index', badge: 'detective', level: 1 - #If it has 3 search button, grant host badge grant_on 'events#update', badge: 'host', level: 3 - #If it has 30 search button, grant great host badge - grant_on 'events#update', badge: 'great host', level: 30 + grant_on 'events#update', badge: 'great-host', level: 30 - #If it has 2 search button, grant participant badge grant_on 'events#join', badge: 'participant', level: 2 - #If it has 40 search button, grant party checker badge - grant_on 'events#join', badge: 'party checker', level: 40 + grant_on 'events#join', badge: 'party-checker', level: 40 # If it has 5 votes, grant relevant-commenter badge # grant_on 'comments#vote', badge: 'relevant-commenter', diff --git a/app/models/merit/point_rules.rb b/app/models/merit/point_rules.rb index a4dd9cd6d..2b0cfa9a8 100644 --- a/app/models/merit/point_rules.rb +++ b/app/models/merit/point_rules.rb @@ -30,8 +30,7 @@ def initialize score 5, on: ['blog_posts#create', 'pages#create'], category: 'information' score 5, on: 'posts#create', category: 'communication' score 2, on: 'comments#create', category: 'communication' - score 1, on: 'events#join', category: 'social activity' - score 1, on: 'events#update', category: 'social activity' + score 1, on: ['events#join', 'events#update'], category: 'social-activity' end end end diff --git a/config/initializers/merit.rb b/config/initializers/merit.rb index cb9c42fb0..1e8b0fc8c 100644 --- a/config/initializers/merit.rb +++ b/config/initializers/merit.rb @@ -100,13 +100,13 @@ }, { id: (badge_id = badge_id+1), name: 'host', - description: 'creates 2 events', + description: 'creates 3 events', level: 3, custom_fields: { difficulty: :bronce } }, { id: (badge_id = badge_id+1), - name: 'great host', - description: 'creates 10 events', + name: 'great-host', + description: 'creates 30 events', level: 30, custom_fields: { difficulty: :silver } }, { @@ -117,7 +117,7 @@ custom_fields: { difficulty: :bronce } }, { id: (badge_id = badge_id+1), - name: 'party checker', + name: 'party-checker', description: 'creates 40 events', level: 40, custom_fields: { difficulty: :silver } diff --git a/spec/features/merit_point_rules_spec.rb b/spec/features/merit_point_rules_spec.rb new file mode 100644 index 000000000..a2163bb0f --- /dev/null +++ b/spec/features/merit_point_rules_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +feature "Merit Point Rules" do + include SessionSteps + + background do + @user = create :user_with_account + @points = @user.points + @group = create(:group) + @event1 = @group.child_events.create name: "Gamification Hacking Workshop", start_at: 1.day.from_now + @event2 = @group.child_events.create name: "Another meeting", start_at: 10.day.from_now + @group.assign_user @user, at: 1.year.ago + end + + scenario "joining event earns 1 point" do + login @user + + # Just looking at events#index does nothing. + visit root_path + @user.reload.points.should == @points + + # Joining an event should add a point. + visit root_path + within('.box.upcoming_events') { click_on @event1.name } + page.should have_selector '#join_event', visible: true + find('#join_event').click + @user.reload.points.should == @points+1 + within('.box.upcoming_events') { click_on @event2.name } + page.should have_selector '#join_event', visible: true + find('#join_event').click + @user.reload.points.should == @points+2 + end + +end From ae5af590222465c296f345b1ed5bb43e7b80988c Mon Sep 17 00:00:00 2001 From: Joachim Back Date: Thu, 23 Jul 2015 23:10:34 +0200 Subject: [PATCH 6/6] login after adding to group --- spec/features/merit_point_rules_spec.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/spec/features/merit_point_rules_spec.rb b/spec/features/merit_point_rules_spec.rb index a2163bb0f..f223c05e9 100644 --- a/spec/features/merit_point_rules_spec.rb +++ b/spec/features/merit_point_rules_spec.rb @@ -5,17 +5,18 @@ background do @user = create :user_with_account + end + + scenario "joining event earns 1 point" do + # setting up scenario @points = @user.points @group = create(:group) + @group.assign_user @user, at: 1.year.ago @event1 = @group.child_events.create name: "Gamification Hacking Workshop", start_at: 1.day.from_now @event2 = @group.child_events.create name: "Another meeting", start_at: 10.day.from_now - @group.assign_user @user, at: 1.year.ago - end - - scenario "joining event earns 1 point" do - login @user # Just looking at events#index does nothing. + login @user visit root_path @user.reload.points.should == @points @@ -25,6 +26,8 @@ page.should have_selector '#join_event', visible: true find('#join_event').click @user.reload.points.should == @points+1 + + visit root_path within('.box.upcoming_events') { click_on @event2.name } page.should have_selector '#join_event', visible: true find('#join_event').click