diff --git a/app/models/address.rb b/app/models/address.rb new file mode 100644 index 000000000..fb2f52ddc --- /dev/null +++ b/app/models/address.rb @@ -0,0 +1,3 @@ +class Address < ActiveRecord::Base + belongs_to :sponsor +end \ No newline at end of file diff --git a/app/models/sessions.rb b/app/models/sessions.rb index 8a82ae4f8..252b41ca0 100644 --- a/app/models/sessions.rb +++ b/app/models/sessions.rb @@ -1,6 +1,8 @@ class Sessions < ActiveRecord::Base has_many :invitations + has_many :sponsor_sessions + has_many :sponsors, through: :sponsor_sessions scope :upcoming, -> { where("date_and_time > ?", DateTime.now) } diff --git a/app/models/sponsor.rb b/app/models/sponsor.rb new file mode 100644 index 000000000..3c8a219a5 --- /dev/null +++ b/app/models/sponsor.rb @@ -0,0 +1,7 @@ +class Sponsor < ActiveRecord::Base + has_one :address + has_many :sponsor_sessions + has_many :sessions, through: :sponsor_sessions + + validates :name, :description, :address, presence: true +end \ No newline at end of file diff --git a/app/models/sponsor_session.rb b/app/models/sponsor_session.rb new file mode 100644 index 000000000..6d2c6ad20 --- /dev/null +++ b/app/models/sponsor_session.rb @@ -0,0 +1,4 @@ +class SponsorSession < ActiveRecord::Base + belongs_to :sponsor + belongs_to :sessions +end \ No newline at end of file diff --git a/db/migrate/20131102132756_create_sponsors.rb b/db/migrate/20131102132756_create_sponsors.rb new file mode 100644 index 000000000..ec6986aa4 --- /dev/null +++ b/db/migrate/20131102132756_create_sponsors.rb @@ -0,0 +1,9 @@ +class CreateSponsors < ActiveRecord::Migration + def change + create_table :sponsors do |t| + t.string :name + t.text :description + t.timestamps + end + end +end diff --git a/db/migrate/20131102141049_create_address.rb b/db/migrate/20131102141049_create_address.rb new file mode 100644 index 000000000..1f9f3c8a2 --- /dev/null +++ b/db/migrate/20131102141049_create_address.rb @@ -0,0 +1,11 @@ +class CreateAddress < ActiveRecord::Migration + def change + create_table :addresses do |t| + t.string :flat + t.string :street + t.string :postal_code + t.belongs_to :sponsor + t.timestamps + end + end +end diff --git a/db/migrate/20131103174325_create_sponsor_sessions.rb b/db/migrate/20131103174325_create_sponsor_sessions.rb new file mode 100644 index 000000000..187b3e3e8 --- /dev/null +++ b/db/migrate/20131103174325_create_sponsor_sessions.rb @@ -0,0 +1,10 @@ +class CreateSponsorSessions < ActiveRecord::Migration + def change + create_table :sponsor_sessions do |t| + t.belongs_to :sponsor, index: true + t.belongs_to :sessions, index: true + t.boolean :host, default: false + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index d097c7019..b5b3a2ff4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,16 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20131029210620) do +ActiveRecord::Schema.define(version: 20131103174325) do + + create_table "addresses", force: true do |t| + t.string "flat" + t.string "street" + t.string "postal_code" + t.integer "sponsor_id" + t.datetime "created_at" + t.datetime "updated_at" + end create_table "courses", force: true do |t| t.string "title" @@ -76,4 +85,22 @@ t.integer "seats", default: 15 end + create_table "sponsor_sessions", force: true do |t| + t.integer "sponsor_id" + t.integer "sessions_id" + t.boolean "host", default: false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "sponsor_sessions", ["sessions_id"], name: "index_sponsor_sessions_on_sessions_id" + add_index "sponsor_sessions", ["sponsor_id"], name: "index_sponsor_sessions_on_sponsor_id" + + create_table "sponsors", force: true do |t| + t.string "name" + t.text "description" + t.datetime "created_at" + t.datetime "updated_at" + end + end diff --git a/spec/fabricators/address_fabticator.rb b/spec/fabricators/address_fabticator.rb new file mode 100644 index 000000000..7d05c106c --- /dev/null +++ b/spec/fabricators/address_fabticator.rb @@ -0,0 +1,5 @@ +Fabricator(:address) do + flat { "flat 1" } + street { "fake street" } + postal_code { "NW1 9KJ" } +end diff --git a/spec/fabricators/sponsor_fabricator.rb b/spec/fabricators/sponsor_fabricator.rb new file mode 100644 index 000000000..006d8c329 --- /dev/null +++ b/spec/fabricators/sponsor_fabricator.rb @@ -0,0 +1,5 @@ +Fabricator(:sponsor) do + name { Faker::Name.name } + description { Faker::Lorem.paragraph } + address { Fabricate(:address) } +end diff --git a/spec/features/listing_sessions_spec.rb b/spec/features/listing_sessions_spec.rb index ff1cfd418..d2ed18fd1 100644 --- a/spec/features/listing_sessions_spec.rb +++ b/spec/features/listing_sessions_spec.rb @@ -5,7 +5,8 @@ let(:date_and_time) { DateTime.now+1.week } let!(:session) { Sessions.create title: "HTML by Codebar", description: "Let's work together through out mini HTML workshop", - date_and_time: date_and_time } + date_and_time: date_and_time, + sponsors: [Fabricate.build(:sponsor)] } scenario 'when i visit the page, i can view a list with all the sesions' do pending("on hold until we finish the home page design") diff --git a/spec/models/address_spec.rb b/spec/models/address_spec.rb new file mode 100644 index 000000000..7c6ca93dc --- /dev/null +++ b/spec/models/address_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe Address do + subject(:address) { Fabricate.build(:address) } + + it { should respond_to(:sponsor) } + it { should respond_to(:flat) } + it { should respond_to(:street) } + it { should respond_to(:postal_code) } +end \ No newline at end of file diff --git a/spec/models/sessions_spec.rb b/spec/models/sessions_spec.rb index 00f68169f..ad4730b4f 100644 --- a/spec/models/sessions_spec.rb +++ b/spec/models/sessions_spec.rb @@ -1,6 +1,14 @@ require 'spec_helper' describe Sessions do + subject(:session) { Fabricate.build(:sessions) } + + it { should respond_to(:title) } + it { should respond_to(:description) } + it { should respond_to(:date_and_time) } + it { should respond_to(:seats) } + it { should respond_to(:sponsors) } + it { should respond_to(:sponsor_sessions)} context "#scopes" do it "#upcoming" do diff --git a/spec/models/sponsor_spec.rb b/spec/models/sponsor_spec.rb new file mode 100644 index 000000000..a10b767d4 --- /dev/null +++ b/spec/models/sponsor_spec.rb @@ -0,0 +1,36 @@ +require 'spec_helper' + +describe Sponsor do + subject(:sponsor) { Fabricate.build(:sponsor) } + + 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 be_valid } + + context 'validations' do + context 'presence' do + describe '#name' do + before { sponsor.name = nil } + + it { should_not be_valid } + it { should have(1).error_on(:name) } + end + describe '#description' do + before { sponsor.description = nil } + + it { should_not be_valid} + it { should have(1).error_on(:description) } + end + describe '#address' do + before { sponsor.address = nil } + + it { should_not be_valid} + it { should have(1).error_on(:address) } + end + end + end + +end \ No newline at end of file