diff --git a/app/models/event.rb b/app/models/event.rb index a325b290..f8c07ade 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -99,23 +99,9 @@ class Event < ActiveRecord::Base def as_json(options) json = super(options) - if room.nil? - json[:room_guid] = nil - else - json[:room_guid] = room.guid - end - - if track.nil? - json[:track_color] = '#ffffff' - else - json[:track_color] = track.color - end - - if event_type.nil? - json[:length] = 25 - else - json[:length] = event_type.length - end + json[:room_guid] = room.try(:guid) + json[:track_color] = track.try(:color) || '#ffffff' + json[:length] = event_type.try(:length) || 25 json end @@ -155,11 +141,7 @@ class Event < ActiveRecord::Base end def abstract_word_count - if abstract.nil? - 0 - else - abstract.split.size - end + abstract.to_s.split.size end def week @@ -167,23 +149,16 @@ class Event < ActiveRecord::Base end def self.get_state_color(state) - # default azure - result = '#00FFFF' - case state - when 'new' # blue - result = '#0000FF' - when 'withdrawn' # orange - result = '#FF8000' - when 'confirmed' # green - result = '#00FF00' - when 'unconfirmed' # yellow - result = '#FFFF00' - when 'rejected' # red - result = '#FF0000' - when 'canceled' # grey - result = '#848484' - end - result + color = { + new: '#0000FF', # blue + withdrawn: '#FF8000', # orange + confirmed: '#00FF00', # green + unconfirmed: '#FFFF00', # yellow + rejected: '#FF0000', # red + canceled: '#848484' # grey + }[state.to_sym] + + color || '#00FFFF' # azure end def update_state(transition, mail = false, subject = false, send_mail = false, send_mail_param) diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb new file mode 100644 index 00000000..1c0865aa --- /dev/null +++ b/spec/models/event_spec.rb @@ -0,0 +1,43 @@ +require 'spec_helper' + +describe Event do + + describe 'abstract_word_count' do + it 'counts words in abstract' do + event = build(:event) + expect(event.abstract_word_count).to eq(233) + event.update_attributes!(abstract: 'abstract.') + expect(event.abstract_word_count).to eq(1) + end + + it 'counts 0 when abstract is empty' do + event = build(:event, abstract: nil) + expect(event.abstract_word_count).to eq(0) + event.abstract = '' + expect(event.abstract_word_count).to eq(0) + end + end + + describe 'as_json' do + let(:event) { create(:event) } + + it 'adds the event\'s room_guid, track_color and length' do + event.room = create(:room) + event.track = create(:track, color: '#efefef') + json_hash = event.as_json(nil) + + expect(json_hash[:room_guid]).to eq(event.room.guid) + expect(json_hash[:track_color]).to eq('#efefef') + expect(json_hash[:length]).to eq(30) + end + + it 'uses correct default values for room_guid, track_color and length' do + event.event_type = nil + json_hash = event.as_json(nil) + + expect(json_hash[:room_guid]).to be_nil + expect(json_hash[:track_color]).to eq('#ffffff') + expect(json_hash[:length]).to eq(25) + end + end +end