Merge with master
This commit is contained in:
commit
d97e3603b1
8 changed files with 125 additions and 33 deletions
4
Gemfile
4
Gemfile
|
|
@ -76,8 +76,12 @@ group :development, :test do
|
||||||
gem 'rspec', '>= 3.0.0.beta'
|
gem 'rspec', '>= 3.0.0.beta'
|
||||||
gem 'rspec-rails', '>= 3.0.0.beta'
|
gem 'rspec-rails', '>= 3.0.0.beta'
|
||||||
gem 'capybara'
|
gem 'capybara'
|
||||||
|
<<<<<<< HEAD
|
||||||
gem 'database_cleaner'
|
gem 'database_cleaner'
|
||||||
gem 'capybara-webkit'
|
gem 'capybara-webkit'
|
||||||
|
=======
|
||||||
|
gem 'shoulda'
|
||||||
|
>>>>>>> 374efd311fb7f82d0e8257a62675a663904708d5
|
||||||
end
|
end
|
||||||
|
|
||||||
# FIXME: We should use http://weblog.rubyonrails.org/2012/3/21/strong-parameters/
|
# FIXME: We should use http://weblog.rubyonrails.org/2012/3/21/strong-parameters/
|
||||||
|
|
|
||||||
|
|
@ -252,6 +252,12 @@ GEM
|
||||||
sass (~> 3.2.0)
|
sass (~> 3.2.0)
|
||||||
sprockets (~> 2.8, <= 2.11.0)
|
sprockets (~> 2.8, <= 2.11.0)
|
||||||
sprockets-rails (~> 2.0)
|
sprockets-rails (~> 2.0)
|
||||||
|
shoulda (3.5.0)
|
||||||
|
shoulda-context (~> 1.0, >= 1.0.1)
|
||||||
|
shoulda-matchers (>= 1.4.1, < 3.0)
|
||||||
|
shoulda-context (1.2.1)
|
||||||
|
shoulda-matchers (2.6.1)
|
||||||
|
activesupport (>= 3.0.0)
|
||||||
simplecov (0.8.2)
|
simplecov (0.8.2)
|
||||||
docile (~> 1.1.0)
|
docile (~> 1.1.0)
|
||||||
multi_json
|
multi_json
|
||||||
|
|
@ -335,6 +341,7 @@ DEPENDENCIES
|
||||||
rspec (>= 3.0.0.beta)
|
rspec (>= 3.0.0.beta)
|
||||||
rspec-rails (>= 3.0.0.beta)
|
rspec-rails (>= 3.0.0.beta)
|
||||||
sass-rails (>= 4.0.2)
|
sass-rails (>= 4.0.2)
|
||||||
|
shoulda
|
||||||
spring-commands-rspec
|
spring-commands-rspec
|
||||||
sqlite3
|
sqlite3
|
||||||
transitions
|
transitions
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,21 @@ class Admin::ConferenceController < ApplicationController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@conference = Conference.new(params[:conference])
|
@conference = Conference.new(params[:conference])
|
||||||
|
<<<<<<< HEAD
|
||||||
if @conference.save
|
if @conference.save
|
||||||
redirect_to(admin_conference_path(id: @conference.short_title),
|
redirect_to(admin_conference_path(id: @conference.short_title),
|
||||||
notice: 'Conference was successfully created.')
|
notice: 'Conference was successfully created.')
|
||||||
else
|
else
|
||||||
render action: 'new'
|
render action: 'new'
|
||||||
|
=======
|
||||||
|
if @conference.valid?
|
||||||
|
@conference.save
|
||||||
|
redirect_to(admin_conference_path(id: @conference.short_title),
|
||||||
|
notice: 'Conference was successfully created.')
|
||||||
|
else
|
||||||
|
redirect_to(new_admin_conference_path,
|
||||||
|
flash: { error: @conference.errors.full_messages.join('! ') })
|
||||||
|
>>>>>>> 374efd311fb7f82d0e8257a62675a663904708d5
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,17 @@
|
||||||
.row
|
.row
|
||||||
.col-md-6.col-md-offset-3
|
.col-md-6.col-md-offset-3
|
||||||
= semantic_form_for(@conference, :url => admin_conference_index_path) do |f|
|
= semantic_form_for(@conference, :url => admin_conference_index_path) do |f|
|
||||||
= f.inputs "Basic Information" do
|
= f.inputs 'Basic Information' do
|
||||||
= f.input :title, :hint => "The name of your conference as it shall appear throughout the site. Example: 'OpenSUSE Conference 2013'"
|
= f.input :title, hint: "The name of your conference as it shall appear throughout the site. Example: 'OpenSUSE Conference 2013'",
|
||||||
= f.input :short_title, :hint => "A short and unique handle for your conference, using only lower-case letters, numbers and underscores. This will be used to identify your conference in URLs etc. Example: 'froscon2011'"
|
input_html: { required: 'required' }
|
||||||
= f.input :social_tag, :hint => "The hashtag you'll use on Twitter and Google+. Don't include the '#' sign!'"
|
= f.input :short_title, hint: "A short and unique handle for your conference, using only lower-case letters, numbers and underscores. This will be used to identify your conference in URLs etc. Example: 'froscon2011'",
|
||||||
= f.input :contact_email, :hint => "Contact email address for your conference. Will be used as reply-to address in emails sent out by the system."
|
input_html: { required: 'required' }
|
||||||
= f.inputs "Scheduling" do
|
= f.input :social_tag, hint: "The hashtag you'll use on Twitter and Google+. Don't include the '#' sign!'",
|
||||||
= f.input :timezone, :as => :time_zone, :hint => "Please select in what time zone your conference will take place."
|
input_html: { required: 'required' }
|
||||||
= f.input :start_date, :as => :string, :input_html => { :id => "conference-start-datepicker", :readonly => "readonly" }
|
= f.input :contact_email, hint: 'Contact email address for your conference. Will be used as reply-to address in emails sent out by the system.'
|
||||||
= f.input :end_date, :as => :string, :input_html => { :id => "conference-end-datepicker", :readonly => "readonly" }
|
= f.inputs 'Scheduling' do
|
||||||
|
= f.input :timezone, as: :time_zone, hint: 'Please select in what time zone your conference will take place.'
|
||||||
|
= f.input :start_date, as: :string, input_html: { id: 'conference-start-datepicker', readonly: 'readonly', required: 'required' }
|
||||||
|
= f.input :end_date, as: :string, input_html: { id: 'conference-end-datepicker', readonly: 'readonly', required: 'required' }
|
||||||
= f.actions do
|
= f.actions do
|
||||||
= f.action :submit, :button_html => {:class => "btn btn-success pull-right"}
|
= f.action :submit, button_html: {class: 'btn btn-success pull-right'}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
!!!
|
%html{:xmlns => "http://www.w3.org/1999/html"}
|
||||||
%html
|
%html
|
||||||
%head
|
%head
|
||||||
%meta{:charset => "utf-8"}
|
%meta{:charset => "utf-8"}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@
|
||||||
%br
|
%br
|
||||||
%small
|
%small
|
||||||
= @event.subtitle
|
= @event.subtitle
|
||||||
|
= link_to "Schedule", conference_schedule_path(@conference.short_title), :class =>"btn btn-success pull-right"
|
||||||
|
- if has_role?(current_user, "admin")
|
||||||
|
= link_to "Edit", edit_admin_conference_event_path(@conference.short_title, @event), :class => "btn btn-mini btn-primary pull-right"
|
||||||
.row
|
.row
|
||||||
.col-md-3
|
.col-md-3
|
||||||
%p
|
%p
|
||||||
|
|
@ -13,6 +16,12 @@
|
||||||
%dl
|
%dl
|
||||||
%dt Date:
|
%dt Date:
|
||||||
%dd= @event.start_time.strftime("%Y %B %e %H:%M") if @event.start_time
|
%dd= @event.start_time.strftime("%Y %B %e %H:%M") if @event.start_time
|
||||||
|
%dt Duration:
|
||||||
|
%dd= show_time(@event.event_type.length)
|
||||||
|
%dt Room:
|
||||||
|
%dd
|
||||||
|
- if @event.room_id
|
||||||
|
= @event.room.name
|
||||||
%dt Conference:
|
%dt Conference:
|
||||||
%dd= @event.conference.title
|
%dd= @event.conference.title
|
||||||
%dt Language:
|
%dt Language:
|
||||||
|
|
@ -22,6 +31,13 @@
|
||||||
- if @event.track_id
|
- if @event.track_id
|
||||||
%span.label{:style =>"background-color: #{@event.track.color};"}
|
%span.label{:style =>"background-color: #{@event.track.color};"}
|
||||||
= @event.track.name
|
= @event.track.name
|
||||||
|
%dt Difficulty:
|
||||||
|
%dd
|
||||||
|
- if @event.difficulty_level_id
|
||||||
|
%span.label{:style =>"background-color: #{@event.difficulty_level.color};"}
|
||||||
|
= @event.difficulty_level.title
|
||||||
|
- if @event.require_registration
|
||||||
|
= link_to "Registration required!", register_conference_path(@conference.short_title), :class => "btn btn-xs btn-warning"
|
||||||
.col-md-9
|
.col-md-9
|
||||||
.row
|
.row
|
||||||
.col-md-12
|
.col-md-12
|
||||||
|
|
@ -42,6 +58,9 @@
|
||||||
%h3
|
%h3
|
||||||
by
|
by
|
||||||
= @speaker.public_name
|
= @speaker.public_name
|
||||||
|
(
|
||||||
|
= @speaker.email
|
||||||
|
)
|
||||||
- if @speaker.company?
|
- if @speaker.company?
|
||||||
%br
|
%br
|
||||||
%span.muted
|
%span.muted
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ Formtastic::FormBuilder.required_string = "(required)"
|
||||||
# You can opt-in to new HTML5 browser validations (for things like email and url inputs) by setting
|
# You can opt-in to new HTML5 browser validations (for things like email and url inputs) by setting
|
||||||
# this to false. Doing so will add a `novalidate` attribute to the `<form>` tag.
|
# this to false. Doing so will add a `novalidate` attribute to the `<form>` tag.
|
||||||
# See http://diveintohtml5.org/forms.html#validation for more info.
|
# See http://diveintohtml5.org/forms.html#validation for more info.
|
||||||
# Formtastic::FormBuilder.perform_browser_validations = true
|
Formtastic::FormBuilder.perform_browser_validations = true
|
||||||
#
|
#
|
||||||
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
||||||
FormtasticBootstrap::FormBuilder.default_inline_hint_class = FormtasticBootstrap::FormBuilder.default_block_hint_class
|
FormtasticBootstrap::FormBuilder.default_inline_hint_class = FormtasticBootstrap::FormBuilder.default_block_hint_class
|
||||||
|
|
|
||||||
|
|
@ -1,72 +1,121 @@
|
||||||
|
#!/bin/env ruby
|
||||||
|
# encoding: utf-8
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Conference do
|
describe Conference do
|
||||||
|
|
||||||
let(:subject) { create(:conference) }
|
let(:subject) { create(:conference) }
|
||||||
|
|
||||||
describe "#registration_open?" do
|
describe '#registration_open?' do
|
||||||
|
|
||||||
context "closed registration" do
|
context 'closed registration' do
|
||||||
|
|
||||||
it "#registration_open? is false" do
|
it '#registration_open? is false' do
|
||||||
expect(subject.registration_open?).to be false
|
expect(subject.registration_open?).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "open registration" do
|
context 'open registration' do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
subject.registration_start_date = Date.today - 1
|
subject.registration_start_date = Date.today - 1
|
||||||
subject.registration_end_date = Date.today + 7
|
subject.registration_end_date = Date.today + 7
|
||||||
end
|
end
|
||||||
|
|
||||||
it "#registration_open? is true" do
|
it '#registration_open? is true' do
|
||||||
expect(subject.registration_open?).to be true
|
expect(subject.registration_open?).to be true
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
describe '#cfp_open?' do
|
||||||
|
|
||||||
describe "#cfp_open?" do
|
context 'closed cfp' do
|
||||||
|
|
||||||
context "closed cfp" do
|
it '#cfp_open? is false' do
|
||||||
|
|
||||||
it "#cfp_open? is false" do
|
|
||||||
expect(subject.cfp_open?).to be false
|
expect(subject.cfp_open?).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "open cfp" do
|
context 'open cfp' do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
subject.call_for_papers = create(:call_for_papers)
|
subject.call_for_papers = create(:call_for_papers)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "#registration_open? is true" do
|
it '#registration_open? is true' do
|
||||||
expect(subject.cfp_open?).to be true
|
expect(subject.cfp_open?).to be true
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
describe '#user_registered?' do
|
||||||
|
|
||||||
describe "#user_registered?" do
|
|
||||||
|
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
context "user not registered" do
|
context 'user not registered' do
|
||||||
it "#user_registered? is false" do
|
it '#user_registered? is false' do
|
||||||
expect(subject.user_registered? user).to be false
|
expect(subject.user_registered? user).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "user registered" do
|
context 'user registered' do
|
||||||
pending "isn't tested yet"
|
pending "isn't tested yet"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'validations' do
|
||||||
|
|
||||||
|
it 'has a valid factory' do
|
||||||
|
expect(build(:conference)).to be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is not valid without a title' do
|
||||||
|
should validate_presence_of(:title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is not valid without a short title' do
|
||||||
|
should validate_presence_of(:short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is not valid without a social tag' do
|
||||||
|
should validate_presence_of(:social_tag)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is not valid without a start date' do
|
||||||
|
should validate_presence_of(:start_date)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is not valid without an end date' do
|
||||||
|
should validate_presence_of(:end_date)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is not valid with a duplicate short title' do
|
||||||
|
should validate_uniqueness_of(:short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is valid with a short title that contains a-zA-Z0-9_-' do
|
||||||
|
should allow_value('abc_xyz-ABC-XYZ-012_89').for(:short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'is not valid with a short title that contains special characters' do
|
||||||
|
should_not allow_value('&%§!?äÄüÜ/()').for(:short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'before create callbacks' do
|
||||||
|
|
||||||
|
it 'has an email setting after creation' do
|
||||||
|
expect(subject.email_settings).not_to be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has a venue after creation' do
|
||||||
|
expect(subject.venue).not_to be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has a guid after creation' do
|
||||||
|
expect(subject.guid).not_to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue