describe('basic', function (){

  var app
    , obj = { first_name: 'Jean-Luc', last_name: 'Picard', id: idgen() };

  before(function (done) {
    app = require('cantina');
    app.boot(function(err) {
      app.conf.set('mongo:db', 'cantina-app-users-test-' + idgen());
      require('../');
      if (err) return done(err);
      app.start(done);
    });
  });

  after(function (done) {
    app.mongo.dropDatabase(function () {
      app.destroy(done);
    });
  });

  it('connects', function (done) {
    assert(app.collections.users);
    done();
  });

  it('works', function (done) {
    app.collections.users.create(obj, function (err, user) {
      assert.ifError(err);
      assert(user);
      for (var k in obj) {
        assert.strictEqual(user[k], obj[k]);
      }
      done();
    });
  });

  it('supports native findOne', function (done) {
    app.collections.users.findOne({ first_name: obj.first_name }, { last_name: 0 }, function (err, entity) {
      assert.ifError(err);
      assert(entity);
      assert.strictEqual(entity.id, obj.id);
      assert.strictEqual(entity.first_name, obj.first_name);
      assert.strictEqual(entity.last_name, undefined);
      done();
    });
  });

  it('supports native find', function (done) {
    app.collections.users.find().toArray(function (err, results) {
      assert.ifError(err);
      assert(results);
      assert.equal(results.length, 1);
      for (var k in obj) {
        assert.strictEqual(results[0][k], obj[k]);
      }
      done();
    });
  });
});

@@ -49,26 +49,29 @@
 obj = %7B 
+name: %7B 
 first
-_name
 : 'Jean-
@@ -84,39 +84,489 @@
 last
-_name: 'Picard', id: idgen() %7D;
+: 'Picard' %7D, username: 'captain', email: 'jlp@enterprise.com', id: idgen() %7D;%0A%0A  function assertModel (actual, expected) %7B%0A    Object.keys(expected).forEach(function (prop) %7B%0A      if (prop === '_id') %7B%0A        assert.ok(expected%5Bprop%5D.equal(actual%5Bprop%5D));%0A      %7D%0A      else if (expected%5Bprop%5D === Object(expected%5Bprop%5D)) %7B%0A        assert.deepEqual(actual%5Bprop%5D, expected%5Bprop%5D);%0A      %7D%0A      else %7B%0A        assert.strictEqual(actual%5Bprop%5D, expected%5Bprop%5D);%0A      %7D%0A    %7D);%0A  %7D
 %0A%0A  
@@ -1151,37 +1151,8 @@
 r);%0A
-      for (var k in obj) %7B%0A  
     
@@ -1163,46 +1163,25 @@
 sert
-.strictEqua
+Mode
 l(user
-%5Bk%5D
 , obj
-%5Bk%5D);%0A      %7D
+);
 %0A   
@@ -1811,37 +1811,8 @@
 1);%0A
-      for (var k in obj) %7B%0A  
     
@@ -1819,27 +1819,20 @@
   assert
-.strictEqua
+Mode
 l(result
@@ -1839,29 +1839,15 @@
 s%5B0%5D
-%5Bk%5D
 , obj
-%5Bk%5D);%0A      %7D
+);
 %0A   

Update tests