Пример #1
0
def test_can_get_people(db, testapp):
    PersonFactory.create_batch(10)
    db.session.commit()

    res = testapp.get('/people')

    assert res.status_code == HTTPStatus.OK

    assert len(res.json) == 10
    for person in res.json:
        for field in EXPECTED_FIELDS:
            assert field in person
Пример #2
0
def test_mutual_friends(db):
    instance = PersonFactory()
    target = PersonFactory()

    # some decoy connections (not mutual)
    ConnectionFactory.create_batch(5, to_person=instance)
    ConnectionFactory.create_batch(5, to_person=target)

    mutual_friends = PersonFactory.create_batch(3)
    for f in mutual_friends:
        ConnectionFactory(from_person=instance,
                          to_person=f,
                          connection_type='friend')
        ConnectionFactory(from_person=target,
                          to_person=f,
                          connection_type='friend')

    # mutual connections, but not friends
    decoy = PersonFactory()
    ConnectionFactory(from_person=instance,
                      to_person=decoy,
                      connection_type='coworker')
    ConnectionFactory(from_person=target,
                      to_person=decoy,
                      connection_type='coworker')

    db.session.commit()

    expected_mutual_friend_ids = [f.id for f in mutual_friends]

    results = instance.mutual_friends(target)

    assert len(results) == 3
    for f in results:
        assert f.id in expected_mutual_friend_ids
Пример #3
0
def test_get_mutual_friends(db, testapp):
    instance = PersonFactory()
    target = PersonFactory()

    # some decoy connections (not mutual)
    ConnectionFactory.create_batch(5, to_person=instance)
    ConnectionFactory.create_batch(5, to_person=target)

    mutual_friends = PersonFactory.create_batch(3)
    for f in mutual_friends:
        ConnectionFactory(from_person=instance,
                          to_person=f,
                          connection_type='friend')
        ConnectionFactory(from_person=target,
                          to_person=f,
                          connection_type='friend')

    # mutual connections, but not friends
    decoy = PersonFactory()
    ConnectionFactory(from_person=instance,
                      to_person=decoy,
                      connection_type='coworker')
    ConnectionFactory(from_person=target,
                      to_person=decoy,
                      connection_type='coworker')

    db.session.commit()

    expected_mutual_friend_ids = [f.id for f in mutual_friends]

    # Trigger webservice call to get mutual friends
    res = testapp.get('/people/' + str(instance.id) +
                      '/mutual_friends?target_id=' + str(target.id))

    assert res.status_code == HTTPStatus.OK

    assert len(res.json) == 3

    for mutual_friend in res.json:
        assert mutual_friend.id in expected_mutual_friend_ids

    # Switch target/instance ids and make sure the resulting friends are the same
    res2 = testapp.get('/people/' + str(target.id) +
                       '/mutual_friends?target_id=' + str(instance.id))

    assert res2.status_code == HTTPStatus.OK

    assert len(res2.json) == 3

    for mutual_friend in res2.json:
        assert mutual_friend.id in expected_mutual_friend_ids
Пример #4
0
def test_can_get_mutual_friends(db, testapp):
    instance = PersonFactory()
    target = PersonFactory()

    ConnectionFactory.create_batch(5, to_person=instance)
    ConnectionFactory.create_batch(5, to_person=target)

    mutual_friends = PersonFactory.create_batch(3)
    for f in mutual_friends:
        ConnectionFactory(from_person=instance,
                          to_person=f,
                          connection_type='friend')
        ConnectionFactory(from_person=target,
                          to_person=f,
                          connection_type='friend')

    decoy = PersonFactory()
    ConnectionFactory(from_person=instance,
                      to_person=decoy,
                      connection_type='coworker')
    ConnectionFactory(from_person=target,
                      to_person=decoy,
                      connection_type='coworker')

    db.session.commit()

    expected_mutual_friend_ids = [f.id for f in mutual_friends]

    res = (testapp.get('/people/{}/mutual_friends?target_id={}'.format(
        instance.id, target.id)))

    res_reverse = (testapp.get('/people/{}/mutual_friends?target_id={}'.format(
        target.id, instance.id)))

    assert res.status_code == HTTPStatus.OK
    assert res_reverse.status_code == HTTPStatus.OK
    assert len(res.json) == 3

    for f in res.json:
        assert f['id'] in expected_mutual_friend_ids

    assert res.json == res_reverse.json

    for person in res.json:
        for field in EXPECTED_FIELDS:
            assert field in person
Пример #5
0
def test_can_get_mutual_friends(db, testapp):
    instance = PersonFactory()
    target = PersonFactory()

    # some decoy connections (not mutual)
    ConnectionFactory.create_batch(5, to_person=instance)
    ConnectionFactory.create_batch(5, to_person=target)

    mutual_friends = PersonFactory.create_batch(3)
    for f in mutual_friends:
        ConnectionFactory(from_person=instance,
                          to_person=f,
                          connection_type='friend')
        ConnectionFactory(from_person=target,
                          to_person=f,
                          connection_type='friend')

    # mutual connections, but not friends
    decoy = PersonFactory()
    ConnectionFactory(from_person=instance,
                      to_person=decoy,
                      connection_type='coworker')
    ConnectionFactory(from_person=target,
                      to_person=decoy,
                      connection_type='coworker')

    db.session.commit()

    res = testapp.get(
        f'/people/{instance.id}/mutual_friends?target_id={target.id}')

    assert res.status_code == HTTPStatus.OK

    for person in res.json:
        for field in EXPECTED_FIELDS:
            assert field in person

    assert len(res.json) == 3

    # This might make sense as a separate test, probably ideally in the unit tests, not here
    switched_res = testapp.get(
        f'/people/{target.id}/mutual_friends?target_id={instance.id}')

    assert set([p['id'] for p in res.json
                ]) == set([p['id'] for p in switched_res.json])
def test_get_mutual_friends_correct_data(db, testapp):
    instance = PersonFactory()
    target = PersonFactory()

    # some decoy connections (not mutual)
    ConnectionFactory.create_batch(5, to_person=instance)
    ConnectionFactory.create_batch(5, to_person=target)

    mutual_friends = PersonFactory.create_batch(3)
    for f in mutual_friends:
        ConnectionFactory(from_person=instance,
                          to_person=f,
                          connection_type='friend')
        ConnectionFactory(from_person=target,
                          to_person=f,
                          connection_type='friend')

    # mutual connections, but not friends
    decoy = PersonFactory()
    ConnectionFactory(from_person=instance,
                      to_person=decoy,
                      connection_type='coworker')
    ConnectionFactory(from_person=target,
                      to_person=decoy,
                      connection_type='coworker')

    db.session.commit()

    # call mutual_friends endpoints
    res_a = testapp.get('/people/' + str(instance.id) +
                        '/mutual_friends?target_id=' + str(target.id))
    res_b = testapp.get('/people/' + str(target.id) +
                        '/mutual_friends?target_id=' + str(instance.id))

    assert res_a.status_code == HTTPStatus.OK
    assert res_b.status_code == HTTPStatus.OK

    # confirm that both calls return the same values
    instance_f_ids = [f['id'] for f in res_a.json]
    target_f_ids = [f['id'] for f in res_b.json]

    assert set(instance_f_ids) == set(target_f_ids)
def test_get_mutual_friends(db, testapp):
    instance = PersonFactory()
    target = PersonFactory()

    # some decoy connections (not mutual)
    ConnectionFactory.create_batch(5, to_person=instance)
    ConnectionFactory.create_batch(5, to_person=target)

    mutual_friends = PersonFactory.create_batch(3)
    for f in mutual_friends:
        ConnectionFactory(from_person=instance,
                          to_person=f,
                          connection_type='friend')
        ConnectionFactory(from_person=target,
                          to_person=f,
                          connection_type='friend')

    # mutual connections, but not friends
    decoy = PersonFactory()
    ConnectionFactory(from_person=instance,
                      to_person=decoy,
                      connection_type='coworker')
    ConnectionFactory(from_person=target,
                      to_person=decoy,
                      connection_type='coworker')

    db.session.commit()

    res = testapp.get('/people/' + str(instance.id) +
                      '/mutual_friends?target_id=' + str(target.id))

    assert res.status_code == HTTPStatus.OK

    for person in res.json:
        for field in EXPECTED_FIELDS:
            assert field in person