Skip to content

Commit

Permalink
Fix not logged-in flow openedx#700
Browse files Browse the repository at this point in the history
  • Loading branch information
hachiyanagi-ks committed May 11, 2016
1 parent e58dfd8 commit d2c909b
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 10 deletions.
2 changes: 1 addition & 1 deletion common/djangoapps/student/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ def auth_pipeline_urls(auth_entry, redirect_url=None):

# Query string parameters that can be passed to the "finish_auth" view to manage
# things like auto-enrollment.
POST_AUTH_PARAMS = ('course_id', 'enrollment_action', 'course_mode', 'email_opt_in')
POST_AUTH_PARAMS = ('course_id', 'enrollment_action', 'course_mode', 'email_opt_in', 'advanced_course')


def get_next_url_for_login_page(request):
Expand Down
14 changes: 10 additions & 4 deletions common/test/acceptance/pages/lms/ga_advanced_course.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from . import BASE_URL
from .course_about import CourseAboutPage as EdXCourseAboutPage
from .login_and_register import CombinedLoginAndRegisterPage
from .pay_and_verify import FakePaymentPage as EdXFakePaymentPage

from .ga_dashboard import DashboardPage as GaDashboradPage
Expand Down Expand Up @@ -276,12 +277,17 @@ def submit_payment(self, payment_method='card'):

class CourseAboutPage(EdXCourseAboutPage):

def enroll(self):
def enroll(self, login=True):
self.q(css='a.register').first.click()

advanced_course_choose_page = AdvancedCourseChoosePage(self.browser, self.course_id)
advanced_course_choose_page.wait_for_page()
return advanced_course_choose_page
if login:
advanced_course_choose_page = AdvancedCourseChoosePage(self.browser, self.course_id)
advanced_course_choose_page.wait_for_page()
return advanced_course_choose_page
else:
register_page = CombinedLoginAndRegisterPage(self.browser)
register_page.wait_for_page()
return register_page


class DashboardPage(GaDashboradPage):
Expand Down
102 changes: 100 additions & 2 deletions common/test/acceptance/tests/lms/test_ga_advanced_course.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from ..ga_helpers import GaccoTestMixin
from ...pages.lms.ga_advanced_course import (
AdvancedF2FCoursesPage, CourseAboutPage, DashboardPage,
AdvancedCourseChoosePage, AdvancedF2FCoursesPage, CourseAboutPage, DashboardPage,
)


Expand Down Expand Up @@ -231,7 +231,7 @@ def test_purchase_flow_when_enroll(self):
def test_purchase_flow_from_dashboard(self):
"""
Scenario:
Course has only onw advanced course.
Course has only one advanced course.
1. Visit dashboard and go to list page
2. Show advanced course list page and go to ticket option page
Expand Down Expand Up @@ -304,3 +304,101 @@ def test_purchase_flow_from_dashboard(self):
u"If you unenroll, ticket, such as face-to-face classroom you have purchased will not be canceled. Please contact us through the Help If you would like to cancel the ticket.",
dashboard_page.get_refund_info_message()
)

def test_not_logged_in_and_register(self):
"""
Scenario:
To enroll in not logged-in state.
1. Visit course about page and enroll
2. Show register page and register
3. Show advanced course choose page
"""
course_about_page = CourseAboutPage(self.browser, self.course_id).visit()
register_page = course_about_page.enroll(login=False)

username = self.unique_id[0:6]
register_page.register(
email='{}@example.com'.format(username), password='abcdefG1', username=username,
full_name=username, terms_of_service=True
)

# Verify course choose page is shown
AdvancedCourseChoosePage(self.browser, self.course_id).wait_for_page()

def test_not_logged_in_and_register_with_not_advanced_course(self):
"""
Scenario:
Course has not advanced course.
To enroll in not logged-in state.
1. Visit course about page and enroll
2. Show register page and register
3. Show dashboard page
"""
_course_id = CourseFixture(
self.COURSE_ORG, '{}_2'.format(self._testMethodName), self.COURSE_RUN, self.COURSE_DISPLAY
).install()._course_key

course_about_page = CourseAboutPage(self.browser, _course_id).visit()
register_page = course_about_page.enroll(login=False)

username = self.unique_id[0:6]
register_page.register(
email='{}@example.com'.format(username), password='abcdefG1', username=username,
full_name=username, terms_of_service=True
)

# Verify dashboard page is shown
DashboardPage(self.browser).wait_for_page()

def test_not_logged_in_and_login(self):
"""
Scenario:
To enroll in not logged-in state.
1. Visit course about page and enroll
2. Show register page
3. Toggle form and login
4. Show advanced course choose page
"""
# Create user and logout
user = self._auto_auth()
self._logout()

course_about_page = CourseAboutPage(self.browser, self.course_id).visit()
register_page = course_about_page.enroll(login=False)

register_page.toggle_form()
register_page.login(email=user['email'], password=user['username'])

# Verify course choose page is shown
AdvancedCourseChoosePage(self.browser, self.course_id).wait_for_page()

def test_not_logged_in_and_login_with_not_advanced_course(self):
"""
Scenario:
Course has not advanced course.
To enroll in not logged-in state.
1. Visit course about page and enroll
2. Show register page
3. Toggle form and login
4. Show dashboard page
"""
# Create user and logout
user = self._auto_auth()
self._logout()

_course_id = CourseFixture(
self.COURSE_ORG, '{}_2'.format(self._testMethodName), self.COURSE_RUN, self.COURSE_DISPLAY
).install()._course_key

course_about_page = CourseAboutPage(self.browser, _course_id).visit()
register_page = course_about_page.enroll(login=False)

register_page.toggle_form()
register_page.login(email=user['email'], password=user['username'])

# Verify dashboard page is shown
DashboardPage(self.browser).wait_for_page()
12 changes: 9 additions & 3 deletions lms/static/js/student_account/views/FinishAuthView.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@
finishAuth: '/account/finish_auth',
defaultNextUrl: '/dashboard',
payment: '/verify_student/start-flow/',
trackSelection: '/course_modes/choose/'
trackSelection: '/course_modes/choose/',
advancedCourse: '/advanced_course/choose/'
},

initialize: function( obj ) {
Expand All @@ -55,7 +56,8 @@
enrollmentAction: $.url( '?enrollment_action' ),
courseId: $.url( '?course_id' ),
courseMode: $.url( '?course_mode' ),
emailOptIn: $.url( '?email_opt_in')
emailOptIn: $.url( '?email_opt_in'),
advancedCourse: $.url( '?advanced_course' )
};
for (var key in queryParams) {
if (queryParams[key]) {
Expand All @@ -66,6 +68,7 @@
this.enrollmentAction = queryParams.enrollmentAction;
this.courseMode = queryParams.courseMode;
this.emailOptIn = queryParams.emailOptIn;
this.advancedCourse = queryParams.advancedCourse;
this.nextUrl = this.urls.defaultNextUrl;
if (queryParams.next) {
// Ensure that the next URL is internal for security reasons
Expand Down Expand Up @@ -120,7 +123,10 @@
var courseId = decodeURIComponent( this.courseId );

// Determine where to redirect the user after auto-enrollment.
if ( !this.courseMode ) {
if ( this.advancedCourse ) {
/* If the course has advanced course, send user to the course choose flow */
redirectUrl = this.urls.advancedCourse + courseId + '/';
} else if ( !this.courseMode ) {
/* Backwards compatibility with the original course details page.
The old implementation did not specify the course mode for enrollment,
so we'd always send the user to the "track selection" page.
Expand Down

0 comments on commit d2c909b

Please sign in to comment.