import assert from 'assert'
import firstTimeState from '../../../app/scripts/first-time-state'
import migration27 from '../../../app/scripts/migrations/027'
import { TRANSACTION_STATUSES } from '../../../shared/constants/transaction'

const oldStorage = {
  meta: {},
  data: {
    TransactionController: {
      transactions: [],
    },
  },
}

const transactions = []

while (transactions.length < 9) {
  transactions.push({ status: TRANSACTION_STATUSES.REJECTED })
  transactions.push({ status: TRANSACTION_STATUSES.UNAPPROVED })
  transactions.push({ status: TRANSACTION_STATUSES.APPROVED })
}

oldStorage.data.TransactionController.transactions = transactions

describe('migration #27', function () {
  it('should remove rejected transactions', function (done) {
    migration27
      .migrate(oldStorage)
      .then((newStorage) => {
        const newTransactions =
          newStorage.data.TransactionController.transactions
        assert.equal(
          newTransactions.length,
          6,
          'transactions is expected to have the length of 6',
        )
        newTransactions.forEach((txMeta) => {
          if (txMeta.status === TRANSACTION_STATUSES.REJECTED) {
            done(new Error('transaction was found with a status of rejected'))
          }
        })
        done()
      })
      .catch(done)
  })

  it('should successfully migrate first time state', function (done) {
    migration27
      .migrate({
        meta: {},
        data: firstTimeState,
      })
      .then((migratedData) => {
        assert.equal(migratedData.meta.version, migration27.version)
        done()
      })
      .catch(done)
  })
})
