mirror of
https://github.com/Tech-Workers-Coalition-Italia/mobilizon-reshare.git
synced 2025-02-16 19:50:41 +01:00
test commands (#151)
* added twitter error handling * added facebook tests * added header format test * added multiple newlines check * added test list command * fixed commands structure
This commit is contained in:
parent
420f823dd4
commit
f04942eefe
@ -7,12 +7,15 @@ from mobilizon_reshare.cli import safe_execution
|
|||||||
from mobilizon_reshare.cli.commands.format.format import format_event
|
from mobilizon_reshare.cli.commands.format.format import format_event
|
||||||
from mobilizon_reshare.cli.commands.list.list_event import list_events
|
from mobilizon_reshare.cli.commands.list.list_event import list_events
|
||||||
from mobilizon_reshare.cli.commands.list.list_publication import list_publications
|
from mobilizon_reshare.cli.commands.list.list_publication import list_publications
|
||||||
from mobilizon_reshare.cli.commands.recap.main import main as recap_main
|
from mobilizon_reshare.cli.commands.recap.main import recap_command as recap_main
|
||||||
from mobilizon_reshare.cli.commands.start.main import main as start_main
|
from mobilizon_reshare.cli.commands.start.main import start_command as start_main
|
||||||
from mobilizon_reshare.config.config import current_version
|
from mobilizon_reshare.config.config import current_version
|
||||||
from mobilizon_reshare.config.publishers import publisher_names
|
from mobilizon_reshare.config.publishers import publisher_names
|
||||||
from mobilizon_reshare.event.event import EventPublicationStatus
|
from mobilizon_reshare.event.event import EventPublicationStatus
|
||||||
from mobilizon_reshare.main.retry import retry, retry_publication
|
from mobilizon_reshare.cli.commands.retry.main import (
|
||||||
|
retry_event_command,
|
||||||
|
retry_publication_command,
|
||||||
|
)
|
||||||
from mobilizon_reshare.models.publication import PublicationStatus
|
from mobilizon_reshare.models.publication import PublicationStatus
|
||||||
|
|
||||||
status_name_to_enum = {
|
status_name_to_enum = {
|
||||||
@ -138,13 +141,13 @@ def format(
|
|||||||
@event.command(name="retry", help="Retries all the failed publications")
|
@event.command(name="retry", help="Retries all the failed publications")
|
||||||
@click.argument("event-id", type=click.UUID)
|
@click.argument("event-id", type=click.UUID)
|
||||||
def event_retry(event_id):
|
def event_retry(event_id):
|
||||||
safe_execution(functools.partial(retry, event_id),)
|
safe_execution(functools.partial(retry_event_command, event_id),)
|
||||||
|
|
||||||
|
|
||||||
@publication.command(name="retry", help="Retries a specific publication")
|
@publication.command(name="retry", help="Retries a specific publication")
|
||||||
@click.argument("publication-id", type=click.UUID)
|
@click.argument("publication-id", type=click.UUID)
|
||||||
def publication_retry(publication_id):
|
def publication_retry(publication_id):
|
||||||
safe_execution(functools.partial(retry_publication, publication_id),)
|
safe_execution(functools.partial(retry_publication_command, publication_id),)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -50,8 +50,13 @@ async def list_events(
|
|||||||
events = await list_unpublished_events(frm=frm, to=to)
|
events = await list_unpublished_events(frm=frm, to=to)
|
||||||
else:
|
else:
|
||||||
events = await events_with_status([status], from_date=frm, to_date=to)
|
events = await events_with_status([status], from_date=frm, to_date=to)
|
||||||
|
events = list(events)
|
||||||
if events:
|
if events:
|
||||||
show_events(events)
|
show_events(events)
|
||||||
else:
|
else:
|
||||||
click.echo(f"No event found with status: {status.name}")
|
message = (
|
||||||
|
f"No event found with status: {status.name}"
|
||||||
|
if status is not None
|
||||||
|
else "No event found"
|
||||||
|
)
|
||||||
|
click.echo(message)
|
||||||
|
@ -36,6 +36,11 @@ async def list_publications(
|
|||||||
publications = await publications_with_status(status, from_date=frm, to_date=to)
|
publications = await publications_with_status(status, from_date=frm, to_date=to)
|
||||||
|
|
||||||
if publications:
|
if publications:
|
||||||
show_publications(list(publications))
|
show_publications(publications)
|
||||||
else:
|
else:
|
||||||
click.echo(f"No publication found with status: {status.name}")
|
message = (
|
||||||
|
f"No publication found with status: {status.name}"
|
||||||
|
if status is not None
|
||||||
|
else "No publication found"
|
||||||
|
)
|
||||||
|
click.echo(message)
|
||||||
|
@ -5,7 +5,7 @@ from mobilizon_reshare.main.recap import recap
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def recap_command():
|
||||||
|
|
||||||
reports = await recap()
|
reports = await recap()
|
||||||
return 0 if reports and reports.successful else 1
|
return 0 if reports and reports.successful else 1
|
||||||
|
0
mobilizon_reshare/cli/commands/retry/__init__.py
Normal file
0
mobilizon_reshare/cli/commands/retry/__init__.py
Normal file
11
mobilizon_reshare/cli/commands/retry/main.py
Normal file
11
mobilizon_reshare/cli/commands/retry/main.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from mobilizon_reshare.main.retry import retry_publication, retry_event
|
||||||
|
|
||||||
|
|
||||||
|
async def retry_event_command(event_id):
|
||||||
|
reports = await retry_event(event_id)
|
||||||
|
return 0 if reports and reports.successful else 1
|
||||||
|
|
||||||
|
|
||||||
|
async def retry_publication_command(publication_id):
|
||||||
|
reports = await retry_publication(publication_id)
|
||||||
|
return 0 if reports and reports.successful else 1
|
@ -1,7 +1,7 @@
|
|||||||
from mobilizon_reshare.main.start import start
|
from mobilizon_reshare.main.start import start
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def start_command():
|
||||||
"""
|
"""
|
||||||
STUB
|
STUB
|
||||||
:return:
|
:return:
|
||||||
|
@ -37,7 +37,7 @@ async def retry_publication(publication_id):
|
|||||||
return PublisherCoordinator([publication]).run()
|
return PublisherCoordinator([publication]).run()
|
||||||
|
|
||||||
|
|
||||||
async def retry(mobilizon_event_id: UUID = None):
|
async def retry_event(mobilizon_event_id: UUID = None):
|
||||||
if mobilizon_event_id is None:
|
if mobilizon_event_id is None:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
"Autonomous retry not implemented yet, please specify an event_id"
|
"Autonomous retry not implemented yet, please specify an event_id"
|
||||||
|
99
tests/commands/test_list.py
Normal file
99
tests/commands/test_list.py
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from mobilizon_reshare.cli.commands.list.list_event import list_events
|
||||||
|
from mobilizon_reshare.cli.commands.list.list_publication import list_publications
|
||||||
|
from mobilizon_reshare.event.event import EventPublicationStatus
|
||||||
|
from mobilizon_reshare.models.publication import PublicationStatus
|
||||||
|
|
||||||
|
spec = {
|
||||||
|
# We need three events since recap will print only
|
||||||
|
# future events, but the 0th event happens at today + 0.
|
||||||
|
"event": 3,
|
||||||
|
"publications": [
|
||||||
|
{"event_idx": 1, "publisher_idx": 0, "status": PublicationStatus.COMPLETED},
|
||||||
|
{"event_idx": 2, "publisher_idx": 0, "status": PublicationStatus.FAILED},
|
||||||
|
],
|
||||||
|
"publisher": ["zulip"],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def clean_output(output):
|
||||||
|
return list(map(lambda x: x.strip(), output.out.rstrip().split("\n")))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_events(capsys, generate_models):
|
||||||
|
await generate_models(spec)
|
||||||
|
await list_events()
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == [
|
||||||
|
"event_0 WAITING 00000000-0000-0000-0000-000000000000"
|
||||||
|
" 2021-06-06T05:00:00+02:00 2021-06-06T07:00:00+02:00",
|
||||||
|
"event_1 COMPLETED 00000000-0000-0000-0000-000000000001"
|
||||||
|
" 2021-06-07T05:00:00+02:00 2021-06-07T07:00:00+02:00",
|
||||||
|
"event_2 FAILED 00000000-0000-0000-0000-000000000002"
|
||||||
|
" 2021-06-08T05:00:00+02:00 2021-06-08T07:00:00+02:00",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_events_with_status(capsys, generate_models):
|
||||||
|
await generate_models(spec)
|
||||||
|
await list_events(status=EventPublicationStatus.WAITING)
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == [
|
||||||
|
"event_0 WAITING 00000000-0000-0000-0000-000000000000"
|
||||||
|
" 2021-06-06T05:00:00+02:00 2021-06-06T07:00:00+02:00"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_publications(capsys, generate_models):
|
||||||
|
await generate_models(spec)
|
||||||
|
await list_publications()
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == [
|
||||||
|
"00000000-0000-0000-0000-000000000000 2021-06-06T03:00:00+00:00 "
|
||||||
|
"COMPLETED zulip 00000000-0000-0000-0000-000000000001",
|
||||||
|
"00000000-0000-0000-0000-000000000001 2021-06-06T04:00:00+00:00 "
|
||||||
|
"FAILED zulip 00000000-0000-0000-0000-000000000002",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_publications_with_status(capsys, generate_models):
|
||||||
|
await generate_models(spec)
|
||||||
|
await list_publications(status=PublicationStatus.FAILED)
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == [
|
||||||
|
"00000000-0000-0000-0000-000000000001 2021-06-06T04:00:00+00:00 "
|
||||||
|
"FAILED zulip 00000000-0000-0000-0000-000000000002"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_events_empty(capsys, generate_models):
|
||||||
|
await list_events()
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == ["No event found"]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_publications_empty(capsys, generate_models):
|
||||||
|
await list_publications()
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == ["No publication found"]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_events_empty_with_status(capsys, generate_models):
|
||||||
|
await list_events(status=EventPublicationStatus.FAILED)
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == ["No event found with status: FAILED"]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_publications_empty_with_status(capsys, generate_models):
|
||||||
|
await list_publications(status=PublicationStatus.FAILED)
|
||||||
|
output = capsys.readouterr()
|
||||||
|
assert clean_output(output) == ["No publication found with status: FAILED"]
|
@ -2,7 +2,7 @@ from logging import DEBUG
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from mobilizon_reshare.main.recap import recap
|
from mobilizon_reshare.cli.commands.recap.main import recap
|
||||||
from mobilizon_reshare.models.publication import PublicationStatus
|
from mobilizon_reshare.models.publication import PublicationStatus
|
||||||
|
|
||||||
spec = {
|
spec = {
|
||||||
|
@ -3,14 +3,14 @@ from logging import INFO
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from mobilizon_reshare.main.retry import retry
|
from mobilizon_reshare.main.retry import retry_event
|
||||||
from mobilizon_reshare.models.publication import PublicationStatus, Publication
|
from mobilizon_reshare.models.publication import PublicationStatus, Publication
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_retry_decision():
|
async def test_retry_decision():
|
||||||
with pytest.raises(NotImplementedError):
|
with pytest.raises(NotImplementedError):
|
||||||
await retry()
|
await retry_event()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
@ -24,7 +24,7 @@ async def test_retry(
|
|||||||
failed_publication,
|
failed_publication,
|
||||||
):
|
):
|
||||||
assert failed_publication.status == PublicationStatus.FAILED
|
assert failed_publication.status == PublicationStatus.FAILED
|
||||||
await retry(event_with_failed_publication.mobilizon_id)
|
await retry_event(event_with_failed_publication.mobilizon_id)
|
||||||
p = await Publication.filter(id=failed_publication.id).first()
|
p = await Publication.filter(id=failed_publication.id).first()
|
||||||
assert p.status == PublicationStatus.COMPLETED, p.id
|
assert p.status == PublicationStatus.COMPLETED, p.id
|
||||||
assert len(message_collector) == 1
|
assert len(message_collector) == 1
|
||||||
@ -39,7 +39,7 @@ async def test_retry_no_publications(
|
|||||||
stored_event, mock_publisher_config, message_collector, caplog
|
stored_event, mock_publisher_config, message_collector, caplog
|
||||||
):
|
):
|
||||||
with caplog.at_level(INFO):
|
with caplog.at_level(INFO):
|
||||||
await retry(stored_event.mobilizon_id)
|
await retry_event(stored_event.mobilizon_id)
|
||||||
assert "No failed publications found" in caplog.text
|
assert "No failed publications found" in caplog.text
|
||||||
assert len(message_collector) == 0
|
assert len(message_collector) == 0
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ async def test_retry_no_publications(
|
|||||||
async def test_retry_missing_event(mock_publisher_config, message_collector, caplog):
|
async def test_retry_missing_event(mock_publisher_config, message_collector, caplog):
|
||||||
event_id = uuid.uuid4()
|
event_id = uuid.uuid4()
|
||||||
with caplog.at_level(INFO):
|
with caplog.at_level(INFO):
|
||||||
await retry(event_id)
|
await retry_event(event_id)
|
||||||
assert f"Event with id {event_id} not found" in caplog.text
|
assert f"Event with id {event_id} not found" in caplog.text
|
||||||
|
|
||||||
assert len(message_collector) == 0
|
assert len(message_collector) == 0
|
||||||
@ -76,7 +76,7 @@ async def test_retry_mixed_publications(
|
|||||||
await p.save()
|
await p.save()
|
||||||
|
|
||||||
assert failed_publication.status == PublicationStatus.FAILED
|
assert failed_publication.status == PublicationStatus.FAILED
|
||||||
await retry(event_with_failed_publication.mobilizon_id)
|
await retry_event(event_with_failed_publication.mobilizon_id)
|
||||||
p = await Publication.filter(id=failed_publication.id).first()
|
p = await Publication.filter(id=failed_publication.id).first()
|
||||||
assert p.status == PublicationStatus.COMPLETED, p.id
|
assert p.status == PublicationStatus.COMPLETED, p.id
|
||||||
assert len(message_collector) == 1
|
assert len(message_collector) == 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user