'use strict'

var should = require('should'),
    UsergridQuery = require('../../lib/query')

describe('_type', function() {
    it('_type should equal "cats" when passing "type" as a parameter to UsergridQuery', function() {
        var query = new UsergridQuery('cats')
        query.should.have.property('_type').equal('cats')
    })

    it('_type should equal "cats" when calling .type() builder method', function() {
        var query = new UsergridQuery().type('cats')
        query.should.have.property('_type').equal('cats')
    })

    it('_type should equal "cats" when calling .collection() builder method', function() {
        var query = new UsergridQuery().collection('cats')
        query.should.have.property('_type').equal('cats')
    })
})

describe('_limit', function() {
    it('_limit should equal 2', function() {
        var query = new UsergridQuery('cats').limit(2)
        query.should.have.property('_limit').equal(2)
    })

    it('_limit should equal 10', function() {
        var query = new UsergridQuery('cats').limit(10)
        query.should.have.property('_limit').equal(10)
    })
})

describe('_ql', function() {
    it('should be an empty string if query or sort are empty or underfined', function() {
        var query = new UsergridQuery('cats')
        query.should.have.property('_ql').equal("")
    })

    it('should support complex builder pattern syntax (chained constructor methods)', function() {
        var query = new UsergridQuery('cats')
            .gt('weight', 2.4)
            .contains('color', 'bl*')
            .not
            .eq('color', 'blue')
            .or
            .eq('color', 'orange')
        query.should.have.property('_ql').equal("select * where weight > 2.4 and color contains 'bl*' and not color = 'blue' or color = 'orange'")
    })

    it('and operator should be implied when joining multiple conditions', function() {
        var query1 = new UsergridQuery('cats')
            .gt('weight', 2.4)
            .contains('color', 'bl*')
        query1.should.have.property('_ql').equal("select * where weight > 2.4 and color contains 'bl*'")
        var query2 = new UsergridQuery('cats')
            .gt('weight', 2.4)
            .and
            .contains('color', 'bl*')
        query2.should.have.property('_ql').equal("select * where weight > 2.4 and color contains 'bl*'")
    })

    it('not operator should precede conditional statement', function() {
        var query = new UsergridQuery('cats')
            .not
            .eq('color', 'white')
        query.should.have.property('_ql').equal("select * where not color = 'white'")
    })

    it('fromString should set _ql directly, bypassing builder pattern methods', function() {
        var q = "where color = 'black' or color = 'orange'"
        var query = new UsergridQuery('cats')
            .fromString(q)
        query.should.have.property('_ql').equal(q)
    })

    it('string values should be contained in single quotes', function() {
        var query = new UsergridQuery('cats')
            .eq('color', 'black')
        query.should.have.property('_ql').equal("select * where color = 'black'")
    })

    it('boolean values should not be contained in single quotes', function() {
        var query = new UsergridQuery('cats')
            .eq('longHair', true)
        query.should.have.property('_ql').equal("select * where longHair = true")
    })

    it('float values should not be contained in single quotes', function() {
        var query = new UsergridQuery('cats')
            .lt('weight', 18)
        query.should.have.property('_ql').equal("select * where weight < 18")
    })

    it('integer values should not be contained in single quotes', function() {
        var query = new UsergridQuery('cats')
            .gte('weight', 2)
        query.should.have.property('_ql').equal("select * where weight >= 2")
    })

    it('uuid values should not be contained in single quotes', function() {
        var query = new UsergridQuery('cats')
            .eq('uuid', 'a61e29ba-944f-11e5-8690-fbb14f62c803')
        query.should.have.property('_ql').equal("select * where uuid = a61e29ba-944f-11e5-8690-fbb14f62c803")
    })
})