const { loadFixture } = require('./utils')
const { coreTypes } = require('../dist/types')
const { Amount } = coreTypes
const fixtures = loadFixture('data-driven-tests.json')

function amountErrorTests() {
  fixtures.values_tests
    .filter((obj) => obj.type === 'Amount')
    .forEach((f) => {
      // We only want these with errors
      if (!f.error) {
        return
      }
      const testName =
        `${JSON.stringify(f.test_json)}\n\tis invalid ` + `because: ${f.error}`
      it(testName, () => {
        expect(() => {
          Amount.from(f.test_json)
          JSON.stringify(f.test_json)
        }).toThrow()
      })
    })
}

describe('Amount', function () {
  it('can be parsed from', function () {
    expect(Amount.from('1000000') instanceof Amount).toBe(true)
    expect(Amount.from('1000000').toJSON()).toEqual('1000000')
    const fixture = {
      value: '1',
      issuer: '0000000000000000000000000000000000000000',
      currency: 'USD',
    }
    const amt = Amount.from(fixture)
    const rewritten = {
      value: '1',
      issuer: 'rrrrrrrrrrrrrrrrrrrrrhoLvTp',
      currency: 'USD',
    }
    expect(amt.toJSON()).toEqual(rewritten)
  })
  amountErrorTests()
})
