diff --git a/tests/unit/Selecting.spec.js b/tests/unit/Selecting.spec.js
new file mode 100644
index 0000000..c204e7b
--- /dev/null
+++ b/tests/unit/Selecting.spec.js
@@ -0,0 +1,257 @@
+import { shallowMount } from "@vue/test-utils";
+import VueSelect from "@/components/Select.vue";
+
+describe("VS - Selecting Values", () => {
+ let defaultProps;
+
+ beforeEach(() => {
+ defaultProps = {
+ value: "one",
+ options: ["one", "two", "three"]
+ };
+ });
+
+ it("can accept an array with pre-selected values", () => {
+ const Select = shallowMount(VueSelect, {
+ propsData: defaultProps
+ });
+ expect(Select.mutableValue).toEqual(Select.value);
+ });
+
+ it("can accept an array of objects and pre-selected value (single)", () => {
+ const Select = shallowMount(VueSelect, {
+ propsData: {
+ value: { label: "This is Foo", value: "foo" },
+ options: [
+ { label: "This is Foo", value: "foo" },
+ { label: "This is Bar", value: "bar" }
+ ]
+ }
+ });
+ expect(Select.mutableValue).toEqual(Select.value);
+ });
+
+ it("can accept an array of objects and pre-selected values (multiple)", () => {
+ const Select = shallowMount(VueSelect, {
+ propsData: {
+ value: [
+ { label: "This is Foo", value: "foo" },
+ { label: "This is Bar", value: "bar" }
+ ],
+ options: [
+ { label: "This is Foo", value: "foo" },
+ { label: "This is Bar", value: "bar" }
+ ]
+ },
+ multiple: true
+ });
+
+ expect(Select.mutableValue).toEqual(Select.value);
+ });
+
+ it("can select an option on tab", () => {
+ const Select = shallowMount(VueSelect, {
+ propsData: {
+ options: defaultProps.options,
+ selectOnTab: true
+ }
+ });
+
+ Select.typeAheadPointer = 0;
+
+ Select.find({ ref: "search" }).trigger("keydown", {
+ keyCode: 9
+ });
+
+ expect(Select.mutableValue).toEqual("one");
+ });
+ //
+ // it('can deselect a pre-selected object', () => {
+ // const vm = new Vue({
+ // template:
+ // '
',
+ // data: {
+ // value: [
+ // {label: 'This is Foo', value: 'foo'},
+ // {label: 'This is Bar', value: 'bar'},
+ // ],
+ // options: [
+ // {label: 'This is Foo', value: 'foo'},
+ // {label: 'This is Bar', value: 'bar'},
+ // ],
+ // },
+ // }).$mount();
+ // vm.$children[0].deselect({label: 'This is Foo', value: 'foo'});
+ // expect(vm.$children[0].mutableValue.length).toEqual(1);
+ // });
+ //
+ // it('can deselect a pre-selected string', () => {
+ // const vm = new Vue({
+ // template:
+ // '
',
+ // data: {
+ // value: ['foo', 'bar'],
+ // options: ['foo', 'bar'],
+ // },
+ // }).$mount();
+ // vm.$children[0].deselect('foo');
+ // expect(vm.$children[0].mutableValue.length).toEqual(1);
+ // }),
+ // it('can deselect an option when multiple is false', () => {
+ // const vm = new Vue({
+ // template: `
`,
+ // }).$mount();
+ // vm.$children[0].deselect('foo');
+ // expect(vm.$children[0].mutableValue).toEqual(null);
+ // });
+ //
+ // it('can determine if the value prop is empty', () => {
+ // const vm = new Vue({
+ // template:
+ // '
',
+ // components: {vSelect},
+ // data: {
+ // value: [],
+ // options: ['one', 'two', 'three'],
+ // },
+ // }).$mount();
+ // var select = vm.$children[0];
+ // expect(select.isValueEmpty).toEqual(true);
+ //
+ // select.select(['one']);
+ // expect(select.isValueEmpty).toEqual(false);
+ //
+ // select.select([{l: 'f'}]);
+ // expect(select.isValueEmpty).toEqual(false);
+ //
+ // select.select('one');
+ // expect(select.isValueEmpty).toEqual(false);
+ //
+ // select.select({label: 'foo', value: 'foo'});
+ // expect(select.isValueEmpty).toEqual(false);
+ //
+ // select.select('');
+ // expect(select.isValueEmpty).toEqual(true);
+ //
+ // select.select(null);
+ // expect(select.isValueEmpty).toEqual(true);
+ // });
+ //
+ // it('should reset the selected values when the multiple property changes',
+ // done => {
+ // const vm = new Vue({
+ // template:
+ // '
',
+ // components: {vSelect},
+ // data: {
+ // value: ['one'],
+ // multiple: true,
+ // options: ['one', 'two', 'three'],
+ // },
+ // }).$mount();
+ //
+ // vm.multiple = false;
+ //
+ // Vue.nextTick(() => {
+ // expect(vm.$children[0].mutableValue).toEqual(null);
+ // vm.multiple = true;
+ // Vue.nextTick(() => {
+ // expect(vm.$children[0].mutableValue).toEqual([]);
+ // done();
+ // });
+ // });
+ // });
+ //
+ // it('can retain values present in a new array of options', () => {
+ // const vm = new Vue({
+ // template:
+ // '
',
+ // components: {vSelect},
+ // data: {
+ // value: ['one'],
+ // options: ['one', 'two', 'three'],
+ // },
+ // }).$mount();
+ // vm.options = ['one', 'five', 'six'];
+ // expect(vm.$children[0].mutableValue).toEqual(['one']);
+ // });
+ //
+ // it('can determine if an object is already selected', () => {
+ // const vm = new Vue({
+ // template:
+ // '
',
+ // components: {vSelect},
+ // data: {
+ // value: [{label: 'one'}],
+ // options: [{label: 'one'}],
+ // },
+ // }).$mount();
+ //
+ // expect(vm.$children[0].isOptionSelected({label: 'one'})).toEqual(true);
+ // });
+ //
+ // it('can use v-model syntax for a two way binding to a parent component',
+ // done => {
+ // const vm = new Vue({
+ // template:
+ // '
',
+ // components: {vSelect},
+ // data: {
+ // value: 'foo',
+ // options: ['foo', 'bar', 'baz'],
+ // },
+ // }).$mount();
+ //
+ // expect(vm.$children[0].value).toEqual('foo');
+ // expect(vm.$children[0].mutableValue).toEqual('foo');
+ //
+ // vm.$children[0].mutableValue = 'bar';
+ //
+ // Vue.nextTick(() => {
+ // expect(vm.value).toEqual('bar');
+ // done();
+ // });
+ // }),
+ // it(
+ // 'can check if a string value is selected when the value is an object and multiple is true',
+ // () => {
+ // const vm = new Vue({
+ // template: `
`,
+ // }).$mount();
+ // expect(vm.$children[0].isOptionSelected('foo')).toEqual(true);
+ // }),
+ // describe('change Event', () => {
+ // it('will trigger the input event when the selection changes', done => {
+ // const vm = new Vue({
+ // template: `
`,
+ // data: {
+ // foo: '',
+ // },
+ // }).$mount();
+ //
+ // vm.$refs.select.select('bar');
+ //
+ // Vue.nextTick(() => {
+ // expect(vm.foo).toEqual('bar');
+ // done();
+ // });
+ // });
+ //
+ // it('should run change when multiple is true and the value changes',
+ // done => {
+ // const vm = new Vue({
+ // template: `
`,
+ // data: {
+ // foo: '',
+ // },
+ // }).$mount();
+ //
+ // vm.$refs.select.select('bar');
+ //
+ // Vue.nextTick(() => {
+ // expect(vm.foo).toEqual(['foo', 'bar']);
+ // done();
+ // });
+ // });
+ // });
+});