def test_set_likes_dislikes_ratio_importance():
    rule_likes_dislikes_ratio = [{
        'conditions': {
            'all': [{
                'name': 'likeability',
                'operator': 'less_than',
                'value': 0.5,
            }]
        },
        'actions': [{
            'name': 'penalize',
            'params': {
                'penalty': 2
            }
        }]
    }]
    video = {
        'likes': ['diegote', 'guillote', 'eche'],
        'dislikes': ['cosso', 'gonza', 'agus', 'maxi'],
        'comments': [
            {
                'user': '******',
                'comment': 'buen vidio',
                'timestamp': 'now'
            },
            {
                'user': '******',
                'comment': 'No me gusta',
                'timestamp': 'yesterday'
            },
        ]
    }
    rules.set_importance(video, rule_likes_dislikes_ratio)
    assert 'importance' in video
    assert video['importance'] == pytest.approx(-2)
def test_set_comments_importance():
    rule_comments = [{
        'conditions': {
            'all': [{
                'name': 'comments',
                'operator': 'greater_than',
                'value': 0,
            }]
        },
        'actions': [{
            'name': 'multiply_comments',
            'params': {
                'factor': 0.4
            }
        }]
    }]
    video = {
        'likes': ['diegote', 'guillote', 'eche'],
        'dislikes': ['cosso', 'gonza'],
        'comments': [
            {
                'user': '******',
                'comment': 'buen vidio',
                'timestamp': 'now'
            },
            {
                'user': '******',
                'comment': 'No me gusta',
                'timestamp': 'yesterday'
            },
        ]
    }
    rules.set_importance(video, rule_comments)
    assert 'importance' in video
    assert video['importance'] == pytest.approx(0.8)
def test_set_last_videos_importance():
    rule_last_week = [{
        'conditions': {
            'all': [{
                'name': 'days_since_publication',
                'operator': 'less_than',
                'value': 7,
            }]
        },
        'actions': [{
            'name': 'boost',
            'params': {
                'bonus': 5
            }
        }]
    }]
    new_video = {'upload_date': str(datetime.datetime.now())}
    old_video = {
        'upload_date':
        str(datetime.datetime.now() - datetime.timedelta(days=10))
    }
    rules.set_importance(new_video, rule_last_week)
    rules.set_importance(old_video, rule_last_week)
    assert 'importance' in new_video
    assert 'importance' in old_video
    assert new_video['importance'] == pytest.approx(5)
    assert old_video['importance'] == 0
def _list_videos_of_user():

    user_id = request.args.get('user_id')
    user_requesting_videos_id = g.data['user_id']
    logger.debug("The user requesting the videos is:" +
                 user_requesting_videos_id)

    logger.debug("Requested videos from id:" + user_id)
    api_list_video_of_user = '******' + user_id
    response_media_server = get_media_server_request(
        os.environ.get('MEDIA_SERVER_URL') + api_list_video_of_user)

    if response_media_server.status_code == HTTP_OK:
        logger.debug('Response from media server list videos is 200')

        if user_requesting_videos_id == user_id:
            logger.debug('User requesting own videos')
            videos_collection = client[DB]['videos']
            status = append_data_to_videos(response_media_server.json(),
                                           videos_collection)

        else:
            videos_collection = client[DB]['videos']
            videos_list = delete_keys_from_videos(response_media_server.json(),
                                                  KEYS_TO_DELETE)
            videos_list = append_data_to_videos(videos_list, videos_collection)
            user_friends = get_user_friends_from_db(user_id,
                                                    client[DB]['users'])
            friends_list = [friend['email'] for friend in user_friends]

            if user_requesting_videos_id in friends_list:
                logger.debug('Users are friends. Showing all videos')
                status = videos_list

            else:
                logger.debug(
                    'Users are not friends. Showing public videos only')
                status = filter_public_videos(videos_list)

    else:
        logger.debug('Response from media server is NOT 200')
        status = []

    if len(status) != 0:
        for video in status:
            rules.set_importance(video, rules.ruleset)
        status = sorted(status,
                        key=operator.itemgetter('importance'),
                        reverse=True)

    return json.dumps(status), response_media_server.status_code
def test_set_likes_importance():
    rule_likes = [{
        'conditions': {
            'all': [{
                'name': 'likes',
                'operator': 'greater_than',
                'value': 0,
            }]
        },
        'actions': [{
            'name': 'multiply_likes',
            'params': {
                'factor': 0.2
            }
        }]
    }]
    video = {'likes': ['diegote', 'guillote', 'eche']}
    rules.set_importance(video, rule_likes)
    assert 'importance' in video
    assert video['importance'] == pytest.approx(0.6)
def _list_videos(user_id):
    api_list_videos = '/api/videos/'
    response_media_server = get_media_server_request(
        os.environ.get('MEDIA_SERVER_URL') + api_list_videos)
    if response_media_server.status_code == HTTP_OK:
        logger.debug('Response from media server list videos is 200')
        #Recibe lista de videos
        raw_data = response_media_server.json()
        users_coll = 'users'
        videos_coll = 'videos'
        status = filter_videos_for_specific_user(raw_data, user_id,
                                                 client[DB][users_coll],
                                                 client[DB][videos_coll])
        for video in status:
            rules.set_importance(video, rules.ruleset)
        status = sorted(status,
                        key=operator.itemgetter('importance'),
                        reverse=True)
    else:
        logger.debug('Response from media server is NOT 200')
        status = []

    return json.dumps(status), response_media_server.status_code
def test_base_importance():
    rule_list = []
    video = {}
    rules.set_importance(video, rule_list)
    assert 'importance' in video
    assert video['importance'] == 0