import React from 'react'
import {mount} from 'enzyme'
import expect from 'expect'
import Fuse from 'fuse.js'
import sinon from 'sinon'
import SearchBar from 'components/search_bar'

describe('SearchBar', () => {
  it('should render', () => {
    const on_query_change = sinon.spy()
    const element = mount(
      <SearchBar
        make_fuse={() => new Fuse([], {
          keys: ["name"],
          id: "id",
          threshold: 0.2,
        })}
        on_query_change={on_query_change}
        default_results={[1]}
      />
    )
    expect(element.html()).toExist()
    expect(on_query_change.callCount).toEqual(1)
    element.instance().set_query("blob")
    expect(on_query_change.callCount).toEqual(2)
    element.instance().set_query("blob")
    expect(on_query_change.callCount).toEqual(2)
    element.setProps({items: [{id: 1, name: ''}]})
    expect(on_query_change.callCount).toEqual(2)
    element.setProps({items: [{id: 1, name: 'blob'}]})
    expect(on_query_change.callCount).toEqual(3)
    element.instance().set_query("")
    expect(on_query_change.callCount).toEqual(4)
  })

  it('should set default results at initialisation', () => {
    const on_query_change = sinon.spy()
    const default_results = [1]
    const element = mount(
      <SearchBar
        make_fuse={() => new Fuse([], {
          keys: ["name"],
          id: "id",
          threshold: 0.2,
        })}
        on_query_change={on_query_change}
        default_results={default_results}
      />
    )
    expect(on_query_change.calledWith("", default_results)).toBeTruthy()
  })
})
