import assert from 'assert'
import migration29 from '../../../app/scripts/migrations/029'
import { TRANSACTION_STATUSES } from '../../../shared/constants/transaction'

const properTime = new Date().getTime()
const storage = {
  meta: {},
  data: {
    TransactionController: {
      transactions: [
        { status: TRANSACTION_STATUSES.APPROVED, id: 1, submittedTime: 0 },
        {
          status: TRANSACTION_STATUSES.APPROVED,
          id: 2,
          submittedTime: properTime,
        },
        {
          status: TRANSACTION_STATUSES.CONFIRMED,
          id: 3,
          submittedTime: properTime,
        },
        {
          status: TRANSACTION_STATUSES.SUBMITTED,
          id: 4,
          submittedTime: properTime,
        },
        { status: TRANSACTION_STATUSES.SUBMITTED, id: 5, submittedTime: 0 },
      ],
    },
  },
}

describe('storage is migrated successfully where transactions that are submitted have submittedTimes', function () {
  it('should auto fail transactions more than 12 hours old', function (done) {
    migration29
      .migrate(storage)
      .then((migratedData) => {
        const txs = migratedData.data.TransactionController.transactions
        const [txMeta1] = txs
        assert.equal(migratedData.meta.version, 29)

        assert.equal(
          txMeta1.status,
          TRANSACTION_STATUSES.FAILED,
          'old tx is auto failed',
        )
        assert(
          txMeta1.err.message.includes('too long'),
          'error message assigned',
        )

        txs.forEach((tx) => {
          if (tx.id === 1) {
            return
          }
          assert.notEqual(
            tx.status,
            TRANSACTION_STATUSES.FAILED,
            'other tx is not auto failed',
          )
        })

        done()
      })
      .catch(done)
  })
})
