diff --git a/app/controllers/admin/sponsorship_levels_controller.rb b/app/controllers/admin/sponsorship_levels_controller.rb
new file mode 100644
index 00000000..1d0a61bc
--- /dev/null
+++ b/app/controllers/admin/sponsorship_levels_controller.rb
@@ -0,0 +1,17 @@
+module Admin
+ class SponsorshipLevelsController < ApplicationController
+ before_filter :verify_organizer
+
+ def update
+ if @conference.update_attributes(params[:conference])
+ redirect_to(admin_conference_sponsorship_levels_path(
+ conference_id: @conference.short_title),
+ notice: 'Sponsorship levels were successfully updated.')
+ else
+ redirect_to(admin_conference_sponsorship_levels_path(
+ conference_id: @conference.short_title),
+ alert: 'Sponsorship levels update failed')
+ end
+ end
+ end
+end
diff --git a/app/models/conference.rb b/app/models/conference.rb
index 3b6ff456..821e302f 100644
--- a/app/models/conference.rb
+++ b/app/models/conference.rb
@@ -10,7 +10,8 @@ class Conference < ActiveRecord::Base
:difficulty_levels_attributes, :use_difficulty_levels,
:use_vpositions, :use_vdays, :vdays_attributes, :vpositions_attributes, :use_volunteers,
:media_id, :media_type, :color, :description,
- :registration_description, :ticket_description
+ :registration_description, :ticket_description,
+ :sponsorship_levels_attributes
has_paper_trail
@@ -42,6 +43,7 @@ class Conference < ActiveRecord::Base
accepts_nested_attributes_for :venue
accepts_nested_attributes_for :dietary_choices, :allow_destroy => true
accepts_nested_attributes_for :supporter_levels, :allow_destroy => true
+ accepts_nested_attributes_for :sponsorship_levels, allow_destroy: true
accepts_nested_attributes_for :event_types, :allow_destroy => true
accepts_nested_attributes_for :email_settings
accepts_nested_attributes_for :questions, :allow_destroy => true
diff --git a/app/models/sponsorship_level.rb b/app/models/sponsorship_level.rb
index 03f52ae8..8fc25f88 100644
--- a/app/models/sponsorship_level.rb
+++ b/app/models/sponsorship_level.rb
@@ -1,5 +1,5 @@
class SponsorshipLevel < ActiveRecord::Base
- attr_accessible :title, :donation_amount
+ attr_accessible :title
validates_presence_of :title
belongs_to :conference
end
diff --git a/app/views/admin/sponsorship_levels/_sponsorship_level_fields.html.erb b/app/views/admin/sponsorship_levels/_sponsorship_level_fields.html.erb
new file mode 100644
index 00000000..ec4b6220
--- /dev/null
+++ b/app/views/admin/sponsorship_levels/_sponsorship_level_fields.html.erb
@@ -0,0 +1,6 @@
+
+ <%= f.inputs do %>
+ <%= f.input :title %>
+ <%= remove_association_link :sponsorship_level, f %>
+ <% end %>
+
diff --git a/app/views/admin/sponsorship_levels/index.html.haml b/app/views/admin/sponsorship_levels/index.html.haml
new file mode 100644
index 00000000..53bda41b
--- /dev/null
+++ b/app/views/admin/sponsorship_levels/index.html.haml
@@ -0,0 +1,4 @@
+.col-md-9
+ = semantic_form_for(@conference, :url => admin_conference_sponsorship_level_path(@conference.short_title, @conference.sponsorship_levels)) do |f|
+ = dynamic_association :sponsorship_levels, "Sponsorship Levels", f
+ = f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}
diff --git a/app/views/layouts/_admin_sidebar.html.haml b/app/views/layouts/_admin_sidebar.html.haml
index 7e7c238d..37a35dcf 100644
--- a/app/views/layouts/_admin_sidebar.html.haml
+++ b/app/views/layouts/_admin_sidebar.html.haml
@@ -45,6 +45,10 @@
%ul.nav.nav-stacked.nav-pills.small.collapse.subNav
%li{:class=> active_nav_li(admin_conference_rooms_path(@conference.short_title))}
= link_to 'Rooms', admin_conference_rooms_path(@conference.short_title)
+ %li{:class=> active_nav_li(admin_conference_sponsorship_levels_path(@conference.short_title))}
+ = link_to(admin_conference_sponsorship_levels_path(@conference.short_title)) do
+ %span.glyphicon.glyphicon-star
+ Sponsorship Levels
%li{ class: active_nav_li(admin_conference_supporter_levels_path(@conference.short_title)) }
= link_to(admin_conference_supporter_levels_path(@conference.short_title)) do
Supporter Levels
diff --git a/config/routes.rb b/config/routes.rb
index e34d7e52..cf95118a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -28,6 +28,8 @@ Osem::Application.routes.draw do
resources :tracks, only: [:show, :update, :index]
+ resources :sponsorship_levels, only: [:show, :update, :index]
+
resources :eventtypes, only: [:show, :index] do
collection do
patch :update
diff --git a/db/migrate/20140605055802_create_sponsorship_levels.rb b/db/migrate/20140605055802_create_sponsorship_levels.rb
index 2f65e43d..1a93980b 100644
--- a/db/migrate/20140605055802_create_sponsorship_levels.rb
+++ b/db/migrate/20140605055802_create_sponsorship_levels.rb
@@ -2,7 +2,6 @@ class CreateSponsorshipLevels < ActiveRecord::Migration
def change
create_table :sponsorship_levels do |t|
t.string :title
- t.string :donation_amount
t.belongs_to :conference
t.timestamps
end
diff --git a/spec/factories/sponsorship_levels.rb b/spec/factories/sponsorship_levels.rb
index c640ce58..d13ea48a 100644
--- a/spec/factories/sponsorship_levels.rb
+++ b/spec/factories/sponsorship_levels.rb
@@ -3,7 +3,6 @@
FactoryGirl.define do
factory :sponsorship_level do
title 'Platin'
- donation_amount '$100,000'
conference
end
end
diff --git a/spec/features/sponsorship_level_spec.rb b/spec/features/sponsorship_level_spec.rb
new file mode 100644
index 00000000..c6f75ce4
--- /dev/null
+++ b/spec/features/sponsorship_level_spec.rb
@@ -0,0 +1,46 @@
+require 'spec_helper'
+
+feature SponsorshipLevel 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) }
+
+ shared_examples 'sponsorship levels' do |user|
+ scenario 'adds and updates sponsorship level', feature: true, js: true do
+ conference = create(:conference)
+ sign_in create(user)
+ visit admin_conference_sponsorship_levels_path(
+ conference_id: conference.short_title)
+ # Add sponsorship level
+ click_link 'Add sponsorship_level'
+ expect(page.all('div.nested-fields').count == 1).to be true
+
+ page.
+ find('div.nested-fields:nth-of-type(1) div:nth-of-type(1) input').
+ set('Example sponsorship level')
+
+ click_button 'Update Conference'
+
+ # Validations
+ expect(flash).to eq('Sponsorship levels were successfully updated.')
+ expect(find('div.nested-fields:nth-of-type(1) div:nth-of-type(1) input').
+ value).to eq('Example sponsorship level')
+
+ # Remove sponsorship level
+ click_link 'Remove sponsorship_level'
+ expect(page.all('div.nested-fields').count == 0).to be true
+ click_button 'Update Conference'
+ expect(flash).to eq('Sponsorship levels were successfully updated.')
+ expect(page.all('div.nested-fields').count == 0).to be true
+ end
+ end
+
+ describe 'admin' do
+ it_behaves_like 'sponsorship levels', :admin
+ end
+
+ describe 'organizer' do
+ it_behaves_like 'sponsorship levels', :organizer
+ end
+end
diff --git a/spec/views/admin/sponsorship_levels/index.html.haml_spec.rb b/spec/views/admin/sponsorship_levels/index.html.haml_spec.rb
new file mode 100644
index 00000000..29ec4f7e
--- /dev/null
+++ b/spec/views/admin/sponsorship_levels/index.html.haml_spec.rb
@@ -0,0 +1,10 @@
+require 'spec_helper'
+
+describe 'admin/sponsorship_levels/index' do
+ it 'renders sponsorship levels' do
+ @sponsorship_level = create(:sponsorship_level)
+ assign :conference, @sponsorship_level.conference
+ render
+ expect(rendered).to include('Platin')
+ end
+end