feat: API rewrite (#2)

* feat: sanic framework settings

* feat: initial implementation

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* refactor: backend changes

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix: docstrings out of place

* feat: more gh endpoints

* ci: fix pre-commit issues

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* feat: app info

* ci: merge CI and fix triggers

* chore: bump deps

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix: typing issues

* chore: deps

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* refactor: clean up returns

* ci: spread jobs correctly

* ci: move to quodana

* ci: fix issues with python modules

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* chore: pycharm config

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* refactor: improve code quality

* feat: better README

* ci: add quodana baseline config

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* ci: fix quodana config

* ci: more qodana stuff

* ci: revert qodana changes

* ci: python interpreter detection is broken

* feat: tests

* ci: testing

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* ci: fix workflow names

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* chore: add deps

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* test: more tests

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* feat: /tools compat

* feat: donations endpoint

* feat: teams endpoint

* fix: lock pydantic version

* chore: deps

* ci: docker builds

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* ci: remove coverage action and others

* ci: pre-commit fixes

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Alexandre Teles (afterSt0rm)
2023-07-12 04:48:36 -03:00
committed by GitHub
parent cb52684edb
commit 45ef33741c
45 changed files with 16359 additions and 86 deletions

0
tests/__init__.py Normal file
View File

17
tests/test_apkdl.py Normal file
View File

@@ -0,0 +1,17 @@
import pytest
from sanic import Sanic
from api.models.appinfo import AppInfoModel
from config import api_version, apkdl_testing_package
# socials
@pytest.mark.asyncio
async def test_socials(app: Sanic):
_, response = await app.asgi_client.get(
f"/{api_version}/app/info/{apkdl_testing_package}"
)
assert response.status == 200
assert AppInfoModel(app_info=response.json["app_info"])

13
tests/test_compat.py Normal file
View File

@@ -0,0 +1,13 @@
import pytest
from sanic import Sanic
from api.models.compat import ToolsResponseModel
# compatibility layer
@pytest.mark.asyncio
async def test_compat_tools(app: Sanic):
_, response = await app.asgi_client.get(f"/tools")
assert response.status == 200
assert ToolsResponseModel(tools=[tool for tool in response.json["tools"]])

110
tests/test_github.py Normal file
View File

@@ -0,0 +1,110 @@
import pytest
from sanic import Sanic
from sanic_testing.testing import TestingResponse
from api.models.github import (
AssetFields,
MetadataFields,
PatchesResponseFields,
ReleaseListResponseModel,
ReleaseResponseModel,
SingleReleaseResponseModel,
ContributorsFields,
ContributorsModel,
PatchesModel,
TeamMemberFields,
TeamMembersModel,
)
from config import github_testing_repository, github_testing_tag, api_version
# utils
async def __test_single_release(response: TestingResponse) -> bool:
try:
assert response.status == 200
assert SingleReleaseResponseModel(
release=ReleaseResponseModel(
metadata=MetadataFields(**response.json["release"]["metadata"]),
assets=[
AssetFields(**asset) for asset in response.json["release"]["assets"]
],
)
)
return True
except AssertionError:
return False
# github
@pytest.mark.asyncio
async def test_releases(app: Sanic):
_, response = await app.asgi_client.get(
f"/{api_version}/{github_testing_repository}/releases"
)
assert response.status == 200
assert ReleaseListResponseModel(
releases=[
ReleaseResponseModel(
metadata=MetadataFields(**release["metadata"]),
assets=[AssetFields(**asset) for asset in release["assets"]],
)
for release in response.json["releases"]
]
)
@pytest.mark.asyncio
async def test_latest_release(app: Sanic):
_, response = await app.asgi_client.get(
f"/{api_version}/{github_testing_repository}/releases/latest"
)
_, response_dev = await app.asgi_client.get(
f"/{api_version}/{github_testing_repository}/releases/latest?dev=true"
)
assert await __test_single_release(response)
assert await __test_single_release(response_dev)
@pytest.mark.asyncio
async def test_release_by_tag(app: Sanic):
_, response = await app.asgi_client.get(
f"/{api_version}/{github_testing_repository}/releases/tag/{github_testing_tag}"
)
assert await __test_single_release(response)
@pytest.mark.asyncio
async def test_contributors(app: Sanic):
_, response = await app.asgi_client.get(
f"/{api_version}/{github_testing_repository}/contributors"
)
assert ContributorsModel(
contributors=[
ContributorsFields(**contributor)
for contributor in response.json["contributors"]
]
)
@pytest.mark.asyncio
async def test_patches(app: Sanic):
_, response = await app.asgi_client.get(
f"/{api_version}/patches/{github_testing_tag}"
)
assert PatchesModel(
patches=[PatchesResponseFields(**patch) for patch in response.json["patches"]]
)
@pytest.mark.asyncio
async def test_team_members(app: Sanic):
_, response = await app.asgi_client.get(f"/{api_version}/team/members")
assert TeamMembersModel(
members=[TeamMemberFields(**member) for member in response.json["members"]]
)

12
tests/test_ping.py Normal file
View File

@@ -0,0 +1,12 @@
import pytest
from sanic import Sanic
from config import api_version
# ping
@pytest.mark.asyncio
async def test_ping(app: Sanic):
_, response = await app.asgi_client.head(f"/{api_version}/ping")
assert response.status == 204

15
tests/test_socials.py Normal file
View File

@@ -0,0 +1,15 @@
import pytest
from sanic import Sanic
from api.models.socials import SocialsResponseModel
from config import api_version
# socials
@pytest.mark.asyncio
async def test_socials(app: Sanic):
_, response = await app.asgi_client.get(f"/{api_version}/socials")
assert response.status == 200
assert SocialsResponseModel(**response.json)