Skip to content

Update invite tests #1926

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 12, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 38 additions & 13 deletions libs/labelbox/tests/integration/test_user_management.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
from typing import Optional

import pytest
from faker import Faker

from labelbox import ProjectRole
from faker import Faker
from labelbox.schema.invite import Invite

faker = Faker()


def find_invite_and_id_by_email(
queries, client, invite_email
) -> Optional[Invite]:
"""For security reasons, invite uid is not returned for a query for a single invite.
This function is a workaround to find the invite uid by email using another query that returns all invites.
"""
outstanding_invites = queries.get_invites(client)

for outstanding_invite in outstanding_invites:
if outstanding_invite.email == invite_email:
return outstanding_invite
return None


@pytest.fixture
def org_invite(client, organization, environ, queries):
role = client.get_roles()["LABELER"]
Expand All @@ -27,7 +44,9 @@ def org_invite(client, organization, environ, queries):

yield invite, invite_limit

queries.cancel_invite(client, invite.uid)
found_invite = find_invite_and_id_by_email(queries, client, invite.email)
assert found_invite is not None, "Invite not found"
queries.cancel_invite(client, found_invite.uid)


@pytest.fixture
Expand Down Expand Up @@ -60,30 +79,32 @@ def create_project_invite(

yield invite

queries.cancel_invite(client, invite.uid)
found_invite = find_invite_and_id_by_email(queries, client, invite.email)
assert found_invite is not None, "Invite not found"
queries.cancel_invite(client, found_invite.uid)


def test_org_invite(client, organization, environ, queries, org_invite):
invite, invite_limit = org_invite
role = client.get_roles()["LABELER"]

assert (
invite.uid == "invited"
) # for security reasons we don't return the invite uid

if environ.value == "prod":
invite_limit_after = organization.invite_limit()
# One user added
assert invite_limit.remaining - invite_limit_after.remaining == 1
# An invite shouldn't effect the user count until after it is accepted

outstanding_invites = queries.get_invites(client)
in_list = False
found_invite = find_invite_and_id_by_email(queries, client, invite.email)

for outstanding_invite in outstanding_invites:
if outstanding_invite.uid == invite.uid:
in_list = True
org_role = outstanding_invite.organization_role_name.lower()
assert (
org_role == role.name.lower()
), "Role should be labeler. Found {org_role} "
assert in_list, "Invite not found"
assert found_invite is not None, "Invite not found"
org_role = found_invite.organization_role_name.lower()
assert (
org_role == role.name.lower()
), "Role should be labeler. Found {org_role} "


def test_cancel_invite(
Expand All @@ -96,6 +117,10 @@ def test_cancel_invite(
"".join(faker.random_letters(26))
)
invite = organization.invite_user(dummy_email, role)
found_invite = find_invite_and_id_by_email(queries, client, invite.email)
assert found_invite is not None, "Invite not found"
invite.uid = found_invite.uid # for security reasons we don't return the invite uid directly but need it in order to cancel the invite

queries.cancel_invite(client, invite.uid)
outstanding_invites = [i.uid for i in queries.get_invites(client)]
assert invite.uid not in outstanding_invites
Expand Down
Loading