"use strict";

var assert = require('assert');
var mocks = require('../../lib/test/mocks');
var db = require('../../lib/test/db');
var sendMail = geddy.mailer.sendMail;

var tests = module.exports = {
  // start with a clean DB
  'before': function(next) {
    db.reset(function() {
      db.init(function() {
        db.migrate(next);
      });
    });
  },
  'beforeEach': function(next) {
    // restore sendMail method
    geddy.mailer.sendMail = sendMail;

    // empty database
    db.empty(next);
  },
  'Create new user': function(next) {
    var timeout = setTimeout(function() {
      assert.fail('User creation has not finished in time.');
    }, 2000);

    // check if confirmation email has been send
    geddy.mailer.sendMail = function(opts, cb) {
      // do your assertions here

      // do not forget to call the callback
      cb();
    });
    
    mocks.executeControllerAction('Users', 'create', params, function(data, options) {
      clearTimeout(timeout);

      // do your assertions here
    });
  }
};