jam-cloud/web/spec/features/account_spec.rb

237 lines
8.9 KiB
Ruby

require 'spec_helper'
describe "Account", :js => true, :type => :feature, :capybara_feature => true do
subject { page }
let(:user) { FactoryGirl.create(:user) }
before(:each) do
UserMailer.deliveries.clear
emulate_client
sign_in_poltergeist user
visit "/client#/account"
find('div.account-mid.identity')
end
it { should have_selector('h1', text: 'my account') }
describe "identity" do
before(:each) do
find("#account-edit-identity-link").trigger(:click)
end
it {
find('#account-identity h2', text: 'identity:')
should have_selector('form#account-edit-email-form h4', text: 'Update your email address:')
should have_selector('form#account-edit-password-form h4', text: 'Update your password:')
}
describe "update email" do
before(:each) do
find('form#account-edit-email-form h4', text: 'Update your email address:')
fill_in "account_update_email", with: "junk@jamkazam.com"
#sleep 1
find("#account-edit-email-submit").trigger(:click)
fill_in "update-email-confirm-password", with: user.password
find("#account-edit-email-confirm-password-submit").trigger(:click)
end
it {
find('#notification h2', text: 'Confirmation Email Sent')
}
end
describe "update password" do
describe "successfully" do
before(:each) do
fill_in "current_password", with: user.password
fill_in "password", with: user.password
fill_in "password_confirmation", with: user.password
find("#account-edit-password-submit").trigger(:click)
end
it { should have_selector('h1', text: 'my account') }
end
describe "unsuccessfully" do
before(:each) do
find('#account-identity h2', text: 'identity:')
find("#account-edit-password-submit").trigger(:click)
end
it {
find('#account-identity h2', text: 'identity:')
find('#account-identity div.field.error input[name=current_password] ~ ul li', text: "can't be blank")
find('#account-identity div.field.error input[name=password] ~ ul li', text: "is too short (minimum is 6 characters)")
find('#account-identity div.field.error input[name=password_confirmation] ~ ul li', text: "can't be blank")
}
end
end
describe "profile" do
before(:each) do
find("#account-edit-profile-link").trigger(:click)
find('a.small', text: 'Change Avatar')
end
describe "successfully" do
before(:each) do
fill_in "first_name", with: "Bobby"
fill_in "last_name", with: "Toes"
uncheck('subscribe_email')
find("#account-edit-profile-submit").trigger(:click)
end
it {
user.subscribe_email.should be_true # we haven't user.reload yet
should have_selector('h1', text: 'my account')
should have_selector('#notification h2', text: 'Profile Changed')
user.reload
user.subscribe_email.should be_false
user.first_name.should == "Bobby"
user.last_name.should == "Toes"
should have_selector('#profile #user', text: 'Bobby Toes')
# Update birth date and check updated birth date
jk_select("Jan", '#account-edit-profile-form #user_birth_date_2i')
jk_select("12", '#account-edit-profile-form #user_birth_date_3i')
jk_select("1960", '#account-edit-profile-form #user_birth_date_1i')
find("#account-edit-profile-submit").trigger(:click)
user.reload
user.birth_date == "1960-01-12"
should have_selector('#account-edit-profile-form .birth_date li.active', text: "Jan")
should have_selector('#account-edit-profile-form .birth_date li.active', text: "12")
should have_selector('#account-edit-profile-form .birth_date li.active', text: "1960")
}
end
describe "unsuccessfully" do
before(:each) do
fill_in "first_name", with: ""
fill_in "last_name", with: ""
find("#account-edit-profile-submit").trigger(:click)
end
it {
should have_selector('h2', text: 'profile:')
should have_selector('div.field.error input[name=first_name] ~ ul li', text: "can't be blank")
should have_selector('div.field.error input[name=last_name] ~ ul li', text: "can't be blank")
}
end
end
end
describe "sessions" do
before(:each) do
@creator, @name, @desc = schedule_session
visit "/client#/account"
find("#account-scheduled-sessions-link").trigger(:click)
find('h2', text: 'scheduled sessions:')
end
it "list scheduled sessions" do
should have_selector('div.session-right', text: @name)
end
it "shows detail of scheduled session" do
find("a.session-detail-button").trigger(:click)
find('.session-properties-right', text: @name)
find('td', text: @creator.name)
end
it "should update scheduled session" do
find("a.session-detail-button").trigger(:click)
find('a.button-orange.update-session', text: "UPDATE").trigger(:click)
find('strong', text: "Date & Time")
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-orange', text: "OKAY").trigger(:click)
# 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('#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:30 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:30 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')
end
it "cancel a scheduled sessions" do
find("a.session-cancel-button").trigger(:click)
should have_selector('h1', 'cancel session')
find("a#btnCancelSession", text: "CANCEL SESSION").trigger(:click)
should_not have_selector('tr')
end
end
end