Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions parse_episode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import re

def parse_ep(text):
match = re.search(r'(?:E?(\d{1,3})(?:[^\d]+E?(\d{1,3}))?)', text, re.IGNORECASE)
if match:
first = int(match.group(1))
if match.group(2):
second = int(match.group(2))
return [first, second]
return first
return None

print(parse_ep("E01E02"))
print(parse_ep("01-02"))
print(parse_ep("01"))
print(parse_ep("E01"))
print(parse_ep("1-2"))
print(parse_ep("e1e2"))
30 changes: 30 additions & 0 deletions test_db3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import asyncio
from unittest.mock import AsyncMock, patch
from db.core import Database
from db.shim import SettingsCollectionShim
from config import Config

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345
db = Database()
settings_coll = AsyncMock()
users_coll = AsyncMock()

settings_coll.find_one.return_value = {"_id": "global_settings", "is_bot_setup_complete": False}
users_coll.find_one.return_value = {
"user_id": 12345,
"personal_settings": {
"is_bot_setup_complete": True,
"dumb_channels": {"-100": "test"}
}
}
users_coll.update_one.return_value = None

db.settings = SettingsCollectionShim(settings_coll, users_coll, public_mode=False, ceo_id=12345)
db.users = users_coll

res = await db.get_setting("is_bot_setup_complete", user_id=12345)
print("Settings is_bot_setup_complete:", res)

asyncio.run(main())
29 changes: 29 additions & 0 deletions test_db4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import asyncio
from unittest.mock import AsyncMock, patch
from db.core import Database
from db.shim import SettingsCollectionShim
from config import Config

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345
db = Database()
settings_coll = AsyncMock()
users_coll = AsyncMock()

settings_coll.find_one.return_value = {"_id": "global_settings", "is_bot_setup_complete": False}
users_coll.find_one.return_value = {
"user_id": 12345,
"personal_settings": {
"dumb_channels": {"-100": "test"}
}
}
users_coll.update_one.return_value = None

db.settings = SettingsCollectionShim(settings_coll, users_coll, public_mode=False, ceo_id=12345)
db.users = users_coll

await db.update_setting("is_bot_setup_complete", True, user_id=12345)
print("Users coll args:", users_coll.update_one.call_args_list)

asyncio.run(main())
41 changes: 41 additions & 0 deletions test_db5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import asyncio
from unittest.mock import AsyncMock, patch
from db.core import Database
from db.shim import SettingsCollectionShim
from config import Config
import time

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345
db = Database()
settings_coll = AsyncMock()
users_coll = AsyncMock()

settings_coll.find_one.return_value = {"_id": "global_settings", "is_bot_setup_complete": False}
users_coll.find_one.return_value = {
"user_id": 12345,
"personal_settings": {
"dumb_channels": {"-100": "test"}
}
}
users_coll.update_one.return_value = None

db.settings = SettingsCollectionShim(settings_coll, users_coll, public_mode=False, ceo_id=12345)
db.users = users_coll

res1 = await db.get_settings(user_id=12345)
print("res1 is_bot_setup_complete:", res1.get("is_bot_setup_complete"))

await db.update_setting("is_bot_setup_complete", True, user_id=12345)

res2 = await db.get_settings(user_id=12345)
print("res2 is_bot_setup_complete:", res2.get("is_bot_setup_complete"))

print("res1 == res2?", res1 is res2)

# Wait, the shim will use the _users collection to do find_one if ceo_routing is on.
# We mocked find_one to return the SAME dictionary, so the user_doc won't change
# But db.update_setting invalidates the cache correctly.

asyncio.run(main())
44 changes: 44 additions & 0 deletions test_db6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import asyncio
from unittest.mock import AsyncMock, patch
from db.core import Database
from db.shim import SettingsCollectionShim
from config import Config
import time

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345
db = Database()
settings_coll = AsyncMock()
users_coll = AsyncMock()

settings_coll.find_one.return_value = {"_id": "global_settings", "is_bot_setup_complete": False}
users_coll.find_one.side_effect = [
{
"user_id": 12345,
"personal_settings": {
"dumb_channels": {"-100": "test"}
}
},
{
"user_id": 12345,
"personal_settings": {
"dumb_channels": {"-100": "test"},
"is_bot_setup_complete": True
}
}
]
users_coll.update_one.return_value = None

db.settings = SettingsCollectionShim(settings_coll, users_coll, public_mode=False, ceo_id=12345)
db.users = users_coll

res1 = await db.get_settings(user_id=12345)
print("res1 is_bot_setup_complete:", res1.get("is_bot_setup_complete"))

await db.update_setting("is_bot_setup_complete", True, user_id=12345)

res2 = await db.get_settings(user_id=12345)
print("res2 is_bot_setup_complete:", res2.get("is_bot_setup_complete"))

asyncio.run(main())
18 changes: 18 additions & 0 deletions test_get_doc_id.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import asyncio
from config import Config
from db.core import Database
from unittest.mock import AsyncMock

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345
db = Database()

# We want to see how is_bot_setup_complete behaves without PUBLIC_MODE
db.settings = AsyncMock()

await db.update_setting("is_bot_setup_complete", True, user_id=12345)

print(db.settings.update_one.call_args_list)

asyncio.run(main())
17 changes: 17 additions & 0 deletions test_get_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import asyncio
from config import Config
from db.core import Database
from unittest.mock import AsyncMock

async def main():
Config.PUBLIC_MODE = False
db = Database()

# We want to see how get_settings behaves without PUBLIC_MODE
db.settings = AsyncMock()

await db.get_settings(user_id=12345)

print(db.settings.find_one.call_args_list)

asyncio.run(main())
27 changes: 27 additions & 0 deletions test_shim.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import asyncio
from config import Config
from db import schema
from db.shim import SettingsCollectionShim
from db.core import Database
from unittest.mock import AsyncMock, patch

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345

db = Database()
db.settings = AsyncMock()
db.users = AsyncMock()

shim = SettingsCollectionShim(db.settings, db.users, public_mode=False, ceo_id=12345)

await shim.update_one(
{"_id": "user_12345"},
{"$set": {"is_bot_setup_complete": True}}
)

print("CEO Users Call args:")
for call in db.users.update_one.call_args_list:
print(call)

asyncio.run(main())
31 changes: 31 additions & 0 deletions test_shim2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import asyncio
from config import Config
from db import schema
from db.shim import SettingsCollectionShim
from db.core import Database
from unittest.mock import AsyncMock

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345

db = Database()
db.settings = AsyncMock()
db.users = AsyncMock()

shim = SettingsCollectionShim(db.settings, db.users, public_mode=False, ceo_id=12345)

await shim.update_one(
{"_id": "global_settings"},
{"$set": {"is_bot_setup_complete": True}}
)

print("CEO Users Call args:")
for call in db.users.update_one.call_args_list:
print(call)

print("\nSettings Call args:")
for call in db.settings.update_one.call_args_list:
print(call)

asyncio.run(main())
31 changes: 31 additions & 0 deletions test_shim3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import asyncio
from config import Config
from db import schema
from db.shim import SettingsCollectionShim
from db.core import Database
from unittest.mock import AsyncMock

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345

db = Database()
db.settings = AsyncMock()
db.users = AsyncMock()

# Mock some data returning from users collection
db.users.find_one.return_value = {
"user_id": 12345,
"personal_settings": {
"is_bot_setup_complete": True,
"dumb_channels": {"-100123": "Test"}
}
}

shim = SettingsCollectionShim(db.settings, db.users, public_mode=False, ceo_id=12345)

doc = await shim.find_one({"_id": "global_settings"})
print(f"is_bot_setup_complete in merged doc: {doc.get('is_bot_setup_complete')}")
print(f"dumb_channels in merged doc: {doc.get('dumb_channels')}")

asyncio.run(main())
41 changes: 41 additions & 0 deletions test_shim4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import asyncio
from config import Config
from db import schema
from db.shim import SettingsCollectionShim
from db.core import Database

class FakeColl:
def __init__(self, data):
self.data = data
async def find_one(self, filter_):
for d in self.data:
match = True
for k, v in filter_.items():
if d.get(k) != v:
match = False
if match:
return d
return None

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345

settings_data = [
{"_id": "dumb_channels_global", "dumb_channel_timeout": 3600}
]
users_data = [
{"user_id": 12345, "personal_settings": {"is_bot_setup_complete": True, "dumb_channels": {"-100": "test"}}}
]

settings = FakeColl(settings_data)
users = FakeColl(users_data)

shim = SettingsCollectionShim(settings, users, public_mode=False, ceo_id=12345)

doc = await shim.find_one({"_id": "global_settings"})
print("Merged global doc:")
print(doc.get("is_bot_setup_complete"))
print(doc.get("dumb_channels"))

asyncio.run(main())
29 changes: 29 additions & 0 deletions test_shim_cache.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import asyncio
from config import Config
from db import schema
from db.shim import SettingsCollectionShim
from db.core import Database

class FakeColl:
def __init__(self, data):
self.data = data
async def update_one(self, filter_, update, **kwargs):
pass

async def main():
Config.PUBLIC_MODE = False
Config.CEO_ID = 12345

settings = FakeColl([])
users = FakeColl([])

db = Database()
db.settings = SettingsCollectionShim(settings, users, public_mode=False, ceo_id=12345)

# Try adding dumb channel
await db.add_dumb_channel("-1001", "test", user_id=None)

# Check cache
print("Cache:", db._settings_cache)

asyncio.run(main())
Loading
Loading