/// <reference path="../typings/tsd.d.ts" />
'use strict'

import * as chai from 'chai';
import {ModelPropertyMetadata} from '../src/ModelPropertyMetadata';
import * as helpers from './helpers';

const expect = chai.expect;

describe('ModelPropertyMetadata', () => {
   
  helpers.checkClassExport(ModelPropertyMetadata, {name: 'Test', type: String});
  helpers.checkAttributes(ModelPropertyMetadata, {
    default: {
      args: {
        name: 'name',
        type: String
      },
      expected: {
        name: 'name',
        id: false,
        default: undefined,
        columnName: 'name',
        index: false
      }
    },
    custom: {
      args: {
        name: 'name',
        type: Number,
        id: true,
        columnName: 'lastname',
        index: true
      },
      expected: {
        name: 'name',
        id: true,
        columnName: 'lastname',
        index: true
      }
    }
  });

  it('default value should be returned as function if defined', () => {
    let instance = new ModelPropertyMetadata({name: 'name', type: String});
    expect(instance.default).to.be.equal(undefined);
    instance = new ModelPropertyMetadata({name: 'name', type: String, default: true});
    expect(instance.default).to.be.an('function');
    expect(instance.default()).to.be.equal(true);
    instance = new ModelPropertyMetadata({name: 'name', type: String, default: () => 1});
    expect(instance.default).to.be.an('function');
    expect(instance.default()).to.be.equal(1);
  });
});
  
