예제 #1
0
def test_cancel_user_invitation(default_header, test_record_settings):
    # we invite the german user and cancel it again
    # GIVEN
    invitee_email = test_record_settings('users.4.email')
    input = {'invitationType': 'USER', 'inviteeEmail': invitee_email}
    result = execute_gql_mutation(CREATE_INVITATION_MUTATION,
                                  _headers=default_header,
                                  **input)
    invitation_id = result['invitation']['id']
    delete_emails()

    # WHEN
    execute_gql_mutation(CANCEL_INVITATION_MUTATION,
                         _headers=default_header,
                         id=invitation_id)

    # THEN
    result = execute_gql(QUERY_INVITATION_BY_ID,
                         headers=default_header,
                         variables={'id': invitation_id})
    assert result['data']['invitation']['state'] == 'CANCELED'
    # test the information mail:
    emails = get_emails()
    assert len(emails) == 1
    email = emails[0]
    assert email['to'][0] == input['inviteeEmail']
    assert email['body'].lower().find(
        'cancel') != -1, 'Info mail should include `cancel`'
예제 #2
0
def test_tag_two_user(admin_header, test1_user_obj, test2_user_obj):
    """
    This test tags user 1 and user 2
    """
    # GIVEN
    payload = {
        'id': test1_user_obj['id'],
        'tags': [{'name': 'tag1'}, {'name': 'tag2'}, {'name': 'tag3'}],
    }
    user_one_tags = execute_gql_mutation(UPDATE_USER_MUTATION, _headers=admin_header, **payload)[
        'user'
    ]['tags']
    tag1_user_one_id = list(
        filter(lambda edge: edge['node']['name'] == 'tag1', user_one_tags['edges'])
    )[0]['node']['id']

    # WHEN
    payload = {
        'id': test2_user_obj['id'],
        'tags': [{'name': 'tag1'}, {'name': 'tag4'}, {'name': 'tag3'}, {'name': 'tag6'}],
    }
    user_two_tags = execute_gql_mutation(UPDATE_USER_MUTATION, _headers=admin_header, **payload)[
        'user'
    ]['tags']
    tag1_user_two_id = list(
        filter(lambda edge: edge['node']['name'] == 'tag1', user_two_tags['edges'])
    )[0]['node']['id']

    # THEN
    assert tag1_user_one_id == tag1_user_two_id
    assert user_two_tags['totalCount'] == 4
예제 #3
0
def test_accept_canceled_user_invitation(default_header, test_record_settings):
    """
    This test
        - creates an invitation as user (a) to user (b)
        - cancels the invitation as user (a)
        - tries to accept the invitation as user (b) --> should fail
    """
    # GIVEN
    invitee_email = test_record_settings('users.4.email')
    input = {'invitationType': 'USER', 'inviteeEmail': invitee_email}
    result = execute_gql_mutation(CREATE_INVITATION_MUTATION,
                                  _headers=default_header,
                                  **input)
    invitation_id = result['invitation']['id']
    _, token = extract_invitation_link_and_token(get_emails()[0]['body'])
    execute_gql_mutation(CANCEL_INVITATION_MUTATION,
                         _headers=default_header,
                         id=invitation_id)

    # WHEN
    hubert_header = authenticated_header(
        login(invitee_email, test_record_settings('users.4.password')))
    result = execute_gql_mutation(
        ACCEPT_INVITATION_MUTATION,
        _headers=hubert_header,
        acceptToken=token,
        _check_errors=False,
        _return_data=False,
    )
    assert result['data']['acceptInvitation']['error'] is not None
    assert result['data']['acceptInvitation']['error'][
        'id'] == 'INVITATION_NOT_VALID'
    assert result['data']['acceptInvitation']['error']['data'] == 'CANCELED'
예제 #4
0
def test_query_all_user_tags(admin_header, test1_user_obj, test2_user_obj):
    # GIVEN
    execute_gql_mutation(
        UPDATE_USER_MUTATION,
        _headers=admin_header,
        **{
            'id': test1_user_obj['id'],
            'tags': [{'name': 'tag1'}, {'name': 'tag2'}, {'name': 'tag3'}],
        },
    )
    execute_gql_mutation(
        UPDATE_USER_MUTATION,
        _headers=admin_header,
        **{
            'id': test2_user_obj['id'],
            'tags': [{'name': 'tag1'}, {'name': 'tag5'}, {'name': 'foo3'}],
        },
    )

    # WHEN
    result = execute_gql(
        QUERY_ALL_USER_TAGS, headers=admin_header, variables={'name_Istartswith': 'tAg'}
    )['data']['allUserTags']

    # THEN
    assert result['totalCount'] == 4, "foo is filtered out, so tag1, tag2, tag3 and tag5"
예제 #5
0
def test_query_invitation_using_token(default_header, test_record_settings):
    # we invite the admin user
    # GIVEN
    invitee_email = test_record_settings('users.4.email')
    input = {'invitationType': 'USER', 'inviteeEmail': invitee_email}
    # invite the user as default_user:
    execute_gql_mutation(CREATE_INVITATION_MUTATION,
                         _headers=default_header,
                         **input)
    _, token = extract_invitation_link_and_token(get_emails()[0]['body'])

    # WHEN
    hubert_header = authenticated_header(
        login(invitee_email, test_record_settings('users.1.password')))
    result = execute_gql(QUERY_INVITATION_BY_TOKEN,
                         headers=hubert_header,
                         variables={'token': token})
    invitation = result['data']['invitation']

    # THEN
    assert invitation is not None
    assert invitation['state'] == STATE_PENDING
    assert invitation['inviteeEmail'] == invitee_email
    assert invitation['isValid']
    assert invitation['invalidReason'] is None
    assert len(invitation['acceptPage']) > 0
예제 #6
0
def test_delete(test1_header):
    # GIVEN
    payload = {'text': 'default todo text', 'isDone': False}
    original_todo = execute_gql_mutation(CREATE_TODO_MUTATION,
                                         _headers=test1_header,
                                         **payload)

    # WHEN
    delete_payload = {'id': original_todo['todo']['id']}
    deleted_todo = execute_gql_mutation(DELETE_TODO_MUTATION,
                                        _headers=test1_header,
                                        **delete_payload)

    # THEN
    assert deleted_todo['error'] is None
def test_emails():
    # GIVEN
    email_to = f"{uuid4()}@example.com"
    res = register_user(email_to, "123456")
    auth_header = {"Authorization": f"Token {res['token']}"}

    user_id = res["user"]["id"]

    # WHEN
    emails = get_emails()

    # THEN
    assert len(emails) == 1
    assert emails[0].get("to")[0] == email_to
    assert len(emails[0].get("body")) > 100
    assert len(emails[0].get("htmlMessage")) > 100
    assert len(emails[0].get("subject")) > 5
    assert "@" in emails[0].get("fromEmail")

    # CLEANUP
    payload = {"id": user_id}
    data = execute_gql_mutation(DELETE_USER_MUTATION,
                                _headers=auth_header,
                                **payload)
    pprint(data)
def test_send_signup_email():
    """
    Just here for local testing of sending registration email.
    """
    email_to = "*****@*****.**"
    res = register_user(email_to, "Test1!")
    auth_header = {"Authorization": f"Token {res['token']}"}

    user_id = res["user"]["id"]

    # WHEN

    # THEN

    # CLEANUP
    payload = {"id": user_id}
    execute_gql_mutation(DELETE_USER_MUTATION, _headers=auth_header, **payload)
예제 #9
0
def test_update_user_empty_interests(test1_user_obj, test1_header):
    # GIVEN
    # WHEN
    result = execute_gql_mutation(
        UPDATE_USER_MUTATION, _headers=test1_header, **{'id': test1_user_obj['id'], 'interests': []}
    )['user']
    # THEN
    assert len(result['interests']) == 0
예제 #10
0
def test_update_me(test1_user_obj, test1_header):
    # GIVEN
    user_id = test1_user_obj['id']
    # WHEN
    data = execute_gql_mutation(
        UPDATE_ME_MUTATION, _headers=test1_header, **{'id': user_id, 'firstName': 'Saphod'}
    )
    # THEN
    assert data['user']['firstName'] == 'Saphod'
예제 #11
0
def test_create_user_as_admin(admin_header, test_record_settings):
    # GIVEN
    email = f'test-create-user-with-tag@{test_record_settings("default_email_domain")}'
    payload = {'email': email}

    # WHEN
    data = execute_gql_mutation(CREATE_USER_MUTATION, _headers=admin_header, **payload)

    # THEN
    assert data['user']['email'] == email
예제 #12
0
def test_delete_user_as_admin(admin_header, test2_user_obj, api_is_production):
    # GIVEN
    user_id = test2_user_obj['id']
    payload = {'id': user_id}

    # WHEN
    data = execute_gql_mutation(DELETE_USER_MUTATION, _headers=admin_header, **payload)

    # THEN
    assert data['error'] is None
예제 #13
0
def test_create_user_with_tag(admin_header, test_record_settings):
    # GIVEN
    payload = {
        'email': f'test-create-user-with-tag@{test_record_settings("default_email_domain")}',
        'tags': [{'name': 'tag1'}, {'name': 'tag2'}, {'name': 'tag3'}],
    }

    # WHEN
    result = execute_gql_mutation(CREATE_USER_MUTATION, _headers=admin_header, **payload)['user']

    # THEN
    assert result['tags']['totalCount'] == 3
예제 #14
0
def test_update(test1_header):
    # GIVEN
    payload = {'text': 'updated todo text', 'isDone': True}
    original_todo = execute_gql_mutation(CREATE_TODO_MUTATION,
                                         _headers=test1_header,
                                         **payload)

    # WHEN
    update_payload = {
        'id': original_todo['todo']['id'],
        'text': 'default todo text',
        'isDone': False,
    }
    updated_todo = execute_gql_mutation(UPDATE_TODO_MUTATION,
                                        _headers=test1_header,
                                        **update_payload)

    # THEN
    assert updated_todo['error'] is None
    assert updated_todo['todo']['id'] == original_todo['todo']['id']
    assert updated_todo['todo']['text'] == update_payload['text']
    assert updated_todo['todo']['isDone'] == update_payload['isDone']
예제 #15
0
def test_tag_user(admin_header, test1_user_obj):
    """
    This test adds some new tags to user 1 (note: user 1 already has one tag before)
    """
    # GIVEN
    payload = {
        'id': test1_user_obj['id'],
        'tags': [{'name': 'tag1'}, {'name': 'tag2'}, {'name': 'tag3'}],
    }
    # WHEN
    result = execute_gql_mutation(UPDATE_USER_MUTATION, _headers=admin_header, **payload)['user']
    # THEN
    assert result['tags']['totalCount'] == 4
예제 #16
0
def test_reject_user_invitation(default_header, test_record_settings):
    # we invite the german user and reject the invitation as the german user
    # GIVEN
    invitee_email = test_record_settings('users.4.email')
    input = {'invitationType': 'USER', 'inviteeEmail': invitee_email}
    result = execute_gql_mutation(CREATE_INVITATION_MUTATION,
                                  _headers=default_header,
                                  **input)
    invitation_id = result['invitation']['id']

    # WHEN
    hubert_header = authenticated_header(
        login(invitee_email, test_record_settings('users.4.password')))
    execute_gql_mutation(REJECT_INVITATION_MUTATION,
                         _headers=hubert_header,
                         id=invitation_id)

    # THEN
    result = execute_gql(QUERY_INVITATION_BY_ID,
                         headers=default_header,
                         variables={'id': invitation_id})
    assert result['data']['invitation']['state'] == 'REJECTED'
예제 #17
0
def test_resend_user_invitation(default_header, test_record_settings):
    # we invite the german user and reject the invitation as the german user
    # GIVEN
    invitee_email = test_record_settings('users.4.email')
    input = {'invitationType': 'USER', 'inviteeEmail': invitee_email}
    invitation_id = execute_gql_mutation(CREATE_INVITATION_MUTATION,
                                         _headers=default_header,
                                         **input)['invitation']['id']
    delete_emails()
    assert len(get_emails()) == 0

    # WHEN
    result = execute_gql_mutation(RESEND_INVITATION_MUTATION,
                                  _headers=default_header,
                                  id=invitation_id)

    # THEN
    assert isoparse(result['invitation']['created']) < isoparse(
        result['invitation']['updated'])
    emails = get_emails()
    assert len(emails) == 1, 'There must be one mail'
    assert emails[0]['to'][
        0] == invitee_email, 'Mail should be sent to the invitee'
예제 #18
0
def test_query(test1_header):
    # GIVEN
    payload = {'text': 'default todo text', 'isDone': False}
    original_todo = execute_gql_mutation(CREATE_TODO_MUTATION,
                                         _headers=test1_header,
                                         **payload)

    # WHEN
    todos = execute_gql(QUERY_ALL_USER_TODOS, headers=test1_header)

    # THEN
    queried_todo = todos['data']['me']['ownedOrganisation']['todos']['edges'][
        0]['node']
    assert queried_todo['id'] == original_todo['todo']['id']
예제 #19
0
def test_create(test1_header):
    # GIVEN
    payload = {'text': 'default todo text', 'isDone': False}

    # WHEN
    result = execute_gql_mutation(CREATE_TODO_MUTATION,
                                  _headers=test1_header,
                                  **payload)

    # THEN
    todo = result['todo']
    assert result['error'] is None
    assert todo['text'] == payload['text']
    assert todo['isDone'] == payload['isDone']
예제 #20
0
def test_update_me_as_not_allowed(test1_user_obj, test2_header):
    # GIVEN
    user_id = test1_user_obj['id']
    # WHEN
    result = execute_gql_mutation(
        UPDATE_ME_MUTATION,
        _headers=test2_header,
        _check_errors=False,
        _return_data=False,
        **{'id': user_id, 'firstName': 'Saphod'},
    )
    # THEN
    # permission denied error must be returned
    assert result['data']['updateMe']['error']['id'] == 'PERMISSION_DENIED_ERROR'
예제 #21
0
def test_accept_user_invitation_with_existing_user(default_header,
                                                   test_record_settings):
    # we invite the german user
    # GIVEN
    invitee_email = test_record_settings('users.4.email')
    input = {'invitationType': 'USER', 'inviteeEmail': invitee_email}
    # invite the user as default_user:
    execute_gql_mutation(CREATE_INVITATION_MUTATION,
                         _headers=default_header,
                         **input)
    # retrieve the token by reading hubert's mail:
    _, token = extract_invitation_link_and_token(get_emails()[0]['body'])

    # WHEN
    # log in as hubert and call the acceptInvitationMutation as him:
    hubert_header = authenticated_header(
        login(invitee_email, test_record_settings('users.4.password')))
    # accept
    result = execute_gql_mutation(ACCEPT_INVITATION_MUTATION,
                                  _headers=hubert_header,
                                  acceptToken=token)

    # THEN
    assert result['invitation']['state'] == 'ACCEPTED'
예제 #22
0
def test_create_user_not_allowed(test1_header, test_record_settings):
    # GIVEN
    # user payload
    email = f'test-create-user-with-tag@{test_record_settings("default_email_domain")}'
    payload = {'email': email}

    # WHEN
    # we try to create a user without permissions
    result = execute_gql_mutation(
        CREATE_USER_MUTATION,
        _headers=test1_header,
        _check_errors=False,
        _return_data=False,
        **payload,
    )

    # THEN
    # it must retun an error
    assert result['data']['createUser']['error']['id'] == 'PERMISSION_DENIED_ERROR'
예제 #23
0
def test_delete_user_as_other_user(test1_header, test2_user_obj, api_is_production):
    # GIVEN
    # a user we want to delete
    user_id = test2_user_obj['id']
    payload = {'id': user_id}

    # WHEN
    # we try to delete a user with another one who has no permission to do that
    result = execute_gql_mutation(
        DELETE_USER_MUTATION,
        _headers=test1_header,
        _check_errors=False,
        _return_data=False,
        **payload,
    )

    # THEN
    # permission denied error must be returned
    assert result['data']['deleteUser']['error']['id'] == 'PERMISSION_DENIED_ERROR'
예제 #24
0
def test_update_user_image(admin_header, test2_user_obj, test2_header, api_is_production):
    # GIVEN
    user_id = test2_user_obj['id']
    oldImg = execute_gql(
        QUERY_USER_PROFILE_PICTURE, headers=admin_header, variables={'id': user_id}
    )['data']['user']['profileImage']

    payload = {'id': user_id, 'profileImageTemporaryId': upload_image(EXAMPLE_PROFILE_PICTURE_PATH)}

    # WHEN
    data = execute_gql_mutation(
        UPDATE_USER_PROFILE_IMAGE_MUTATION, _headers=test2_header, **payload
    )

    # THEN
    newImg = execute_gql(
        QUERY_USER_PROFILE_PICTURE, headers=admin_header, variables={'id': user_id}
    )['data']['user']['profileImage']
    assert newImg is not None and newImg != ''
    assert oldImg != newImg
    if not api_is_production:
        # test also if image is downloadable, (does not work on drone)
        assert is_static_content_available(newImg), "cannot not download uploaded image"
예제 #25
0
def test_sending_email_when_create_user_invitation(need_reset_emails,
                                                   default_header):
    # GIVEN
    input = {
        'invitationType':
        'USER',
        'inviteeEmail':
        f'invitee-{uuid4()}@example.com',
        'message':
        'Hey buddy!\nI just registered at vsocial. This app is great! Have a look :-)',
    }

    # WHEN
    result = execute_gql_mutation(CREATE_INVITATION_MUTATION,
                                  _headers=default_header,
                                  **input)

    # THEN
    # test the result:
    assert 'invitation' in result
    assert all(key in result['invitation']
               for key in ('id', 'expires', 'created', 'state',
                           'invitationType', 'message', 'payload'))
    expires = isoparse(result['invitation']['expires'])
    assert expires > datetime.now(timezone.utc)
    assert result['invitation']['state'] == STATE_PENDING

    # test the sent mail:
    emails = get_emails()
    assert len(emails) == 1
    email = emails[0]
    assert len(email['to']) == 1
    assert email['to'][0] == input['inviteeEmail']
    assert email['body'].find(
        'Hey buddy!') != -1, 'Personal message should be in email text'
    extract_invitation_link_and_token(email['body'])