Bootstrap test suite
This commit is contained in:
parent
8bfd75d049
commit
6885ff6b3c
3 changed files with 112 additions and 1 deletions
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
|
|
@ -12,3 +12,17 @@ jobs:
|
|||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-python@v2
|
||||
- uses: pre-commit/action@v2.0.2
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.10"
|
||||
- name: Install project
|
||||
run: |
|
||||
pip install -U "pip>=21.3.1"
|
||||
pip install -e .[test] -c requirements.txt
|
||||
- name: Run tests
|
||||
run: |
|
||||
pytest -v --cov --cov-report=xml
|
||||
- uses: codecov/codecov-action@v1
|
||||
|
|
|
|||
|
|
@ -123,7 +123,6 @@ resources:
|
|||
Prototype (min required to open the project):
|
||||
|
||||
- plug it on a bunch of OCA and shopinvader repos to test load
|
||||
- basic tests
|
||||
|
||||
MVP:
|
||||
|
||||
|
|
@ -149,6 +148,7 @@ More:
|
|||
- never undeploy last build of sticky branches
|
||||
- make build images configurable (see `build_images.py`)
|
||||
- configurable kubefiles directory
|
||||
- even more tests
|
||||
|
||||
## Author and contributors
|
||||
|
||||
|
|
|
|||
97
tests/test_db.py
Normal file
97
tests/test_db.py
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
import datetime
|
||||
|
||||
from runboat.db import BuildsDb
|
||||
from runboat.models import Build, BuildInitStatus, BuildStatus
|
||||
|
||||
|
||||
def _make_build(
|
||||
name: str | None = None,
|
||||
*,
|
||||
status: BuildStatus | None = None,
|
||||
init_status: BuildInitStatus | None = None,
|
||||
repo: str | None = None,
|
||||
pr: int | None = None,
|
||||
) -> Build:
|
||||
name = name or "build-a"
|
||||
return Build(
|
||||
name=name,
|
||||
deployment_name=name + "-odoo",
|
||||
repo=repo or "oca/mis-builder",
|
||||
target_branch="15.0",
|
||||
pr=pr or None,
|
||||
git_commit="0d35a10f161b410f2baa3d416a338d191b6dabc0",
|
||||
image="ghcr.io/oca/oca-ci:py3.8-odoo15.0",
|
||||
status=status or BuildStatus.starting,
|
||||
init_status=init_status or BuildInitStatus.todo,
|
||||
desired_replicas=0,
|
||||
last_scaled=datetime.datetime(2021, 10, 1, 12, 0, 0),
|
||||
created=datetime.datetime(2021, 10, 1, 11, 0, 0),
|
||||
)
|
||||
|
||||
|
||||
def test_add():
|
||||
db = BuildsDb()
|
||||
assert db.add(_make_build()) # new
|
||||
assert not db.add(_make_build()) # no change
|
||||
assert db.add(_make_build(status=BuildStatus.failed))
|
||||
|
||||
|
||||
def test_remove():
|
||||
db = BuildsDb()
|
||||
assert not db.remove("not-a-build")
|
||||
build = _make_build()
|
||||
db.add(build)
|
||||
assert db.remove(build.name)
|
||||
|
||||
|
||||
def test_get_for_commit():
|
||||
db = BuildsDb()
|
||||
build = _make_build()
|
||||
db.add(build)
|
||||
assert (
|
||||
db.get_for_commit(
|
||||
build.repo, build.target_branch, build.pr, git_commit=build.git_commit
|
||||
)
|
||||
== build
|
||||
)
|
||||
assert (
|
||||
db.get_for_commit(
|
||||
"not-a-build", build.target_branch, build.pr, git_commit=build.git_commit
|
||||
)
|
||||
is None
|
||||
)
|
||||
|
||||
|
||||
def test_search():
|
||||
db = BuildsDb()
|
||||
db.add(build1 := _make_build(name="b1", repo="oca/repo1"))
|
||||
db.add(_make_build(name="b2", repo="oca/repo2"))
|
||||
assert len(db.search()) == 2
|
||||
assert db.search("oca/repo1") == [build1]
|
||||
|
||||
|
||||
def test_count_by_status():
|
||||
db = BuildsDb()
|
||||
db.add(_make_build(name="b1", status=BuildStatus.started))
|
||||
db.add(_make_build(name="b2", status=BuildStatus.stopped))
|
||||
assert db.count_by_status(BuildStatus.started) == 1
|
||||
assert db.count_by_status(BuildStatus.stopped) == 1
|
||||
assert db.count_by_status(BuildStatus.failed) == 0
|
||||
|
||||
|
||||
def test_count_by_init_status():
|
||||
db = BuildsDb()
|
||||
db.add(_make_build(name="b1", init_status=BuildInitStatus.started))
|
||||
db.add(_make_build(name="b2", init_status=BuildInitStatus.todo))
|
||||
assert db.count_by_init_status(BuildInitStatus.started) == 1
|
||||
assert db.count_by_init_status(BuildInitStatus.todo) == 1
|
||||
assert db.count_by_init_status(BuildInitStatus.failed) == 0
|
||||
|
||||
|
||||
def test_count_all():
|
||||
db = BuildsDb()
|
||||
assert db.count_all() == 0
|
||||
db.add(_make_build(name="b1"))
|
||||
assert db.count_all() == 1
|
||||
db.add(_make_build(name="b2"))
|
||||
assert db.count_all() == 2
|
||||
Loading…
Reference in a new issue