Files
edx-platform/lms/djangoapps/teams/tests/test_csv.py
Jansen Kantor d4d6b33272 EDUCATOR-4879: Implement teams CSV GET endpoint (#23005)
* wip

* get

* quality

* change oauth2 to deprecated?

* quality

* remove duplicate enrollment check function

* code review
2020-02-06 15:06:23 -05:00

126 lines
5.4 KiB
Python

""" Tests for the functionality in csv """
from io import StringIO
from lms.djangoapps.teams import csv
from lms.djangoapps.teams.tests.factories import CourseTeamFactory
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
from openedx.core.lib.teams_config import TeamsConfig
class TeamMembershipCsvTests(SharedModuleStoreTestCase):
""" Tests for functionality related to the team membership csv report """
@classmethod
def setUpClass(cls):
super(TeamMembershipCsvTests, cls).setUpClass()
teams_config = TeamsConfig({
'team_sets': [
{
'id': 'teamset_{}'.format(i),
'name': 'teamset_{}_name'.format(i),
'description': 'teamset_{}_desc'.format(i),
}
for i in [1, 2, 3, 4]
]
})
cls.course = CourseFactory(teams_configuration=teams_config)
cls.course_no_teamsets = CourseFactory()
team1_1 = CourseTeamFactory(course_id=cls.course.id, name='team_1_1', topic_id='teamset_1')
CourseTeamFactory(course_id=cls.course.id, name='team_1_2', topic_id='teamset_1')
team2_1 = CourseTeamFactory(course_id=cls.course.id, name='team_2_1', topic_id='teamset_2')
team2_2 = CourseTeamFactory(course_id=cls.course.id, name='team_2_2', topic_id='teamset_2')
team3_1 = CourseTeamFactory(course_id=cls.course.id, name='team_3_1', topic_id='teamset_3')
team3_2 = CourseTeamFactory(course_id=cls.course.id, name='team_3_2', topic_id='teamset_3')
# No teams in teamset 4
user1 = UserFactory.create(username='user1')
user2 = UserFactory.create(username='user2')
user3 = UserFactory.create(username='user3')
user4 = UserFactory.create(username='user4')
user5 = UserFactory.create(username='user5')
CourseEnrollmentFactory.create(user=user1, course_id=cls.course.id, mode='audit')
CourseEnrollmentFactory.create(user=user2, course_id=cls.course.id, mode='verified')
CourseEnrollmentFactory.create(user=user3, course_id=cls.course.id, mode='honors')
CourseEnrollmentFactory.create(user=user4, course_id=cls.course.id, mode='masters')
CourseEnrollmentFactory.create(user=user5, course_id=cls.course.id, mode='masters')
team1_1.add_user(user1)
team2_2.add_user(user1)
team3_1.add_user(user1)
team1_1.add_user(user2)
team2_2.add_user(user2)
team3_1.add_user(user2)
team2_1.add_user(user3)
team3_2.add_user(user3)
team1_1.add_user(user4)
team3_2.add_user(user4)
def setUp(self):
super(TeamMembershipCsvTests, self).setUp()
self.buf = StringIO()
def test_get_headers(self):
# pylint: disable=protected-access
headers = csv._get_team_membership_csv_headers(self.course)
self.assertEqual(
headers,
['user', 'mode', 'teamset_1', 'teamset_2', 'teamset_3', 'teamset_4']
)
def test_get_headers_no_teamsets(self):
# pylint: disable=protected-access
headers = csv._get_team_membership_csv_headers(self.course_no_teamsets)
self.assertEqual(
headers,
['user', 'mode']
)
def test_lookup_team_membership_data(self):
with self.assertNumQueries(3):
# pylint: disable=protected-access
data = csv._lookup_team_membership_data(self.course)
self.assertEqual(len(data), 5)
self.assert_teamset_membership(data[0], 'user1', 'audit', 'team_1_1', 'team_2_2', 'team_3_1')
self.assert_teamset_membership(data[1], 'user2', 'verified', 'team_1_1', 'team_2_2', 'team_3_1')
self.assert_teamset_membership(data[2], 'user3', 'honors', None, 'team_2_1', 'team_3_2')
self.assert_teamset_membership(data[3], 'user4', 'masters', 'team_1_1', None, 'team_3_2')
self.assert_teamset_membership(data[4], 'user5', 'masters', None, None, None)
def assert_teamset_membership(
self,
user_row,
expected_username,
expected_mode,
expected_teamset_1_team,
expected_teamset_2_team,
expected_teamset_3_team
):
"""
Assert that user_row has the expected
-username
-mode
-team name for teamset_(123)
"""
self.assertEqual(user_row['user'], expected_username)
self.assertEqual(user_row['mode'], expected_mode)
self.assertEqual(user_row.get('teamset_1'), expected_teamset_1_team)
self.assertEqual(user_row.get('teamset_2'), expected_teamset_2_team)
self.assertEqual(user_row.get('teamset_3'), expected_teamset_3_team)
def test_load_team_membership_csv(self):
expected_csv_output = ('user,mode,teamset_1,teamset_2,teamset_3,teamset_4\r\n'
'user1,audit,team_1_1,team_2_2,team_3_1,\r\n'
'user2,verified,team_1_1,team_2_2,team_3_1,\r\n'
'user3,honors,,team_2_1,team_3_2,\r\n'
'user4,masters,team_1_1,,team_3_2,\r\n'
'user5,masters,,,,\r\n')
csv.load_team_membership_csv(self.course, self.buf)
self.assertEqual(expected_csv_output, self.buf.getvalue())