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
e1e473bb
Commit
e1e473bb
authored
Apr 21, 2014
by
chrisndodge
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #13 from edx-solutions/cdodge/add-group-profile
Cdodge/add group profile
parents
75942770
c8e1dbbc
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
254 additions
and
61 deletions
+254
-61
lms/djangoapps/api_manager/groups_views.py
+81
-26
lms/djangoapps/api_manager/migrations/0002_auto__add_coursegrouprelationship__add_groupprofile.py
+92
-0
lms/djangoapps/api_manager/models.py
+16
-0
lms/djangoapps/api_manager/tests/test_groups_views.py
+65
-35
No files found.
lms/djangoapps/api_manager/groups_views.py
View file @
e1e473bb
""" API implementation for group-oriented interactions. """
""" API implementation for group-oriented interactions. """
import
uuid
import
uuid
import
json
from
collections
import
OrderedDict
from
django.contrib.auth.models
import
Group
,
User
from
django.contrib.auth.models
import
Group
,
User
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.core.exceptions
import
ObjectDoesNotExist
...
@@ -10,7 +12,7 @@ from rest_framework.decorators import api_view, permission_classes
...
@@ -10,7 +12,7 @@ from rest_framework.decorators import api_view, permission_classes
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
api_manager.permissions
import
ApiKeyHeaderPermission
from
api_manager.permissions
import
ApiKeyHeaderPermission
from
api_manager.models
import
GroupRelationship
,
CourseGroupRelationship
from
api_manager.models
import
GroupRelationship
,
CourseGroupRelationship
,
GroupProfile
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore
import
Location
,
InvalidLocationError
from
xmodule.modulestore
import
Location
,
InvalidLocationError
...
@@ -32,46 +34,73 @@ def _generate_base_uri(request):
...
@@ -32,46 +34,73 @@ def _generate_base_uri(request):
return
resource_uri
return
resource_uri
@api_view
([
'POST'
])
@api_view
([
'
GET'
,
'
POST'
])
@permission_classes
((
ApiKeyHeaderPermission
,))
@permission_classes
((
ApiKeyHeaderPermission
,))
def
group_list
(
request
):
def
group_list
(
request
):
"""
"""
GET retrieves a list of groups in the system filtered by type
POST creates a new group in the system
POST creates a new group in the system
"""
"""
response_data
=
{}
if
request
.
method
==
'GET'
:
base_uri
=
_generate_base_uri
(
request
)
if
not
'type'
in
request
.
GET
:
# Group name must be unique, but we need to support dupes
return
Response
({},
status
=
status
.
HTTP_400_BAD_REQUEST
)
group
=
Group
.
objects
.
create
(
name
=
str
(
uuid
.
uuid4
()))
original_group_name
=
request
.
DATA
[
'name'
]
response_data
=
[]
group
.
name
=
'{:04d}: {}'
.
format
(
group
.
id
,
original_group_name
)
profiles
=
GroupProfile
.
objects
.
filter
(
group_type
=
request
.
GET
[
'type'
])
group
.
record_active
=
True
for
profile
in
profiles
:
group
.
record_date_created
=
timezone
.
now
()
item_data
=
OrderedDict
()
group
.
record_date_modified
=
timezone
.
now
()
item_data
[
'group_id'
]
=
profile
.
group_id
group
.
save
()
item_data
[
'group_type'
]
=
profile
.
group_type
# Relationship model also allows us to use duplicate names
item_data
[
'data'
]
=
json
.
loads
(
profile
.
data
)
GroupRelationship
.
objects
.
create
(
name
=
original_group_name
,
group_id
=
group
.
id
,
parent_group
=
None
)
response_data
.
append
(
item_data
)
response_data
=
{
'id'
:
group
.
id
,
'name'
:
original_group_name
}
base_uri
=
_generate_base_uri
(
request
)
return
Response
(
response_data
)
response_data
[
'uri'
]
=
'{}/{}'
.
format
(
base_uri
,
group
.
id
)
elif
request
.
method
==
'POST'
:
response_status
=
status
.
HTTP_201_CREATED
response_data
=
{}
return
Response
(
response_data
,
status
=
response_status
)
base_uri
=
_generate_base_uri
(
request
)
# Group name must be unique, but we need to support dupes
group
=
Group
.
objects
.
create
(
name
=
str
(
uuid
.
uuid4
()))
original_group_name
=
request
.
DATA
[
'name'
]
group
.
name
=
'{:04d}: {}'
.
format
(
group
.
id
,
original_group_name
)
group
.
record_active
=
True
group
.
record_date_created
=
timezone
.
now
()
group
.
record_date_modified
=
timezone
.
now
()
group
.
save
()
# Relationship model also allows us to use duplicate names
GroupRelationship
.
objects
.
create
(
name
=
original_group_name
,
group_id
=
group
.
id
,
parent_group
=
None
)
# allow for optional meta information about groups, this will end up in the GroupProfile table
group_type
=
request
.
DATA
.
get
(
'group_type'
)
data
=
request
.
DATA
.
get
(
'data'
)
if
group_type
or
data
:
profile
,
_
=
GroupProfile
.
objects
.
get_or_create
(
group_id
=
group
.
id
,
group_type
=
group_type
,
data
=
data
)
response_data
=
{
'id'
:
group
.
id
,
'name'
:
original_group_name
}
base_uri
=
_generate_base_uri
(
request
)
response_data
[
'uri'
]
=
'{}/{}'
.
format
(
base_uri
,
group
.
id
)
response_status
=
status
.
HTTP_201_CREATED
return
Response
(
response_data
,
status
=
response_status
)
@api_view
([
'GET'
])
@api_view
([
'GET'
,
'POST'
])
@permission_classes
((
ApiKeyHeaderPermission
,))
@permission_classes
((
ApiKeyHeaderPermission
,))
def
group_detail
(
request
,
group_id
):
def
group_detail
(
request
,
group_id
):
"""
"""
GET retrieves an existing group from the system
GET retrieves an existing group from the system
"""
"""
response_data
=
{}
response_data
=
{}
base_uri
=
_generate_base_uri
(
request
)
base_uri
=
_generate_base_uri
(
request
)
try
:
try
:
existing_group
=
Group
.
objects
.
get
(
id
=
group_id
)
existing_group
=
Group
.
objects
.
get
(
id
=
group_id
)
existing_group_relationship
=
GroupRelationship
.
objects
.
get
(
group_id
=
group_id
)
existing_group_relationship
=
GroupRelationship
.
objects
.
get
(
group_id
=
group_id
)
except
ObjectDoesNotExist
:
except
ObjectDoesNotExist
:
existing_group
=
None
return
Response
({},
status
.
HTTP_404_NOT_FOUND
)
existing_group_relationship
=
None
if
existing_group
and
existing_group_relationship
:
if
request
.
method
==
'GET'
:
response_data
[
'name'
]
=
existing_group_relationship
.
name
response_data
[
'name'
]
=
existing_group_relationship
.
name
response_data
[
'id'
]
=
existing_group
.
id
response_data
[
'id'
]
=
existing_group
.
id
response_data
[
'uri'
]
=
base_uri
response_data
[
'uri'
]
=
base_uri
...
@@ -80,10 +109,36 @@ def group_detail(request, group_id):
...
@@ -80,10 +109,36 @@ def group_detail(request, group_id):
response_data
[
'resources'
]
.
append
({
'uri'
:
resource_uri
})
response_data
[
'resources'
]
.
append
({
'uri'
:
resource_uri
})
resource_uri
=
'{}/groups'
.
format
(
base_uri
)
resource_uri
=
'{}/groups'
.
format
(
base_uri
)
response_data
[
'resources'
]
.
append
({
'uri'
:
resource_uri
})
response_data
[
'resources'
]
.
append
({
'uri'
:
resource_uri
})
# see if there is an (optional) GroupProfile
try
:
existing_group_profile
=
GroupProfile
.
objects
.
get
(
group_id
=
group_id
)
if
existing_group_profile
.
group_type
:
response_data
[
'group_type'
]
=
existing_group_profile
.
group_type
data
=
existing_group_profile
.
data
if
data
:
response_data
[
'data'
]
=
json
.
loads
(
data
)
except
ObjectDoesNotExist
:
pass
response_status
=
status
.
HTTP_200_OK
response_status
=
status
.
HTTP_200_OK
else
:
response_status
=
status
.
HTTP_404_NOT_FOUND
return
Response
(
response_data
,
status
=
response_status
)
return
Response
(
response_data
,
status
=
response_status
)
elif
request
.
method
==
'POST'
:
# update GroupProfile data
group_type
=
request
.
DATA
.
get
(
'group_type'
)
data
=
request
.
DATA
.
get
(
'data'
)
if
not
group_type
and
not
data
:
return
Response
({},
status
.
HTTP_400_BAD_REQUEST
)
profile
,
_
=
GroupProfile
.
objects
.
get_or_create
(
group_id
=
group_id
)
profile
.
group_type
=
group_type
profile
.
data
=
data
profile
.
save
()
return
Response
({})
@api_view
([
'POST'
])
@api_view
([
'POST'
])
...
...
lms/djangoapps/api_manager/migrations/0002_auto__add_coursegrouprelationship__add_groupprofile.py
0 → 100644
View file @
e1e473bb
# -*- coding: utf-8 -*-
import
datetime
from
south.db
import
db
from
south.v2
import
SchemaMigration
from
django.db
import
models
class
Migration
(
SchemaMigration
):
def
forwards
(
self
,
orm
):
# Adding model 'CourseGroupRelationship'
db
.
create_table
(
'api_manager_coursegrouprelationship'
,
(
(
'id'
,
self
.
gf
(
'django.db.models.fields.AutoField'
)(
primary_key
=
True
)),
(
'course_id'
,
self
.
gf
(
'django.db.models.fields.CharField'
)(
max_length
=
255
,
db_index
=
True
)),
(
'group'
,
self
.
gf
(
'django.db.models.fields.related.ForeignKey'
)(
to
=
orm
[
'auth.Group'
])),
))
db
.
send_create_signal
(
'api_manager'
,
[
'CourseGroupRelationship'
])
# Adding model 'GroupProfile'
db
.
create_table
(
'auth_groupprofile'
,
(
(
'id'
,
self
.
gf
(
'django.db.models.fields.AutoField'
)(
primary_key
=
True
)),
(
'group'
,
self
.
gf
(
'django.db.models.fields.related.ForeignKey'
)(
to
=
orm
[
'auth.Group'
])),
(
'group_type'
,
self
.
gf
(
'django.db.models.fields.CharField'
)(
max_length
=
32
,
null
=
True
,
db_index
=
True
)),
(
'data'
,
self
.
gf
(
'django.db.models.fields.TextField'
)(
blank
=
True
)),
))
db
.
send_create_signal
(
'api_manager'
,
[
'GroupProfile'
])
def
backwards
(
self
,
orm
):
# Deleting model 'CourseGroupRelationship'
db
.
delete_table
(
'api_manager_coursegrouprelationship'
)
# Deleting model 'GroupProfile'
db
.
delete_table
(
'auth_groupprofile'
)
models
=
{
'api_manager.coursegrouprelationship'
:
{
'Meta'
:
{
'object_name'
:
'CourseGroupRelationship'
},
'course_id'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
,
'db_index'
:
'True'
}),
'group'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['auth.Group']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
})
},
'api_manager.groupprofile'
:
{
'Meta'
:
{
'object_name'
:
'GroupProfile'
,
'db_table'
:
"'auth_groupprofile'"
},
'data'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'group'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['auth.Group']"
}),
'group_type'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'32'
,
'null'
:
'True'
,
'db_index'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
})
},
'api_manager.grouprelationship'
:
{
'Meta'
:
{
'object_name'
:
'GroupRelationship'
},
'group'
:
(
'django.db.models.fields.related.OneToOneField'
,
[],
{
'to'
:
"orm['auth.Group']"
,
'unique'
:
'True'
,
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
}),
'parent_group'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'default'
:
'0'
,
'related_name'
:
"'child_groups'"
,
'null'
:
'True'
,
'blank'
:
'True'
,
'to'
:
"orm['api_manager.GroupRelationship']"
}),
'record_active'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'record_date_created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'datetime.datetime(2014, 4, 21, 0, 0)'
}),
'record_date_modified'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'api_manager.linkedgrouprelationship'
:
{
'Meta'
:
{
'object_name'
:
'LinkedGroupRelationship'
},
'from_group_relationship'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'from_group_relationships'"
,
'to'
:
"orm['api_manager.GroupRelationship']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'record_active'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'record_date_created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'datetime.datetime(2014, 4, 21, 0, 0)'
}),
'record_date_modified'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'to_group_relationship'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'to_group_relationships'"
,
'to'
:
"orm['api_manager.GroupRelationship']"
})
},
'auth.group'
:
{
'Meta'
:
{
'object_name'
:
'Group'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'80'
}),
'permissions'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
"orm['auth.Permission']"
,
'symmetrical'
:
'False'
,
'blank'
:
'True'
})
},
'auth.permission'
:
{
'Meta'
:
{
'ordering'
:
"('content_type__app_label', 'content_type__model', 'codename')"
,
'unique_together'
:
"(('content_type', 'codename'),)"
,
'object_name'
:
'Permission'
},
'codename'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'content_type'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['contenttypes.ContentType']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
})
},
'contenttypes.contenttype'
:
{
'Meta'
:
{
'ordering'
:
"('name',)"
,
'unique_together'
:
"(('app_label', 'model'),)"
,
'object_name'
:
'ContentType'
,
'db_table'
:
"'django_content_type'"
},
'app_label'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'model'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
})
}
}
complete_apps
=
[
'api_manager'
]
\ No newline at end of file
lms/djangoapps/api_manager/models.py
View file @
e1e473bb
...
@@ -92,3 +92,19 @@ class CourseGroupRelationship(models.Model):
...
@@ -92,3 +92,19 @@ class CourseGroupRelationship(models.Model):
"""
"""
course_id
=
models
.
CharField
(
max_length
=
255
,
db_index
=
True
)
course_id
=
models
.
CharField
(
max_length
=
255
,
db_index
=
True
)
group
=
models
.
ForeignKey
(
Group
,
db_index
=
True
)
group
=
models
.
ForeignKey
(
Group
,
db_index
=
True
)
class
GroupProfile
(
models
.
Model
):
"""
This table will provide additional tables regarding groups. This has a foreign key to
the auth_groups table
"""
class
Meta
:
db_table
=
"auth_groupprofile"
group
=
models
.
ForeignKey
(
Group
,
db_index
=
True
)
group_type
=
models
.
CharField
(
null
=
True
,
max_length
=
32
,
db_index
=
True
)
data
=
models
.
TextField
(
blank
=
True
)
# JSON dictionary for generic key/value pairs
lms/djangoapps/api_manager/tests/test_groups_views.py
View file @
e1e473bb
...
@@ -5,17 +5,16 @@ Run these tests @ Devstack:
...
@@ -5,17 +5,16 @@ Run these tests @ Devstack:
rake fasttest_lms[common/djangoapps/api_manager/tests/test_group_views.py]
rake fasttest_lms[common/djangoapps/api_manager/tests/test_group_views.py]
"""
"""
from
random
import
randint
from
random
import
randint
import
unittest
import
uuid
import
uuid
import
json
from
django.conf
import
settings
from
django.core.cache
import
cache
from
django.core.cache
import
cache
from
django.test
import
TestCase
,
Client
from
django.test
import
TestCase
,
Client
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
api_manager.models
import
GroupRelationship
from
api_manager.models
import
GroupRelationship
from
courseware.tests.modulestore_config
import
TEST_DATA_MIXED_MODULESTORE
from
courseware.tests.modulestore_config
import
TEST_DATA_MIXED_MODULESTORE
from
xmodule.modulestore.tests.factories
import
CourseFactory
,
ItemFactory
from
xmodule.modulestore.tests.factories
import
CourseFactory
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
TEST_API_KEY
=
str
(
uuid
.
uuid4
())
...
@@ -75,7 +74,6 @@ class GroupsApiTests(TestCase):
...
@@ -75,7 +74,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
client
.
delete
(
uri
,
headers
=
headers
)
response
=
self
.
client
.
delete
(
uri
,
headers
=
headers
)
return
response
return
response
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_list_post
(
self
):
def
test_group_list_post
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -96,7 +94,6 @@ class GroupsApiTests(TestCase):
...
@@ -96,7 +94,6 @@ class GroupsApiTests(TestCase):
# response = self.do_post(self.base_groups_uri, data)
# response = self.do_post(self.base_groups_uri, data)
# self.assertEqual(response.status_code, 409)
# self.assertEqual(response.status_code, 409)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_detail_get
(
self
):
def
test_group_detail_get
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -110,13 +107,74 @@ class GroupsApiTests(TestCase):
...
@@ -110,13 +107,74 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'uri'
],
confirm_uri
)
self
.
assertEqual
(
response
.
data
[
'uri'
],
confirm_uri
)
self
.
assertEqual
(
response
.
data
[
'name'
],
self
.
test_group_name
)
self
.
assertEqual
(
response
.
data
[
'name'
],
self
.
test_group_name
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_list_get_with_profile
(
self
):
data
=
{
'name'
:
self
.
test_group_name
,
'group_type'
:
'series'
,
'data'
:
json
.
dumps
({
'display_name'
:
'My first series'
})
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
self
.
assertGreater
(
response
.
data
[
'id'
],
0
)
group_id
=
response
.
data
[
'id'
]
# query for list of groups, but don't put the type filter (bad)
test_uri
=
self
.
base_groups_uri
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
400
)
# try again with filter
test_uri
=
self
.
base_groups_uri
+
'?type=series'
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
self
.
assertEqual
(
response
.
data
[
0
][
'group_id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
0
][
'group_type'
],
'series'
)
self
.
assertEqual
(
response
.
data
[
0
][
'data'
][
'display_name'
],
'My first series'
)
# query the group detail
test_uri
=
self
.
base_groups_uri
+
'/'
+
str
(
group_id
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
data
[
'id'
],
group_id
)
confirm_uri
=
self
.
test_server_prefix
+
test_uri
self
.
assertEqual
(
response
.
data
[
'uri'
],
confirm_uri
)
self
.
assertEqual
(
response
.
data
[
'name'
],
self
.
test_group_name
)
self
.
assertEqual
(
response
.
data
[
'group_type'
],
'series'
)
self
.
assertEqual
(
response
.
data
[
'data'
][
'display_name'
],
'My first series'
)
# update the profile
# first with missing data
response
=
self
.
do_post
(
test_uri
,
{})
self
.
assertEqual
(
response
.
status_code
,
400
)
data
=
{
'name'
:
self
.
test_group_name
,
'group_type'
:
'seriesX'
,
'data'
:
json
.
dumps
({
'display_name'
:
'My updated series'
})
}
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
200
)
# requery the filter
test_uri
=
self
.
base_groups_uri
+
'?type=series'
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
0
)
test_uri
=
self
.
base_groups_uri
+
'?type=seriesX'
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
self
.
assertEqual
(
response
.
data
[
0
][
'group_id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
0
][
'group_type'
],
'seriesX'
)
self
.
assertEqual
(
response
.
data
[
0
][
'data'
][
'display_name'
],
'My updated series'
)
def
test_group_detail_get_undefined
(
self
):
def
test_group_detail_get_undefined
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/123456789'
test_uri
=
self
.
base_groups_uri
+
'/123456789'
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_list_post
(
self
):
def
test_group_users_list_post
(
self
):
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
...
@@ -136,7 +194,6 @@ class GroupsApiTests(TestCase):
...
@@ -136,7 +194,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'user_id'
],
str
(
user_id
))
self
.
assertEqual
(
response
.
data
[
'user_id'
],
str
(
user_id
))
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_list_post_duplicate
(
self
):
def
test_group_users_list_post_duplicate
(
self
):
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
...
@@ -153,7 +210,6 @@ class GroupsApiTests(TestCase):
...
@@ -153,7 +210,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_post
(
test_uri
,
data
)
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
409
)
self
.
assertEqual
(
response
.
status_code
,
409
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_list_post_invalid_resources
(
self
):
def
test_group_users_list_post_invalid_resources
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/1239878976'
test_uri
=
self
.
base_groups_uri
+
'/1239878976'
test_uri
=
test_uri
+
'/users'
test_uri
=
test_uri
+
'/users'
...
@@ -161,7 +217,6 @@ class GroupsApiTests(TestCase):
...
@@ -161,7 +217,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_post
(
test_uri
,
data
)
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_detail_get
(
self
):
def
test_group_users_detail_get
(
self
):
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
...
@@ -184,7 +239,6 @@ class GroupsApiTests(TestCase):
...
@@ -184,7 +239,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'group_id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
'group_id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
'user_id'
],
user_id
)
self
.
assertEqual
(
response
.
data
[
'user_id'
],
user_id
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_detail_delete
(
self
):
def
test_group_users_detail_delete
(
self
):
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
...
@@ -205,13 +259,11 @@ class GroupsApiTests(TestCase):
...
@@ -205,13 +259,11 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_detail_delete_invalid_group
(
self
):
def
test_group_users_detail_delete_invalid_group
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/123987102/users/123124'
test_uri
=
self
.
base_groups_uri
+
'/123987102/users/123124'
response
=
self
.
do_delete
(
test_uri
)
response
=
self
.
do_delete
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
204
)
self
.
assertEqual
(
response
.
status_code
,
204
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_detail_delete_invalid_user
(
self
):
def
test_group_users_detail_delete_invalid_user
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -220,7 +272,6 @@ class GroupsApiTests(TestCase):
...
@@ -220,7 +272,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_delete
(
test_uri
)
response
=
self
.
do_delete
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
204
)
self
.
assertEqual
(
response
.
status_code
,
204
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_users_detail_get_undefined
(
self
):
def
test_group_users_detail_get_undefined
(
self
):
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
}
...
@@ -233,7 +284,6 @@ class GroupsApiTests(TestCase):
...
@@ -233,7 +284,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_list_post_hierarchical
(
self
):
def
test_group_groups_list_post_hierarchical
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -256,7 +306,6 @@ class GroupsApiTests(TestCase):
...
@@ -256,7 +306,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_list_post_linked
(
self
):
def
test_group_groups_list_post_linked
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -279,7 +328,6 @@ class GroupsApiTests(TestCase):
...
@@ -279,7 +328,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_list_post_linked_duplicate
(
self
):
def
test_group_groups_list_post_linked_duplicate
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -300,7 +348,6 @@ class GroupsApiTests(TestCase):
...
@@ -300,7 +348,6 @@ class GroupsApiTests(TestCase):
# Duplicate responses are idemnotent in this case
# Duplicate responses are idemnotent in this case
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
response
.
status_code
,
201
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_list_post_invalid_group
(
self
):
def
test_group_groups_list_post_invalid_group
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/123098/groups'
test_uri
=
self
.
base_groups_uri
+
'/123098/groups'
relationship_type
=
'g'
# Graph
relationship_type
=
'g'
# Graph
...
@@ -308,7 +355,6 @@ class GroupsApiTests(TestCase):
...
@@ -308,7 +355,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_post
(
test_uri
,
data
)
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_list_post_invalid_relationship_type
(
self
):
def
test_group_groups_list_post_invalid_relationship_type
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -326,7 +372,6 @@ class GroupsApiTests(TestCase):
...
@@ -326,7 +372,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_post
(
test_uri
,
data
)
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
406
)
self
.
assertEqual
(
response
.
status_code
,
406
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_list_get
(
self
):
def
test_group_groups_list_get
(
self
):
data
=
{
'name'
:
'Bravo Group'
}
data
=
{
'name'
:
'Bravo Group'
}
bravo_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
bravo_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -376,13 +421,11 @@ class GroupsApiTests(TestCase):
...
@@ -376,13 +421,11 @@ class GroupsApiTests(TestCase):
self
.
assertGreater
(
len
(
relationship
[
'uri'
]),
0
)
self
.
assertGreater
(
len
(
relationship
[
'uri'
]),
0
)
self
.
assertEqual
(
relationship_count
,
len
(
group_idlist
))
self
.
assertEqual
(
relationship_count
,
len
(
group_idlist
))
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_list_get_notfound
(
self
):
def
test_group_groups_list_get_notfound
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/213213123/groups'
test_uri
=
self
.
base_groups_uri
+
'/213213123/groups'
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_detail_get_hierarchical
(
self
):
def
test_group_groups_detail_get_hierarchical
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -410,7 +453,6 @@ class GroupsApiTests(TestCase):
...
@@ -410,7 +453,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'to_group_id'
],
str
(
delta_group_id
))
self
.
assertEqual
(
response
.
data
[
'to_group_id'
],
str
(
delta_group_id
))
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_detail_get_linked
(
self
):
def
test_group_groups_detail_get_linked
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -441,7 +483,6 @@ class GroupsApiTests(TestCase):
...
@@ -441,7 +483,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'to_group_id'
],
str
(
delta_group_id
))
self
.
assertEqual
(
response
.
data
[
'to_group_id'
],
str
(
delta_group_id
))
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
self
.
assertEqual
(
response
.
data
[
'relationship_type'
],
relationship_type
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_detail_get_notfound
(
self
):
def
test_group_groups_detail_get_notfound
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -450,7 +491,6 @@ class GroupsApiTests(TestCase):
...
@@ -450,7 +491,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_detail_delete_hierarchical
(
self
):
def
test_group_groups_detail_delete_hierarchical
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -482,7 +522,6 @@ class GroupsApiTests(TestCase):
...
@@ -482,7 +522,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_detail_delete_linked
(
self
):
def
test_group_groups_detail_delete_linked
(
self
):
data
=
{
'name'
:
'Alpha Group'
}
data
=
{
'name'
:
'Alpha Group'
}
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
alpha_response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -512,13 +551,11 @@ class GroupsApiTests(TestCase):
...
@@ -512,13 +551,11 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_groups_detail_delete_invalid
(
self
):
def
test_group_groups_detail_delete_invalid
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/1231234232/groups/1'
test_uri
=
self
.
base_groups_uri
+
'/1231234232/groups/1'
response
=
self
.
do_delete
(
test_uri
)
response
=
self
.
do_delete
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_list_post
(
self
):
def
test_group_courses_list_post
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -533,7 +570,6 @@ class GroupsApiTests(TestCase):
...
@@ -533,7 +570,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'group_id'
],
str
(
group_id
))
self
.
assertEqual
(
response
.
data
[
'course_id'
],
self
.
test_course_id
)
self
.
assertEqual
(
response
.
data
[
'course_id'
],
self
.
test_course_id
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_list_post_duplicate
(
self
):
def
test_group_courses_list_post_duplicate
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -546,14 +582,12 @@ class GroupsApiTests(TestCase):
...
@@ -546,14 +582,12 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_post
(
test_uri
,
data
)
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
409
)
self
.
assertEqual
(
response
.
status_code
,
409
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_list_post_invalid_resources
(
self
):
def
test_group_courses_list_post_invalid_resources
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/1239878976/courses'
test_uri
=
self
.
base_groups_uri
+
'/1239878976/courses'
data
=
{
'course_id'
:
"98723896"
}
data
=
{
'course_id'
:
"98723896"
}
response
=
self
.
do_post
(
test_uri
,
data
)
response
=
self
.
do_post
(
test_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_detail_get
(
self
):
def
test_group_courses_detail_get
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -576,7 +610,6 @@ class GroupsApiTests(TestCase):
...
@@ -576,7 +610,6 @@ class GroupsApiTests(TestCase):
self
.
assertEqual
(
response
.
data
[
'group_id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
'group_id'
],
group_id
)
self
.
assertEqual
(
response
.
data
[
'course_id'
],
self
.
test_course_id
)
self
.
assertEqual
(
response
.
data
[
'course_id'
],
self
.
test_course_id
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_detail_delete
(
self
):
def
test_group_courses_detail_delete
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -593,13 +626,11 @@ class GroupsApiTests(TestCase):
...
@@ -593,13 +626,11 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
404
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_detail_delete_invalid_group
(
self
):
def
test_group_courses_detail_delete_invalid_group
(
self
):
test_uri
=
self
.
base_groups_uri
+
'/123987102/courses/123124'
test_uri
=
self
.
base_groups_uri
+
'/123987102/courses/123124'
response
=
self
.
do_delete
(
test_uri
)
response
=
self
.
do_delete
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
204
)
self
.
assertEqual
(
response
.
status_code
,
204
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_detail_delete_invalid_course
(
self
):
def
test_group_courses_detail_delete_invalid_course
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
@@ -608,7 +639,6 @@ class GroupsApiTests(TestCase):
...
@@ -608,7 +639,6 @@ class GroupsApiTests(TestCase):
response
=
self
.
do_delete
(
test_uri
)
response
=
self
.
do_delete
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
204
)
self
.
assertEqual
(
response
.
status_code
,
204
)
@unittest.skipUnless
(
settings
.
ROOT_URLCONF
==
'lms.urls'
,
'Test only valid in lms'
)
def
test_group_courses_detail_get_undefined
(
self
):
def
test_group_courses_detail_get_undefined
(
self
):
data
=
{
'name'
:
self
.
test_group_name
}
data
=
{
'name'
:
self
.
test_group_name
}
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
response
=
self
.
do_post
(
self
.
base_groups_uri
,
data
)
...
...
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