userver: samples/postgres_service/tests/test_postgres.py
Loading...
Searching...
No Matches
samples/postgres_service/tests/test_postgres.py
1import pytest
2
3
4# NB: entrypoint for `make start-*`
5@pytest.mark.servicetest
6def test_service(service_client):
7 pass
8
9
10# /// [Functional test]
11async def test_postgres(service_client, pgsql):
12 # POSTing 'key=hello&value=world'
13 response = await service_client.post('/v1/key-value?key=hello&value=world')
14 assert response.status == 201
15 assert 'text/plain' in response.headers['Content-Type']
16 assert response.text == 'world'
17
18 # Checking content of the database via direct access.
19 # `pgsql.keys()` outputs all the databases
20 cursor = pgsql['admin'].cursor() # 'admin.sql' file contains the schema.
21 cursor.execute("SELECT value FROM key_value_table WHERE key='hello'")
22 result = cursor.fetchall()
23 assert len(result) == 1
24 assert result[0][0] == 'world'
25
26 # Getting key=hello
27 response = await service_client.get('/v1/key-value?key=hello')
28 assert response.status == 200
29 assert 'text/plain' in response.headers['Content-Type']
30 assert response.text == 'world'
31
32 # Deleting key=hello
33 response = await service_client.delete('/v1/key-value?key=hello')
34 assert response.status == 200
35
36 # Make sure database is does not store key=hello
37 cursor.execute("SELECT value FROM key_value_table WHERE key='hello'")
38 assert len(cursor.fetchall()) == 0
39 # /// [Functional test]
40
41 response = await service_client.post('/v1/key-value?key=hello&value=there')
42 assert response.status == 201
43 assert 'text/plain' in response.headers['Content-Type']
44 assert response.text == 'there'
45
46 response = await service_client.get('/v1/key-value?key=hello')
47 assert response.status == 200
48 assert 'text/plain' in response.headers['Content-Type']
49 assert response.text == 'there'
50
51 response = await service_client.post('/v1/key-value?key=hello&value=again')
52 assert response.status == 409
53 assert 'text/plain' in response.headers['Content-Type']
54 assert response.text == 'there'
55
56 response = await service_client.get('/v1/key-value?key=missing')
57 assert response.status == 404