示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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])
示例#5
0
    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])