const src = process.argv.find(s => s.includes('--src=')).replace('--src=', '')
const dataExplorerUrl = `http://localhost:8888/sources/${src}/chronograf/data-explorer`
const dataTest = s => `[data-test="${s}"]`

module.exports = {
  'Data Explorer (functional) - SHOW DATABASES'(browser) {
    browser
      // Navigate to the Data Explorer
      .url(dataExplorerUrl)
      // Open a new query tab
      .waitForElementVisible(dataTest('add-query-button'), 1000)
      .click(dataTest('add-query-button'))
      .waitForElementVisible(dataTest('query-editor-field'), 1000)
      // Drop any existing testing database
      .setValue(dataTest('query-editor-field'), 'DROP DATABASE "testing"\n')
      .click(dataTest('query-editor-field'))
      .pause(500)
      // Create a new testing database
      .clearValue(dataTest('query-editor-field'))
      .setValue(dataTest('query-editor-field'), 'CREATE DATABASE "testing"\n')
      .click(dataTest('query-editor-field'))
      .pause(2000)
      .refresh()
      .waitForElementVisible(dataTest('query-editor-field'), 1000)
      .clearValue(dataTest('query-editor-field'))
      .setValue(dataTest('query-editor-field'), 'SHOW DATABASES\n')
      .click(dataTest('query-editor-field'))
      .pause(1000)
      .waitForElementVisible(
        dataTest('query-builder-list-item-database-testing'),
        5000
      )
      .assert.containsText(
        dataTest('query-builder-list-item-database-testing'),
        'testing'
      )
      .end()
  },
  'Query Builder'(browser) {
    browser
      // Navigate to the Data Explorer
      .url(dataExplorerUrl)
      // Check to see that there are no results displayed
      .waitForElementVisible(dataTest('data-explorer-no-results'), 5000)
      .assert.containsText(dataTest('data-explorer-no-results'), 'No Results')
      // Open a new query tab
      .waitForElementVisible(dataTest('new-query-button'), 1000)
      .click(dataTest('new-query-button'))
      // Select the testing database
      .waitForElementVisible(
        dataTest('query-builder-list-item-database-testing'),
        1000
      )
      .click(dataTest('query-builder-list-item-database-testing'))
      // Open up the Write Data dialog
      .click(dataTest('write-data-button'))
      // Set the dialog to manual entry mode
      .waitForElementVisible(dataTest('manual-entry-button'), 1000)
      .click(dataTest('manual-entry-button'))
      // Enter some time-series data
      .setValue(
        dataTest('manual-entry-field'),
        'testing,test_measurement=1,test_measurement2=2 value=3,value2=4'
      )
      // Pause, then click the submit button
      .pause(500)
      .click(dataTest('write-data-submit-button'))
      .pause(2000)
      // Start building a query
      // Select the testing measurement
      .waitForElementVisible(
        dataTest('query-builder-list-item-measurement-testing'),
        2000
      )
      .click(dataTest('query-builder-list-item-measurement-testing'))
      // Select both test measurements
      .waitForElementVisible(
        dataTest('query-builder-list-item-tag-test_measurement'),
        1000
      )
      .click(dataTest('query-builder-list-item-tag-test_measurement'))
      .click(dataTest('query-builder-list-item-tag-test_measurement2'))
      .pause(500)
      // Select both tag values
      .waitForElementVisible(
        dataTest('query-builder-list-item-tag-value-1'),
        1000
      )
      .click(dataTest('query-builder-list-item-tag-value-1'))
      .click(dataTest('query-builder-list-item-tag-value-2'))
      .pause(500)
      // Select both field values
      .waitForElementVisible(
        dataTest('query-builder-list-item-field-value'),
        1000
      )
      .click(dataTest('query-builder-list-item-field-value'))
      .click(dataTest('query-builder-list-item-field-value2'))
      .pause(500)
      // Assert the built query string
      .assert.containsText(
        dataTest('query-editor-field'),
        'SELECT mean("value") AS "mean_value", mean("value2") AS "mean_value2" FROM "testing"."autogen"."testing" WHERE time > now() - 1h AND "test_measurement"=\'1\' AND "test_measurement2"=\'2\' GROUP BY time(10s)'
      )
      .click(dataTest('data-table'))
      .click(dataTest('query-builder-list-item-function-value'))
      .waitForElementVisible(dataTest('function-selector-item-mean'), 1000)
      .click(dataTest('function-selector-item-mean'))
      .click(dataTest('function-selector-apply'))
      .end()
  },
}