Alexander Hess
54ff377579
- reorganize `urban_meal_delivery.console` into a sub-package - move `tests.db.conftest` fixtures into `tests.conftest` => some integration tests regarding CLI scripts need a database - add `urban_meal_delivery.console.decorators.db_revision` decorator to ensure the database is at a certain state before a CLI script runs - refactor the `urban_meal_delivery.db.grids.Grid.gridify()` constructor: - bug fix: even empty `Pixel`s end up in the database temporarily => create `Pixel` objects only if an `Address` is to be assigned to it - streamline code and docstring - add further test cases
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
"""Integration test for the `urban_meal_delivery.console.gridify` module."""
|
|
|
|
import pytest
|
|
|
|
import urban_meal_delivery
|
|
from urban_meal_delivery import db
|
|
from urban_meal_delivery.console import gridify
|
|
|
|
|
|
@pytest.mark.db
|
|
def test_four_pixels_with_two_addresses(
|
|
cli, db_session, monkeypatch, city, make_address,
|
|
):
|
|
"""Two `Address` objects in distinct `Pixel` objects.
|
|
|
|
This is roughly the same test case as
|
|
`tests.db.test_grids.test_four_pixels_with_two_addresses`.
|
|
The difference is that the result is written to the database.
|
|
"""
|
|
# Create two `Address` objects in distinct `Pixel`s.
|
|
city.addresses = [
|
|
# One `Address` in the lower-left `Pixel`, ...
|
|
make_address(latitude=48.8357377, longitude=2.2517412),
|
|
# ... and another one in the upper-right one.
|
|
make_address(latitude=48.8898312, longitude=2.4357622),
|
|
]
|
|
|
|
db_session.add(city)
|
|
db_session.commit()
|
|
|
|
side_length = max(city.total_x // 2, city.total_y // 2) + 1
|
|
|
|
# Hack the configuration regarding the grids to be created.
|
|
monkeypatch.setattr(urban_meal_delivery.config, 'GRID_SIDE_LENGTHS', [side_length])
|
|
|
|
result = cli.invoke(gridify.gridify)
|
|
|
|
assert result.exit_code == 0
|
|
|
|
assert db_session.query(db.Grid).count() == 1
|
|
assert db_session.query(db.Pixel).count() == 2
|