#= require angular/payrollhero_api/ph_restangular.coffee

describe 'angular:payrollhero.api.factory(EmployeeScheduleDayList)', ->
  subject = undefined
  httpBackend = undefined
  employeesService = undefined
  scheduleEventsService = undefined

  doNotExpectFailure = (error) ->
    console.error(error)
    throw "promise threw unexpected failure!"

  setupBasicEmployeeResponse = ->
    httpBackend.expectGET('http://api.payrollhero.dev/api/v3/employees?page=1&token=t0ken')
    .respond(getJSONFixture('api/v3/employees_response.json'))

  setupBasicScheduleEventsResponse = ->
    httpBackend.expectGET('http://api.payrollhero.dev/api/v4/schedule_events?page=1&token=t0ken')
    .respond(getJSONFixture('api/v4/schedules_response.json'))

  beforeEach ->
    module 'payrollhero.api'
    angular.module('payrollhero.api').constant('PhToken', {token: 't0ken'})

  beforeEach inject (EmployeesService, ScheduleEventsService, EmployeeScheduleDayList, $httpBackend) ->
    subject = EmployeeScheduleDayList
    employeesService = EmployeesService
    scheduleEventsService = ScheduleEventsService
    httpBackend = $httpBackend
    return

  describe 'methods', ->
    employees = []
    schedules = []
    instance = undefined
    day = moment('2014-12-22')

    onDayFilter = (scheduleEvent) ->
      scheduleEvent.occursOn(day)

    toKindAndId = (scheduleEvent) ->
      "#{scheduleEvent.id}:#{scheduleEvent.kind}"

    beforeEach ->
      setupBasicEmployeeResponse()
      setupBasicScheduleEventsResponse()
      employeesService.getList(page: 1).then (list) ->
        employees = list
      scheduleEventsService.getList(page: 1).then (list) ->
        schedules = list
      httpBackend.flush()
      employee = _(employees).where(id: 46)
      schedules = _(schedules).chain().where(employee_id: 46).filter(onDayFilter).value()
      instance = new subject(day, employee, schedules)

    it 'isnt empty', ->
      expect(instance.isEmpty()).toBeFalsy()

    it 'maps', ->
      expect(instance.map(toKindAndId)).toEqual(["51699:recurring_schedule"])

    it 'kinds', ->
      expect(instance.kinds()).toEqual(['recurring_schedule'])

    it 'plucks', ->
      expect(instance.pluck('id')).toEqual([51699])

    it 'friendlyKinds', ->
      expect(instance.friendlyKinds()).toEqual(['Recurring Schedule'])
