Merge pull request #580 from GSA/notify-api-553

notify-api-533 add flask command to promote user to platform admin
This commit is contained in:
Carlo Costino
2023-11-07 12:53:41 -05:00
committed by GitHub
5 changed files with 54 additions and 7 deletions

View File

@@ -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()

View File

@@ -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:

View File

@@ -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(

View File

@@ -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:

View File

@@ -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