mirror of
https://github.com/Tech-Workers-Coalition-Italia/mobilizon-reshare.git
synced 2025-02-06 04:13:27 +01:00
Merge pull request #111 from Tech-Workers-Coalition-Italia/test_new_event
added new test
This commit is contained in:
commit
572821d24f
@ -85,6 +85,14 @@ class MobilizonEvent:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_model(event: Event, tz: str = "UTC"):
|
def from_model(event: Event, tz: str = "UTC"):
|
||||||
publication_status = MobilizonEvent.compute_status(list(event.publications))
|
publication_status = MobilizonEvent.compute_status(list(event.publications))
|
||||||
|
publication_time = {}
|
||||||
|
|
||||||
|
for pub in event.publications:
|
||||||
|
if publication_status != EventPublicationStatus.WAITING:
|
||||||
|
assert pub.timestamp is not None
|
||||||
|
publication_time[pub.publisher.name] = arrow.get(
|
||||||
|
tortoise.timezone.localtime(value=pub.timestamp, timezone=tz)
|
||||||
|
).to("local")
|
||||||
return MobilizonEvent(
|
return MobilizonEvent(
|
||||||
name=event.name,
|
name=event.name,
|
||||||
description=event.description,
|
description=event.description,
|
||||||
@ -98,12 +106,6 @@ class MobilizonEvent:
|
|||||||
mobilizon_id=event.mobilizon_id,
|
mobilizon_id=event.mobilizon_id,
|
||||||
thumbnail_link=event.thumbnail_link,
|
thumbnail_link=event.thumbnail_link,
|
||||||
location=event.location,
|
location=event.location,
|
||||||
publication_time={
|
publication_time=publication_time,
|
||||||
pub.publisher.name: arrow.get(
|
|
||||||
tortoise.timezone.localtime(value=pub.timestamp, timezone=tz)
|
|
||||||
).to("local")
|
|
||||||
for pub in event.publications
|
|
||||||
if publication_status != EventPublicationStatus.WAITING
|
|
||||||
},
|
|
||||||
status=publication_status,
|
status=publication_status,
|
||||||
)
|
)
|
||||||
|
@ -38,5 +38,3 @@ build-backend = "poetry.core.masonry.api"
|
|||||||
[tool.poetry.scripts]
|
[tool.poetry.scripts]
|
||||||
mobilizon-reshare="mobilizon_reshare.cli.cli:mobilizon_reshare"
|
mobilizon-reshare="mobilizon_reshare.cli.cli:mobilizon_reshare"
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
|
||||||
addopts = "--cov-config=.coveragerc --cov=. --cov-report term-missing tests/"
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
from logging import DEBUG
|
import uuid
|
||||||
|
from logging import DEBUG, INFO
|
||||||
|
|
||||||
|
import arrow
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from mobilizon_reshare.storage.query.read import get_all_events
|
||||||
from tests.commands.conftest import simple_event_element
|
from tests.commands.conftest import simple_event_element
|
||||||
from mobilizon_reshare.event.event import MobilizonEvent, EventPublicationStatus
|
from mobilizon_reshare.event.event import MobilizonEvent, EventPublicationStatus
|
||||||
from mobilizon_reshare.main.start import start
|
from mobilizon_reshare.main.start import start
|
||||||
@ -11,8 +14,7 @@ from mobilizon_reshare.models.publication import PublicationStatus
|
|||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"elements",
|
"elements", [[]],
|
||||||
[[]],
|
|
||||||
)
|
)
|
||||||
async def test_start_no_event(
|
async def test_start_no_event(
|
||||||
mock_mobilizon_success_answer, mobilizon_answer, caplog, elements
|
mock_mobilizon_success_answer, mobilizon_answer, caplog, elements
|
||||||
@ -38,6 +40,7 @@ async def test_start_new_event(
|
|||||||
mock_publisher_config,
|
mock_publisher_config,
|
||||||
mock_publication_window,
|
mock_publication_window,
|
||||||
message_collector,
|
message_collector,
|
||||||
|
elements,
|
||||||
):
|
):
|
||||||
with caplog.at_level(DEBUG):
|
with caplog.at_level(DEBUG):
|
||||||
# calling the start command
|
# calling the start command
|
||||||
@ -57,9 +60,7 @@ async def test_start_new_event(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# the start command should save all the events in the database
|
# the start command should save all the events in the database
|
||||||
assert len(all_events) == len(
|
assert len(all_events) == len(elements), all_events
|
||||||
mobilizon_answer["data"]["group"]["organizedEvents"]["elements"]
|
|
||||||
), all_events
|
|
||||||
|
|
||||||
# it should create a publication for each publisher
|
# it should create a publication for each publisher
|
||||||
publications = all_events[0].publications
|
publications = all_events[0].publications
|
||||||
@ -85,8 +86,7 @@ async def test_start_new_event(
|
|||||||
"publisher_class", [pytest.lazy_fixture("mock_publisher_class")]
|
"publisher_class", [pytest.lazy_fixture("mock_publisher_class")]
|
||||||
)
|
)
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"elements",
|
"elements", [[]],
|
||||||
[[]],
|
|
||||||
)
|
)
|
||||||
@pytest.mark.parametrize("publication_window", [(0, 24)])
|
@pytest.mark.parametrize("publication_window", [(0, 24)])
|
||||||
async def test_start_event_from_db(
|
async def test_start_event_from_db(
|
||||||
@ -133,8 +133,7 @@ async def test_start_event_from_db(
|
|||||||
"publisher_class", [pytest.lazy_fixture("mock_publisher_invalid_class")]
|
"publisher_class", [pytest.lazy_fixture("mock_publisher_invalid_class")]
|
||||||
)
|
)
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"elements",
|
"elements", [[]],
|
||||||
[[]],
|
|
||||||
)
|
)
|
||||||
@pytest.mark.parametrize("publication_window", [(0, 24)])
|
@pytest.mark.parametrize("publication_window", [(0, 24)])
|
||||||
async def test_start_publisher_failure(
|
async def test_start_publisher_failure(
|
||||||
@ -179,3 +178,69 @@ async def test_start_publisher_failure(
|
|||||||
MobilizonEvent.from_model(event_model).status
|
MobilizonEvent.from_model(event_model).status
|
||||||
== EventPublicationStatus.FAILED
|
== EventPublicationStatus.FAILED
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
async def published_event(event_generator):
|
||||||
|
|
||||||
|
event = event_generator()
|
||||||
|
event_model = event.to_model()
|
||||||
|
await event_model.save()
|
||||||
|
assert await start() is None
|
||||||
|
await event_model.refresh_from_db()
|
||||||
|
await event_model.fetch_related("publications")
|
||||||
|
for pub in event_model.publications:
|
||||||
|
pub.timestamp = arrow.now().shift(days=-2).datetime
|
||||||
|
await pub.save()
|
||||||
|
return event_model
|
||||||
|
|
||||||
|
|
||||||
|
def second_event_element():
|
||||||
|
return {
|
||||||
|
"beginsOn": "2021-05-23T12:15:00Z",
|
||||||
|
"description": "description of the second event",
|
||||||
|
"endsOn": "2021-05-23T15:15:00Z",
|
||||||
|
"onlineAddress": None,
|
||||||
|
"options": {"showEndTime": True, "showStartTime": True},
|
||||||
|
"physicalAddress": None,
|
||||||
|
"picture": None,
|
||||||
|
"title": "test event",
|
||||||
|
"url": "https://some_mobilizon/events/1e2e5943-4a5c-497a-b65d-90457b715d7b",
|
||||||
|
"uuid": str(uuid.uuid4()),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"publisher_class", [pytest.lazy_fixture("mock_publisher_class")]
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"elements", [[second_event_element()]],
|
||||||
|
)
|
||||||
|
@pytest.mark.parametrize("publication_window", [(0, 24)])
|
||||||
|
async def test_start_second_execution(
|
||||||
|
mock_mobilizon_success_answer,
|
||||||
|
mobilizon_answer,
|
||||||
|
caplog,
|
||||||
|
mock_publisher_config,
|
||||||
|
mock_publication_window,
|
||||||
|
message_collector,
|
||||||
|
event_generator,
|
||||||
|
published_event,
|
||||||
|
):
|
||||||
|
# the fixture published_event provides an existing event in the db
|
||||||
|
|
||||||
|
# I clean the message collector
|
||||||
|
message_collector.data = []
|
||||||
|
|
||||||
|
with caplog.at_level(INFO):
|
||||||
|
# calling the start command
|
||||||
|
assert await start() is None
|
||||||
|
|
||||||
|
# verify that the second event gets published
|
||||||
|
assert "Event to publish found" in caplog.text
|
||||||
|
assert message_collector == [
|
||||||
|
"test event|description of the second event",
|
||||||
|
]
|
||||||
|
# I verify that the db event and the new event coming from mobilizon are both in the db
|
||||||
|
assert len(list(await get_all_events())) == 2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user