From f8c62631f6d2ce3423e568af9d431c150a1f63e3 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Mon, 25 Apr 2016 10:15:23 -0500 Subject: [PATCH] Fix bad dialog when you have test drive already --- web/app/assets/javascripts/dialog/banner.js | 2 +- .../react-components/BookLesson.js.jsx.coffee | 4 +- .../TeacherSearchScreen.js.jsx.coffee | 4 +- .../book_monthly_recurring_lesson_spec.rb | 162 +++++++++++++++++ .../features/book_recurring_lesson_spec.rb | 163 ++++++++++++++++++ web/spec/features/book_single_lesson_spec.rb | 3 +- 6 files changed, 332 insertions(+), 6 deletions(-) create mode 100644 web/spec/features/book_monthly_recurring_lesson_spec.rb create mode 100644 web/spec/features/book_recurring_lesson_spec.rb diff --git a/web/app/assets/javascripts/dialog/banner.js b/web/app/assets/javascripts/dialog/banner.js index 24a73219a..cb6e454bb 100644 --- a/web/app/assets/javascripts/dialog/banner.js +++ b/web/app/assets/javascripts/dialog/banner.js @@ -161,7 +161,7 @@ if(options.buttons) { context._.each(options.buttons, function(button, i) { if(!button.name) throw "button.name must be specified"; - if(!button.click && !button.href) throw "button.click or button.href must be specified"; + //if(!button.click && !button.href) throw "button.click or button.href must be specified"; var buttonStyle = button.buttonStyle; if(!buttonStyle) { diff --git a/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee b/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee index 307f4ee12..b92db6176 100644 --- a/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee @@ -408,7 +408,7 @@ UserStore = context.UserStore
- +
@@ -422,7 +422,7 @@ UserStore = context.UserStore
- +
diff --git a/web/app/assets/javascripts/react-components/TeacherSearchScreen.js.jsx.coffee b/web/app/assets/javascripts/react-components/TeacherSearchScreen.js.jsx.coffee index a21daafc3..0ef216da7 100644 --- a/web/app/assets/javascripts/react-components/TeacherSearchScreen.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/TeacherSearchScreen.js.jsx.coffee @@ -147,8 +147,8 @@ ProfileActions = @ProfileActions if response.remaining_test_drives > 0 buttons = [] buttons.push({name: 'CANCEL', buttonStyle: 'button-grey'}) - buttons.push({name: 'PAY NORMALLY', buttonStyle: 'button-orange', click:(() => ( window.location.herf = '/client#/jamclass/book-lesson/normal_' + user.id ))}) - buttons.push({name: 'USE TEST DRIVE', buttonStyle: 'button-orange', click:(() => ( window.location.herf = '/client#/jamclass/book-lesson/test-drive_' + user.id ))}) + buttons.push({name: 'PAY NORMALLY', buttonStyle: 'button-orange', click:(() => ( window.location.href = '/client#/jamclass/book-lesson/normal_' + user.id ))}) + buttons.push({name: 'USE TEST DRIVE', buttonStyle: 'button-orange', click:(() => ( window.location.href = '/client#/jamclass/book-lesson/test-drive_' + user.id ))}) context.JK.Banner.show({title: 'You still have TestDrive Credits!', html: "You have #{response.remaining_test_drives} TestDrive credits remaining. Would you rather use your TestDrive credit for a lesson with this teacher?", buttons: buttons}) else window.location.href = '/client#/jamclass/book-lesson/normal_' + user.id diff --git a/web/spec/features/book_monthly_recurring_lesson_spec.rb b/web/spec/features/book_monthly_recurring_lesson_spec.rb new file mode 100644 index 000000000..5e58a208f --- /dev/null +++ b/web/spec/features/book_monthly_recurring_lesson_spec.rb @@ -0,0 +1,162 @@ +require 'spec_helper' + +describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capybara_feature => true do + + subject { page } + + let(:user) { FactoryGirl.create(:user, traditional_band: true,paid_sessions: true, paid_sessions_hourly_rate: 1, paid_sessions_daily_rate:1 ) } + let(:teacher_user) {FactoryGirl.create(:teacher_user, first_name: "Teacher1", ready_for_session_at: Time.now)} + let(:teacher_user2) {FactoryGirl.create(:teacher_user, ready_for_session_at: Time.now)} + + + before(:each) do + LessonBooking.destroy_all + Recording.delete_all + Diagnostic.delete_all + User.delete_all + + UserMailer.deliveries.clear + emulate_client + sign_in_poltergeist user + + + teacher_user.teacher.ready_for_session_at = Time.now + teacher_user.teacher.save! + + teacher_user.teacher.price_per_lesson_60_cents.should eql 3000 + + Teacher.index(user, {})[:query].count.should eql 1 + + + end + + def finish_lesson_successfully + + end + + describe "register via showing interesting in teacher 1st" do + after(:each) do + Timecop.return + end + it "succeeds" do + + visit "/client#/teachers/search" + + Timecop.travel(Date.new(2016, 04, 01)) + + find('.teacher-search-result[data-teacher-id="' + teacher_user.id + '"] .try-normal').trigger(:click) + + + # switch to recurring + find(".lesson-frequency-recurring ins", visible: false).trigger(:click) + + # book the lesson + select "Monday", from: "day-of-week-1" + + select "Tuesday", from: "day-of-week-2" + + fill_in 'user-description', with: 'abc def dog neck' + + select('60 Minute Lesson Each Week - $30.00 Per Month', :from => "booking-options-for-teacher") + sleep 3 + + find('a.book-lesson-btn', text: 'BOOK LESSON').trigger(:click) + + find('h2', text: 'enter payment info for lesson') + + user.student_lesson_bookings.count.should eql 1 + lesson_booking = user.student_lesson_bookings.first + lesson_booking.is_requested?.should be_true + lesson_booking.card_presumed_ok.should be_false + lesson_booking.recurring.should be true + lesson_booking.is_monthly_payment?.should be true + fill_in 'card-number', with: '4111111111111111' + fill_in 'expiration', with: '11/2016' + fill_in 'cvv', with: '111' + fill_in 'zip', with: '78759' + + find('.purchase-btn').trigger(:click) + + # we tell user they have test drive purchased, and take them to the teacher screen + find('#banner h1', text: 'Lesson Requested') + # dismiss banner + find('a.button-orange', text:'CLOSE').trigger(:click) + lesson_booking = LessonBooking.where(teacher_id: teacher_user).first + lesson_booking.should_not be_nil + lesson_session = LessonSession.where(teacher_id: teacher_user).first + lesson_session.teacher.should eql teacher_user + + lesson_package_purchase = LessonPackagePurchase.where(user_id: user.id).first + lesson_package_purchase.should be_nil + user.reload + user.remaining_test_drives.should eql 0 + user.sales.count.should eql 0 + + # jamclass scren + find('h2', text: 'my lessons') + find('tr[data-lesson-session-id="' + lesson_session.id + '"] .displayStatusColumn', text: 'Requested') + find('tr[data-lesson-session-id="' + lesson_session.id + '"] .first_name', text: teacher_user.first_name) + + # open up hover + find('tr[data-lesson-session-id="' + lesson_session.id + '"] .lesson-session-actions-btn').trigger(:click) + + # check out the status + find('li[data-lesson-option="status"] a', text: 'View Status').trigger(:click) + + # and now go to the session status screen + find('h2', text: 'your lesson has been requested') + + # let's make a second request to a different teacher now + + # let's make sure we can ask for another lesson too! + teacher_user2.teacher.ready_for_session_at = Time.now + teacher_user2.teacher.save! + + visit "/client#/teachers/search" + find('a.teacher-search-options').trigger(:click) + find('a.search-btn').trigger(:click) + + find('.teacher-search-result[data-teacher-id="' + teacher_user2.id + '"] .try-normal').trigger(:click) + + # switch back to single + find(".lesson-frequency-single ins", visible: false).trigger(:click) + + # book the lesson + fill_in "slot-1-date", with: "Sun Apr 17 2016" + #find('.slot.slot-1 input.hasDatepicker').trigger(:click) + # click 4-6 + find('td a', text: '17').trigger(:click) + + #find('.slot.slot-2 input.hasDatepicker').trigger(:click) + # click 4-7 + fill_in "slot-2-date", with: "Mon Apr 18 2016" + find('td a', text: '18').trigger(:click) + + fill_in 'user-description', with: 'abc def dog neck' + + select('60 Minute Lesson for $30.00', :from => "booking-options-for-teacher") + sleep 3 + + find('a.book-lesson-btn', text: 'BOOK LESSON').trigger(:click) + + # we tell user they have test drive purchased, and take them to the teacher screen + find('#banner h1', text: 'Lesson Requested') + # dismiss banner + find('a.button-orange', text:'CLOSE').trigger(:click) + + lesson_booking = LessonBooking.where(teacher_id: teacher_user2).first + lesson_booking.should_not be_nil + lesson_booking.recurring.should be false + lesson_session = LessonSession.where(teacher_id: teacher_user2).first + lesson_session.teacher.should eql teacher_user2 + + lesson_package_purchase = LessonPackagePurchase.where(user_id: user.id).first + lesson_package_purchase.should be_nil + user.reload + user.remaining_test_drives.should eql 0 + user.sales.count.should eql 0 + + finish_lesson_successfully + end + end +end diff --git a/web/spec/features/book_recurring_lesson_spec.rb b/web/spec/features/book_recurring_lesson_spec.rb new file mode 100644 index 000000000..8b0431b31 --- /dev/null +++ b/web/spec/features/book_recurring_lesson_spec.rb @@ -0,0 +1,163 @@ +require 'spec_helper' + +describe "Book Single Recurring Lesson", :js => true, :type => :feature, :capybara_feature => true do + + subject { page } + + let(:user) { FactoryGirl.create(:user, traditional_band: true,paid_sessions: true, paid_sessions_hourly_rate: 1, paid_sessions_daily_rate:1 ) } + let(:teacher_user) {FactoryGirl.create(:teacher_user, first_name: "Teacher1", ready_for_session_at: Time.now)} + let(:teacher_user2) {FactoryGirl.create(:teacher_user, ready_for_session_at: Time.now)} + + + before(:each) do + LessonBooking.destroy_all + Recording.delete_all + Diagnostic.delete_all + User.delete_all + + UserMailer.deliveries.clear + emulate_client + sign_in_poltergeist user + + + teacher_user.teacher.ready_for_session_at = Time.now + teacher_user.teacher.save! + + teacher_user.teacher.price_per_lesson_60_cents.should eql 3000 + + Teacher.index(user, {})[:query].count.should eql 1 + + + end + + def finish_lesson_successfully + + end + + describe "register via showing interesting in teacher 1st" do + after(:each) do + Timecop.return + end + it "succeeds" do + + visit "/client#/teachers/search" + + Timecop.travel(Date.new(2016, 04, 01)) + + find('.teacher-search-result[data-teacher-id="' + teacher_user.id + '"] .try-normal').trigger(:click) + + + # switch to recurring + find(".lesson-frequency-recurring ins", visible: false).trigger(:click) + + # book the lesson + select "Monday", from: "day-of-week-1" + + select "Tuesday", from: "day-of-week-2" + + fill_in 'user-description', with: 'abc def dog neck' + + select('60 Minute Lesson Each Week - $30.00 Per Week', :from => "booking-options-for-teacher") + sleep 3 + + find('a.book-lesson-btn', text: 'BOOK LESSON').trigger(:click) + + find('h2', text: 'enter payment info for lesson') + + user.student_lesson_bookings.count.should eql 1 + lesson_booking = user.student_lesson_bookings.first + lesson_booking.is_requested?.should be_true + lesson_booking.card_presumed_ok.should be_false + lesson_booking.recurring.should be true + lesson_booking.is_monthly_payment?.should be false + + fill_in 'card-number', with: '4111111111111111' + fill_in 'expiration', with: '11/2016' + fill_in 'cvv', with: '111' + fill_in 'zip', with: '78759' + + find('.purchase-btn').trigger(:click) + + # we tell user they have test drive purchased, and take them to the teacher screen + find('#banner h1', text: 'Lesson Requested') + # dismiss banner + find('a.button-orange', text:'CLOSE').trigger(:click) + lesson_booking = LessonBooking.where(teacher_id: teacher_user).first + lesson_booking.should_not be_nil + lesson_session = LessonSession.where(teacher_id: teacher_user).first + lesson_session.teacher.should eql teacher_user + + lesson_package_purchase = LessonPackagePurchase.where(user_id: user.id).first + lesson_package_purchase.should be_nil + user.reload + user.remaining_test_drives.should eql 0 + user.sales.count.should eql 0 + + # jamclass scren + find('h2', text: 'my lessons') + find('tr[data-lesson-session-id="' + lesson_session.id + '"] .displayStatusColumn', text: 'Requested') + find('tr[data-lesson-session-id="' + lesson_session.id + '"] .first_name', text: teacher_user.first_name) + + # open up hover + find('tr[data-lesson-session-id="' + lesson_session.id + '"] .lesson-session-actions-btn').trigger(:click) + + # check out the status + find('li[data-lesson-option="status"] a', text: 'View Status').trigger(:click) + + # and now go to the session status screen + find('h2', text: 'your lesson has been requested') + + # let's make a second request to a different teacher now + + # let's make sure we can ask for another lesson too! + teacher_user2.teacher.ready_for_session_at = Time.now + teacher_user2.teacher.save! + + visit "/client#/teachers/search" + find('a.teacher-search-options').trigger(:click) + find('a.search-btn').trigger(:click) + + find('.teacher-search-result[data-teacher-id="' + teacher_user2.id + '"] .try-normal').trigger(:click) + + # switch back to single + find(".lesson-frequency-single ins", visible: false).trigger(:click) + + # book the lesson + fill_in "slot-1-date", with: "Sun Apr 17 2016" + #find('.slot.slot-1 input.hasDatepicker').trigger(:click) + # click 4-6 + find('td a', text: '17').trigger(:click) + + #find('.slot.slot-2 input.hasDatepicker').trigger(:click) + # click 4-7 + fill_in "slot-2-date", with: "Mon Apr 18 2016" + find('td a', text: '18').trigger(:click) + + fill_in 'user-description', with: 'abc def dog neck' + + select('60 Minute Lesson for $30.00', :from => "booking-options-for-teacher") + sleep 3 + + find('a.book-lesson-btn', text: 'BOOK LESSON').trigger(:click) + + # we tell user they have test drive purchased, and take them to the teacher screen + find('#banner h1', text: 'Lesson Requested') + # dismiss banner + find('a.button-orange', text:'CLOSE').trigger(:click) + + lesson_booking = LessonBooking.where(teacher_id: teacher_user2).first + lesson_booking.should_not be_nil + lesson_booking.recurring.should be false + lesson_session = LessonSession.where(teacher_id: teacher_user2).first + lesson_session.teacher.should eql teacher_user2 + + lesson_package_purchase = LessonPackagePurchase.where(user_id: user.id).first + lesson_package_purchase.should be_nil + user.reload + user.remaining_test_drives.should eql 0 + user.sales.count.should eql 0 + + finish_lesson_successfully + end + end +end diff --git a/web/spec/features/book_single_lesson_spec.rb b/web/spec/features/book_single_lesson_spec.rb index 2b3d4dea8..0b0c632d9 100644 --- a/web/spec/features/book_single_lesson_spec.rb +++ b/web/spec/features/book_single_lesson_spec.rb @@ -72,6 +72,7 @@ describe "Single Lesson", :js => true, :type => :feature, :capybara_feature => t lesson_booking = user.student_lesson_bookings.first lesson_booking.is_requested?.should be_true lesson_booking.card_presumed_ok.should be_false + lesson_booking.recurring.should be false @@ -113,7 +114,7 @@ describe "Single Lesson", :js => true, :type => :feature, :capybara_feature => t # let's make a second request to a different teacher now - # let's make sure we can ask for another test drive too! + # let's make sure we can ask for another lesson too! teacher_user2.teacher.ready_for_session_at = Time.now teacher_user2.teacher.save!