import Vuex from 'vuex'
import { mount, createLocalVue, createWrapper } from '@vue/test-utils'
import InstanceExport from '@/components/export/InstanceExport.vue'
import sinon from 'sinon'
import chai from 'chai'
import VueRouter from 'vue-router'
import testUtils from '@/../tests/utils/testUtils'

import * as api from '@/api'
chai.should()

let localVue = createLocalVue()
localVue.use(Vuex)
localVue.use(VueRouter)
let router = new VueRouter()

// @ts-ignore
global.requestAnimationFrame = cb => cb()

describe('InstanceExport Component Unit Tests', () => {
  let store: any = null
  let consoleTemp = {
    warn: console.warn,
    error: console.error
  }

  before(function () {
    console.warn = function () {}
    console.error = function () {}
  })

  after(function () {
    console.warn = consoleTemp.warn
    console.error = consoleTemp.error
  })

  beforeEach(() => {
    store = new Vuex.Store({
      state: {}
    })
  })

  afterEach(() => {
    sinon.restore()
  })

  it('should correctly apply the student-map file', () => {
    let wrp = mount(InstanceExport, { localVue: localVue, store })
    let mapStub = sinon.stub().returns(testUtils.studentMap)
    let spy = sinon.spy()
    // @ts-ignore
    sinon.replaceGetter(wrp.vm, 'studentMap', mapStub)
    // @ts-ignore
    sinon.replaceGetter(wrp.vm, 'mapFileLoaded', sinon.stub().returns(true))
    // @ts-ignore
    sinon.replace(wrp.vm, 'optionalConvertAndCreatePopup', spy)
    // @ts-ignore
    wrp.vm.getMappedExportFile(testUtils.instanceExportsObfuscated)
    spy.firstCall.args[0].students[0].matrikelNo.should.equal(testUtils.studentMap['username'].matrikelNo)
  })
})