#pylint: disable=C0111 #pylint: disable=W0621 from lettuce import world, step from lettuce.django import django_url from course_modes.models import CourseMode from nose.tools import assert_equal def create_cert_course(): world.clear_courses() org = 'edx' number = '999' name = 'Certificates' course_id = '{org}/{number}/{name}'.format( org=org, number=number, name=name) world.scenario_dict['course_id'] = course_id world.scenario_dict['COURSE'] = world.CourseFactory.create( org=org, number=number, display_name=name) audit_mode = world.CourseModeFactory.create( course_id=course_id, mode_slug='audit', mode_display_name='audit course', min_price=0, ) assert isinstance(audit_mode, CourseMode) verfied_mode = world.CourseModeFactory.create( course_id=course_id, mode_slug='verified', mode_display_name='verified cert course', min_price=16, suggested_prices='32,64,128', currency='usd', ) assert isinstance(verfied_mode, CourseMode) def register(): url = 'courses/{org}/{number}/{name}/about'.format( org='edx', number='999', name='Certificates') world.browser.visit(django_url(url)) world.css_click('section.intro a.register') assert world.is_css_present('section.wrapper h3.title') @step(u'the course has an honor mode') def the_course_has_an_honor_mode(step): create_cert_course() honor_mode = world.CourseModeFactory.create( course_id=world.scenario_dict['course_id'], mode_slug='honor', mode_display_name='honor mode', min_price=0, ) assert isinstance(honor_mode, CourseMode) @step(u'I select the audit track$') def select_the_audit_track(step): create_cert_course() register() btn_css = 'input[value="Select Audit"]' world.wait(1) # TODO remove this after troubleshooting JZ world.css_find(btn_css) world.css_click(btn_css) def select_contribution(amount=32): radio_css = 'input[value="{}"]'.format(amount) world.css_click(radio_css) assert world.css_find(radio_css).selected @step(u'I select the verified track$') def select_the_verified_track(step): create_cert_course() register() select_contribution(32) btn_css = 'input[value="Select Certificate"]' world.css_click(btn_css) assert world.is_css_present('section.progress') @step(u'I should see the course on my dashboard$') def should_see_the_course_on_my_dashboard(step): course_css = 'li.course-item' assert world.is_css_present(course_css) @step(u'I go to step "([^"]*)"$') def goto_next_step(step, step_num): btn_css = { '1': '#face_next_button', '2': '#face_next_link', '3': '#photo_id_next_link', '4': '#pay_button', } next_css = { '1': 'div#wrapper-facephoto.carousel-active', '2': 'div#wrapper-idphoto.carousel-active', '3': 'div#wrapper-review.carousel-active', '4': 'div#wrapper-review.carousel-active', } world.css_click(btn_css[step_num]) # Pressing the button will advance the carousel to the next item # and give the wrapper div the "carousel-active" class assert world.css_find(next_css[step_num]) @step(u'I capture my "([^"]*)" photo$') def capture_my_photo(step, name): # Hard coded red dot image image_data = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' snapshot_script = "$('#{}_image')[0].src = '{}';".format(name, image_data) # Mirror the javascript of the photo_verification.html page world.browser.execute_script(snapshot_script) world.browser.execute_script("$('#{}_capture_button').hide();".format(name)) world.browser.execute_script("$('#{}_reset_button').show();".format(name)) world.browser.execute_script("$('#{}_approve_button').show();".format(name)) assert world.css_find('#{}_approve_button'.format(name)) @step(u'I approve my "([^"]*)" photo$') def approve_my_photo(step, name): button_css = { 'face': 'div#wrapper-facephoto li.control-approve', 'photo_id': 'div#wrapper-idphoto li.control-approve', } wrapper_css = { 'face': 'div#wrapper-facephoto', 'photo_id': 'div#wrapper-idphoto', } # Make sure that the carousel is in the right place assert world.css_has_class(wrapper_css[name], 'carousel-active') assert world.css_find(button_css[name]) # HACK: for now don't bother clicking the approve button for # id_photo, because it is sending you back to Step 1. # Come back and figure it out later. JZ Aug 29 2013 if name=='face': world.css_click(button_css[name]) # Make sure you didn't advance the carousel assert world.css_has_class(wrapper_css[name], 'carousel-active') @step(u'I select a contribution amount$') def select_contribution_amount(step): select_contribution(32) @step(u'I confirm that the details match$') def confirm_details_match(step): # First you need to scroll down on the page # to make the element visible? # Currently chrome is failing with ElementNotVisibleException world.browser.execute_script("window.scrollTo(0,1024)") cb_css = 'input#confirm_pics_good' world.css_click(cb_css) assert world.css_find(cb_css).checked @step(u'I am at the payment page') def at_the_payment_page(step): assert world.css_find('input[name=transactionSignature]') @step(u'I submit valid payment information$') def submit_payment(step): button_css = 'input[value=Submit]' world.css_click(button_css) @step(u'I have submitted face and ID photos$') def submitted_face_and_id_photos(step): step.given('I am logged in') step.given('I select the verified track') step.given('I go to step "1"') step.given('I capture my "face" photo') step.given('I approve my "face" photo') step.given('I go to step "2"') step.given('I capture my "photo_id" photo') step.given('I approve my "photo_id" photo') step.given('I go to step "3"') @step(u'I have submitted photos to verify my identity') def submitted_photos_to_verify_my_identity(step): step.given('I have submitted face and ID photos') step.given('I select a contribution amount') step.given('I confirm that the details match') step.given('I go to step "4"') @step(u'I see that my payment was successful') def see_that_my_payment_was_successful(step): title = world.css_find('div.wrapper-content-main h3.title') assert_equal(title.text, u'Congratulations! You are now verified on edX.') @step(u'I navigate to my dashboard') def navigate_to_my_dashboard(step): world.css_click('span.avatar') assert world.css_find('section.my-courses') @step(u'I see the course on my dashboard') def see_the_course_on_my_dashboard(step): course_link_css = 'section.my-courses a[href*="edx/999/Certificates"]' assert world.is_css_present(course_link_css) @step(u'I see that I am on the verified track') def see_that_i_am_on_the_verified_track(step): id_verified_css = 'li.course-item article.course.verified' assert world.is_css_present(id_verified_css) @step(u'I leave the flow and return$') def leave_the_flow_and_return(step): world.visit('verify_student/verified/edx/999/Certificates') @step(u'I am at the verified page$') def see_the_payment_page(step): assert world.css_find('button#pay_button') @step(u'I edit my name$') def edit_my_name(step): btn_css = 'a.retake-photos' world.css_click(btn_css) @step(u'I give a reason why I cannot pay$') def give_a_reason_why_i_cannot_pay(step): register() link_css = 'h5 i.expandable-icon' world.css_click(link_css) cb_css = 'input#honor-code' world.css_click(cb_css) text_css = 'li.field-explain textarea' world.css_find(text_css).type('I cannot afford it.') btn_css = 'input[value="Select Certificate"]' world.css_click(btn_css)