mirror of
https://github.com/gogcom/galaxy-integrations-python-api.git
synced 2025-12-31 19:08:16 -05:00
284 lines
8.2 KiB
Python
284 lines
8.2 KiB
Python
from unittest.mock import call
|
|
|
|
import pytest
|
|
|
|
from galaxy.api.consts import PresenceState
|
|
from galaxy.api.errors import BackendError
|
|
from galaxy.api.types import UserPresence
|
|
from galaxy.unittest.mock import async_return_value, skip_loop
|
|
from tests import create_message, get_messages
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_user_presence_success(plugin, read, write):
|
|
context = "abc"
|
|
user_id_list = ["666", "13", "42", "69", "22"]
|
|
plugin.prepare_user_presence_context.return_value = async_return_value(context)
|
|
request = {
|
|
"jsonrpc": "2.0",
|
|
"id": "11",
|
|
"method": "start_user_presence_import",
|
|
"params": {"user_id_list": user_id_list}
|
|
}
|
|
read.side_effect = [async_return_value(create_message(request)), async_return_value(b"", 10)]
|
|
plugin.get_user_presence.side_effect = [
|
|
async_return_value(UserPresence(
|
|
PresenceState.Unknown,
|
|
"game-id1",
|
|
None,
|
|
"unknown state",
|
|
None
|
|
)),
|
|
async_return_value(UserPresence(
|
|
PresenceState.Offline,
|
|
None,
|
|
None,
|
|
"Going to grandma's house",
|
|
None
|
|
)),
|
|
async_return_value(UserPresence(
|
|
PresenceState.Online,
|
|
"game-id3",
|
|
"game-title3",
|
|
"Pew pew",
|
|
None
|
|
)),
|
|
async_return_value(UserPresence(
|
|
PresenceState.Away,
|
|
None,
|
|
"game-title4",
|
|
"AFKKTHXBY",
|
|
None
|
|
)),
|
|
async_return_value(UserPresence(
|
|
PresenceState.Away,
|
|
None,
|
|
"game-title5",
|
|
None,
|
|
"Playing game-title5: In Menu"
|
|
)),
|
|
]
|
|
await plugin.run()
|
|
plugin.get_user_presence.assert_has_calls([
|
|
call(user_id, context) for user_id in user_id_list
|
|
])
|
|
plugin.user_presence_import_complete.assert_called_once_with()
|
|
|
|
assert get_messages(write) == [
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"id": "11",
|
|
"result": None
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_success",
|
|
"params": {
|
|
"user_id": "666",
|
|
"presence": {
|
|
"presence_state": PresenceState.Unknown.value,
|
|
"game_id": "game-id1",
|
|
"in_game_status": "unknown state"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_success",
|
|
"params": {
|
|
"user_id": "13",
|
|
"presence": {
|
|
"presence_state": PresenceState.Offline.value,
|
|
"in_game_status": "Going to grandma's house"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_success",
|
|
"params": {
|
|
"user_id": "42",
|
|
"presence": {
|
|
"presence_state": PresenceState.Online.value,
|
|
"game_id": "game-id3",
|
|
"game_title": "game-title3",
|
|
"in_game_status": "Pew pew"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_success",
|
|
"params": {
|
|
"user_id": "69",
|
|
"presence": {
|
|
"presence_state": PresenceState.Away.value,
|
|
"game_title": "game-title4",
|
|
"in_game_status": "AFKKTHXBY"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_success",
|
|
"params": {
|
|
"user_id": "22",
|
|
"presence": {
|
|
"presence_state": PresenceState.Away.value,
|
|
"game_title": "game-title5",
|
|
"full_status": "Playing game-title5: In Menu"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_finished",
|
|
"params": None
|
|
}
|
|
]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize("exception,code,message,internal_type", [
|
|
(BackendError, 4, "Backend error", "BackendError"),
|
|
(KeyError, 0, "Unknown error", "UnknownError")
|
|
])
|
|
async def test_get_user_presence_error(exception, code, message, internal_type, plugin, read, write):
|
|
user_id = "69"
|
|
request_id = "55"
|
|
plugin.prepare_user_presence_context.return_value = async_return_value(None)
|
|
request = {
|
|
"jsonrpc": "2.0",
|
|
"id": request_id,
|
|
"method": "start_user_presence_import",
|
|
"params": {"user_id_list": [user_id]}
|
|
}
|
|
read.side_effect = [async_return_value(create_message(request)), async_return_value(b"", 10)]
|
|
plugin.get_user_presence.side_effect = exception
|
|
await plugin.run()
|
|
plugin.get_user_presence.assert_called()
|
|
plugin.user_presence_import_complete.assert_called_once_with()
|
|
|
|
assert get_messages(write) == [
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"id": request_id,
|
|
"result": None
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_failure",
|
|
"params": {
|
|
"user_id": user_id,
|
|
"error": {
|
|
"code": code,
|
|
"message": message,
|
|
"data": {
|
|
"internal_type": internal_type
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_import_finished",
|
|
"params": None
|
|
}
|
|
]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_prepare_get_user_presence_context_error(plugin, read, write):
|
|
request_id = "31415"
|
|
plugin.prepare_user_presence_context.side_effect = BackendError()
|
|
request = {
|
|
"jsonrpc": "2.0",
|
|
"id": request_id,
|
|
"method": "start_user_presence_import",
|
|
"params": {"user_id_list": ["6"]}
|
|
}
|
|
read.side_effect = [async_return_value(create_message(request)), async_return_value(b"", 10)]
|
|
await plugin.run()
|
|
|
|
assert get_messages(write) == [
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"id": request_id,
|
|
"error": {
|
|
"code": 4,
|
|
"message": "Backend error",
|
|
"data": {
|
|
"internal_type": "BackendError"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_import_already_in_progress_error(plugin, read, write):
|
|
plugin.prepare_user_presence_context.return_value = async_return_value(None)
|
|
requests = [
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"id": "3",
|
|
"method": "start_user_presence_import",
|
|
"params": {
|
|
"user_id_list": ["42"]
|
|
}
|
|
},
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"id": "4",
|
|
"method": "start_user_presence_import",
|
|
"params": {
|
|
"user_id_list": ["666"]
|
|
}
|
|
}
|
|
]
|
|
read.side_effect = [
|
|
async_return_value(create_message(requests[0])),
|
|
async_return_value(create_message(requests[1])),
|
|
async_return_value(b"", 10)
|
|
]
|
|
|
|
await plugin.run()
|
|
|
|
responses = get_messages(write)
|
|
assert {
|
|
"jsonrpc": "2.0",
|
|
"id": "3",
|
|
"result": None
|
|
} in responses
|
|
assert {
|
|
"jsonrpc": "2.0",
|
|
"id": "4",
|
|
"error": {
|
|
"code": 600,
|
|
"message": "Import already in progress",
|
|
"data": {"internal_type": "ImportInProgress"}
|
|
}
|
|
} in responses
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_update_user_presence(plugin, write):
|
|
plugin.update_user_presence("42", UserPresence(PresenceState.Online, "game-id", "game-title", "Pew pew"))
|
|
await skip_loop()
|
|
|
|
assert get_messages(write) == [
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "user_presence_updated",
|
|
"params": {
|
|
"user_id": "42",
|
|
"presence": {
|
|
"presence_state": PresenceState.Online.value,
|
|
"game_id": "game-id",
|
|
"game_title": "game-title",
|
|
"in_game_status": "Pew pew"
|
|
}
|
|
}
|
|
}
|
|
]
|