Mobilizon-Reshare-condividi.../tests/publishers/test_zulip.py

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"