46 lines
1.6 KiB
Markdown
46 lines
1.6 KiB
Markdown
# 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
|
|
```
|
|
|
|
For browse query testing use Insomnia or similar tool with token from `<url to photowall>/admin/auth/token`
|
|
|
|
Take the value of the token param and add header in insomnia:Authorization: Bearer <token>. The token is valid for 2-3 hours.
|
|
|
|
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.
|