mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-07 12:08:25 -04:00
Add an event if a user is archived
This adds a new type of event, 'archive_user', which stores the id of the archived user and the id of the user who is doing the archiving.
This commit is contained in:
@@ -25,6 +25,13 @@ def create_mobile_number_change_event(user_id, updated_by_id, original_mobile_nu
|
|||||||
new_mobile_number=new_mobile_number)
|
new_mobile_number=new_mobile_number)
|
||||||
|
|
||||||
|
|
||||||
|
def create_archive_user_event(user_id, archived_by_id):
|
||||||
|
_send_event(
|
||||||
|
'archive_user',
|
||||||
|
user_id=user_id,
|
||||||
|
archived_by_id=archived_by_id)
|
||||||
|
|
||||||
|
|
||||||
def _send_event(event_type, **kwargs):
|
def _send_event(event_type, **kwargs):
|
||||||
event_data = _construct_event_data(request)
|
event_data = _construct_event_data(request)
|
||||||
event_data.update(kwargs)
|
event_data.update(kwargs)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from flask import flash, redirect, render_template, request, url_for
|
from flask import flash, redirect, render_template, request, url_for
|
||||||
from flask_login import login_required
|
from flask_login import current_user, login_required
|
||||||
|
|
||||||
from app import user_api_client
|
from app import user_api_client
|
||||||
|
from app.event_handlers import create_archive_user_event
|
||||||
from app.main import main
|
from app.main import main
|
||||||
from app.main.forms import SearchUsersByEmailForm
|
from app.main.forms import SearchUsersByEmailForm
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
@@ -45,6 +46,8 @@ def user_information(user_id):
|
|||||||
def archive_user(user_id):
|
def archive_user(user_id):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
user_api_client.archive_user(user_id)
|
user_api_client.archive_user(user_id)
|
||||||
|
create_archive_user_event(str(user_id), current_user.id)
|
||||||
|
|
||||||
return redirect(url_for('.user_information', user_id=user_id))
|
return redirect(url_for('.user_information', user_id=user_id))
|
||||||
else:
|
else:
|
||||||
flash('There\'s no way to reverse this! Are you sure you want to archive this user?', 'delete')
|
flash('There\'s no way to reverse this! Are you sure you want to archive this user?', 'delete')
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import pytest
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from lxml import html
|
from lxml import html
|
||||||
@@ -166,6 +167,7 @@ def test_archive_user_posts_to_user_client(
|
|||||||
logged_in_platform_admin_client,
|
logged_in_platform_admin_client,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
mocker,
|
mocker,
|
||||||
|
mock_events,
|
||||||
):
|
):
|
||||||
mock_user_client = mocker.patch('app.user_api_client.post')
|
mock_user_client = mocker.patch('app.user_api_client.post')
|
||||||
|
|
||||||
@@ -176,3 +178,24 @@ def test_archive_user_posts_to_user_client(
|
|||||||
assert response.status_code == 302
|
assert response.status_code == 302
|
||||||
assert response.location == url_for('main.user_information', user_id=api_user_active.id, _external=True)
|
assert response.location == url_for('main.user_information', user_id=api_user_active.id, _external=True)
|
||||||
mock_user_client.assert_called_once_with('/user/{}/archive'.format(api_user_active.id), data=None)
|
mock_user_client.assert_called_once_with('/user/{}/archive'.format(api_user_active.id), data=None)
|
||||||
|
|
||||||
|
assert mock_events.called
|
||||||
|
|
||||||
|
|
||||||
|
def test_archive_user_does_not_create_event_if_user_client_raises_exception(
|
||||||
|
logged_in_platform_admin_client,
|
||||||
|
api_user_active,
|
||||||
|
mocker,
|
||||||
|
mock_events,
|
||||||
|
):
|
||||||
|
mock_user_client = mocker.patch('app.user_api_client.post', side_effect=Exception())
|
||||||
|
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
response = logged_in_platform_admin_client.post(
|
||||||
|
url_for('main.archive_user', user_id=api_user_active.id)
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 500
|
||||||
|
assert response.location == url_for('main.user_information', user_id=api_user_active.id, _external=True)
|
||||||
|
mock_user_client.assert_called_once_with('/user/{}/archive'.format(api_user_active.id), data=None)
|
||||||
|
assert not mock_events.called
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import uuid
|
|||||||
from unittest.mock import ANY
|
from unittest.mock import ANY
|
||||||
|
|
||||||
from app.event_handlers import (
|
from app.event_handlers import (
|
||||||
|
create_archive_user_event,
|
||||||
create_email_change_event,
|
create_email_change_event,
|
||||||
create_mobile_number_change_event,
|
create_mobile_number_change_event,
|
||||||
on_user_logged_in,
|
on_user_logged_in,
|
||||||
@@ -51,3 +52,18 @@ def test_create_mobile_number_change_event_calls_events_api(app_, mock_events):
|
|||||||
'updated_by_id': updated_by_id,
|
'updated_by_id': updated_by_id,
|
||||||
'original_mobile_number': '07700900000',
|
'original_mobile_number': '07700900000',
|
||||||
'new_mobile_number': '07700900999'})
|
'new_mobile_number': '07700900999'})
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_archive_user_event_calls_events_api(app_, mock_events):
|
||||||
|
user_id = str(uuid.uuid4())
|
||||||
|
archived_by_id = str(uuid.uuid4())
|
||||||
|
|
||||||
|
with app_.test_request_context():
|
||||||
|
create_archive_user_event(user_id, archived_by_id)
|
||||||
|
|
||||||
|
mock_events.assert_called_with('archive_user',
|
||||||
|
{'browser_fingerprint':
|
||||||
|
{'browser': ANY, 'version': ANY, 'platform': ANY, 'user_agent_string': ''},
|
||||||
|
'ip_address': ANY,
|
||||||
|
'user_id': user_id,
|
||||||
|
'archived_by_id': archived_by_id})
|
||||||
|
|||||||
Reference in New Issue
Block a user