# graphql-api-js Apollo graphql api server for Photowall ## Run it locally Create an .env file (see .env.example for what to set). ### Development Run ``` $ npm install $ docker compose build $ docker compose up ``` Then head over to [The playground GUI](https://localhost:4000) in the browser See context function of src/index.ts for Authentication options for development. ### Run prod-like container locally Run ``` $ docker compose -f docker-compose-prodlike.yml build $ docker compose -f docker-compose-prodlike.yml up ``` ## Run tests Scripts will create the insert sql files for a randomized fake data postgres database. This database is based of the actual db in photowall project. ``` npm test ``` ### Writing tests The tests are held in testcontainers [testcontainers-node](https://github.com/testcontainers/testcontainers-node). One container holding a test postgres database and one container started from the Dockerfile containing the Apollo GraphQL server. These containers have connections with each other. Each test is build around inserting fake data in the empty db, fetching that data through the GraphQL and with raw Sql queries and then comparing the results. To write new inserts into the DB generate sql files with js in the src/**test**/db_generator tool. Then load the new sql file in the containerSetup.ts file. When you have the data you need in the db, write tests in all.test.ts file following the pattern already set.