db-seeder-mongo-db
v0.1.3
Published
Seed a mongo database with data
Maintainers
Readme
DB Seeder Mongo Db
Creates a server that can seed a mongo db with data. This is developed with e2e-tests in mind, and allows each test to set the database in a desired state.
Setup with docker
The easiest way to use this service is most likely to use it with docker compose.
Start by creating a .env file with the following content:
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=root
MONGO_INITDB_DATABASE=myDbAnd then create a docker-compose.yml file with the following content:
services:
mongo:
restart: always
image: mongo:8
env_file:
- .env
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
- MONGO_INITDB_DATABASE=${MONGO_INITDB_DATABASE}
healthcheck:
test: ["CMD-SHELL", "mongod --version"]
interval: 5s
timeout: 5s
retries: 5
db-seeder-mongo-db:
restart: always
image: hammerpath/db-seeder-mongo-db:0.1
ports:
- "3000:3000"
env_file:
- .env
environment:
- MONGO_HOST=mongo
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
- MONGO_INITDB_DATABASE=${MONGO_INITDB_DATABASE}
depends_on:
mongo:
condition: service_healthy The database needs to be initialized with collections before using this service. If it's empty, this can be done by creating a init_mongo_collections.js file in the root of your project with the following content:
db.createCollection("users");And add it to the docker-compose.yml file:
services:
mongo:
# --- Other properties here ---
volumes:
- ./init_mongo_collections.js:/docker-entrypoint-initdb.d/init_mongo_collections.js:roAnd then run docker compose up.
Now you can call the auto generated endpoints for each collection.
Setup with npm
npm i db-seeder-mongo-dbIn package.json add the following script:
{
"scripts": {
"db-seeder": "db-seeder-mongo-db run"
}
}And run the server with:
npm run db-seederUsage
The server will create endpoints for each collection in the database. The endpoints are named after the collections.
Populate the values
Send a POST request to http://localhost:3000/seed/{collectionName} with the data you want to seed. An example would look like this:
const users = [
{
id: 1,
name: "John Doe"
},
{
id: 2,
name: "Jane Doe"
}
];
// Cypress
cy.request("POST", "http://localhost:3000/seed/users", users);
// Playwright
await request.post("http://localhost:3000/seed/users", {
data: users
});Remove the values from the collection
Send a POST request to http://localhost:3000/truncate/{collectionName} to remove the value(s) from the collection.
// Cypress
cy.request("POST", "http://localhost:3000/truncate/users");
// Playwright
await request.post("http://localhost:3000/truncate/users");Remove all values from the database
Send a POST request to http://localhost:3000/truncate to remove all values from the database.
// Cypress
cy.request("POST", "http://localhost:3000/truncate");
// Playwright
await request.post("http://localhost:3000/truncate");