sworm-schema

Schema Utilities for testing databases

Usage no npm install needed!

<script type="module">
  import swormSchema from 'https://cdn.skypack.dev/sworm-schema';
</script>

README

SWORM Schema npm version npm Build Status

A companion to the popular SWORM ORM.

SWORM Schema is used to automate creating, deleting and cleaning of test databases.

You can also use it to validate that the schema has all the tables and columns required to run a particular query. This is really useful if you are integrating with an existing database and are trying to figure out what parts of the schema your test database needs.

Install

npm i sworm-schema --save-dev

yarn add sworm-schema --dev

How to use it

Firstly lets define our schema and suply a url connection string the datbase. The most common way of using this is with sqlite:

const SwormSchema = require('sworm-schema')

const swormSchema = new SwormSchema({
  url: 'sqlite:test/db/test.db',
  schema: {
    people: {
      id: {type: 'integer'},
      name: {type: 'text'},
    },
    places: {
      id: {type: 'integer'},
      name: {type: 'text'},
    }
  }
})

Now create the database

await swormSchema.create()

You'll want to use the same connection string for the application you have under test. Or if you just want to play with database using SWORM you can just do this:

const db = await swormSchema.connect()

const person = db.model({table: 'people'})
const place = db.model({table: 'places'})

await person({id: 1, name: 'bob'}).save()
await person({id: 2, name: 'julie'}).save()
await place({id: 1, name: 'stroud'}).save()
await place({id: 2, name: 'auckland'}).save()

await db.query(`select id, name from people`)

Say you need to use a new query in your tests. You might want to see if the test schema supports it:

await swormSchema.validateQuery(`
  select p.name, o.name as orgName
  from people p inner join
    organisations o on p.org_id = o.id
`)

which will output:

{
  "message": "Incompatible",
  "missing": {
    "people": {
      "org_id": {
        "type": "unknown"
      }
    },
    "organisations": {
      "name": {
        "type": "unknown"
      },
      "id": {
        "type": "unknown"
      }
    }
  }
}

You might want to clean up the data afterwards:

await swormSchema.clean()

Or if you just want to get rid of the whole database:

await swormSchema.drop()

We're Hiring!

Featurist provides full stack, feature driven development teams. Want to join us? Check out our career opportunities.