From 55aea1109fafc5455c8205639baede0e44d7f2cd Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 10 Jul 2014 22:08:03 -0500 Subject: [PATCH] * VRFS-1869 - use offset --- ruby/lib/jam_ruby/models/music_session.rb | 20 ++++++++- .../jam_ruby/models/music_session_spec.rb | 43 +++++++++++++++++++ web/spec/requests/music_sessions_api_spec.rb | 7 ++- 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 24b4f852f..ae4fcdec6 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -263,7 +263,6 @@ module JamRuby ms.band = band ms.legal_policy = options[:legal_policy] ms.language = options[:language] - ms.scheduled_start = options[:start] ms.scheduled_duration = options[:duration].to_i * 1.minutes if options[:duration] ms.recurring_mode = options[:recurring_mode] if options[:recurring_mode] ms.timezone = options[:timezone] if options[:timezone] @@ -271,6 +270,8 @@ module JamRuby ms.open_rsvps = options[:open_rsvps] if options[:open_rsvps] ms.creator = user ms.is_unstructured_rsvp = options[:isUnstructuredRsvp] if options[:isUnstructuredRsvp] + ms.scheduled_start = options[:start] + ms.scheduled_start = parse_scheduled_start(ms.scheduled_start, ms.timezone) ms.save @@ -707,6 +708,23 @@ module JamRuby [music_sessions, user_scores] end + # converts the passed scheduled_start into the UTC using the specified timezone offset. + # timezone comes in as TIMEZONE DISPLAY, TIMEZONE ID + def self.parse_scheduled_start(scheduled_start, timezone_param) + + result = scheduled_start + + if timezone_param + index = timezone_param.rindex(',') + if index + tz_identifier = timezone_param[(index + 1)..-1] + timezone = TZInfo::Timezone.get(tz_identifier) + result = timezone.local_to_utc(scheduled_start, true) + end + end + + result + end private def generate_share_token diff --git a/ruby/spec/jam_ruby/models/music_session_spec.rb b/ruby/spec/jam_ruby/models/music_session_spec.rb index 210076d5f..a14db9f57 100644 --- a/ruby/spec/jam_ruby/models/music_session_spec.rb +++ b/ruby/spec/jam_ruby/models/music_session_spec.rb @@ -47,6 +47,32 @@ describe MusicSession do end end + describe "create" do + it "scheduled session" do + session = MusicSession.create(creator, { + name: "session 1", + description: "my session", + genres: ['ambient'], + musician_access: true, + fan_access: true, + approval_required: true, + fan_chat: true, + legal_policy: 'Standard', + language: 'eng', + start: "Thu Jul 10 2014 10:00 PM", + timezone: "Central Time (US & Canada),America/Chicago", + open_rsvps: true, + legal_terms: true, + recurring_mode: 'once', + isUnstructuredRsvp: true, + rsvp_slots: [{ instrument_id: "other", proficiency_level: 1, approve: true}] + }) + session.valid?.should be_true + # verify that scheduled_start is now 5 hours ahead of what was specified (CST during summer is -5 offset) + session.scheduled_start.utc.should == DateTime.new(2014,07,11,3,00,0) + end + end + describe "nindex" do it "nindex orders two sessions by created_at starting with most recent" do creator = FactoryGirl.create(:user) @@ -266,6 +292,23 @@ describe MusicSession do end end + describe "parse_scheduled_start" do + + it "converts correctly" do + + # CST has -5 offset in summery + time = DateTime.new(2004,10,15,1,30,0) + converted = MusicSession.parse_scheduled_start(time, 'Central Time (US & Canada),America/Chicago') + converted.should == DateTime.new(2004,10,15,6,30,0) + + # CST has -6 offset in winter + time = DateTime.new(2004,11,15,1,30,0) + converted = MusicSession.parse_scheduled_start(time, 'Central Time (US & Canada),America/Chicago') + converted.should == DateTime.new(2004,11,15,7,30,0) + end + + end + describe "scheduled" do it "excludes based on time-range" do session = FactoryGirl.create(:music_session, scheduled_start: Time.now) diff --git a/web/spec/requests/music_sessions_api_spec.rb b/web/spec/requests/music_sessions_api_spec.rb index 2a58c5eed..2ef66969c 100644 --- a/web/spec/requests/music_sessions_api_spec.rb +++ b/web/spec/requests/music_sessions_api_spec.rb @@ -94,15 +94,14 @@ describe "Scheduled Music Session API ", :type => :api do last_response.status.should eql(201) delete "/api/sessions/#{music_sessions[0]["id"]}.json" - last_response.status.should eql(404) - JSON.parse(last_response.body)["message"].should == ValidationMessages::PERMISSION_VALIDATION_ERROR + last_response.status.should eql(204) delete "/api/sessions/#{music_sessions[1]["id"]}.json" last_response.status.should eql(204) login(user2) delete "/api/sessions/#{music_sessions[2]["id"]}.json" - last_response.status.should eql(404) + last_response.status.should eql(403) JSON.parse(last_response.body)["message"].should == ValidationMessages::PERMISSION_VALIDATION_ERROR end @@ -126,7 +125,7 @@ describe "Scheduled Music Session API ", :type => :api do login(user2) post "/api/sessions/#{music_session["id"]}.json", {:name => "changed name"}.to_json - last_response.status.should eql(404) + last_response.status.should eql(403) JSON.parse(last_response.body)["message"].should == ValidationMessages::PERMISSION_VALIDATION_ERROR end end