Skip to content

Commit

Permalink
Merge pull request #6 from teamhide/develop
Browse files Browse the repository at this point in the history
Version 0.0.9
  • Loading branch information
teamhide authored Feb 8, 2022
2 parents 042387f + 3280695 commit a1218ac
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 3 deletions.
2 changes: 1 addition & 1 deletion fastapi_event/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
)


class EventAndParameter:
class EventAndParameter(BaseModel):
event: Type[BaseEvent]
parameter: Optional[BaseModel] = None

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

setuptools.setup(
name="fastapi-event",
version="0.0.8",
version="0.0.9",
author="Hide",
author_email="padocon@naver.com",
description="Event dispatcher for FastAPI",
Expand Down
136 changes: 135 additions & 1 deletion tests/test_handler.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from typing import Union, Type

import pytest
from pydantic import BaseModel

from fastapi_event import event_handler
from fastapi_event import event_handler, BaseEvent, EventListener
from fastapi_event.exceptions import (
InvalidEventTypeException,
InvalidParameterTypeException,
Expand All @@ -16,6 +19,25 @@
)


class FirstEvent(BaseEvent):
ORDER = 1

async def run(self, parameter: Union[Type[BaseModel], None] = None) -> None:
...


class SecondEvent(BaseEvent):
ORDER = 2

async def run(self, parameter: Union[Type[BaseModel], None] = None) -> None:
...


class NoneOrderEvent(BaseEvent):
async def run(self, parameter: Union[Type[BaseModel], None] = None) -> None:
...


@pytest.mark.asyncio
async def test_store_without_parameter(app_with_middleware, client):
app = app_with_middleware
Expand Down Expand Up @@ -178,3 +200,115 @@ async def get():
await test()

client.get("/")


@pytest.mark.asyncio
async def test_order(app_with_middleware, client):
app = app_with_middleware

@EventListener()
async def test():
await event_handler.store(event=FirstEvent)
await event_handler.store(event=SecondEvent)
maps = await event_handler._get_event_handler()._get_sorted_event_maps()

assert maps.get(None) == []

assert len(maps.get(1)) == 1
assert maps.get(1)[0].event == FirstEvent
assert maps.get(1)[0].parameter is None

assert len(maps.get(2)) == 1
assert maps.get(2)[0].event == SecondEvent
assert maps.get(2)[0].parameter is None

@app.get("/")
async def test_get():
await test()

client.get("/")


@pytest.mark.asyncio
async def test_order_if_the_order_of_the_store_is_different(app_with_middleware, client):
app = app_with_middleware

@EventListener()
async def test():
await event_handler.store(event=SecondEvent)
await event_handler.store(event=FirstEvent)
maps = await event_handler._get_event_handler()._get_sorted_event_maps()

assert maps.get(None) == []

assert len(maps.get(1)) == 1
assert maps.get(1)[0].event == FirstEvent
assert maps.get(1)[0].parameter is None

assert len(maps.get(2)) == 1
assert maps.get(2)[0].event == SecondEvent
assert maps.get(2)[0].parameter is None

@app.get("/")
async def test_get():
await test()

client.get("/")


@pytest.mark.asyncio
async def test_order_with_none_order(app_with_middleware, client):
app = app_with_middleware

@EventListener()
async def test():
await event_handler.store(event=FirstEvent)
await event_handler.store(event=SecondEvent)
await event_handler.store(event=NoneOrderEvent)
maps = await event_handler._get_event_handler()._get_sorted_event_maps()

assert maps.get(None)[0].event == NoneOrderEvent
assert maps.get(None)[0].parameter is None

assert len(maps.get(1)) == 1
assert maps.get(1)[0].event == FirstEvent
assert maps.get(1)[0].parameter is None

assert len(maps.get(2)) == 1
assert maps.get(2)[0].event == SecondEvent
assert maps.get(2)[0].parameter is None

@app.get("/")
async def test_get():
await test()

client.get("/")


@pytest.mark.asyncio
async def test_order_with_none_order_if_the_order_of_the_store_is_different(app_with_middleware, client):
app = app_with_middleware

@EventListener()
async def test():
await event_handler.store(event=SecondEvent)
await event_handler.store(event=FirstEvent)
await event_handler.store(event=NoneOrderEvent)
maps = await event_handler._get_event_handler()._get_sorted_event_maps()

assert maps.get(None)[0].event == NoneOrderEvent
assert maps.get(None)[0].parameter is None

assert len(maps.get(1)) == 1
assert maps.get(1)[0].event == FirstEvent
assert maps.get(1)[0].parameter is None

assert len(maps.get(2)) == 1
assert maps.get(2)[0].event == SecondEvent
assert maps.get(2)[0].parameter is None

@app.get("/")
async def test_get():
await test()

client.get("/")

0 comments on commit a1218ac

Please sign in to comment.