record inviter on invitation

This commit is contained in:
dandds 2018-10-26 12:54:28 -04:00
parent edede87108
commit 6125041a93
5 changed files with 42 additions and 6 deletions

View File

@ -0,0 +1,32 @@
"""add inviter relationship to invitation
Revision ID: 2bec1868a22a
Revises: c7feaa7b6b0c
Create Date: 2018-10-26 12:45:13.192062
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = '2bec1868a22a'
down_revision = 'c7feaa7b6b0c'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('invitations', sa.Column('inviter_id', postgresql.UUID(as_uuid=True), nullable=True))
op.create_index(op.f('ix_invitations_inviter_id'), 'invitations', ['inviter_id'], unique=False)
op.create_foreign_key(None, 'invitations', 'users', ['inviter_id'], ['id'])
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, 'invitations', type_='foreignkey')
op.drop_index(op.f('ix_invitations_inviter_id'), table_name='invitations')
op.drop_column('invitations', 'inviter_id')
# ### end Alembic commands ###

View File

@ -30,8 +30,8 @@ class Invitations(object):
return invite
@classmethod
def create(cls, workspace, user):
invite = Invitation(workspace=workspace, user=user, valid=True)
def create(cls, workspace, inviter, user):
invite = Invitation(workspace=workspace, inviter=inviter, user=user, valid=True)
db.session.add(invite)
db.session.commit()

View File

@ -12,11 +12,14 @@ class Invitation(Base, TimestampsMixin):
id = types.Id()
user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), index=True)
user = relationship("User", backref="invitations")
user = relationship("User", backref="invitations", foreign_keys=[user_id])
workspace_id = Column(UUID(as_uuid=True), ForeignKey("workspaces.id"), index=True)
workspace = relationship("Workspace", backref="invitations")
inviter_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), index=True)
inviter = relationship("User", backref="sent_invites", foreign_keys=[inviter_id])
valid = Column(Boolean, default=True)
def __repr__(self):

View File

@ -239,7 +239,7 @@ def create_member(workspace_id):
if form.validate():
try:
new_member = Workspaces.create_member(g.current_user, workspace, form.data)
invite = Invitations.create(workspace, new_member.user)
invite = Invitations.create(workspace, g.current_user, new_member.user)
send_invite_email(
g.current_user.full_name, invite.id, new_member.user.email
)

View File

@ -9,16 +9,17 @@ from tests.factories import WorkspaceFactory, UserFactory, InvitationFactory
def test_create_invitation():
workspace = WorkspaceFactory.create()
user = UserFactory.create()
invite = Invitations.create(workspace, user)
invite = Invitations.create(workspace, workspace.owner, user)
assert invite.user == user
assert invite.workspace == workspace
assert invite.inviter == workspace.owner
assert invite.valid
def test_accept_invitation():
workspace = WorkspaceFactory.create()
user = UserFactory.create()
invite = Invitations.create(workspace, user)
invite = Invitations.create(workspace, workspace.owner, user)
assert invite.valid
accepted_invite = Invitations.accept(invite.id)
assert not accepted_invite.valid