From 59aec1939c8a06b2cb80d90090d402bd380e7523 Mon Sep 17 00:00:00 2001 From: Adam Shimali Date: Mon, 29 Feb 2016 09:49:12 +0000 Subject: [PATCH] [WIP] invited user now has comma separated permission values stored against it so that user can be created with correct permissions. --- app/models.py | 6 +++++ app/schemas.py | 1 + .../0029_add_permissions_to_invite.py | 26 +++++++++++++++++++ scripts/run_celery.sh | 2 +- tests/app/conftest.py | 3 ++- tests/app/dao/test_invited_user_dao.py | 7 ++++- tests/app/invite/test_invite_rest.py | 7 +++-- 7 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 migrations/versions/0029_add_permissions_to_invite.py diff --git a/app/models.py b/app/models.py index f0a094d8d..5ca98f893 100644 --- a/app/models.py +++ b/app/models.py @@ -264,6 +264,12 @@ class InvitedUser(db.Model): default=datetime.datetime.now) status = db.Column( db.Enum(*INVITED_USER_STATUS_TYPES, name='invited_users_status_types'), nullable=False, default='pending') + permissions = db.Column(db.String, nullable=False) + + # would like to have used properties for this but haven't found a way to make them + # play nice with marshmallow yet + def get_permissions(self): + return self.permissions.split(',') class Permission(db.Model): diff --git a/app/schemas.py b/app/schemas.py index 80b0b72e1..d2e9d53c8 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -166,6 +166,7 @@ class NotificationStatusSchema(BaseSchema): class InvitedUserSchema(BaseSchema): + class Meta: model = models.InvitedUser diff --git a/migrations/versions/0029_add_permissions_to_invite.py b/migrations/versions/0029_add_permissions_to_invite.py new file mode 100644 index 000000000..b00cbee62 --- /dev/null +++ b/migrations/versions/0029_add_permissions_to_invite.py @@ -0,0 +1,26 @@ +"""empty message + +Revision ID: 0029_add_permissions_to_invite +Revises: 0028_add_default_permissions +Create Date: 2016-02-26 16:17:30.612924 + +""" + +# revision identifiers, used by Alembic. +revision = '0029_add_permissions_to_invite' +down_revision = '0028_add_default_permissions' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.add_column('invited_users', sa.Column('permissions', sa.String(), nullable=False)) + ### end Alembic commands ### + + +def downgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.drop_column('invited_users', 'permissions') + ### end Alembic commands ### diff --git a/scripts/run_celery.sh b/scripts/run_celery.sh index eb0e1805b..f8c7e674b 100755 --- a/scripts/run_celery.sh +++ b/scripts/run_celery.sh @@ -3,4 +3,4 @@ set -e source environment.sh -celery -A run_celery.notify_celery worker --loglevel=INFO --logfile=/var/log/notify/application.log --concurrency=4 -Q sms,sms-code,email-code,email,process-job,bulk-sms,bulk-email +celery -A run_celery.notify_celery worker --loglevel=INFO --concurrency=4 -Q sms,sms-code,email-code,email,process-job,bulk-sms,bulk-email diff --git a/tests/app/conftest.py b/tests/app/conftest.py index f95d37a38..b0a9626bc 100644 --- a/tests/app/conftest.py +++ b/tests/app/conftest.py @@ -316,7 +316,8 @@ def sample_invited_user(notify_db, data = { 'service': service, 'email_address': to_email_address, - 'from_user': from_user + 'from_user': from_user, + 'permissions': 'send_messages,manage_service,manage_api_keys' } invited_user = InvitedUser(**data) save_invited_user(invited_user) diff --git a/tests/app/dao/test_invited_user_dao.py b/tests/app/dao/test_invited_user_dao.py index 843933cd5..105097bc3 100644 --- a/tests/app/dao/test_invited_user_dao.py +++ b/tests/app/dao/test_invited_user_dao.py @@ -17,7 +17,8 @@ def test_create_invited_user(notify_db, notify_db_session, sample_service): data = { 'service': sample_service, 'email_address': email_address, - 'from_user': invite_from + 'from_user': invite_from, + 'permissions': 'send_messages,manage_service' } invited_user = InvitedUser(**data) @@ -26,6 +27,10 @@ def test_create_invited_user(notify_db, notify_db_session, sample_service): assert InvitedUser.query.count() == 1 assert invited_user.email_address == email_address assert invited_user.from_user == invite_from + permissions = invited_user.get_permissions() + assert len(permissions) == 2 + assert 'send_messages' in permissions + assert 'manage_service' in permissions def test_get_invited_user(notify_db, notify_db_session, sample_invited_user): diff --git a/tests/app/invite/test_invite_rest.py b/tests/app/invite/test_invite_rest.py index e0214fcb1..5e1c6f1e8 100644 --- a/tests/app/invite/test_invite_rest.py +++ b/tests/app/invite/test_invite_rest.py @@ -14,7 +14,8 @@ def test_create_invited_user(notify_api, sample_service): data = { 'service': str(sample_service.id), 'email_address': email_address, - 'from_user': invite_from.id + 'from_user': invite_from.id, + 'permissions': 'send_messages,manage_service,manage_api_keys' } data = json.dumps(data) @@ -36,6 +37,7 @@ def test_create_invited_user(notify_api, sample_service): assert json_resp['data']['service'] == str(sample_service.id) assert json_resp['data']['email_address'] == email_address assert json_resp['data']['from_user'] == invite_from.id + assert json_resp['data']['permissions'] == 'send_messages,manage_service,manage_api_keys' assert json_resp['data']['id'] @@ -49,7 +51,8 @@ def test_create_invited_user_invalid_email(notify_api, sample_service): data = { 'service': str(sample_service.id), 'email_address': email_address, - 'from_user': invite_from.id + 'from_user': invite_from.id, + 'permissions': 'send_messages,manage_service,manage_api_keys' } data = json.dumps(data)