# Testing Notes ## The Test Suite - The OS will find an available port for the test suite to use. - We use the same PostgreSQL database instance for both testing and production environment (might bite us in the ass later ?). ## Testing with `tokio` - Each test has to be marked `#[tokio::test]`. - This macro will build a new async runtime for that one test. - By calling `spawn_app()`, we will get a API HttpServer running for the entire duration of the single test that the macro above belongs to. ## Databases and Testing Every module level integration test we run, we spin up a new logical database with the name generate by `Uuid` crate. This is easy and cheap, the database only lives in docker and therefore, we don't have to worry much about data size ballooning. Example when running `\l` ``` psql postgres://postgres:password@localhost:5432 psql (16.2) Type "help" for help. postgres=# \l List of databases Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges --------------------------------------+----------+----------+-----------------+------------+------------+------------+-----------+----------------------- 1e644722-ccfe-4573-9caa-2477c6a4ba43 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | 2ecfa7a7-5365-42a4-8b06-1bba0a7f21a8 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | 5a783f04-00d6-491d-a47d-e8821ab75426 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | 941446de-a9a2-40b9-b9b4-e9905084eab8 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | a60cf099-5f6c-4a6c-8179-7ed8e1c910cd | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | c9924d51-5585-4a1c-81b0-43e96fb67c16 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | d4135928-eac5-47dd-8497-9268ea5a68c6 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | e8406e27-80b5-47cb-8170-e3bced578c68 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | f13ca340-888e-4e3c-a560-9e9c7f99e50e | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | newsletter | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | template0 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres + | | | | | | | | postgres=CTc/postgres (13 rows) postgres=# ```