Exemplo n.º 1
0
def test_log_if_unable_to_update_task_data(context, mocker: MockerFixture,
                                           capsys):
    @task
    def task_app(event, api):
        return True

    event = RawTaskEvent(task_id='0', version=2).dict()

    mocker.patch.object(
        RawTaskEvent,
        'get_task_event',
        return_value=TaskEvent(asset_id=int(), company_id=int()),
    )
    update_task_data_patch = mocker.patch.object(
        RawTaskEvent,
        'update_task_data',
        side_effect=Exception,
    )

    task_app(event, context)

    captured = capsys.readouterr()

    assert 'ASSET=0' in captured.out
    assert 'Could not update task data.' in captured.out
    update_task_data_patch.assert_called_once()
Exemplo n.º 2
0
def test_lambda_succeeds_if_user_app_fails(
    status,
    side_effect,
    context,
    mocker: MockerFixture,
    requests_mock: RequestsMocker,
):
    event = RawTaskEvent(task_id='0', version=2).dict()

    mocker.patch.object(
        RawTaskEvent,
        'get_task_event',
        return_value=TaskEvent(asset_id=int(), company_id=int()),
    )
    put_mock = requests_mock.put(re.compile(f'/v2/tasks/0/{status}'))

    result = task(mocker.Mock(side_effect=side_effect,
                              return_value=True))(event, context)[0]

    assert put_mock.called_once

    if status == 'fail':
        assert put_mock.request_history[0].json() == {
            'fail_reason': 'test_user_app_raises'
        }
        assert result is None

    if status == 'success':
        assert put_mock.request_history[0].json() == {'payload': True}
        assert result is True
Exemplo n.º 3
0
def test_task_app_runner(app_runner):
    """Should not raise."""
    @task
    def task_app(event, api):
        return 'Task app result'

    event = TaskEvent(asset_id=int(), company_id=int())

    assert app_runner(task_app, event) == 'Task app result'
Exemplo n.º 4
0
def test_task_logging(context, capsys, mocker: MockerFixture):
    @task
    def app(event, api):
        Logger.warning('Hello, World!')

    raw_event = RawTaskEvent(task_id='0', version=2).dict()
    event = TaskEvent(asset_id=0, company_id=int())

    mocker.patch.object(
        RawTaskEvent,
        'get_task_event',
        return_value=TaskEvent(asset_id=0, company_id=int()),
    )
    mocker.patch.object(RawTaskEvent, 'update_task_data')

    with freezegun.freeze_time(datetime.datetime(2021, 1, 2, 3, 4, 5, 678910)):
        app(raw_event, context)

    captured = capsys.readouterr()

    assert (captured.out ==
            f'2021-01-02T03:04:05.678Z {context.aws_request_id} WARNING '
            f'ASSET={event.asset_id} | Hello, World!\n')
Exemplo n.º 5
0
def test_task_app_succeeds(context, requests_mock: RequestsMocker):
    @task
    def task_app(event, api):
        return True

    event = RawTaskEvent(task_id='0', version=2).dict()

    get_mock = requests_mock.get(
        re.compile('/v2/tasks/0'),
        json=TaskEvent(asset_id=int(), company_id=int()).dict(),
    )
    put_mock = requests_mock.put(re.compile('/v2/tasks/0/success'))

    result = task_app(event, context)[0]

    assert get_mock.called_once
    assert put_mock.called_once

    assert put_mock.request_history[0].json() == {'payload': True}
    assert result is True
Exemplo n.º 6
0
def test_custom_log_handler(context, mocker: MockerFixture, capsys):
    @task(handler=logging.StreamHandler())
    def app(event, api):
        Logger.info('Info message!')

    raw_event = RawTaskEvent(task_id='0', version=2).dict()
    event = TaskEvent(asset_id=0, company_id=int())

    mocker.patch.object(
        RawTaskEvent,
        'get_task_event',
        return_value=event,
    )
    mocker.patch.object(RawTaskEvent, 'update_task_data')

    app(raw_event, context)

    captured = capsys.readouterr()

    assert captured.out.endswith('Info message!\n')
    assert captured.err == 'Info message!\n'
Exemplo n.º 7
0
def test_lambda_succeeds_if_unable_to_update_task_data(context,
                                                       mocker: MockerFixture):
    @task
    def task_app(event, api):
        return True

    event = RawTaskEvent(task_id='0', version=2).dict()

    mocker.patch.object(
        RawTaskEvent,
        'get_task_event',
        return_value=TaskEvent(asset_id=int(), company_id=int()),
    )
    update_task_data_patch = mocker.patch.object(
        RawTaskEvent,
        'update_task_data',
        side_effect=Exception,
    )

    task_app(event, context)

    update_task_data_patch.assert_called_once()
Exemplo n.º 8
0
def test_log_if_user_app_fails(
    context,
    mocker: MockerFixture,
    requests_mock: RequestsMocker,
    capsys,
):
    event = RawTaskEvent(task_id='0', version=2).dict()

    mocker.patch.object(
        RawTaskEvent,
        'get_task_event',
        return_value=TaskEvent(asset_id=int(), company_id=int()),
    )
    put_mock = requests_mock.put(re.compile('/v2/tasks/0/fail'))

    task(mocker.Mock(side_effect=Exception))(event, context)

    captured = capsys.readouterr()

    assert put_mock.called_once
    assert 'ASSET=0' in captured.out
    assert 'Task app failed to execute.' in captured.out
Exemplo n.º 9
0
import pytest
from pytest_mock import MockerFixture
from requests_mock import Mocker as RequestsMocker

from corva import Logger
from corva.handlers import task
from corva.models.task import RawTaskEvent, TaskEvent


@pytest.mark.parametrize(
    'status_code,json,status',
    (
        [400, None, 'fail'],
        [
            200,
            TaskEvent(asset_id=int(), company_id=int()).dict(),
            'success',
        ],
    ),
)
def test_lambda_succeeds_if_unable_to_get_task_event(
    status_code,
    json,
    status,
    context,
    requests_mock: RequestsMocker,
):
    @task
    def task_app(event, api):
        return True
Exemplo n.º 10
0
def api(app_runner) -> Api:
    """Returns Api instance from task app."""

    event = TaskEvent(asset_id=int(), company_id=int())

    return app_runner(app, event)