Skip to content

Commit a8584a7

Browse files
committed
test: add telegram action tests
1 parent 02332e4 commit a8584a7

File tree

13 files changed

+143
-32
lines changed

13 files changed

+143
-32
lines changed

backend/lib/github/triggers.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ class GithubTriggerState(pydantic_utils.BaseModel):
221221

222222

223223
@dataclasses.dataclass(frozen=True)
224-
class GithubTriggerProcessor(task_base.TriggerProcessor[GithubTriggerConfig]):
224+
class GithubTriggerProcessor(task_base.BaseTriggerProcessor[GithubTriggerConfig]):
225225
config: GithubTriggerConfig
226226
raw_state: lib.task.protocols.StateProtocol
227227
gql_github_client: github_clients.GqlGithubClient
@@ -258,26 +258,33 @@ async def _acquire_state(self) -> typing.AsyncIterator[GithubTriggerState]:
258258
finally:
259259
await self.raw_state.set(state.model_dump(mode="json"))
260260

261-
async def produce_events(self) -> typing.AsyncGenerator[task_base.Event, None]:
262-
repositories: list[github_models.Repository] = []
261+
async def _get_repositories(self) -> list[github_models.Repository]:
262+
request = github_clients.GetRepositoriesRequest(
263+
owner=self.config.owner,
264+
)
263265

264-
async for repository in self.gql_github_client.get_repositories(
265-
github_clients.GetRepositoriesRequest(
266-
owner=self.config.owner,
267-
)
268-
):
266+
result: list[github_models.Repository] = []
267+
268+
async for repository in self.gql_github_client.get_repositories(request):
269269
if self.config.is_repository_applicable(repository):
270-
repositories.append(repository)
270+
result.append(repository)
271+
272+
return result
273+
274+
async def produce_events(self) -> typing.AsyncGenerator[task_base.Event, None]:
275+
repositories = await self._get_repositories()
271276

272277
async with self._acquire_state() as state:
273-
async for event in asyncio_utils.GatherIterators(
278+
iterators = (
274279
self._process_subtrigger_factory(
275280
subtrigger=subtrigger,
276281
state=state,
277282
repositories=repositories,
278283
)
279284
for subtrigger in self.config.subtriggers
280-
):
285+
)
286+
287+
async for event in asyncio_utils.GatherIterators(iterators):
281288
yield event
282289

283290
def _process_subtrigger_factory(

backend/lib/task/base/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from .action import (
2-
ActionProcessor,
32
ActionProcessorProtocol,
43
BaseActionConfig,
4+
BaseActionProcessor,
55
action_config_factory,
66
action_processor_factory,
77
register_action,
@@ -16,26 +16,26 @@
1616
from .task import BaseTaskConfig, CronTaskConfig, OncePerRunTaskConfig
1717
from .trigger import (
1818
BaseTriggerConfig,
19-
TriggerProcessor,
19+
BaseTriggerProcessor,
2020
TriggerProcessorProtocol,
2121
register_trigger,
2222
trigger_config_factory,
2323
trigger_processor_factory,
2424
)
2525

2626
__all__ = [
27-
"ActionProcessor",
2827
"ActionProcessorProtocol",
2928
"BaseActionConfig",
29+
"BaseActionProcessor",
3030
"BaseSecretConfig",
3131
"BaseTaskConfig",
3232
"BaseTriggerConfig",
33+
"BaseTriggerProcessor",
3334
"CronTaskConfig",
3435
"EnvSecretConfig",
3536
"Event",
3637
"OncePerRunTaskConfig",
3738
"RootConfig",
38-
"TriggerProcessor",
3939
"TriggerProcessorProtocol",
4040
"action_config_factory",
4141
"action_processor_factory",

backend/lib/task/base/action.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def factory(cls, data: typing.Any) -> "BaseActionConfig":
1818
return action_config_factory(data)
1919

2020

21-
class ActionProcessor[ConfigT: BaseActionConfig](abc.ABC):
21+
class BaseActionProcessor[ConfigT: BaseActionConfig](abc.ABC):
2222
@classmethod
2323
@abc.abstractmethod
2424
def from_config(
@@ -35,7 +35,7 @@ async def process(self, event: task_configs_event.Event) -> None: ...
3535
@dataclasses.dataclass(frozen=True)
3636
class RegistryRecord[ConfigT: BaseActionConfig]:
3737
config_class: type[ConfigT]
38-
processor_class: type[ActionProcessor[ConfigT]]
38+
processor_class: type[BaseActionProcessor[ConfigT]]
3939

4040

4141
_REGISTRY: dict[str, RegistryRecord[typing.Any]] = {}
@@ -44,7 +44,7 @@ class RegistryRecord[ConfigT: BaseActionConfig]:
4444
def register_action[ConfigT: BaseActionConfig](
4545
name: str,
4646
config_class: type[ConfigT],
47-
processor_class: type[ActionProcessor[ConfigT]],
47+
processor_class: type[BaseActionProcessor[ConfigT]],
4848
) -> None:
4949
_REGISTRY[name] = RegistryRecord(config_class=config_class, processor_class=processor_class)
5050

@@ -68,9 +68,9 @@ def action_processor_factory(
6868

6969

7070
__all__ = [
71-
"ActionProcessor",
7271
"ActionProcessorProtocol",
7372
"BaseActionConfig",
73+
"BaseActionProcessor",
7474
"action_config_factory",
7575
"action_processor_factory",
7676
"register_action",

backend/lib/task/base/secret.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ class BaseSecretConfig(pydantic_utils.TypedBaseModel):
1515
def value(self) -> typing.Any: ...
1616

1717

18+
class PlainSecretConfig(BaseSecretConfig):
19+
plain_value: str
20+
21+
@property
22+
def value(self) -> str:
23+
return self.plain_value
24+
25+
1826
class EnvSecretConfig(BaseSecretConfig):
1927
key: str
2028

@@ -29,6 +37,7 @@ def value(self) -> str:
2937
def register_default_plugins() -> None:
3038
logger.info("Registering default task base secret plugins")
3139
BaseSecretConfig.register("env", EnvSecretConfig)
40+
BaseSecretConfig.register("plain", PlainSecretConfig)
3241

3342

3443
__all__ = [

backend/lib/task/base/trigger.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def factory(cls, data: typing.Any) -> "BaseTriggerConfig":
1919
return trigger_config_factory(data)
2020

2121

22-
class TriggerProcessor[ConfigT: BaseTriggerConfig](abc.ABC):
22+
class BaseTriggerProcessor[ConfigT: BaseTriggerConfig](abc.ABC):
2323
@classmethod
2424
@abc.abstractmethod
2525
def from_config(
@@ -36,7 +36,7 @@ async def dispose(self) -> None: ...
3636
@dataclasses.dataclass(frozen=True)
3737
class RegistryRecord[ConfigT: BaseTriggerConfig]:
3838
config_class: type[ConfigT]
39-
processor_class: type[TriggerProcessor[ConfigT]]
39+
processor_class: type[BaseTriggerProcessor[ConfigT]]
4040

4141

4242
_REGISTRY: dict[str, RegistryRecord[typing.Any]] = {}
@@ -45,7 +45,7 @@ class RegistryRecord[ConfigT: BaseTriggerConfig]:
4545
def register_trigger[ConfigT: BaseTriggerConfig](
4646
name: str,
4747
config_class: type[ConfigT],
48-
processor_class: type[TriggerProcessor[ConfigT]],
48+
processor_class: type[BaseTriggerProcessor[ConfigT]],
4949
) -> None:
5050
_REGISTRY[name] = RegistryRecord(config_class=config_class, processor_class=processor_class)
5151

@@ -71,7 +71,7 @@ def trigger_processor_factory(
7171

7272
__all__ = [
7373
"BaseTriggerConfig",
74-
"TriggerProcessor",
74+
"BaseTriggerProcessor",
7575
"TriggerProcessorProtocol",
7676
"register_trigger",
7777
"trigger_config_factory",

backend/lib/telegram/actions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class TelegramWebhookActionConfig(task_base.BaseActionConfig):
2323

2424

2525
@dataclasses.dataclass(frozen=True)
26-
class TelegramWebhookProcessor(task_base.ActionProcessor[TelegramWebhookActionConfig]):
26+
class TelegramWebhookProcessor(task_base.BaseActionProcessor[TelegramWebhookActionConfig]):
2727
config: TelegramWebhookActionConfig
2828
aiohttp_client: aiohttp.ClientSession
2929
telegram_client: telegram_clients.RestTelegramClient

backend/tests/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
import pytest
22

3+
import lib.plugin_registration as plugin_registration
34
import tests.settings as test_settings
45

56

7+
@pytest.fixture(name="register_default_plugins", autouse=True, scope="session")
8+
def register_default_plugins_fixture() -> None:
9+
plugin_registration.register_default_plugins()
10+
11+
612
@pytest.fixture(name="settings")
713
def settings_fixture() -> test_settings.Settings:
814
return test_settings.Settings()

backend/tests/unit/github/triggers/conftest.py

Lines changed: 0 additions & 8 deletions
This file was deleted.

backend/tests/unit/telegram/__init__.py

Whitespace-only changes.

backend/tests/unit/telegram/actions/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)