From 1bb46874ac3dc8d1421c3e2d2a388025017b12c0 Mon Sep 17 00:00:00 2001 From: Chrisbr Date: Wed, 25 Jun 2014 13:20:05 +0200 Subject: [PATCH] [Bugfix] conference top submitter now ordered by submissions --- app/models/conference.rb | 13 ++++++++----- spec/models/conference_spec.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/models/conference.rb b/app/models/conference.rb index 1d0ac01d..dc71e9cc 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -304,7 +304,7 @@ class Conference < ActiveRecord::Base # * +hash+ -> person: submissions def self.get_top_submitter(limit = 5) submitter = EventPerson.where('event_role = ?', 'submitter').limit(limit).group(:person_id) - counter = submitter.count + counter = submitter.order('count_all desc').count calculate_person_submission_hash(submitter, counter) end @@ -318,7 +318,7 @@ class Conference < ActiveRecord::Base where('event_role = ? and conference_id = ?', 'submitter', id). limit(limit).group(:person_id) - counter = submitter.count + counter = submitter.order('count_all desc').count Conference.calculate_person_submission_hash(submitter, counter) end @@ -656,9 +656,12 @@ class Conference < ActiveRecord::Base # ====Returns # * +hash+ -> person: submissions def self.calculate_person_submission_hash(submitter, counter) - result = {} - submitter.each do |s| - result[s.person] = counter[s.person_id] + result = ActiveSupport::OrderedHash.new + counter.each do |key, value| + submitter = submitter.find_by_id(key) + if submitter + result[submitter] = value + end end result end diff --git a/spec/models/conference_spec.rb b/spec/models/conference_spec.rb index 13aad3c2..f8853054 100644 --- a/spec/models/conference_spec.rb +++ b/spec/models/conference_spec.rb @@ -6,6 +6,36 @@ describe Conference do let(:subject) { create(:conference) } + # describe '#get_top_submitter' do + # # It is necessary to use bang version of let to build roles before user + # let!(:organizer_role) { create(:organizer_role) } + # let!(:participant_role) { create(:participant_role) } + # let!(:admin_role) { create(:admin_role) } + # + # it 'calculates correct hash with top submitters' do + # event = create(:event, conference: subject) + # result = { + # event.submitter => 1 + # } + # expect(subject.get_top_submitter).to eq(result) + # end + # + # it 'returns the submitter ordered by submissions' do + # e1 = create(:event, conference: subject) + # + # e2 = create(:event, conference: subject) + # e3 = create(:event, conference: subject) + # e4 = create(:event, conference: subject) + # + # e3.event_people = [create(:event_person, person: e2.submitter, event_role: 'submitter')] + # e4.event_people = [create(:event_person, person: e2.submitter, event_role: 'submitter')] + # + # expect(subject.get_top_submitter.values).to eq([3, 1]) + # expect(subject.get_top_submitter.keys).to eq([e2.submitter, e1.submitter]) + # end + # + # end + describe 'program hours' do before(:each) do @long = create(:event_type, length: 100)