Lychee = require('../../')
should = require 'should'

Lychee.connect ['mongodb://127.0.0.1:27017/lychee']

describe 'MongoDB', ->
	class Post extends Lychee.Model
		@driver 'mongodb'
		@key '_id', primary: yes
		@key 'title', default: 'Default title'
		@key 'body', default: 'Default body'
		@collection 'interesting_posts'
		
		@timestamps(create: 'created_at', update: 'updated_at')

	Post = Lychee.setup Post
	PostID = undefined
	
	it 'should create post', (done) ->
		post = new Post title: 'Post title', body: 'Post body'
		post.save ->
			should.exist post._id
			PostID = post._id.toString()
			done()
		
	it 'should find post by id', (done) ->
		Post.find _id: PostID, (err, posts) ->
			posts.length.should.equal 1
			done()

	it 'should create another post', (done) ->
		post = new Post title: 'Second post title', body: 'Second post body'
		post.save ->
			should.exist post._id
			done()

	it 'should find first post', (done) ->
		Post.find sort: _id: 1, (err, posts) ->
			posts[0].title.should.equal 'Post title'
			done()

	it 'should update first post', (done) ->
		Post.find title: 'Post title', (err, posts) ->
			post = posts[0]
			post.title.should.equal 'Post title'
			post.title = 'New post title'
			post.old.title.should.equal 'Post title'
			post.save ->
				Post.find title: 'New post title', (err, posts) ->
					posts.length.should.equal 1
					done()

	it 'should remove first post', (done) ->
		Post.find title: 'New post title', (err, posts) ->
			posts[0].remove ->
				Post.find (err, posts) ->
					posts.length.should.equal 1
					done()

	it 'should remove all posts', (done) ->
		Post.remove ->
			Post.find (err, posts) ->
				posts.length.should.equal 0
				done()