# encoding: utf-8
require 'browser_test_helper'

class FormTest < TestCase

  def test_basic
    agent = browser_instance
    login(
      browser: agent,
      username: 'master@example.com',
      password: 'test',
      url: browser_url,
    )
    tasks_close_all(
      browser: agent,
    )

    # disable form
    click(
      browser: agent,
      css: 'a[href="#manage"]',
    )
    click(
      browser: agent,
      css: '.content.active a[href="#channels/form"]',
    )
    switch(
      browser: agent,
      css: '.content.active .js-formSetting',
      type: 'off',
    )

    # admin preview test
    sleep 1
    click(
      browser: agent,
      css: '.content.active .js-formBtn',
    )

    sleep 10
    set(
      browser: agent,
      css: 'body div.zammad-form-modal [name="name"]',
      value: 'some sender',
    )
    set(
      browser: agent,
      css: 'body div.zammad-form-modal [name="body"]',
      value: '',
    )
    click(
      browser: agent,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: agent,
      css: 'body div.zammad-form-modal .has-error [name="body"]',
    )
    watch_for_disappear(
      browser: agent,
      css: 'body div.zammad-form-modal button[type="submit"][disabled]',
    )
    set(
      browser: agent,
      css: 'body div.zammad-form-modal [name="body"]',
      value: 'new body',
    )
    set(
      browser: agent,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'somebody@notexistinginanydomainspacealsonothere.nowhere',
    )
    click(
      browser: agent,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: agent,
      css: 'body div.zammad-form-modal .has-error [name="email"]',
    )
    watch_for_disappear(
      browser: agent,
      css: 'body div.zammad-form-modal button[type="submit"][disabled]',
    )
    set(
      browser: agent,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'discard@znuny.com',
    )
    click(
      browser: agent,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: agent,
      css:     'body div.zammad-form-modal',
      value:   'Thank you for your inquiry',
    )
    # click on backgroud (not on thank you dialog)
    element = agent.find_elements({ css: 'body div.zammad-form-modal' })[0]
    agent.action.move_to(element, 200, 200).perform
    agent.action.click.perform

    customer = browser_instance
    location(
      browser: customer,
      url:     "#{browser_url}/assets/form/form.html",
    )
    watch_for(
      browser: customer,
      css: '.js-logDisplay',
      value: 'Faild to load form config, feature is disabled',
    )
    switch(
      browser: agent,
      css: '.content.active .js-formSetting',
      type: 'on',
    )

    reload(
      browser: customer,
    )
    sleep 4
    match_not(
      browser: customer,
      css: '.js-logDisplay',
      value: 'Faild to load form config, feature is disabled',
    )

    exists_not(
      browser: customer,
      css: 'body div.zammad-form-modal',
    )

    # modal dialog
    click(
      browser: customer,
      css: '#feedback-form-modal',
    )
    watch_for(
      browser: customer,
      css: 'body div.zammad-form-modal',
    )

    # fill form valid data - but too fast
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="name"]',
      value: 'some name',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'discard@znuny.com',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="body"]',
      value: "some text\nnew line",
    )
    click(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )

    # check warning
    alert = customer.switch_to.alert
    alert.dismiss()
    sleep 10

    # fill form invalid data - within correct time
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="name"]',
      value: 'some name',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'invalid_email',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="body"]',
      value: "some text\nnew line",
    )
    click(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    sleep 10
    exists(
      browser: customer,
      css: 'body div.zammad-form-modal',
    )

    # fill form valid data
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'discard@znuny.com',
    )
    click(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: customer,
      css:     'body div.zammad-form-modal',
      value:   'Thank you for your inquiry',
    )

    # click on backgroud (not on thank you dialog)
    element = customer.find_elements({ css: 'body div.zammad-form-modal' })[0]
    customer.action.move_to(element, 200, 200).perform
    customer.action.click.perform

    sleep 1
    exists_not(
      browser: customer,
      css: 'body div.zammad-form-modal',
    )

    # fill form invalid data - within correct time
    click(
      browser: customer,
      css: '#feedback-form-modal',
    )
    sleep 10
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="name"]',
      value: '',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'discard@znuny.com',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="body"]',
      value: "some text\nnew line",
    )
    click(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: customer,
      css: 'body div.zammad-form-modal .has-error [name="name"]',
    )
    watch_for_disappear(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"][disabled]',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="name"]',
      value: 'some sender',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="body"]',
      value: '',
    )
    click(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: customer,
      css: 'body div.zammad-form-modal .has-error [name="body"]',
    )
    watch_for_disappear(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"][disabled]',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="body"]',
      value: 'new body',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'somebody@notexistinginanydomainspacealsonothere.nowhere',
    )
    click(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: customer,
      css: 'body div.zammad-form-modal .has-error [name="email"]',
    )
    watch_for_disappear(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"][disabled]',
    )
    set(
      browser: customer,
      css: 'body div.zammad-form-modal [name="email"]',
      value: 'discard@znuny.com',
    )
    click(
      browser: customer,
      css: 'body div.zammad-form-modal button[type="submit"]',
    )
    watch_for(
      browser: customer,
      css:     'body div.zammad-form-modal',
      value:   'Thank you for your inquiry',
    )

    # click on backgroud (not on thank you dialog)
    element = customer.find_elements({ css: 'body div.zammad-form-modal' })[0]
    customer.action.move_to(element, 200, 200).perform
    customer.action.click.perform

    sleep 1
    exists_not(
      browser: customer,
      css: 'body div.zammad-form-modal',
    )

    # inline form
    set(
      browser: customer,
      css: '.zammad-form [name="name"]',
      value: 'Some Name',
    )
    set(
      browser: customer,
      css: '.zammad-form [name="email"]',
      value: 'discard@znuny.com',
    )
    set(
      browser: customer,
      css: '.zammad-form [name="body"]',
      value: 'some text',
    )
    click(
      browser: customer,
      css: '.zammad-form button[type="submit"]',
    )
    watch_for(
      browser: customer,
      css:     '.zammad-form',
      value:   'Thank you for your inquiry',
    )
  end

end
