VRFS-1918 Session Details Update Screen - once over with tests

This commit is contained in:
Bert Owen 2014-07-14 20:40:00 +02:00
parent 34a6843616
commit 26f7d2755b
8 changed files with 195 additions and 27 deletions

View File

@ -743,9 +743,34 @@ module JamRuby
result
end
def scheduled_start_date
if self.scheduled_start_time.blank?
""
else
self.scheduled_start.strftime "%a %e %B %Y"
end
end
def scheduled_start_time
if scheduled_start
scheduled_start.utc.strftime "%a %e %B %Y"
if scheduled_start && scheduled_duration
start_time = scheduled_start
tz_identifier, tz_display = MusicSession.split_timezone(timezone)
begin
tz = TZInfo::Timezone.get(tz_identifier)
rescue Exception => e
@@log.error("unable to find timezone=#{tz_identifier}, e=#{e}")
end
if tz
begin
start_time = tz.utc_to_local(scheduled_start.utc)
rescue Exception => e
@@log.error("unable to convert #{scheduled_start} to #{tz}, e=#{e}")
puts "unable to convert #{e}"
end
end
start_time
else
""
end

View File

@ -23,6 +23,7 @@
var $musicNotations = null;
var $btnSelectFiles = null;
var $uploadSpinner = null;
var $dateTimeTBD = null;
var ONE_HOUR = 3600 * 1000;
var ONE_MINUTE = 60 * 1000;
@ -44,9 +45,25 @@
function afterShow(data) {
}
function toggleDateTBD(e) {
var status = $(e.target)[0].checked;
var $dateField = $screen.find('#session-prop-start-date');
if (status) {
$dateField.datepicker("disable");
}
else {
$dateField.datepicker("enable");
if ($dateField.val() == "") {
$dateField.val(new Date().toDateString());
}
toggleDate();
}
}
function events() {
$startTimeList.on('change', toggleStartTime);
$btnSelectFiles.on('click', toggleSelectFiles);
$dateTimeTBD.on('ifChanged', toggleDateTBD);
$screen.find("#session-update").on('click', updateSessionProperties);
$screen.find('#session-prop-select-files').on('change', changeSelectedFiles);
}
@ -93,7 +110,13 @@
}
function toggleDate() {
var selectedDate = new Date($screen.find('#session-prop-start-date').val());
var selectedDate = null;
if ($screen.find("#session-prop-start-date").val() == "") {
selectedDate = new Date();
}
else {
selectedDate = new Date($screen.find('#session-prop-start-date').val());
}
var currentDate = new Date();
var startIndex = 0;
@ -189,15 +212,21 @@
}
data.legal_policy = $screen.find('#session-policy').val();
data.language = $languageList.val();
data.start = $screen.find('#session-prop-start-date').val() + ' ' + $startTimeList.val();
var endDate = new Date($screen.find('#session-prop-start-date').val() + ' ' + $endTimeList.val());
data.duration = (endDate - new Date(data.start)) / ONE_MINUTE;
if ($endTimeList.val() == defaultTimeArray[0]) {
data.duration += ONE_DAY / ONE_MINUTE;
if ($dateTimeTBD[0].checked) {
data.start = null;
}
else {
data.start = $screen.find('#session-prop-start-date').val() + ' ' + $startTimeList.val();
var endDate = new Date($screen.find('#session-prop-start-date').val() + ' ' + $endTimeList.val());
data.duration = (endDate - new Date(data.start)) / ONE_MINUTE;
if ($endTimeList.val() == defaultTimeArray[0]) {
data.duration += ONE_DAY / ONE_MINUTE;
}
}
data.recurring_mode = $recurringModeList.val();
data.music_notations = sessionData.music_notations;
data.timezone = $timezoneList.val();
data.open_rsvps = $screen.find("#open-rsvp")[0].checked;
rest.updateScheduledSession(sessionData.id, data)
.done(function(response) {
@ -214,6 +243,12 @@
}
);
$screen.find(".icheckbuttons input").iCheck({
checkboxClass: 'icheckbox_minimal',
radioClass: 'iradio_minimal',
inheritClass: true
});
context.JK.GenreSelectorHelper.render('#session-prop-genre');
context.JK.dropdown($musicianAccess);
@ -318,7 +353,14 @@
function renderSession(data) {
sessionData = data;
$screen.find('#session-prop-start-date').val(sessionData.scheduled_start_time);
if (sessionData.scheduled_start == null) {
$screen.find("#session-prop-start-date").datepicker("disable");
$dateTimeTBD.iCheck('check').attr('checked', true);
}
else {
$screen.find('#session-prop-start-date').val(sessionData.scheduled_start_date);
$dateTimeTBD.iCheck('uncheck').attr('checked', false);
}
toggleDate();
var startTime = getFormattedTime(new Date(sessionData.scheduled_start), false);
@ -327,12 +369,23 @@
$startTimeList.val(startTime);
toggleStartTime();
$endTimeList.val(endTime);
$timezoneList.val(sessionData.timezone);
if (sessionData.timezone == null) {
context.JK.SessionUtils.defaultTimezone($timezoneList);
}
else {
$timezoneList.val(sessionData.timezone);
}
$recurringModeList.val(sessionData.recurring_mode);
context.JK.GenreSelectorHelper.setSelectedGenres('#session-prop-genre', sessionData.genres);
$sessionName.val(sessionData.name);
$sessionDescription.val(sessionData.description);
$languageList.val(sessionData.language);
if (sessionData.open_rsvps) {
$screen.find("#open-rsvp").iCheck("check").attr("checked", true);
}
else {
$screen.find("#open-rsvp").iCheck("uncheck").attr("checked", false);
}
sessionData.musician_access_value = 'musicians';
if (sessionData.musician_access == true && sessionData.approval_required == true)
@ -380,6 +433,7 @@
$musicNotations = $screen.find("#selected-filenames");
$btnSelectFiles = $screen.find("#select-notation-files");
$uploadSpinner = $screen.find(".upload-spinner");
$dateTimeTBD = $screen.find("#date_time_tbd");
initializeControls();
events();

View File

@ -359,7 +359,7 @@
}
var currentTime = new Date();
var startTime = new Date(session.scheduled_start_time);
var startTime = new Date(session.scheduled_start);
var diffTime = startTime.getTime() - currentTime.getTime();
if (diffTime > ONE_HOUR) {
var confirmDialog = new context.JK.ConfirmDialog(app, "Start Session Now",

View File

@ -350,16 +350,54 @@
line-height: 30px;
vertical-align: middle;
text-align: right;
margin-top: 5px;
}
.right-column {
width: 65%;
width: 60%;
margin-left: 5px;
margin-top: 5px;
display: inline-block;
float: left;
line-height: 30px;
vertical-align: middle;
}
.right-column input[type="text"] {
margin-bottom: 10px;
}
.right-column input[type="text"], .right-column textarea {
width: 99%;
}
.right-no-left {
width: 65%;
margin-left: 35%;
display: inline-block;
float: left;
line-height: 30px;
vertical-align: middle;
}
.open-rsvp-check, .datetime_tbd_check {
float: left;
margin-left: 5px;
}
.datetime_tbd_label {
float: left;
margin-left: 5px;
}
.open-rsvp-label {
float: left;
margin: 5px;
width: 85%;
line-height: 19px;
font-weight: 300;
}
.action-bar {
margin-top: 20px;
}

View File

@ -63,8 +63,8 @@ module MusicSessionHelper
end
def scheduled_start_time(music_session)
music_session.scheduled_start_time
def scheduled_start_date(music_session)
music_session.scheduled_start_date
end
def pretty_scheduled_start(music_session, with_timezone)

View File

@ -18,7 +18,7 @@ else
attributes :id, :music_session_id, :name, :description, :musician_access, :approval_required, :fan_access, :fan_chat,
:band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count, :play_count, :scheduled_duration,
:language, :recurring_mode, :language_description, :scheduled_start_time, :access_description, :timezone, :timezone_id, :timezone_description,
:language, :recurring_mode, :language_description, :scheduled_start_date, :access_description, :timezone, :timezone_id, :timezone_description,
:musician_access_description, :fan_access_description, :session_removed_at, :legal_policy, :open_rsvps, :is_unstructured_rsvp?
node :share_url do |history|
@ -31,12 +31,12 @@ else
[item.genre.description] # XXX: need to return single genre; not array
end
node :scheduled_start_time do |session|
scheduled_start_time(session)
node :scheduled_start_date do |session|
scheduled_start_date(session)
end
node :scheduled_start do |history|
history.scheduled_start.utc.strftime("%a %e %B %Y %H:%M:%S") if history.scheduled_start
history.scheduled_start_time.strftime("%a %e %B %Y %H:%M:%S") if history.scheduled_start
end
node :pretty_scheduled_start_with_timezone do |session|

View File

@ -12,12 +12,17 @@
.content-wrapper.account-session-properties
#account-session-properties-div
.left-panel
.right-column{style: "margin-left: 35%;"}
.right-no-left
%strong{style: "font-weight: bold;"} Date & Time
.clearall.left-column
Date:
.right-column
%input#session-prop-start-date{type: "text"}
.clearall.right-no-left
.icheckbuttons.datetime_tbd_check
%input{type: "checkbox", id: "date_time_tbd"}
%label.datetime_tbd_label{for: "date_time_tbd"}Date and time TBD
.clearall
.clearall.left-column
Start:
.right-column
@ -40,7 +45,7 @@
%option.label{value: "weekly"} Weekly
.clearall
.right-panel
.right-column{style: "margin-left: 35%;"}
.right-no-left
%strong{style: "font-weight: bold;"} Other Properties
.clearall.left-column
Genre:
@ -78,6 +83,11 @@
%option{value: "listen-chat-band"} Fans may listen, chat with the band
%option{value: "listen-chat-each", selected: "selected"} Fans may listen, chat with each other
%option{value: "no-listen-chat"} Fans may not listen to session
.clearall.right-no-left
.icheckbuttons.open-rsvp-check
%input{type: "checkbox", id: "open-rsvp"}
%label.open-rsvp-label{for: "open-rsvp"} Allow interested JamKazam musicians to request a RSVP
.clearall
.clearall.left-column
Legal:
.right-column
@ -101,7 +111,7 @@
.clearall
.action-bar
.left
%a.button-orange{href: "#", target: "_blank"} HELP
%a.button-grey{href: "#", target: "_blank"} HELP
.right
%a.button-grey{href: "javascript:history.go(-1)"} CANCEL
%a.button-orange{href: "#", id: "session-update"} UPDATE PROPERTIES

View File

@ -12,7 +12,7 @@ describe "Account", :js => true, :type => :feature, :capybara_feature => true do
sign_in_poltergeist user
visit "/client#/account"
find('div.account-mid.identity')
# find('div.account-mid.identity')
end
it { should have_selector('h1', text: 'my account') }
@ -143,7 +143,6 @@ describe "Account", :js => true, :type => :feature, :capybara_feature => true do
end
it "should update scheduled session" do
pending "working on it"
find("a.session-detail-button").trigger(:click)
find('a.button-orange.update-session', text: "UPDATE").trigger(:click)
@ -151,17 +150,59 @@ describe "Account", :js => true, :type => :feature, :capybara_feature => true do
find('strong', text: "Other Properties")
find('#session-prop-name').value.should eq @name
# update session properties with new values
date = Time.now.strftime "%a %e %B %Y"
fill_in('session-prop-start-date', with: date)
find('a.ui-state-default', text: '11').trigger(:click)
jk_select('11:30 PM', '#account-session-properties-div #start-time-prop-list')
jk_select('12:00 AM', '#account-session-properties-div #end-time-prop-list')
jk_select('(GMT+00:00) UTC', '#account-session-properties-div #timezone-prop-list')
jk_select('African', '#account-session-properties-div select[name="genres"]')
fill_in('session-prop-name', with: "Updated Name")
fill_in('session-prop-desc', with: "Updated Description")
jk_select('German', '#account-session-properties-div #session-prop-lang-list')
jk_select('Only RSVP musicians may join', '#account-session-properties-div #session-prop-musician-access')
jk_select('Fans may not listen to session', '#account-session-properties-div #session-prop-fans-access')
find('a#session-update').trigger(:click)
should have_selector('h2', text: 'Session is successfully updated.')
find('a.button-grey', text: "CANCEL").trigger(:click)
find('a.button-orange', text: "OKAY").trigger(:click)
find('#session-prop-name').value.should eq "Updated Name"
# check updated properties
current_date = Time.now
date_value = Time.new(current_date.year, current_date.mon, 11)
date_string = date_value.strftime "%a %e %B %Y"
find('a.button-grey', text: "CANCEL").trigger(:click)
find('#account-session-properties-div #session-prop-start-date').value.should eq date_string
find('#account-session-properties-div .selected', text: '11:30 PM')
find('#account-session-properties-div .selected', text: '12:00 AM')
find('#account-session-properties-div .selected', text: '(GMT+00:00) UTC')
find('#account-session-properties-div #session-prop-genre .selected', text: 'African')
find('#account-session-properties-div #session-prop-name').value.should eq "Updated Name"
find('#account-session-properties-div #session-prop-desc').value.should eq "Updated Description"
find('#account-session-properties-div .selected', text: 'German')
find('#account-session-properties-div .selected', text: 'Only RSVP musicians may join')
find('#account-session-properties-div .selected', text: 'Fans may not listen to session')
# try to update without changing the fields
find('a#session-update').trigger(:click)
should have_selector('h2', text: 'Session is successfully updated.')
find('a.button-orange', text: "OKAY").trigger(:click)
# check fields with original values
find('#account-session-properties-div #session-prop-start-date').value.should eq date_string
find('#account-session-properties-div .selected', text: '11:30 PM')
find('#account-session-properties-div .selected', text: '12:00 AM')
find('#account-session-properties-div .selected', text: '(GMT+00:00) UTC')
find('#account-session-properties-div #session-prop-genre .selected', text: 'African')
find('#account-session-properties-div #session-prop-name').value.should eq "Updated Name"
find('#account-session-properties-div #session-prop-desc').value.should eq "Updated Description"
find('#account-session-properties-div .selected', text: 'German')
find('#account-session-properties-div .selected', text: 'Only RSVP musicians may join')
find('#account-session-properties-div .selected', text: 'Fans may not listen to session')
find('.session-properties-right', text: "Updated Name")
end
it "cancel a scheduled sessions" do