Beispiel #1
0
def test_list_test_data_users_between_dates_missing_params(
        mock_db_data, pseudocone_server):
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]

    request_without_start = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1, users=users, end_interaction_time="P0Y1M7DT0H0M0S")

    request_without_end = \
        pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(limit=1, users=users,
                                                            start_interaction_time="2018-02-01T00:00:26.318497Z")

    request_without_start_or_end = \
        pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(limit=1, users=users)

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListTestDataUsersBetweenDates(
            request=request_without_start)

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListTestDataUsersBetweenDates(
            request=request_without_end)

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListTestDataUsersBetweenDates(
            request=request_without_start_or_end)
Beispiel #2
0
def test_list_test_data_users_between_dates_date_format_error(
        mock_db_data, pseudocone_server):
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-60-01T00:00:26.318497Z",
        end_interaction_time="2018-05-01T00:00:26.318497Z")

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListTestDataUsersBetweenDates(
            request=request)

    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-01-01T00:00:26.318497Z",
        end_interaction_time="2018-60-01T00:00:26.318497Z")

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListTestDataUsersBetweenDates(
            request=request)
Beispiel #3
0
def test_list_test_data_users_between_dates_multi_interaction(
        mock_db_data, pseudocone_server):
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-01-01T19:53:32.000Z",
        end_interaction_time="2018-05-01T19:53:32.000Z")

    response = pseudocone_server["stub"].ListTestDataUsersBetweenDates(
        request=request)
    assert len(response.items) == 1
    assert response.items[0].user.id == "1"
    assert len(response.items[0].interactions) == 1
    assert response.items[0].interactions[0].pid == "b09s3kq5"
    assert response.items[0].interactions[
        0].uri == "programmes:bbc.co.uk,2018/FIXME/b09s3kq5"
    assert response.items[0].interactions[
        0].activity_time == "2018-03-01T19:53:32.000Z"
    assert response.items[0].interactions[0].completion == "PT11M"
    assert response.items[0].interactions[0].activity_type == "PLAYS"
    assert response.items[0].interactions[0].action == "ended"
Beispiel #4
0
def convert_json_list_to_pseudocone_response(data):

    unique_users_ids = get_unique_vals_for_property(data, "anon_id")
    user_interaction_items = []
    for user_id in unique_users_ids:
        user_data = get_data_matching_property(data, "anon_id", user_id)
        unique_item_ids = get_unique_vals_for_property(user_data, "resourceid")
        user_items = []

        for item_id in unique_item_ids:
            try:
                user_item_interactions = get_data_matching_property(
                    user_data, "resourceid", item_id)
                interaction = extract_latest_interaction(
                    user_item_interactions)
                user_items.append(
                    convert_db_object_to_interaction_item(interaction))
            except Exception as e:
                logger.exception(e)

        user = pseudocone_pb2.UserParam(id=user_id, cookie=None)
        user_interaction_item = pseudocone_pb2.TestDataUser(
            user=user, interactions=user_items)
        user_interaction_items.append(user_interaction_item)

    return pseudocone_pb2.ListTestDataUsersResponse(
        items=user_interaction_items)
Beispiel #5
0
def test_list_test_data_users_between_dates_with_resource_type(
        mock_db_data, pseudocone_server):
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        resource_type=[ResourceType.Value("CLIP")],
        start_interaction_time="2018-01-01T19:53:32.000Z",
        end_interaction_time="2018-05-01T19:53:32.000Z")

    response = pseudocone_server["stub"].ListTestDataUsersBetweenDates(
        request=request)
    assert len(response.items) == 1
    assert response.items[0].user.id == "1"
    assert len(response.items[0].interactions) == 1
    assert response.items[0].interactions[0].pid == "pid2"
    assert response.items[0].interactions[
        0].uri == "programmes:bbc.co.uk,2018/FIXME/pid2"
    assert response.items[0].interactions[
        0].activity_time == "2018-03-02T19:53:32.000Z"
    assert response.items[0].interactions[0].completion == "PT11M"
    assert response.items[0].interactions[0].activity_type == "PLAYS"
    assert response.items[0].interactions[0].action == "ended"

    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        resource_type=[ResourceType.Value("EPISODE")],
        start_interaction_time="2018-01-01T00:00:26.318497Z",
        end_interaction_time="2018-05-01T19:53:32.000Z")

    response = pseudocone_server["stub"].ListTestDataUsersBetweenDates(
        request=request)
    assert len(response.items) == 1
    assert response.items[0].user.id == "1"
    assert len(response.items[0].interactions) == 1
    assert response.items[0].interactions[0].pid == "pid1"
    assert response.items[0].interactions[
        0].uri == "programmes:bbc.co.uk,2018/FIXME/pid1"
    assert response.items[0].interactions[
        0].activity_time == "2018-03-01T19:53:32.000Z"
    assert response.items[0].interactions[0].completion == "P0D"
    assert response.items[0].interactions[0].activity_type == "PLAYS"
    assert response.items[0].interactions[0].action == "started"
Beispiel #6
0
def test_list_test_data_users_timestamp_without_timezone(
        mock_db_data, pseudocone_server):
    users = [pseudocone_pb2.UserParam(id="1")]
    request = pseudocone_pb2.ListTestDataUsersRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-02-01T00:00:26.318497",
        test_period_duration="P0Y1M7DT0H0M0S")

    response = pseudocone_server["stub"].ListTestDataUsers(request=request)
    assert len(response.items) == 1 and response.items[0].user.id == "1"
Beispiel #7
0
def test_list_interactions(mock_db_data, pseudocone_server):
    user = pseudocone_pb2.UserParam(id="1")
    request = pseudocone_pb2.ListInteractionsRequest(
        limit=1,
        user=user,
        resource_type=[pseudocone_pb2.ResourceType.Value("CLIP")],
        end_interaction_time="2018-03-02T00:00:00.318497Z",
        train_period_duration="P0Y0M1DT0H0M0S",
        dataset="dataset")

    response = pseudocone_server["stub"].ListInteractions(request=request)

    assert len(response.interactions) is 1
Beispiel #8
0
def test_list_test_data_users(mock_db_data, pseudocone_server):
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-02-01T00:00:26.318497Z",
        test_period_duration="P0Y1M7DT0H0M0S")

    response = pseudocone_server["stub"].ListTestDataUsers(request=request)
    assert len(response.items) == 1
    assert response.items[0].user.id == "1"
    assert len(response.items[0].interactions) == 1
    assert response.items[0].interactions[0].pid == "b09s3kq5"
    assert response.items[0].interactions[
        0].uri == "programmes:bbc.co.uk,2018/FIXME/b09s3kq5"
    assert response.items[0].interactions[
        0].activity_time == "2018-03-01T18:53:32.000Z"
    assert response.items[0].interactions[0].completion == "PT11M"
    assert response.items[0].interactions[0].activity_type == "PLAYS"
    assert response.items[0].interactions[0].action == "ended"
Beispiel #9
0
def test_list_test_data_users_date_format_error(mock_db_data,
                                                pseudocone_server):
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-02-60T00:00:26.318497Z",
        test_period_duration="P0Y1M7DT0H0M0S")

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListTestDataUsers(request=request)

    request = pseudocone_pb2.ListTestDataUsersRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-02-01T00:00:26.318497Z",
        test_period_duration="P0Y17DT0H0YM80S")

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListTestDataUsers(request=request)
Beispiel #10
0
def test_list_test_data_users_between_dates(mock_db_data, pseudocone_server):
    # Should bring back test for data for a single user between the start and end date
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        start_interaction_time="2018-03-01T17:53:32.000Z",
        end_interaction_time="2018-03-01T19:53:32.000Z")

    response = pseudocone_server["stub"].ListTestDataUsersBetweenDates(
        request=request)
    assert len(response.items) == 1
    assert response.items[0].user.id == "1"
    assert len(response.items[0].interactions) == 1
    assert response.items[0].interactions[0].pid == "b09s3kq5"
    assert response.items[0].interactions[
        0].uri == "programmes:bbc.co.uk,2018/FIXME/b09s3kq5"
    assert response.items[0].interactions[
        0].activity_time == "2018-03-01T18:53:32.000Z"
    assert response.items[0].interactions[0].completion == "PT11M"
    assert response.items[0].interactions[0].activity_type == "PLAYS"
    assert response.items[0].interactions[0].action == "ended"

    # Should return no items when activity time is before the start and end interaction time
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        start_interaction_time="2017-03-01T17:53:32.000Z",
        end_interaction_time="2017-03-01T19:53:32.000Z")

    response = pseudocone_server["stub"].ListTestDataUsersBetweenDates(
        request=request)
    assert len(response.items) == 0

    # Should return no items when activity time is after the start and end interaction time
    users = [
        pseudocone_pb2.UserParam(id="1"),
        pseudocone_pb2.UserParam(id="2")
    ]
    request = pseudocone_pb2.ListTestDataUsersBetweenDatesRequest(
        limit=1,
        users=users,
        start_interaction_time="2019-03-01T17:53:32.000Z",
        end_interaction_time="2019-03-01T19:53:32.000Z")

    response = pseudocone_server["stub"].ListTestDataUsersBetweenDates(
        request=request)
    assert len(response.items) == 0
Beispiel #11
0
def test_list_interactions_missing_params(mock_db_data, pseudocone_server):
    user = pseudocone_pb2.UserParam(id="1")
    request_missing_user = pseudocone_pb2.ListInteractionsRequest(
        limit=1,
        end_interaction_time="2018-03-02T00:00:00.318497Z",
        train_period_duration="P0Y0M1DT0H0M0S")
    request_missing_end = pseudocone_pb2.ListInteractionsRequest(
        limit=1, user=user, train_period_duration="P0Y0M1DT0H0M0S")
    request_missing_duration = \
        pseudocone_pb2.ListInteractionsRequest(limit=1, end_interaction_time="2018-03-02T00:00:00.318497Z")

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListInteractions(
            request=request_missing_user)

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListInteractions(request=request_missing_end)

    with pytest.raises(Exception):
        pseudocone_server["stub"].ListInteractions(
            request=request_missing_duration)