text: const assert = require('assert')
  const migration23 = require('../../../app/scripts/migrations/023')
  const properTime = (new Date()).getTime()
  const storage = {
    "meta": {},
    "data": {
      "TransactionController": {
        "transactions": [
        ]
      },
    },
  }
  
  const transactions = []
  const transactions40 = []
  const transactions20 = []
  
  const txStates = [
    'unapproved',
    'approved',
    'signed',
    'submitted',
    'confirmed',
    'rejected',
    'failed',
    'dropped',
  ]
  
  const deletableTxStates = [
    'confirmed',
    'rejected',
    'failed',
    'dropped',
  ]
  
  let nonDeletableCount = 0
  
  let status
  while (transactions.length <= 100) {
    status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))]
    if (!deletableTxStates.find((s) => s === status)) nonDeletableCount++
    transactions.push({status})
  }
  
  while (transactions40.length < 40) {
    status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))]
    transactions40.push({status})
  }
  
  while (transactions20.length < 20) {
    status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))]
    transactions20.push({status})
  }
  
  
  
  storage.data.TransactionController.transactions = transactions
  
  describe('storage is migrated successfully and the proper transactions are remove from state', () => {
    it('should remove transactions that are unneeded', (done) => {
      migration23.migrate(storage)
      .then((migratedData) => {
        let leftoverNonDeletableTxCount = 0
        const migratedTransactions = migratedData.data.TransactionController.transactions
        migratedTransactions.forEach((tx) => {
          if (!deletableTxStates.find((s) => s === tx.status)) {
            leftoverNonDeletableTxCount++
          }
        })
        assert.equal(leftoverNonDeletableTxCount, nonDeletableCount, 'migration shouldnt delete transactions we want to keep')
        assert((migratedTransactions.length >= 40), `should be equal or greater to 40 if they are non deletable states got ${migratedTransactions.length} transactions`)
        done()
      }).catch(done)
    })
  
    it('should not remove any transactions because 40 is the expectable limit', (done) => {
      storage.meta.version = 22
      storage.data.TransactionController.transactions = transactions40
      migration23.migrate(storage)
      .then((migratedData) => {
        const migratedTransactions = migratedData.data.TransactionController.transactions
  
        assert.equal(migratedTransactions.length, 40, 'migration shouldnt delete when at limit')
        done()
      }).catch(done)
    })
  
    it('should not remove any transactions because 20 txs is under the expectable limit', (done) => {
      storage.meta.version = 22
      storage.data.TransactionController.transactions = transactions20
      migration23.migrate(storage)
      .then((migratedData) => {
        const migratedTransactions = migratedData.data.TransactionController.transactions
        assert.equal(migratedTransactions.length, 20, 'migration shouldnt delete when under limit')
        done()
      }).catch(done)
    })
  
  })
  