import test from 'ava'
import searchFromNotes from 'browser/lib/search'
import { dummyNote } from '../fixtures/TestDummy'
import _ from 'lodash'

const pickContents = (notes) => notes.map((note) => { return note.content })

let notes = []
let note1, note2, note3

test.before(t => {
  const data1 = { type: 'MARKDOWN_NOTE', content: 'content1', tags: ['tag1'] }
  const data2 = { type: 'MARKDOWN_NOTE', content: 'content1\ncontent2', tags: ['tag1', 'tag2'] }
  const data3 = { type: 'MARKDOWN_NOTE', content: '#content4', tags: ['tag1'] }

  note1 = dummyNote(data1)
  note2 = dummyNote(data2)
  note3 = dummyNote(data3)

  notes = [note1, note2, note3]
})

test('it can find notes by tags or words', t => {
  // [input, expected content (Array)]
  const testCases = [
    ['#tag1', [note1.content, note2.content, note3.content]],
    ['#tag1 #tag2', [note2.content]],
    ['#tag1 #tag2 #tag3', []],
    ['content1', [note1.content, note2.content]],
    ['content1 content2', [note2.content]],
    ['content1 content2 content3', []],
    ['#content4', [note3.content]]
  ]

  testCases.forEach((testCase) => {
    const [input, expectedContents] = testCase
    const results = searchFromNotes(notes, input)
    t.true(_.isEqual(pickContents(results).sort(), expectedContents.sort()))
  })
})
