import axios, { AxiosResponse } from 'axios'

import {
  toStringNoMS,
  updateQueryStringParameter,
  isDid,
  getFileInfo
} from '../../../src/utils'

jest.mock('axios')

describe('updateQueryStringParameter()', () => {
  it('transform a URI', () => {
    const newUri = updateQueryStringParameter(
      '/hello?param=hello',
      'param',
      'hello2'
    )
    expect(newUri).toContain('param=hello2')
  })
})

describe('toStringNoMS()', () => {
  it('returns a ISO string from a Date object without the milliseconds', () => {
    expect(toStringNoMS(new Date(1583956486719))).toEqual(
      '2020-03-11T19:54:46Z'
    )
  })
})

describe('getFileInfo()', () => {
  it('Success on existing file', async () => {
    ;(axios as any).mockResolvedValue({
      data: {
        status: 200,
        result: { contentLength: '10000', contentType: 'application/pdf' }
      }
    } as AxiosResponse)

    const fileInfo = await getFileInfo('https://demo.com')
    expect(fileInfo.contentType).toBe('application/pdf')
  })
})

describe('isDid()', () => {
  it('checks correct DID', () => {
    expect(
      isDid(
        'did:op:bb6b9e960b2e40e3840ca5eafc8eb97af431b4d190b54e2f9926e1f792cdc54f'
      )
    ).toBe(true)
  })

  it('errors when no DID', () => {
    expect(isDid('hello')).toBe(false)
  })
})