diff --git a/app/models/sessions.rb b/app/models/sessions.rb index 2184c9998..c32ce5884 100644 --- a/app/models/sessions.rb +++ b/app/models/sessions.rb @@ -8,4 +8,7 @@ class Sessions < ActiveRecord::Base scope :upcoming, -> { where("date_and_time >= ?", DateTime.now).order(:date_and_time) } scope :next, -> { upcoming.first } + def host + SponsorSession.hosts.for_session(self.id).first.sponsor + end end diff --git a/app/models/sponsor.rb b/app/models/sponsor.rb index 3c8a219a5..48d35381b 100644 --- a/app/models/sponsor.rb +++ b/app/models/sponsor.rb @@ -3,5 +3,5 @@ class Sponsor < ActiveRecord::Base has_many :sponsor_sessions has_many :sessions, through: :sponsor_sessions - validates :name, :description, :address, presence: true + validates :name, :description, :address, :avatar, presence: true end \ No newline at end of file diff --git a/app/models/sponsor_session.rb b/app/models/sponsor_session.rb index 2ff260e40..a05828e22 100644 --- a/app/models/sponsor_session.rb +++ b/app/models/sponsor_session.rb @@ -2,4 +2,8 @@ class SponsorSession < ActiveRecord::Base belongs_to :sponsor belongs_to :sessions + validates :host, uniqueness: { scope: :sessions_id } + + scope :hosts, -> { where('sponsor_sessions.host = ?', true) } + scope :for_session, ->(session_id) { where('sponsor_sessions.sessions_id = ?', session_id) } end diff --git a/db/migrate/20131107182457_add_avatar_to_sponsor.rb b/db/migrate/20131107182457_add_avatar_to_sponsor.rb new file mode 100644 index 000000000..39953f142 --- /dev/null +++ b/db/migrate/20131107182457_add_avatar_to_sponsor.rb @@ -0,0 +1,5 @@ +class AddAvatarToSponsor < ActiveRecord::Migration + def change + add_column :sponsors, :avatar, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 2bed75bc2..53a28dfa0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20131104030726) do +ActiveRecord::Schema.define(version: 20131107182457) do create_table "addresses", force: true do |t| t.string "flat" @@ -124,6 +124,7 @@ t.text "description" t.datetime "created_at" t.datetime "updated_at" + t.string "avatar" end end diff --git a/spec/fabricators/sponsor_fabricator.rb b/spec/fabricators/sponsor_fabricator.rb index 006d8c329..c9edc15d7 100644 --- a/spec/fabricators/sponsor_fabricator.rb +++ b/spec/fabricators/sponsor_fabricator.rb @@ -1,5 +1,6 @@ Fabricator(:sponsor) do name { Faker::Name.name } description { Faker::Lorem.paragraph } + avatar { Faker::Internet.url } address { Fabricate(:address) } end diff --git a/spec/fabricators/sponsor_session_fabricator.rb b/spec/fabricators/sponsor_session_fabricator.rb new file mode 100644 index 000000000..a24e5e4a0 --- /dev/null +++ b/spec/fabricators/sponsor_session_fabricator.rb @@ -0,0 +1,8 @@ +Fabricator(:sponsor_session) do + sponsor + sessions +end + +Fabricator(:hosted_session, from: :sponsor_session) do + host true +end \ No newline at end of file diff --git a/spec/models/sessions_spec.rb b/spec/models/sessions_spec.rb index ed3b0e117..29ec041f5 100644 --- a/spec/models/sessions_spec.rb +++ b/spec/models/sessions_spec.rb @@ -25,6 +25,15 @@ it "#next" do Sessions.next.should eq set_upcoming.first end + + describe "#host" do + let(:sponsor) { Fabricate(:sponsor) } + before do + Fabricate(:sponsor_session, sponsor: sponsor, sessions: session, host: true) + end + + it { expect(session.host).to eq(sponsor) } + end end it "#attending" do diff --git a/spec/models/sponsor_session_spec.rb b/spec/models/sponsor_session_spec.rb new file mode 100644 index 000000000..4809e56c5 --- /dev/null +++ b/spec/models/sponsor_session_spec.rb @@ -0,0 +1,32 @@ +require 'spec_helper' + +describe SponsorSession do + subject(:sponsor_session) { Fabricate(:hosted_session) } + + context 'when the session has more than one host' do + let(:other_sponsor) { Fabricate(:sponsor) } + + let(:another_host_session) do + Fabricate.build(:sponsor_session, + sponsor: other_sponsor, + sessions: sponsor_session.sessions, + host: true) + end + + it { another_host_session.should have(1).error_on(:host) } + end + + context '#scopes' do + let!(:hosted_session) { Fabricate(:hosted_session) } + + it '#hosts' do + expect(SponsorSession.hosts.length).to eq(1) + end + + describe '#for_session' do + let(:session) { hosted_session.sessions } + + it { expect(SponsorSession.for_session(session.id).length).to eq(1) } + end + end +end \ No newline at end of file diff --git a/spec/models/sponsor_spec.rb b/spec/models/sponsor_spec.rb index a10b767d4..6daf6d531 100644 --- a/spec/models/sponsor_spec.rb +++ b/spec/models/sponsor_spec.rb @@ -6,8 +6,9 @@ it { should respond_to(:name) } it { should respond_to(:description) } it { should respond_to(:address) } - it { should respond_to(:sessions)} - it { should respond_to(:sponsor_sessions)} + it { should respond_to(:sessions) } + it { should respond_to(:sponsor_sessions) } + it { should respond_to(:avatar) } it { should be_valid } context 'validations' do @@ -30,6 +31,13 @@ it { should_not be_valid} it { should have(1).error_on(:address) } end + + describe '#avatar' do + before { sponsor.avatar = nil } + + it{ should_not be_valid } + it{ should have(1).error_on(:avatar) } + end end end