"""index.py unit tests.""" from datetime import datetime from datetime import timedelta from oto import response import pytest from disable_inactive_users.index import main from disable_inactive_users.index import user_is_inactive from disable_inactive_users.models import ows_users @pytest.mark.parametrize( 'last_login,created_at,expected_response', [ # last login 90 days ago ( (datetime.today() - timedelta(days=90)).isoformat(), (datetime.today() - timedelta(days=180)).isoformat(), True ), # last login 89 days ago ( (datetime.today() - timedelta(days=89)).isoformat(), (datetime.today() - timedelta(days=180)).isoformat(), False ), # user never logged in, created at < 90 days ago ( None, (datetime.today() - timedelta(days=45)).isoformat(), False ), # user never logged in, created at >= 90 days ago ( None, (datetime.today() - timedelta(days=90)).isoformat(), True ) ] ) def test_user_is_inactive( last_login, created_at, expected_response): """Test index.user_is_inactive().""" assert user_is_inactive(last_login, created_at) == expected_response def test_main(mocker): """Test execution of main loop.""" return_values = [ response.Response(message=[ # OK { 'last_login': (datetime.today() - timedelta(days=10)).isoformat(), # noqa 'created_at': (datetime.today() - timedelta(days=90)).isoformat(), # noqa 'user_id': 1111 }, # INACTIVE: last login >= 90 { 'last_login': (datetime.today() - timedelta(days=90)).isoformat(), # noqa 'created_at': (datetime.today() - timedelta(days=40)).isoformat(), # noqa 'user_id': 2222 } ]), response.Response(message=[ # OK: no last login, created at <= 90 { 'created_at': (datetime.today() - timedelta(days=40)).isoformat(), # noqa 'user_id': 3333 }, # INACTIVE: no last login, created at >= 90 days { 'created_at': (datetime.today() - timedelta(days=91)).isoformat(), # noqa 'user_id': 4444 } ]), response.Response(message=[ # SKIP: user is already blocked { 'created_at': (datetime.today() - timedelta(days=40)).isoformat(), # noqa 'user_id': 5555, 'blocked': True }, # SKIP: user is already blocked { 'created_at': (datetime.today() - timedelta(days=91)).isoformat(), # noqa 'user_id': 6666, 'blocked': True } ]), response.Response(message=[]) ] mocker.patch.object( ows_users, 'get_all_inactive_users', side_effect=return_values) mocker.patch.object( ows_users, 'block_user', return_value=response.Response(), autospec=True) main() assert ows_users.get_all_inactive_users.call_count == 4 assert ows_users.block_user.call_count == 2