Skip to content

Commit fcaac66

Browse files
Matthew WeppennaarMatthew Weppennaar
authored andcommitted
adding unidecoder middleware and its tests
1 parent 9d41f19 commit fcaac66

6 files changed

Lines changed: 105 additions & 1 deletion

File tree

.DS_Store

6 KB
Binary file not shown.

poetry.lock

Lines changed: 13 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ quart-trio = "^0.11.1"
2525
hypercorn = "^0.16.0"
2626
"smpp.pdu3" = "^0.6"
2727
httpx = "^0.26.0"
28+
unidecode = "^1.3.8"
2829

2930
[tool.poetry.group.dev.dependencies]
3031
mypy = "^1.8.0"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from unidecode import unidecode
2+
3+
from vumi2.middlewares.base import BaseMiddleware, BaseMiddlewareConfig
4+
5+
6+
class Unidecoder(BaseMiddleware):
7+
config: BaseMiddlewareConfig
8+
9+
async def setup(self):
10+
pass
11+
12+
async def handle_outbound(self, message, connection):
13+
if message.content:
14+
message.content = unidecode(message.content)
15+
print(f"unidecoded message {message.content}")
16+
return message

tests/middlewares/test_unicode.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from vumi2.messages import Event, EventType, Message, TransportType
2+
from vumi2.middlewares.base import BaseMiddlewareConfig
3+
from vumi2.middlewares.unidecoder import Unidecoder
4+
5+
6+
def mkmsg(content: str) -> Message:
7+
return Message(
8+
to_addr="12345",
9+
from_addr="54321",
10+
transport_name="test",
11+
transport_type=TransportType.SMS,
12+
content=content,
13+
)
14+
15+
16+
def mkev(msg_id: str) -> Event:
17+
return Event(
18+
user_message_id=msg_id,
19+
event_type=EventType.ACK,
20+
sent_message_id=msg_id,
21+
)
22+
23+
24+
async def test_unicode_handle_outbound_with_latin_characters():
25+
config = BaseMiddlewareConfig(
26+
"vumi2.middlewares.unidecoder.Unidecoder",
27+
enable_for_connectors=["connection1", "connection2"],
28+
outbound_enabled=True,
29+
)
30+
middleware = Unidecoder(config)
31+
await middleware.setup()
32+
message = mkmsg("Goodbye")
33+
sent_message = await middleware.handle_outbound(message, "connection1")
34+
assert sent_message.content == "Goodbye"
35+
36+
37+
async def test_unicode_handle_outbound_with_non_latin_characters():
38+
config = BaseMiddlewareConfig(
39+
"vumi2.middlewares.unidecoder.Unidecoder",
40+
enable_for_connectors=["connection1", "connection2"],
41+
outbound_enabled=True,
42+
)
43+
middleware = Unidecoder(config)
44+
await middleware.setup()
45+
message = mkmsg("до свидания")
46+
sent_message = await middleware.handle_outbound(message, "connection1")
47+
assert sent_message.content == "do svidaniia"

tests/test_workers.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,3 +716,31 @@ async def test_middleware_setup_called(worker_factory, connector_factory):
716716
middleware = worker.middlewares
717717
assert isinstance(middleware[0], ToyMiddleware)
718718
assert middleware[0].config.test == "test10"
719+
720+
721+
async def test_unicoder(worker_factory, connector_factory):
722+
middleware_config = {
723+
"class_path": "vumi2.middlewares.unidecoder.Unidecoder",
724+
"enable_for_connectors": ["test", "app"],
725+
"inbound_enabled": False,
726+
"outbound_enabled": True,
727+
"event_enabled": False,
728+
}
729+
async with worker_factory.with_cleanup(
730+
MiddlewareWorker, middleware_config
731+
) as worker:
732+
await worker.setup()
733+
ri_app = await connector_factory.setup_ri("app")
734+
ro_test = await connector_factory.setup_ro("test")
735+
message_hello = mkmsg("Hello")
736+
message_goodbye = mkmsg("до свидания")
737+
message_id = message_goodbye.message_id
738+
await ro_test.publish_inbound(message_hello)
739+
message_hello_test = await ri_app.consume_inbound()
740+
await ri_app.publish_outbound(message_goodbye)
741+
message_goodbye_test = await ro_test.consume_outbound()
742+
await ro_test.publish_event(mkev(message_id))
743+
event = await ri_app.consume_event()
744+
assert message_hello_test.content == "Hello"
745+
assert message_goodbye_test.content == "Goodbye"
746+
assert event.helper_metadata == {}

0 commit comments

Comments
 (0)