Coverage for databases/tests/types/raw_queries/test_decimal.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2024-04-28 15:17 +0000

1from decimal import Decimal 

2 

3import pytest 

4from pydantic import BaseModel 

5 

6from prisma import Prisma 

7from prisma.models import Types 

8 

9from ...._types import DatabaseMapping, SupportedDatabase 

10from ...._compat import LiteralString 

11 

12 

13class Queries(BaseModel): 

14 select: LiteralString 

15 

16 

17_mysql_queries = Queries( 

18 select='SELECT * FROM Types WHERE decimal_ = ?', 

19) 

20 

21_postgresql_queries = Queries( 

22 select='SELECT * FROM "Types" WHERE decimal_ = $1::numeric', 

23) 

24 

25RAW_QUERIES: DatabaseMapping[Queries] = { 

26 'mysql': _mysql_queries, 

27 'mariadb': _mysql_queries, 

28 'sqlite': Queries( 

29 select='SELECT * FROM Types WHERE decimal_ = ?', 

30 ), 

31 'postgresql': _postgresql_queries, 

32 'cockroachdb': _postgresql_queries, 

33} 

34 

35 

36@pytest.mark.asyncio 

37async def test_query_first( 

38 client: Prisma, 

39 database: SupportedDatabase, 

40) -> None: 

41 """Standard usage of decimal_ in raw SELECT queries""" 

42 queries = RAW_QUERIES[database] 

43 

44 record = await client.types.create({'decimal_': Decimal(1)}) 

45 

46 found = await client.query_first(queries.select, Decimal(1)) 

47 assert found['id'] == record.id 

48 assert found['decimal_'] == 1 

49 

50 record2 = await client.types.create({'decimal_': Decimal('1.24343336464224')}) 

51 

52 found = await client.query_first(queries.select, Decimal('1.24343336464224')) 

53 assert found['id'] == record2.id 

54 assert found['decimal_'] == 1.24343336464224 

55 

56 model = await client.query_first(queries.select, Decimal('1.24343336464224'), model=Types) 

57 assert model is not None 

58 assert model.id == record2.id 

59 assert model.decimal_ == Decimal('1.24343336464224')