def test_excludes(self): excludes = [ { 'id': delimiter.join([self.course001, self.group001]), 'type': u'g' }, { 'id': delimiter.join([self.course001, self.group002]), 'type': u'g' }, { 'id': delimiter.join([self.course002, self.group001]), 'type': u'g' }, ] (groups, count, _) = search(q='Group', exclude=excludes, user=self.admin) self.assertEqual(1, count) self.assertDictEqual( { 'name': 'Course Two (Physics) - Group Two (Group)', 'id': delimiter.join([self.course002, self.group002]), 'type': u'g' }, groups[0])
def test_search_with_single_exclude(self): g = { 'id': delimiter.join([self.course001, self.group001]), 'type': u'g' } (groups, count, _) = search(q='Group One', exclude=[g], user=self.user) self.assertEqual(1, count) self.assertDictEqual( { 'name': 'Course Two (Physics) - Group One (Group)', 'id': delimiter.join([self.course002, self.group001]), 'type': u'g' }, groups[0])
def test_search_two_results_against_vle_group_id(self): (groups, count, _) = search(q=self.group001, user=self.user) self.assertEqual(2, count) self.assertDictEqual( { 'name': 'Course One (Maths) - Group One (Group)', 'id': delimiter.join([self.course001, self.group001]), 'type': u'g' }, groups[0]) self.assertDictEqual( { 'name': 'Course Two (Physics) - Group One (Group)', 'id': delimiter.join([self.course002, self.group001]), 'type': u'g' }, groups[1])
def test_create_message_items(self): m = Message.objects.create(subject='foo') # put Cersei in the course and the group CourseMember.objects.create(vle_course_id='001', user=self.users['Cersei']) GroupMember.objects.create(vle_course_id='001', vle_group_id='001', user=self.users['Cersei']) # put Lancel in the course but not the group CourseMember.objects.create(vle_course_id='001', user=self.users['Lancel']) # put Jaime in the course and the group CourseMember.objects.create(vle_course_id='001', user=self.users['Jaime']) GroupMember.objects.create(vle_course_id='001', vle_group_id='001', user=self.users['Jaime']) # send to Cersei, everyone in the course, everyone in the group user_ids = [self.users['Cersei'].id] group_ids = [delimiter.join(['001', '001'])] course_ids = ['001'] all_user_ids = expand_user_group_course_ids_to_user_ids( delimiter, user_ids, group_ids, course_ids) MessageItem.create_message_items(m, all_user_ids) self.assertEqual(3, MessageItem.objects.count()) # test that the three recipients are as expected messages = MessageItem.objects.all().order_by('user__first_name') self.assertEqual('Cersei', messages[0].user.first_name) self.assertEqual('Jaime', messages[1].user.first_name) self.assertEqual('Lancel', messages[2].user.first_name)
def test_search_two_results_against_name(self): """ there are three groups entitled "Group One" of which Sansa Stark is in two """ (groups, count, _) = search(q='Group One', user=self.user) self.assertEqual(2, count) self.assertDictEqual( { 'name': 'Course One (Maths) - Group One (Group)', 'id': delimiter.join([self.course001, self.group001]), 'type': u'g' }, groups[0]) self.assertDictEqual( { 'name': 'Course Two (Physics) - Group One (Group)', 'id': delimiter.join([self.course002, self.group001]), 'type': u'g' }, groups[1])
def test_search_one_result_against_vle_group_id(self): (groups, count, _) = search(q=self.group002, user=self.user) self.assertEqual(1, count) self.assertDictEqual( { 'name': 'Course One (Maths) - Group Two (Group)', 'id': delimiter.join([self.course001, self.group002]), 'type': u'g' }, groups[0])
def test_search_with_multiple_excludes(self): g1 = { 'id': delimiter.join([self.course001, self.group001]), 'type': u'g' } g2 = { 'id': delimiter.join([self.course002, self.group001]), 'type': u'g' } (groups, count, _) = search(q='Group One', exclude=[g1, g2], user=self.admin) self.assertEqual(1, count) self.assertDictEqual( { 'name': 'Course Three (Maths) - Group One (Group)', 'id': delimiter.join([self.course003, self.group001]), 'type': u'g' }, groups[0])
def test_search_one_result_against_name(self): """ there are three groups entitled "Group Two" of which Sansa Stark is in one """ (groups, count, _) = search(q='Group Two', user=self.user) self.assertEqual(1, count) self.assertDictEqual( { 'name': 'Course One (Maths) - Group Two (Group)', 'id': delimiter.join([self.course001, self.group002]), 'type': u'g' }, groups[0])
def setUp(self): # some Lannisters self.users = {} for first_name in [ u'Cersei', u'Jaime', u'Kevan', u'Lancel', u'Tyrion', u'Tywin' ]: u = get_user_model().objects.create_user( username='******' % first_name.lower(), email='*****@*****.**' % first_name.lower(), first_name=first_name, last_name='Lannister', password='******') self.users[first_name] = u # create a group to send messages to list( map( lambda p: GroupMember.objects.create( vle_course_id='c001', vle_group_id='g001', user=p[1]), iteritems(self.users))) recipients = [{'id': delimiter.join(['c001', 'g001']), 'type': u'g'}] # create a thread of messages self.thread = Message.send_message(sender=self.users['Tywin'], recipients=recipients, subject="King's Landing", body="Sort it out!") reply1 = Message.send_message(sender=self.users['Tyrion'], recipients=recipients, subject="King's Landing", body="By when?", parent=self.thread) Message.send_message(sender=self.users['Tywin'], recipients=recipients, subject="King's Landing", body="Next Tuesday, please.", parent=reply1) Message.send_message(sender=self.users['Cersei'], recipients=recipients, subject="King's Landing", body="Do it yourself!", parent=self.thread) # ensure each group member has four messages in the thread for k, v in iteritems(self.users): self.assertEqual( 4, MessageItem.objects.filter( user=v, message__tree_id=self.thread.tree_id).count()) # ensure there are 4 times the number of users message items in total self.assertEqual(4 * len(self.users), MessageItem.objects.count())
def test_send_message(self): recipients = [{ 'id': self.users['Jaime'].id, 'type': u'u' }, { 'id': self.users['Tywin'].id, 'type': u'u' }, { 'id': 'c001', 'type': u'c' }, { 'id': delimiter.join(['c002', 'g001']), 'type': u'g' }, { 'id': delimiter.join(['c002', 'g002']), 'type': u'g' }] subject = 'I want him dead!' body = 'The Imp, that is. Incase you were wondering.' t0 = timezone.now() message = Message.send_message(sender=self.users['Cersei'], recipients=recipients, subject=subject, body=body) # check the Message itself self.assertIsInstance(message, Message) self.assertEqual(self.users['Cersei'].id, message.user.id) self.assertFalse(message.is_notification) self.assertEqual('', message.url) self.assertEqual(subject, message.subject) self.assertEqual(body, message.body) self.assertGreaterEqual(message.sent, t0) self.assertFalse(message.target_all) # check there's a MessageItem for each recipient message_item = MessageItem.objects.filter( message=message, read=None, deleted=None).order_by('user__first_name') self.assertEqual(2, message_item.count()) self.assertEqual(self.users['Jaime'].id, message_item[0].user.id) self.assertEqual(self.users['Tywin'].id, message_item[1].user.id) # check there's a MessageTargetUser for each user recipient message_target_user = MessageTargetUser.objects.filter( message=message).order_by('user__first_name') self.assertEqual(2, message_target_user.count()) self.assertEqual(self.users['Jaime'].id, message_target_user[0].user.id) self.assertEqual(self.users['Tywin'].id, message_target_user[1].user.id) # check there's a MessageTargetCourse for each course recipient message_target_course = MessageTargetCourse.objects.filter( message=message).order_by('vle_course_id') self.assertEqual(1, message_target_course.count()) self.assertEqual('c001', message_target_course[0].vle_course_id) # check there's a MessageTargetGroup for each group recipient message_target_group = MessageTargetGroup.objects.filter( message=message).order_by('vle_course_id', 'vle_group_id') self.assertEqual(2, message_target_group.count()) self.assertEqual('c002', message_target_group[0].vle_course_id) self.assertEqual('g001', message_target_group[0].vle_group_id) self.assertEqual('c002', message_target_group[1].vle_course_id) self.assertEqual('g002', message_target_group[1].vle_group_id)