From 67dab025a9a8f130987716a2422848cf513215c1 Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Thu, 5 Jun 2014 20:05:20 +0530 Subject: [PATCH] Sponsors dashboard Removed explicit rendering of sponsors --- app/controllers/admin/sponsors_controller.rb | 17 ++++ app/models/conference.rb | 4 +- app/models/sponsor.rb | 5 +- .../admin/sponsors/_sponsor_fields.html.erb | 11 +++ app/views/admin/sponsors/index.html.haml | 5 ++ app/views/layouts/_admin_sidebar.html.haml | 5 +- config/routes.rb | 2 + spec/features/sponsor_spec.rb | 77 +++++++++++++++++++ .../admin/sponsors/index.html.haml_spec.rb | 17 ++++ 9 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 app/controllers/admin/sponsors_controller.rb create mode 100644 app/views/admin/sponsors/_sponsor_fields.html.erb create mode 100644 app/views/admin/sponsors/index.html.haml create mode 100644 spec/features/sponsor_spec.rb create mode 100644 spec/views/admin/sponsors/index.html.haml_spec.rb diff --git a/app/controllers/admin/sponsors_controller.rb b/app/controllers/admin/sponsors_controller.rb new file mode 100644 index 00000000..2e21d92d --- /dev/null +++ b/app/controllers/admin/sponsors_controller.rb @@ -0,0 +1,17 @@ +module Admin + class SponsorsController < ApplicationController + before_filter :verify_organizer + + def update + if @conference.update_attributes(params[:conference]) + redirect_to(admin_conference_sponsors_path( + conference_id: @conference.short_title), + notice: 'Sponsorships were successfully updated.') + else + redirect_to(admin_conference_sponsors_path( + conference_id: @conference.short_title), + alert: 'Sponsorships updation failed') + end + end + end +end diff --git a/app/models/conference.rb b/app/models/conference.rb index 29e05cd6..6d94b5ca 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -11,7 +11,8 @@ class Conference < ActiveRecord::Base :use_vpositions, :use_vdays, :vdays_attributes, :vpositions_attributes, :use_volunteers, :media_id, :media_type, :color, :description, :registration_description, :ticket_description, - :sponsorship_levels_attributes + :sponsorship_levels_attributes, + :sponsors_attributes has_paper_trail @@ -45,6 +46,7 @@ class Conference < ActiveRecord::Base 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 :sponsors, 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/sponsor.rb b/app/models/sponsor.rb index dc8261e4..93244c0e 100644 --- a/app/models/sponsor.rb +++ b/app/models/sponsor.rb @@ -1,5 +1,6 @@ class Sponsor < ActiveRecord::Base - attr_accessible :name, :description, :website_url, :logo + attr_accessible :name, :description, :website_url, :logo, + :sponsorship_level_id belongs_to :sponsorship_level belongs_to :conference has_attached_file :logo, @@ -8,5 +9,5 @@ class Sponsor < ActiveRecord::Base validates_attachment_content_type :logo, content_type: [/jpg/, /jpeg/, /png/, /gif/], size: { in: 0..500.kilobytes } - validates_presence_of :name, :website_url + validates_presence_of :name, :website_url, :sponsorship_level end diff --git a/app/views/admin/sponsors/_sponsor_fields.html.erb b/app/views/admin/sponsors/_sponsor_fields.html.erb new file mode 100644 index 00000000..2cc3131c --- /dev/null +++ b/app/views/admin/sponsors/_sponsor_fields.html.erb @@ -0,0 +1,11 @@ +
+ <%= f.inputs do %> + <%= f.input :name %> + <%= f.input :description %> + <%= image_tag f.object.logo(:thumb) if !f.object.logo.blank? %> + <%= f.input :logo %> + <%= f.input :website_url %> + <%= f.input :sponsorship_level, collection: @conference.sponsorship_levels %> + <%= remove_association_link :sponsor, f %> + <% end %> +
diff --git a/app/views/admin/sponsors/index.html.haml b/app/views/admin/sponsors/index.html.haml new file mode 100644 index 00000000..bd36c6a9 --- /dev/null +++ b/app/views/admin/sponsors/index.html.haml @@ -0,0 +1,5 @@ +.row + .col-md-8 + = semantic_form_for(@conference, :url => admin_conference_sponsor_path(@conference.short_title, @conference.sponsors)) do |f| + = dynamic_association :sponsors, "Sponsors", 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 37a35dcf..8a96f26b 100644 --- a/app/views/layouts/_admin_sidebar.html.haml +++ b/app/views/layouts/_admin_sidebar.html.haml @@ -45,10 +45,13 @@ %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))} + %li{:class=> "#{active_nav_li(admin_conference_sponsorship_levels_path(@conference.short_title))} myAccordion" } = link_to(admin_conference_sponsorship_levels_path(@conference.short_title)) do %span.glyphicon.glyphicon-star Sponsorship Levels + %ul.nav.nav-stacked.nav-pills.small.collapse.subNav + %li{:class=> active_nav_li(admin_conference_sponsors_path(@conference.short_title))} + = link_to 'Sponsors', admin_conference_sponsors_path(@conference.short_title) %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 cf95118a..20acc279 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -30,6 +30,8 @@ Osem::Application.routes.draw do resources :sponsorship_levels, only: [:show, :update, :index] + resources :sponsors, only: [:show, :update, :index] + resources :eventtypes, only: [:show, :index] do collection do patch :update diff --git a/spec/features/sponsor_spec.rb b/spec/features/sponsor_spec.rb new file mode 100644 index 00000000..b6678668 --- /dev/null +++ b/spec/features/sponsor_spec.rb @@ -0,0 +1,77 @@ +require 'spec_helper' + +feature Sponsor 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 'sponsors' do |user| + scenario 'adds and updates sponsors', feature: true, js: true do + path = "#{Rails.root}/app/assets/images/rails.png" + conference = create(:conference) + conference.sponsorship_levels << create(:sponsorship_level, conference: conference) + sign_in create(user) + visit admin_conference_sponsors_path( + conference_id: conference.short_title) + # Add sponsors + click_link 'Add sponsor' + + 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 sponsor') + + page. + find('div.nested-fields:nth-of-type(1) div:nth-of-type(2) textarea'). + set('Lorem Ipsum') + + attach_file 'Logo', path + + page. + find('div.nested-fields:nth-of-type(1) div:nth-of-type(4) input'). + set('http://www.example.com') + + find(:css, "select[id^='conference_sponsors_attributes_']"\ + "[id$='_sponsorship_level_id']"). + find(:option, 'Platin').select_option + click_button 'Update Conference' + + expect(flash).to eq('Sponsorships were successfully updated.') + + expect(find('div.nested-fields:nth-of-type(1)'\ + ' div:nth-of-type(1) input'). + value).to eq('Example sponsor') + + expect(find('div.nested-fields:nth-of-type(1)'\ + ' div:nth-of-type(2) textarea'). + value).to eq('Lorem Ipsum') + + expect(page).to have_selector("img[src*='rails.png']") + + expect(find('div.nested-fields:nth-of-type(1)'\ + ' div:nth-of-type(4) input'). + value).to eq('http://www.example.com') + + expect(find('div.nested-fields:nth-of-type(1)'\ + ' div:nth-of-type(5) select:nth-of-type(1)'). + text).to eq('Platin') + + # Remove sponsor + click_link 'Remove sponsor' + expect(page.all('div.nested-fields').count == 0).to be true + click_button 'Update Conference' + expect(flash).to eq('Sponsorships were successfully updated.') + expect(page.all('div.nested-fields').count == 0).to be true + end + end + + describe 'admin' do + it_behaves_like 'sponsors', :admin + end + + describe 'organizer' do + it_behaves_like 'sponsors', :organizer + end +end diff --git a/spec/views/admin/sponsors/index.html.haml_spec.rb b/spec/views/admin/sponsors/index.html.haml_spec.rb new file mode 100644 index 00000000..51b845ff --- /dev/null +++ b/spec/views/admin/sponsors/index.html.haml_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe 'admin/sponsors/index' do + it 'renders sponsorships' do + @conference = create(:conference) + @conference.sponsorship_levels << create(:sponsorship_level, conference: @conference) + @conference.sponsors << create(:sponsor, conference: @conference, + sponsorship_level: @conference.sponsorship_levels.first + ) + assign :conference, @conference + render + expect(rendered).to include('Example sponsor') + expect(rendered).to include('http://www.example.com') + expect(rendered).to include('Lorem Ipsum Dolor') + expect(rendered).to include('Platin') + end +end