Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
860467e7
Commit
860467e7
authored
Apr 22, 2015
by
Awais
Committed by
aamir-khan
Apr 29, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ECOM-1441 additional methods for skip re-verification links.
parent
b5f58ccf
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
145 additions
and
5 deletions
+145
-5
lms/djangoapps/verify_student/models.py
+25
-0
lms/djangoapps/verify_student/services.py
+31
-3
lms/djangoapps/verify_student/tests/test_models.py
+70
-1
lms/djangoapps/verify_student/tests/test_services.py
+19
-1
No files found.
lms/djangoapps/verify_student/models.py
View file @
860467e7
...
@@ -1077,3 +1077,28 @@ class SkippedReverification(models.Model):
...
@@ -1077,3 +1077,28 @@ class SkippedReverification(models.Model):
class
Meta
:
# pylint: disable=missing-docstring, old-style-class
class
Meta
:
# pylint: disable=missing-docstring, old-style-class
unique_together
=
((
'user'
,
'course_id'
),)
unique_together
=
((
'user'
,
'course_id'
),)
@classmethod
def
add_skipped_reverification_attempt
(
cls
,
checkpoint
,
user_id
,
course_id
):
""" Create skipped reverification object
Arguments:
checkpoint(VerificationCheckpoint): VerificationCheckpoint object
user_id(str): User Id of currently logged in user
course_id(CourseKey): CourseKey
Returns:
None
"""
cls
.
objects
.
create
(
checkpoint
=
checkpoint
,
user_id
=
user_id
,
course_id
=
course_id
)
@classmethod
def
check_user_skipped_reverification_exists
(
cls
,
user
,
course_id
):
"""Check user skipped re-verification attempt exists against specific course
Arguments:
user(User): user object
course_id(CourseKey): CourseKey
Returns:
Boolean
"""
return
cls
.
objects
.
filter
(
user
=
user
,
course_id
=
course_id
)
.
exists
()
lms/djangoapps/verify_student/services.py
View file @
860467e7
...
@@ -2,10 +2,14 @@
...
@@ -2,10 +2,14 @@
Implement the Reverification XBlock "reverification" server
Implement the Reverification XBlock "reverification" server
"""
"""
import
logging
from
opaque_keys.edx.keys
import
CourseKey
from
opaque_keys.edx.keys
import
CourseKey
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
from
verify_student.models
import
VerificationCheckpoint
,
VerificationStatus
from
verify_student.models
import
VerificationCheckpoint
,
VerificationStatus
,
SkippedReverification
from
django.db
import
IntegrityError
log
=
logging
.
getLogger
(
__name__
)
class
ReverificationService
(
object
):
class
ReverificationService
(
object
):
...
@@ -14,7 +18,7 @@ class ReverificationService(object):
...
@@ -14,7 +18,7 @@ class ReverificationService(object):
"""
"""
def
get_status
(
self
,
user_id
,
course_id
,
related_assessment
):
def
get_status
(
self
,
user_id
,
course_id
,
related_assessment
):
""" Check if the user has any verification attempt
for this checkpoint and course_id
""" Check if the user has any verification attempt
or has skipped the verification
Args:
Args:
user_id(str): User Id string
user_id(str): User Id string
...
@@ -22,9 +26,13 @@ class ReverificationService(object):
...
@@ -22,9 +26,13 @@ class ReverificationService(object):
related_assessment(str): Verification checkpoint name
related_assessment(str): Verification checkpoint name
Returns:
Returns:
Verification Status string if any attempt submitted by user else None
"skipped" if has skip the re-verification or Verification Status string if
any attempt submitted by user else None
"""
"""
course_key
=
CourseKey
.
from_string
(
course_id
)
course_key
=
CourseKey
.
from_string
(
course_id
)
has_skipped
=
SkippedReverification
.
check_user_skipped_reverification_exists
(
user_id
,
course_key
)
if
has_skipped
:
return
"skipped"
try
:
try
:
checkpoint_status
=
VerificationStatus
.
objects
.
filter
(
checkpoint_status
=
VerificationStatus
.
objects
.
filter
(
user_id
=
user_id
,
user_id
=
user_id
,
...
@@ -56,3 +64,23 @@ class ReverificationService(object):
...
@@ -56,3 +64,23 @@ class ReverificationService(object):
)
)
)
)
return
re_verification_link
return
re_verification_link
def
skip_verification
(
self
,
checkpoint_name
,
user_id
,
course_id
):
"""Create the add verification attempt
Args:
course_id(str): A string of course_id
user_id(str): User Id string
checkpoint_name(str): Verification checkpoint name
Returns:
None
"""
course_key
=
CourseKey
.
from_string
(
course_id
)
checkpoint
=
VerificationCheckpoint
.
objects
.
get
(
course_id
=
course_key
,
checkpoint_name
=
checkpoint_name
)
# if user do not already skipped the attempt for this course only then he can skip
try
:
SkippedReverification
.
add_skipped_reverification_attempt
(
checkpoint
,
user_id
,
course_key
)
except
IntegrityError
:
log
.
exception
(
"Skipped attempt already exists for user
%
s: with course
%
s:"
,
user_id
,
unicode
(
course_id
))
lms/djangoapps/verify_student/tests/test_models.py
View file @
860467e7
...
@@ -18,7 +18,8 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
...
@@ -18,7 +18,8 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from
xmodule.modulestore.tests.factories
import
CourseFactory
from
xmodule.modulestore.tests.factories
import
CourseFactory
from
verify_student.models
import
(
from
verify_student.models
import
(
SoftwareSecurePhotoVerification
,
VerificationException
,
VerificationCheckpoint
,
VerificationStatus
SoftwareSecurePhotoVerification
,
VerificationException
,
VerificationCheckpoint
,
VerificationStatus
,
SkippedReverification
)
)
FAKE_SETTINGS
=
{
FAKE_SETTINGS
=
{
...
@@ -709,3 +710,71 @@ class VerificationStatusTest(ModuleStoreTestCase):
...
@@ -709,3 +710,71 @@ class VerificationStatusTest(ModuleStoreTestCase):
self
.
assertEqual
(
len
(
result
),
len
([
self
.
check_point1
.
checkpoint_name
,
self
.
check_point2
.
checkpoint_name
]))
self
.
assertEqual
(
len
(
result
),
len
([
self
.
check_point1
.
checkpoint_name
,
self
.
check_point2
.
checkpoint_name
]))
self
.
assertEqual
(
result
[
0
]
.
checkpoint
.
checkpoint_name
,
self
.
check_point1
.
checkpoint_name
)
self
.
assertEqual
(
result
[
0
]
.
checkpoint
.
checkpoint_name
,
self
.
check_point1
.
checkpoint_name
)
self
.
assertEqual
(
result
[
1
]
.
checkpoint
.
checkpoint_name
,
self
.
check_point2
.
checkpoint_name
)
self
.
assertEqual
(
result
[
1
]
.
checkpoint
.
checkpoint_name
,
self
.
check_point2
.
checkpoint_name
)
class
SkippedReverificationTest
(
ModuleStoreTestCase
):
"""Tests for the SkippedReverification model. """
def
setUp
(
self
):
super
(
SkippedReverificationTest
,
self
)
.
setUp
()
self
.
user
=
UserFactory
.
create
()
self
.
course
=
CourseFactory
.
create
()
self
.
checkpoint
=
VerificationCheckpoint
.
objects
.
create
(
course_id
=
self
.
course
.
id
,
checkpoint_name
=
"midterm"
)
def
test_add_skipped_attempts
(
self
):
"""adding skipped re-verification object using class method."""
# adding verification status
SkippedReverification
.
add_skipped_reverification_attempt
(
checkpoint
=
self
.
checkpoint
,
user_id
=
self
.
user
.
id
,
course_id
=
unicode
(
self
.
course
.
id
)
)
# getting the status from db
result
=
SkippedReverification
.
objects
.
filter
(
course_id
=
self
.
course
.
id
)[
0
]
self
.
assertEqual
(
result
.
checkpoint
,
self
.
checkpoint
)
self
.
assertEqual
(
result
.
user
,
self
.
user
)
self
.
assertEqual
(
result
.
course_id
,
self
.
course
.
id
)
def
test_unique_constraint
(
self
):
"""adding skipped re-verification with same user and course id will
raise integrity exception
"""
# adding verification object
SkippedReverification
.
add_skipped_reverification_attempt
(
checkpoint
=
self
.
checkpoint
,
user_id
=
self
.
user
.
id
,
course_id
=
unicode
(
self
.
course
.
id
)
)
with
self
.
assertRaises
(
IntegrityError
):
SkippedReverification
.
add_skipped_reverification_attempt
(
checkpoint
=
self
.
checkpoint
,
user_id
=
self
.
user
.
id
,
course_id
=
unicode
(
self
.
course
.
id
)
)
# Create skipped attempt for different user
user2
=
UserFactory
.
create
()
SkippedReverification
.
add_skipped_reverification_attempt
(
checkpoint
=
self
.
checkpoint
,
user_id
=
user2
.
id
,
course_id
=
unicode
(
self
.
course
.
id
)
)
# getting the status from db
result
=
SkippedReverification
.
objects
.
filter
(
user
=
user2
)[
0
]
self
.
assertEqual
(
result
.
checkpoint
,
self
.
checkpoint
)
self
.
assertEqual
(
result
.
user
,
user2
)
self
.
assertEqual
(
result
.
course_id
,
self
.
course
.
id
)
def
test_check_user_skipped_reverification_exists
(
self
):
"""Checking check_user_skipped_reverification_exists method returns boolean status"""
# adding verification status
SkippedReverification
.
add_skipped_reverification_attempt
(
checkpoint
=
self
.
checkpoint
,
user_id
=
self
.
user
.
id
,
course_id
=
unicode
(
self
.
course
.
id
)
)
self
.
assertTrue
(
SkippedReverification
.
check_user_skipped_reverification_exists
(
course_id
=
self
.
course
.
id
,
user
=
self
.
user
)
)
user2
=
UserFactory
.
create
()
self
.
assertFalse
(
SkippedReverification
.
check_user_skipped_reverification_exists
(
course_id
=
self
.
course
.
id
,
user
=
user2
)
)
lms/djangoapps/verify_student/tests/test_services.py
View file @
860467e7
...
@@ -8,7 +8,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
...
@@ -8,7 +8,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
from
student.tests.factories
import
UserFactory
from
student.tests.factories
import
UserFactory
from
course_modes.tests.factories
import
CourseModeFactory
from
course_modes.tests.factories
import
CourseModeFactory
from
verify_student.services
import
ReverificationService
from
verify_student.services
import
ReverificationService
from
verify_student.models
import
VerificationCheckpoint
,
VerificationStatus
from
verify_student.models
import
VerificationCheckpoint
,
VerificationStatus
,
SkippedReverification
@ddt.ddt
@ddt.ddt
...
@@ -62,3 +62,21 @@ class TestReverifyService(ModuleStoreTestCase):
...
@@ -62,3 +62,21 @@ class TestReverifyService(ModuleStoreTestCase):
VerificationStatus
.
objects
.
create
(
checkpoint
=
checkpoint_obj
,
user
=
self
.
user
,
status
=
'submitted'
)
VerificationStatus
.
objects
.
create
(
checkpoint
=
checkpoint_obj
,
user
=
self
.
user
,
status
=
'submitted'
)
self
.
assertEqual
(
rev
.
get_status
(
self
.
user
.
id
,
unicode
(
self
.
course_key
),
checkpoint_name
),
'submitted'
)
self
.
assertEqual
(
rev
.
get_status
(
self
.
user
.
id
,
unicode
(
self
.
course_key
),
checkpoint_name
),
'submitted'
)
def
test_skip_verification
(
self
):
""" Adding the test skip verification attempt for the user """
checkpoint_name
=
'final_term'
rev
=
ReverificationService
()
VerificationCheckpoint
.
objects
.
create
(
course_id
=
unicode
(
self
.
course_key
),
checkpoint_name
=
checkpoint_name
)
rev
.
skip_verification
(
checkpoint_name
,
self
.
user
.
id
,
unicode
(
self
.
course_key
))
self
.
assertEqual
(
1
,
SkippedReverification
.
objects
.
filter
(
user
=
self
.
user
,
course_id
=
self
.
course_key
)
.
count
())
rev
.
skip_verification
(
checkpoint_name
,
self
.
user
.
id
,
unicode
(
self
.
course_key
))
self
.
assertEqual
(
1
,
SkippedReverification
.
objects
.
filter
(
user
=
self
.
user
,
course_id
=
self
.
course_key
)
.
count
())
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment