140 lines
4.0 KiB
Python
140 lines
4.0 KiB
Python
import pytest
|
|
import responses
|
|
|
|
from mobilizon_reshare.config.config import get_settings
|
|
from mobilizon_reshare.models.publication import PublicationStatus
|
|
from mobilizon_reshare.publishers import get_active_publishers
|
|
from mobilizon_reshare.publishers.coordinator import PublisherCoordinator
|
|
from mobilizon_reshare.storage.query import (
|
|
get_publishers,
|
|
update_publishers,
|
|
publications_with_status,
|
|
get_all_events,
|
|
)
|
|
|
|
|
|
api_uri = "https://zulip.twc-italia.org/api/v1/"
|
|
users_me = {
|
|
"result": "success",
|
|
"msg": "",
|
|
"email": "giacomotest2-bot@zulip.twc-italia.org",
|
|
"user_id": 217,
|
|
"avatar_version": 1,
|
|
"is_admin": False,
|
|
"is_owner": False,
|
|
"is_guest": False,
|
|
"is_bot": True,
|
|
"full_name": "Bot test Giacomo2",
|
|
"timezone": "",
|
|
"is_active": True,
|
|
"date_joined": "2021-09-13T19:36:45.857782+00:00",
|
|
"avatar_url": "https://secure.gravatar.com/avatar/d2d9a932bf9ff69d4e3cdf2203271500",
|
|
"bot_type": 1,
|
|
"bot_owner_id": 14,
|
|
"max_message_id": 8048,
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def mocked_valid_response():
|
|
with responses.RequestsMock() as rsps:
|
|
rsps.add(
|
|
responses.GET,
|
|
api_uri + "users/me",
|
|
json=users_me,
|
|
status=200,
|
|
)
|
|
rsps.add(
|
|
responses.POST,
|
|
api_uri + "messages",
|
|
json={"result": "success", "msg": "", "id": 8049},
|
|
status=200,
|
|
)
|
|
yield
|
|
|
|
|
|
@pytest.fixture
|
|
def mocked_credential_error_response():
|
|
with responses.RequestsMock() as rsps:
|
|
rsps.add(
|
|
responses.GET,
|
|
api_uri + "users/me",
|
|
json={"result": "error", "msg": "Your credentials are not valid!"},
|
|
status=403,
|
|
)
|
|
yield
|
|
|
|
|
|
@pytest.fixture
|
|
def mocked_client_error_response():
|
|
with responses.RequestsMock() as rsps:
|
|
rsps.add(
|
|
responses.GET,
|
|
api_uri + "users/me",
|
|
json=users_me,
|
|
status=200,
|
|
)
|
|
rsps.add(
|
|
responses.POST,
|
|
api_uri + "messages",
|
|
json={"result": "error", "msg": "Invalid request"},
|
|
status=400,
|
|
)
|
|
yield
|
|
|
|
|
|
@pytest.fixture
|
|
@pytest.mark.asyncio
|
|
async def setup_db(event_model_generator, publication_model_generator):
|
|
settings = get_settings()
|
|
for publisher in get_active_publishers():
|
|
if publisher != "zulip":
|
|
settings["publisher"][publisher]["active"] = False
|
|
settings["publisher"]["zulip"][
|
|
"bot_email"
|
|
] = "giacomotest2-bot@zulip.twc-italia.org"
|
|
|
|
await update_publishers(["zulip"])
|
|
publisher = await get_publishers(name="zulip")
|
|
event = event_model_generator()
|
|
await event.save()
|
|
publication = publication_model_generator(
|
|
event_id=event.id, publisher_id=publisher.id
|
|
)
|
|
await publication.save()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_zulip_publisher(mocked_valid_response, setup_db):
|
|
|
|
report = PublisherCoordinator(
|
|
list(await get_all_events())[0],
|
|
await publications_with_status(status=PublicationStatus.WAITING),
|
|
).run()
|
|
|
|
assert list(report.reports.values())[0].status == PublicationStatus.COMPLETED
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_zulip_publishr_failure_invalid_credentials(
|
|
mocked_credential_error_response, setup_db
|
|
):
|
|
report = PublisherCoordinator(
|
|
list(await get_all_events())[0],
|
|
await publications_with_status(status=PublicationStatus.WAITING),
|
|
).run()
|
|
assert list(report.reports.values())[0].status == PublicationStatus.FAILED
|
|
assert list(report.reports.values())[0].reason == "Invalid credentials"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_zulip_publishr_failure_client_error(
|
|
mocked_client_error_response, setup_db
|
|
):
|
|
report = PublisherCoordinator(
|
|
list(await get_all_events())[0],
|
|
await publications_with_status(status=PublicationStatus.WAITING),
|
|
).run()
|
|
assert list(report.reports.values())[0].status == PublicationStatus.FAILED
|
|
assert list(report.reports.values())[0].reason == "400 Error - Invalid request"
|