basic invitation model with domain class
This commit is contained in:
48
tests/domain/test_invitations.py
Normal file
48
tests/domain/test_invitations.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import datetime
|
||||
import pytest
|
||||
|
||||
from atst.domain.invitations import Invitations, InvitationExpired
|
||||
|
||||
from tests.factories import WorkspaceFactory, UserFactory, InvitationFactory
|
||||
|
||||
|
||||
def test_create_invitation():
|
||||
workspace = WorkspaceFactory.create()
|
||||
user = UserFactory.create()
|
||||
invite = Invitations.create(workspace, user)
|
||||
assert invite.user == user
|
||||
assert invite.workspace == workspace
|
||||
assert invite.valid
|
||||
|
||||
|
||||
def test_accept_invitation():
|
||||
workspace = WorkspaceFactory.create()
|
||||
user = UserFactory.create()
|
||||
invite = Invitations.create(workspace, user)
|
||||
assert invite.valid
|
||||
accepted_invite = Invitations.accept(invite.id)
|
||||
assert not accepted_invite.valid
|
||||
|
||||
|
||||
def test_accept_expired_invitation():
|
||||
workspace = WorkspaceFactory.create()
|
||||
user = UserFactory.create()
|
||||
increment = Invitations.EXPIRATION_LIMIT + 1
|
||||
created_at = datetime.datetime.now() - datetime.timedelta(minutes=increment)
|
||||
invite = InvitationFactory.create(
|
||||
workspace_id=workspace.id, user_id=user.id, time_created=created_at, valid=True
|
||||
)
|
||||
with pytest.raises(InvitationExpired):
|
||||
Invitations.accept(invite.id)
|
||||
|
||||
assert not invite.valid
|
||||
|
||||
|
||||
def test_accept_invalid_invite():
|
||||
workspace = WorkspaceFactory.create()
|
||||
user = UserFactory.create()
|
||||
invite = InvitationFactory.create(
|
||||
workspace_id=workspace.id, user_id=user.id, valid=False
|
||||
)
|
||||
with pytest.raises(InvitationExpired):
|
||||
Invitations.accept(invite.id)
|
@@ -20,6 +20,7 @@ from atst.models.workspace import Workspace
|
||||
from atst.domain.roles import Roles
|
||||
from atst.models.workspace_role import WorkspaceRole
|
||||
from atst.models.environment_role import EnvironmentRole
|
||||
from atst.models.invitation import Invitation
|
||||
|
||||
|
||||
class Base(factory.alchemy.SQLAlchemyModelFactory):
|
||||
@@ -325,3 +326,8 @@ class EnvironmentRoleFactory(Base):
|
||||
environment = factory.SubFactory(EnvironmentFactory)
|
||||
role = factory.Faker("name")
|
||||
user = factory.SubFactory(UserFactory)
|
||||
|
||||
|
||||
class InvitationFactory(Base):
|
||||
class Meta:
|
||||
model = Invitation
|
||||
|
Reference in New Issue
Block a user