ucast/ucast/tests/__init__.py

80 lines
2 KiB
Python

import json
import uuid
from dataclasses import dataclass
from datetime import datetime
from importlib import resources
from typing import Dict, List
from ucast.service import youtube
DIR_TESTFILES = resources.path("ucast.tests", "_testfiles")
def get_video_details(video_id: str):
with open(DIR_TESTFILES / "object" / "videodetails.json") as f:
videodetails = json.load(f)
vd_raw = videodetails[video_id]
vd_raw["published"] = datetime.fromisoformat(vd_raw["published"])
return youtube.VideoDetails(**vd_raw)
def get_channel_metadata(channel_url: str):
with open(DIR_TESTFILES / "object" / "channelmeta.json") as f:
channelmeta = json.load(f)
return youtube.ChannelMetadata(**channelmeta[channel_url])
_global_mock_calls: Dict[str, List["_GlobalMockCall"]] = {}
@dataclass
class _GlobalMockCall:
args: list
kwargs: dict
class GlobalMock:
def __init__(self):
self.uuid = str(uuid.uuid4())
@property
def calls(self) -> List[_GlobalMockCall]:
global _global_mock_calls
if self.uuid not in _global_mock_calls:
_global_mock_calls[self.uuid] = []
return _global_mock_calls[self.uuid]
@property
def n_calls(self) -> int:
return len(self.calls)
def __call__(self, *args, **kwargs):
call = _GlobalMockCall(args, kwargs)
self.calls.append(call)
def assert_called(self):
if not self.calls:
raise AssertionError("Mock has never been called")
def assert_any_call(self, *args, **kwargs):
self.assert_called()
for call in self.calls:
if call.args == args and call.kwargs == kwargs:
return
raise AssertionError(
f"Call with args: {args}, kwargs: {kwargs} not found.\
Registered calls: {self.calls}"
)
def assert_called_with(self, *args, **kwargs):
self.assert_called()
call = self.calls[-1]
assert call.args == args and call.kwargs == kwargs