aboutsummaryrefslogtreecommitdiffstats
path: root/test/integration/lib/add-token.js
blob: bb9d0d10f6a1b2356a4e1d38acd572868f633352 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
const reactTriggerChange = require('react-trigger-change')
const {
  timeout,
  queryAsync,
  findAsync,
} = require('../../lib/util')

QUnit.module('Add token flow')

QUnit.test('successful add token flow', (assert) => {
  const done = assert.async()
  runAddTokenFlowTest(assert)
    .then(done)
    .catch(err => {
      assert.notOk(err, `Error was thrown: ${err.stack}`)
      done()
    })
})

async function runAddTokenFlowTest (assert, done) {
  const selectState = await queryAsync($, 'select')
  selectState.val('add token')
  reactTriggerChange(selectState[0])

  // Used to set values on TextField input component
  const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
    window.HTMLInputElement.prototype, 'value'
  ).set

  // Check that no tokens have been added
  assert.ok($('.token-list-item').length === 0, 'no tokens added')

  // Go to Add Token screen
  let addTokenButton = await queryAsync($, 'button.btn-primary.wallet-view__add-token-button')
  assert.ok(addTokenButton[0], 'add token button present')
  addTokenButton[0].click()

  // Verify Add Token screen
  let addTokenWrapper = await queryAsync($, '.page-container')
  assert.ok(addTokenWrapper[0], 'add token wrapper renders')

  let addTokenTitle = await queryAsync($, '.page-container__title')
  assert.equal(addTokenTitle[0].textContent, 'Add Tokens', 'add token title is correct')

  // Cancel Add Token
  const cancelAddTokenButton = await queryAsync($, 'button.btn-default.btn--large.page-container__footer-button')
  assert.ok(cancelAddTokenButton[0], 'cancel add token button present')
  cancelAddTokenButton.click()

  assert.ok($('.wallet-view')[0], 'cancelled and returned to account detail wallet view')

  // Return to Add Token Screen
  addTokenButton = await queryAsync($, 'button.btn-primary.wallet-view__add-token-button')
  assert.ok(addTokenButton[0], 'add token button present')
  addTokenButton[0].click()

  // Verify Add Token Screen
  addTokenWrapper = await queryAsync($, '.page-container')
  addTokenTitle = await queryAsync($, '.page-container__title')
  assert.ok(addTokenWrapper[0], 'add token wrapper renders')
  assert.equal(addTokenTitle[0].textContent, 'Add Tokens', 'add token title is correct')

  // Search for token
  const searchInput = (await findAsync(addTokenWrapper, '#search-tokens'))[0]
  searchInput.focus()
  await timeout(1000)
  nativeInputValueSetter.call(searchInput, 'a')
  searchInput.dispatchEvent(new Event('input', { bubbles: true}))

  // Click token to add
  const tokenWrapper = await queryAsync($, 'div.token-list__token')
  assert.ok(tokenWrapper[0], 'token found')
  const tokenImageProp = tokenWrapper.find('.token-list__token-icon').css('background-image')
  const tokenImageUrl = tokenImageProp.slice(5, -2)
  tokenWrapper[0].click()

  // Click Next button
  const nextButton = await queryAsync($, 'button.btn-primary.btn--large')
  assert.equal(nextButton[0].textContent, 'Next', 'next button rendered')
  nextButton[0].click()

  // Confirm Add token
  const confirmAddToken = await queryAsync($, '.confirm-add-token')
  assert.ok(confirmAddToken[0], 'confirm add token rendered')
  assert.ok($('button.btn-primary.btn--large')[0], 'confirm add token button found')
  $('button.btn-primary.btn--large')[0].click()

  // Verify added token image
  let heroBalance = await queryAsync($, '.transaction-view-balance__balance-container')
  assert.ok(heroBalance, 'rendered hero balance')
  assert.ok(tokenImageUrl.indexOf(heroBalance.find('img').attr('src')) > -1, 'token added')

  // Return to Add Token Screen
  addTokenButton = await queryAsync($, 'button.btn-primary.wallet-view__add-token-button')
  assert.ok(addTokenButton[0], 'add token button present')
  addTokenButton[0].click()

  addTokenWrapper = await queryAsync($, '.page-container')
  const addTokenTabs = await queryAsync($, '.page-container__tab')
  assert.equal(addTokenTabs.length, 2, 'expected number of tabs')
  assert.equal(addTokenTabs[1].textContent, 'Custom Token', 'Custom Token tab present')
  assert.ok(addTokenTabs[1], 'add custom token tab present')
  addTokenTabs[1].click()
  await timeout(1000)

  // Input token contract address
  const customInput = (await findAsync(addTokenWrapper, '#custom-address'))[0]
  customInput.focus()
  await timeout(1000)
  nativeInputValueSetter.call(customInput, '0x177af043D3A1Aed7cc5f2397C70248Fc6cDC056c')
  customInput.dispatchEvent(new Event('input', { bubbles: true}))


  // Click Next button
  // nextButton = await queryAsync($, 'button.btn-primary--lg')
  // assert.equal(nextButton[0].textContent, 'Next', 'next button rendered')
  // nextButton[0].click()

  // // Verify symbol length error since contract address won't return symbol
  const errorMessage = await queryAsync($, '#custom-symbol-helper-text')
  assert.ok(errorMessage[0], 'error rendered')

  $('button.btn-default.btn--large')[0].click()

  // await timeout(100000)

  // Confirm Add token
  // assert.equal(
  //   $('.page-container__subtitle')[0].textContent,
  //   'Would you like to add these tokens?',
  //   'confirm add token rendered'
  // )
  // assert.ok($('button.btn-primary--lg')[0], 'confirm add token button found')
  // $('button.btn-primary--lg')[0].click()

  // Verify added token image
  heroBalance = await queryAsync($, '.transaction-view-balance__balance-container')
  assert.ok(heroBalance, 'rendered hero balance')
  assert.ok(heroBalance.find('.identicon')[0], 'token added')
}