Skip to content
Merged
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
31 changes: 31 additions & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Unit Tests

on: [push]

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pillow
pip install pytest
pip install pytest-asyncio

- name: Test API
env:
COOKIE_KEY: ${{ secrets.COOKIE_KEY }}
run: |
pytest
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ __pycache__/
.idea/
venv/
.env
tests

# Packaging
build/
Expand Down
3 changes: 2 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
ci:
autoupdate_schedule: monthly
autoupdate_schedule: quarterly
autoupdate_commit_msg: "chore: pre-commit autoupdate"

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
Expand Down
2 changes: 2 additions & 0 deletions cookie/api.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import json
import os
from datetime import date, datetime
Expand Down
2 changes: 2 additions & 0 deletions cookie/errors.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from httpx import Response


Expand Down
2 changes: 2 additions & 0 deletions cookie/models.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from dataclasses import dataclass
from datetime import date

Expand Down
Empty file added tests/__init__.py
Empty file.
91 changes: 91 additions & 0 deletions tests/test_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import io

import pytest
from PIL import Image

import cookie

# from cookie import api as cookie_api
# cookie_api.BASE_URL = "http://localhost:8000/v1/"


USER_ID = 203208036053942272
GUILD_ID = 1010915072694046794

INVALID_USER_ID = 12345
INVALID_GUILD_ID = 54321


def test_sync_api():
api = cookie.CookieAPI()
member_count = api.get_member_count(GUILD_ID)
assert isinstance(member_count, dict)

user_stats = api.get_user_stats(USER_ID)
assert isinstance(user_stats, cookie.UserStats)

member_stats = api.get_member_stats(USER_ID, GUILD_ID)
assert isinstance(member_stats, cookie.MemberStats)

member_activity = api.get_member_activity(USER_ID, GUILD_ID)
assert isinstance(member_activity, cookie.MemberActivity)

guild_activity = api.get_guild_activity(GUILD_ID)
assert isinstance(guild_activity, cookie.GuildActivity)

guild_image = api.get_guild_image(GUILD_ID)
img = Image.open(io.BytesIO(guild_image))
assert isinstance(img, Image.Image)

member_image = api.get_member_image(USER_ID, GUILD_ID)
img = Image.open(io.BytesIO(member_image))
assert isinstance(img, Image.Image)

with pytest.raises(cookie.NotFound):
api.get_user_stats(INVALID_USER_ID)


@pytest.mark.asyncio
async def test_async_api():
async_api = cookie.AsyncCookieAPI()

async with async_api as api:
member_count = await api.get_member_count(GUILD_ID)
assert isinstance(member_count, dict)

user_stats = await api.get_user_stats(USER_ID)
assert isinstance(user_stats, cookie.UserStats)

member_stats = await api.get_member_stats(USER_ID, GUILD_ID)
assert isinstance(member_stats, cookie.MemberStats)

member_activity = await api.get_member_activity(USER_ID, GUILD_ID)
assert isinstance(member_activity, cookie.MemberActivity)

guild_activity = await api.get_guild_activity(GUILD_ID)
assert isinstance(guild_activity, cookie.GuildActivity)

guild_image = await api.get_guild_image(GUILD_ID)
img = Image.open(io.BytesIO(guild_image))
assert isinstance(img, Image.Image)

member_image = await api.get_member_image(USER_ID, GUILD_ID)
img = Image.open(io.BytesIO(member_image))
assert isinstance(img, Image.Image)

with pytest.raises(cookie.NotFound):
await api.get_user_stats(INVALID_USER_ID)


@pytest.mark.asyncio
async def test_invalid_keys():
invalid_key = "invalid_key"

with pytest.raises(cookie.InvalidAPIKey):
api = cookie.CookieAPI(api_key=invalid_key)
api.get_member_count(GUILD_ID)

with pytest.raises(cookie.InvalidAPIKey):
async_api = cookie.AsyncCookieAPI(api_key=invalid_key)
async with async_api as api:
await api.get_member_count(GUILD_ID)
Loading