diff --git a/app/controllers/admin/tracks_controller.rb b/app/controllers/admin/tracks_controller.rb index 0eed1b2d..2cb6ec2b 100644 --- a/app/controllers/admin/tracks_controller.rb +++ b/app/controllers/admin/tracks_controller.rb @@ -19,6 +19,7 @@ module Admin def create @track = @program.tracks.new(track_params) + @track.state = 'confirmed' if @track.save redirect_to admin_conference_program_tracks_path(conference_id: @conference.short_title), notice: 'Track successfully created.' diff --git a/app/controllers/tracks_controller.rb b/app/controllers/tracks_controller.rb index 529767cd..59deae3c 100644 --- a/app/controllers/tracks_controller.rb +++ b/app/controllers/tracks_controller.rb @@ -18,7 +18,6 @@ class TracksController < ApplicationController def create @track = @program.tracks.new(track_params) @track.submitter = current_user - @track.state = 'new' @track.cfp_active = false if @track.save redirect_to conference_program_tracks_path(conference_id: @conference.short_title), diff --git a/app/models/track.rb b/app/models/track.rb index f29babde..a53471bc 100644 --- a/app/models/track.rb +++ b/app/models/track.rb @@ -25,10 +25,10 @@ class Track < ActiveRecord::Base inclusion: { in: %w(new to_accept accepted confirmed to_reject rejected canceled withdrawn) }, if: :self_organized? validates :cfp_active, inclusion: { in: [true, false] }, if: :self_organized? - validates :start_date, presence: true, if: :accepted_or_confirmed? - validates :end_date, presence: true, if: :accepted_or_confirmed? - validates :room, presence: true, if: :accepted_or_confirmed? - validate :valid_dates, if: :accepted_or_confirmed? + validates :start_date, presence: true, if: :self_organized_and_accepted_or_confirmed? + validates :end_date, presence: true, if: :self_organized_and_accepted_or_confirmed? + validates :room, presence: true, if: :self_organized_and_accepted_or_confirmed? + validate :valid_dates, if: :self_organized_and_accepted_or_confirmed? before_validation :capitalize_color @@ -129,12 +129,12 @@ class Track < ActiveRecord::Base end ## - # Checks if the track is accepted or confirmed + # Checks if a self-organized track is accepted or confirmed # ====Returns # * +true+ -> If the track's state is 'accepted' or 'confirmed' # * +false+ -> If the track's state is neither 'accepted' nor 'confirmed' - def accepted_or_confirmed? - accepted? || confirmed? + def self_organized_and_accepted_or_confirmed? + self_organized? && (accepted? || confirmed?) end private diff --git a/app/views/admin/tracks/index.html.haml b/app/views/admin/tracks/index.html.haml index 82167bb8..4da97a18 100644 --- a/app/views/admin/tracks/index.html.haml +++ b/app/views/admin/tracks/index.html.haml @@ -42,7 +42,7 @@ - if track.self_organized? = track.state - else - N/A + = track.state.humanize %td - if track.self_organized? = check_box_tag "#{@conference.short_title}_#{track.short_name}", track.id, track.cfp_active, diff --git a/db/migrate/20170715131706_make_track_state_not_null_and_add_default_value.rb b/db/migrate/20170715131706_make_track_state_not_null_and_add_default_value.rb new file mode 100644 index 00000000..3d2520cf --- /dev/null +++ b/db/migrate/20170715131706_make_track_state_not_null_and_add_default_value.rb @@ -0,0 +1,14 @@ +class MakeTrackStateNotNullAndAddDefaultValue < ActiveRecord::Migration + class TmpTrack < ActiveRecord::Base + self.table_name = 'tracks' + end + + def change + TmpTrack.where(state: nil).each do |track| + track.state = 'confirmed' + track.save! + end + + change_column :tracks, :state, :string, null: false, default: 'new' + end +end diff --git a/db/schema.rb b/db/schema.rb index d3e14687..aa2f160d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -511,15 +511,15 @@ ActiveRecord::Schema.define(version: 20170807092805) do end create_table "tracks", force: :cascade do |t| - t.string "guid", null: false - t.string "name", null: false + t.string "guid", null: false + t.string "name", null: false t.text "description" t.string "color" t.datetime "created_at" t.datetime "updated_at" t.integer "program_id" - t.string "short_name", null: false - t.string "state" + t.string "short_name", null: false + t.string "state", default: "new", null: false t.boolean "cfp_active" t.integer "submitter_id" t.integer "room_id" diff --git a/spec/controllers/admin/tracks_controller_spec.rb b/spec/controllers/admin/tracks_controller_spec.rb index 2177af2f..ed76fe68 100644 --- a/spec/controllers/admin/tracks_controller_spec.rb +++ b/spec/controllers/admin/tracks_controller_spec.rb @@ -80,6 +80,10 @@ describe Admin::TracksController do it 'creates new track' do expect(Track.find(assigns(:track).id)).to be_a Track end + + it 'the new tracks has the correct attributes' do + expect(assigns(:track).state).to eq 'confirmed' + end end context 'save fails' do diff --git a/spec/factories/tracks.rb b/spec/factories/tracks.rb index 091d8d07..d30a686e 100644 --- a/spec/factories/tracks.rb +++ b/spec/factories/tracks.rb @@ -4,6 +4,7 @@ FactoryGirl.define do description { Faker::Lorem.sentence } color { Faker::Color.hex_color } short_name { SecureRandom.urlsafe_base64(5) } + state 'confirmed' program trait :self_organized do