# Dynafixtures
Fixtures for DynamoDB using DynamoDB Local.

This package is meant to quickly implement fixtures for DynamoDB. Particularly handy if you want to unit test code that requires AWS DynamoDB.

## Setup and teardown

Make sure you have DynamoDB running locally. This is as easy as downloading a file and then running a command. See the [AWS documentation](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html#Tools.DynamoDBLocal.DownloadingAndRunning) for more info.

Install the package:

```javascript
npm install --save-dev dynafixtures
```
    
Create fixtures files for tables and records. See the test folder for examples (there are just JSONs for the correct DynamoDB API functions). Dynafixtures uses the `createTable` and `batchWriteItem` API calls of the [AWS DynamoDB API](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html).

The easiest way to start is to use the `setup()` and `teardown()` functions. `setup()` is shorthand for `initialize()` and `fixtures()`, e.g. create tables and records in one go.

```javascript
var tables = process.cwd() + '/test_tables.json';
var fixtures = [
    process.cwd() + '/Forum_fixture.json',
    process.cwd() + '/fixture2.json'
];
var port = 4567; // Defaults to 4567 if `typeof port` is not a number
  
dynafixtures.setup(tables, fixtures, port, function(err){
    if (err) {
        //Handle error
    }
);
```

When the tests are completed, run:

```javascript
dynafixtures.teardown(function(err){
    if (err) {
    // Handle error
    }
});
```

## Using DynamoDB during tests

Between setup and teardown (which you should do before and after each test, fits nicely in assert's `before` and `after` functions or). you can access the DynamoDB on your machine using this snippet:

```javascript
var aws = require('aws-sdk');
var db = new aws.DynamoDB({
  'accessKeyId': 'a',
  'secretAccessKey':'b',
  'endpoint':'http://localhost:4567', // Your port here
  'region': 'eu-west-1'
});

// Now you can do DynamoDB calls using db.scan() or whatever.
// ...
```