diff --git a/app/commands.py b/app/commands.py index feab587d4..d0f7df409 100644 --- a/app/commands.py +++ b/app/commands.py @@ -830,3 +830,14 @@ def create_new_service(name, message_limit, restricted, email_from, created_by_i except IntegrityError: print("duplicate service", service.name) db.session.rollback() + + +@notify_command(name="promote-user-to-platform-admin") +@click.option("-u", "--user-email-address", required=True, prompt=True) +def promote_user_to_platform_admin(user_email_address): + # If the email address is wrong, sqlalchemy will automatically raise a NoResultFound error which is what we want. + # See tests. + user = get_user_by_email(user_email_address) + user.platform_admin = True + db.session.add(user) + db.session.commit() diff --git a/app/dao/__init__.py b/app/dao/__init__.py index 5727c115f..ea889ce47 100644 --- a/app/dao/__init__.py +++ b/app/dao/__init__.py @@ -17,13 +17,6 @@ class DAOClass(object): if _commit: db.session.commit() - def update_instance(self, inst, update_dict, _commit=True): - # Make sure the id is not included in the update_dict - update_dict.pop("id") - self.Meta.model.query.filter_by(id=inst.id).update(update_dict) - if _commit: - db.session.commit() - def delete_instance(self, inst, _commit=True): db.session.delete(inst) if _commit: diff --git a/tests/app/conftest.py b/tests/app/conftest.py index 55828ed35..13e0c0b09 100644 --- a/tests/app/conftest.py +++ b/tests/app/conftest.py @@ -182,6 +182,11 @@ def sample_user(notify_db_session): return create_user(email="notify@digital.fake.gov") +@pytest.fixture(scope="function") +def sample_platform_admin(notify_db_session): + return create_user(email="notify_pa@digital.fake.gov", platform_admin=True) + + @pytest.fixture(scope="function") def notify_user(notify_db_session): return create_user( diff --git a/tests/app/db.py b/tests/app/db.py index 63d7720bc..56a33335f 100644 --- a/tests/app/db.py +++ b/tests/app/db.py @@ -70,6 +70,7 @@ def create_user( state="active", id_=None, name="Test User", + platform_admin=False, ): data = { "id": id_ or uuid.uuid4(), @@ -78,6 +79,7 @@ def create_user( "password": "password", "mobile_number": mobile_number, "state": state, + "platform_admin": platform_admin, } user = User.query.filter_by(email_address=email).first() if not user: diff --git a/tests/app/test_commands.py b/tests/app/test_commands.py index 1d81f1f95..c13ac3dd3 100644 --- a/tests/app/test_commands.py +++ b/tests/app/test_commands.py @@ -14,10 +14,12 @@ from app.commands import ( populate_annual_billing_with_the_previous_years_allowance, populate_organization_agreement_details_from_file, populate_organizations_from_file, + promote_user_to_platform_admin, purge_functional_test_data, update_jobs_archived_flag, ) from app.dao.inbound_numbers_dao import dao_get_available_inbound_numbers +from app.dao.users_dao import get_user_by_email from app.models import ( KEY_TYPE_NORMAL, NOTIFICATION_DELIVERED, @@ -395,3 +397,37 @@ def test_create_service_command(notify_db_session, notify_api): assert service.email_from == "somebody@fake.gov" assert service.restricted is False assert service.message_limit == 40000 + + +def test_promote_user_to_platform_admin( + notify_db_session, notify_api, sample_user, sample_platform_admin +): + assert sample_user.platform_admin is False + assert sample_platform_admin.platform_admin is True + + notify_api.test_cli_runner().invoke( + promote_user_to_platform_admin, + [ + "-u", + "notify@digital.fake.gov", + ], + ) + + user = get_user_by_email("notify@digital.fake.gov") + assert user.platform_admin is True + + +def test_promote_user_to_platform_admin_no_result_found( + notify_db_session, notify_api, sample_user +): + assert sample_user.platform_admin is False + + result = notify_api.test_cli_runner().invoke( + promote_user_to_platform_admin, + [ + "-u", + "notify@digital.fake.asefasefasefasef", + ], + ) + assert "NoResultFound" in str(result) + assert sample_user.platform_admin is False