module('select2(data)');

var $ = require('jquery'); var Select2 = require('select2/core'); var Options = require('select2/options');

test('single default selection returned', function (assert) {

var $select = $(
  '<select>' +
    '<option>One</option>' +
    '<option>Two</option>' +
    '<option value="3" selected>Three</option>' +
  '</select>'
);
var options = new Options({});

var select = new Select2($select, options);

var items = select.data();

assert.equal(
  items.length,
  1,
  'The one selected item should be returned'
);

var first = items[0];

assert.equal(
  first.id,
  '3',
  'The first option was correct'
);

assert.equal(
  first.text,
  'Three',
  'The first option was correct'
);

});

test('multiple default selections returned', function (assert) {

var $select = $(
  '<select multiple>' +
    '<option selected>One</option>' +
    '<option>Two</option>' +
    '<option value="3" selected>Three</option>' +
  '</select>'
);
var options = new Options({});

var select = new Select2($select, options);

var items = select.data();

assert.equal(
  items.length,
  2,
  'The two selected items should be returned'
);

var first = items[0];

assert.equal(
  first.id,
  'One',
  'The first option was correct'
);

var second = items[1];

assert.equal(
  second.id,
  '3',
  'The option value should be pulled correctly'
);

});

module('select2(val)');

test('single value matches jquery value', function (assert) {

var $select = $(
  '<select>' +
    '<option>One</option>' +
    '<option>Two</option>' +
    '<option value="3" selected>Three</option>' +
  '</select>'
);
var options = new Options({});

var select = new Select2($select, options);

var value = select.val();

assert.equal(
  value,
  '3',
  'The value should match the option tag attribute'
);

assert.equal(
  value,
  $select.val(),
  'The value should match the jquery value'
);

});

test('multiple value matches the jquery value', function (assert) {

var $select = $(
  '<select multiple>' +
    '<option selected>One</option>' +
    '<option>Two</option>' +
    '<option value="3" selected>Three</option>' +
  '</select>'
);
var options = new Options({});

var select = new Select2($select, options);

var value = select.val();

assert.equal(
  value.length,
  2,
  'Two options should be selected'
);

assert.deepEqual(
  value,
  ['One', '3'],
  'The values should match the option tag attribute'
);

assert.deepEqual(
  value,
  $select.val(),
  'The values should match the jquery values'
);

});