Skip to content

Commit

Permalink
#7 delete family
Browse files Browse the repository at this point in the history
  • Loading branch information
de1mos242 committed Mar 13, 2020
1 parent afe37a8 commit 05572b8
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 3 deletions.
4 changes: 4 additions & 0 deletions family_api/controllers/family.py
Expand Up @@ -22,3 +22,7 @@ async def get_family_info(family_id: int, conn):

async def update_family(family_id: int, family_data, conn):
return await family_repository.update_family(family_id, family_data, conn)


async def delete_family(family_id: int, conn):
return await family_repository.delete_family(family_id, conn)
6 changes: 5 additions & 1 deletion family_api/repositories/family_repository.py
Expand Up @@ -5,9 +5,13 @@ async def insert_family(family_obj, conn) -> int:
return await conn.scalar(families_table.insert().values(family_obj))


async def update_family(family_id, family_obj, conn) -> int:
async def update_family(family_id, family_obj, conn):
return await conn.execute(families_table.update().values(family_obj).where(families_table.c.id == family_id))


async def delete_family(family_id, conn):
return await conn.execute(families_table.delete().where(families_table.c.id == family_id))


async def get_by_id(family_id, conn):
return await (await conn.execute(families_table.select().where(families_table.c.id == family_id))).first()
11 changes: 10 additions & 1 deletion family_api/views/family_view.py
Expand Up @@ -3,7 +3,7 @@
from aiohttp import web
from aiohttp_apispec import docs, request_schema, response_schema

from family_api.controllers.family import register_family, get_family_info, update_family
from family_api.controllers.family import register_family, get_family_info, update_family, delete_family
from family_api.controllers.family_member import add_family_member
from family_api.decorators import is_current_user_in_family
from family_api.schemas import FamilySchema
Expand Down Expand Up @@ -46,3 +46,12 @@ async def put(self):
async with self.request.app['db'].acquire() as conn:
await update_family(family_id, family_obj, conn)
return web.Response(status=204)

@docs(summary="Delete family",
responses={204: "Successfully deleted"})
@is_current_user_in_family
async def delete(self):
family_id = self.request.match_info['family_id']
async with self.request.app['db'].acquire() as conn:
await delete_family(family_id, conn)
return web.Response(status=204)
26 changes: 25 additions & 1 deletion tests/test_family.py
Expand Up @@ -60,7 +60,7 @@ async def test_get_family_info(app: web.Application, cli: TestClient, make_heade
assert response['babies'][0]['date_of_birth'] == baby['date_of_birth'].strftime("%Y-%m-%dT%H:%M:%S.%f")


async def test_rename_family(app: web.Application, cli: TestClient, make_headers, family_factory,
async def test_update_family(app: web.Application, cli: TestClient, make_headers, family_factory,
family_member_factory):
user_uuid = str(uuid4())
async with app['db'].acquire() as conn:
Expand All @@ -86,3 +86,27 @@ async def test_rename_family(app: web.Application, cli: TestClient, make_headers
assert stored_family is not None
assert stored_family.id == family['id']
assert stored_family.title == "My super family"


async def test_delete_family(app: web.Application, cli: TestClient, make_headers, family_factory,
family_member_factory):
user_uuid = str(uuid4())
async with app['db'].acquire() as conn:
family = family_factory.create()
family['id'] = await family_repository.insert_family(family, conn)
another_family = family_factory.create()
another_family['id'] = await family_repository.insert_family(another_family, conn)
family_member = family_member_factory.create(family_id=family['id'], user_uuid=user_uuid)
family_member['id'] = await family_member_repository.insert_family_member(family_member, conn)

resp = await cli.delete(f"/v1/family/{another_family['id']}",
headers=make_headers(user_uuid))
assert resp.status == 403, await resp.text()

resp = await cli.delete(f"/v1/family/{family['id']}",
headers=make_headers(user_uuid))
assert resp.status == 204, await resp.text()

async with app['db'].acquire() as conn:
stored_family = await family_repository.get_by_id(family['id'], conn)
assert stored_family is None

0 comments on commit 05572b8

Please sign in to comment.