import {
  get_mission_fields, get_missions_fields, get_fields, get_proposal_ids, get_user_fields,
  get_mission_values_by_mission, get_users_filter_fields,
} from 'selectors/fields'
import {array_from_hash} from 'common/utilities'
import state from './state.js'
import expect from 'expect'

describe("get_fields", () => {
  it("should return fields", () => {
    let fields = get_fields(state)
    expect(fields[0]).toExist()
  })
})

describe("get_mission_fields", () => {
  it("should return fields", () => {
    let fields = get_mission_fields(1)(state)
    expect(fields[1]).toExist()
    expect(fields[7].category).toEqual('non_exclusive')
  })
})

describe("get_users_fields", () => {
  it("should return fields", () => {
    let fields = get_user_fields(1)(state)
    expect(fields[7].category).toEqual('exclusive')
  })
})

describe("get_missions_fields", () => {
  it("should return all missions fields", () => {
    const fields = array_from_hash(get_missions_fields(state))
    expect(fields.length).toEqual(
      array_from_hash(state.fields.fields)
      .filter(({for_entity, recycled}) => (for_entity == 'User' && recycled) || for_entity == 'Mission')
      .length
    )
    expect(fields[0].category).toEqual('comment')
    expect(fields[1].category).toEqual('non_exclusive')
    expect(fields[2].category).toEqual('exclusive')
    expect(fields[3].category).toEqual('non_exclusive')
    expect(fields[4].category).toEqual('non_exclusive')
  })
})

describe("get_proposal_ids", () => {
  it("should return proposal ids", () => {
    let proposal_ids = get_proposal_ids(state)
    expect(proposal_ids.length).toEqual(1)
  })
})

describe("get_mission_values_by_mission", () => {
  it("should return values by mission", () => {
    expect(get_mission_values_by_mission(state)[6]).toInclude(2)
  })
})

describe("get_users_filter_fields", () => {
  it("should include mission fields", () => {
    const users_filter_fields = get_users_filter_fields(state)
    const client_field = users_filter_fields.filter(({id}) => id == 5)[0]
    expect(client_field.get_item_values({id: 1})).toMatch([3])
  })
})
