def test_get_user_tags(self): """Test getting list of tags.""" cat1 = create_usertagcategory() cat2 = create_usertagcategory() # Create test users for matching profiles = [get_new_user().profile for x in range(6)] for profile in profiles: profile.department = 'ME' profiles[0].hostel = '1' profiles[1].hostel = '' profiles[1].roll_no = '2' profiles[2].hostel = '3' profiles[3].hostel = '1' profiles[3].department = 'EP' profiles[4].hostel = '2' profiles[4].roll_no = '2' profiles[5].hostel = '1' profiles[5].active = False for profile in profiles: profile.save() # Create tags in 2 categories t1 = create_usertag(cat1, '1') t2 = create_usertag(cat1, '1', target='hostel', secondary_target='roll_no', secondary_regex='2') t3 = create_usertag(cat2, 'ME', target='department') url = '/api/user-tags' response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 2) self.assertEqual(len(response.data[0]['tags']), 2) url = '/api/user-tags/reach' response = self.client.post(url, json.dumps([]), content_type="application/json") self.assertEqual(response.status_code, 200) self.assertGreaterEqual(response.data['count'], 4) data = [t1.id, t2.id, t3.id] response = self.client.post(url, json.dumps(data), content_type="application/json") self.assertEqual(response.status_code, 200) self.assertEqual(response.data['count'], 2)
def test_event_update9(self): """Event tags can be updated.""" # Add an event to an updateable body event = create_event() self.test_body_1.events.add(event) # Get the response url = '/api/events/%s' % event.id data = self.client.get(url).data # Create tags and assign them category = create_usertagcategory() tag1 = create_usertag(category, '1') tag2 = create_usertag(category, '2') data['user_tags'] = [str(tag1.id), str(tag2.id)] response = self.client.put(url, data, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(event.user_tags.count(), 2)
def test_get_user_tags(self): """Test getting list of tags.""" cat1 = create_usertagcategory() cat2 = create_usertagcategory() create_usertag(cat1, '1') create_usertag(cat1, '2') create_usertag(cat2, 'ME', target='department') url = '/api/user-tags' response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 2) self.assertEqual(len(response.data[0]['tags']), 2)
def test_event_prioritizer(self): """Test the event prioritizer.""" def assertOrder(events, url='/api/events'): response = self.client.get(url) self.assertEqual(response.status_code, 200) for index, event in enumerate(events): self.assertEqual(response.data['data'][index]['id'], str(event.id)) # Events in future. event1 after event3 after event2. event4 in past event1 = create_event(48, 48) event2 = create_event(4, 5) event3 = create_event(15, 16) event4 = create_event(-5, -4) assertOrder([event2, event3, event1, event4]) # Check followed bodies priorities body1 = create_body() body2 = create_body() body3 = create_body() body4 = create_body() body5 = create_body() self.user.profile.followed_bodies.add(body1, body2, body3, body4, body5) # After the user is following a body of event 3, it should bump up event3.bodies.add(body1) assertOrder([event3, event2, event1, event4]) # Test the cap on followed bodies bonus event1.bodies.add(body1, body2, body3, body4, body5) assertOrder([event3, event1, event2, event4]) # Check user tags - setup the user self.user.profile.hostel = '1' self.user.profile.department = 'ME' self.user.profile.save() # Add one matching and one non-matching tag to both category1 = create_usertagcategory() h1_tag = create_usertag(category1, '1') h13_tag = create_usertag(category1, '13') event1.user_tags.add(h1_tag) event3.user_tags.add(h13_tag) # Add one matching tag to both events category2 = create_usertagcategory() me_tag = create_usertag(category2, 'ME', target='department') event1.user_tags.add(me_tag) event3.user_tags.add(me_tag) # Check new order assertOrder([event1, event2, event4]) # Check if user needs to satisfy only one tag from each category event1.user_tags.add(h13_tag) assertOrder([event1, event2, event4]) # Test null check - now the department matching tag is non matching self.user.profile.department = None self.user.profile.save() assertOrder([event2, event4]) # Test if secondary_target is working me_tag.secondary_target = 'hostel' me_tag.secondary_regex = '1' me_tag.save() assertOrder([event1, event2, event4]) # Test for anonymous user self.client.logout() assertOrder([event2, event4])
def test_event_prioritizer(self): # pylint: disable=R0914,R0915 """Test the event prioritizer.""" def assertOrder(events, url='/api/events'): response = self.client.get(url) self.assertEqual(response.status_code, 200) for index, event in enumerate(events): self.assertEqual(response.data['data'][index]['id'], str(event.id)) def assertWeightOrder(events, url='/api/events'): response = self.client.get(url) self.assertEqual(response.status_code, 200) prev_weight = response.data['data'][0]['weight'] for event in events: response_event = next(x for x in response.data['data'] if x['id'] == str(event.id)) self.assertLess(response_event['weight'], prev_weight) prev_weight = response_event['weight'] # Events in future: # event1 after event3 after event2 # eventP1, eventP1 in past event1 = create_event(48, 48) event2 = create_event(4, 5) event3 = create_event(15, 16) eventP1 = create_event(-5, -4) eventP2 = create_event(-6, -5) # These events check linear decay after 15 days eventL1 = create_event(24 * 30, 24 * 30) eventL2 = create_event(24 * 20, 24 * 20) eventL3 = create_event(24 * 40, 24 * 40) assertOrder([event2, event3, event1, eventP1, eventP2]) assertWeightOrder([eventL2, eventL1, eventL3]) # Check followed bodies priorities body1 = create_body() body2 = create_body() body3 = create_body() body4 = create_body() body5 = create_body() self.user.profile.followed_bodies.add(body1, body2, body3, body4, body5) # After the user is following a body of event 3, it should bump up event3.bodies.add(body1) assertOrder([event3, event2, event1, eventP1, eventP2]) # Test the cap on followed bodies bonus event1.bodies.add(body1, body2, body3, body4, body5) assertOrder([event3, event1, event2, eventP1, eventP2]) # Test that ended events do not receive bonus eventP2.bodies.add(body1, body2, body3, body4) eventP2.promotion_boost = 2000 eventP2.save() assertOrder([event3, event1, event2, eventP1, eventP2]) # Check user tags - setup the user self.user.profile.hostel = '1' self.user.profile.department = 'ME' self.user.profile.save() # Add one matching and one non-matching tag to both category1 = create_usertagcategory() h1_tag = create_usertag(category1, '1') h13_tag = create_usertag(category1, '13') event1.user_tags.add(h1_tag) event3.user_tags.add(h13_tag) # Add one matching tag to both events category2 = create_usertagcategory() me_tag = create_usertag(category2, 'ME', target='department') event1.user_tags.add(me_tag) event3.user_tags.add(me_tag) # Check new order assertOrder([event1, event2, eventP1]) # Check if user needs to satisfy only one tag from each category event1.user_tags.add(h13_tag) assertOrder([event1, event2, eventP1]) # Test null check - now the department matching tag is non matching self.user.profile.department = None self.user.profile.save() assertOrder([event2, eventP1]) # Test if secondary_target is working me_tag.secondary_target = 'hostel' me_tag.secondary_regex = '1' me_tag.save() assertOrder([event1, event2, eventP1]) # Test promotion boost event2.promotion_boost = 2000 event2.save() assertOrder([event2, event1, eventP1]) event2.promotion_boost = 0 event2.save() # Test for anonymous user self.client.logout() assertOrder([event2, eventP1])