From 57a7e25cf14b0529ef189a641e8dc8d92c9d40f8 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Thu, 6 Oct 2016 21:01:48 +0200 Subject: [PATCH] Added support for admin form preview also for admins if feature is disabled. --- .../app/controllers/_channel/form.coffee | 1 + app/controllers/form_controller.rb | 5 + public/assets/form/form.js | 13 +- test/browser/form_test.rb | 150 +++++++++++++----- 4 files changed, 130 insertions(+), 39 deletions(-) diff --git a/app/assets/javascripts/app/controllers/_channel/form.coffee b/app/assets/javascripts/app/controllers/_channel/form.coffee index ae9cf2b62..d9697b132 100644 --- a/app/assets/javascripts/app/controllers/_channel/form.coffee +++ b/app/assets/javascripts/app/controllers/_channel/form.coffee @@ -48,6 +48,7 @@ class App.ChannelForm extends App.ControllerSubContent @$('.js-modal-params').html(paramString) # rebuild preview + params.test = true if params.modal @$('.js-formInline').addClass('hide') @$('.js-formBtn').removeClass('hide') diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index bf9fad963..ea7ff5d01 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -16,6 +16,10 @@ class FormController < ApplicationController endpoint: endpoint, } + if params[:test] && current_user && current_user.permissions?('admin.channel_formular') + config[:enabled] = true + end + render json: config, status: :ok end @@ -115,6 +119,7 @@ class FormController < ApplicationController private def enabled? + return true if params[:test] && current_user && current_user.permissions?('admin.channel_formular') return true if Setting.get('form_ticket_create') response_access_deny false diff --git a/public/assets/form/form.js b/public/assets/form/form.js index 1dd517062..5bd599fcd 100644 --- a/public/assets/form/form.js +++ b/public/assets/form/form.js @@ -105,7 +105,8 @@ $(function() { } Plugin.prototype.init = function () { - var _this = this + var _this = this, + params = {} _this.log('debug', 'init', this._src) @@ -117,8 +118,12 @@ $(function() { _this.log('debug', 'endpoint_submit: ' + _this.endpoint_submit) // load config + if (this.options.test) { + params.test = true + } $.ajax({ url: _this.endpoint_config, + data: params }).done(function(data) { _this.log('debug', 'config:', data) _this._config = data @@ -209,13 +214,17 @@ $(function() { var _this = this, params = {} - $.each( _this.$form.serializeArray(), function( index, item ) { + $.each( _this.$form.serializeArray(), function(index, item) { params[item.name] = item.value }) if (!params.title) { params.title = this.options.messageTitle } + + if (this.options.test) { + params.test = true + } _this.log('debug', 'params', params) return params } diff --git a/test/browser/form_test.rb b/test/browser/form_test.rb index 4354585d3..0a761f4b0 100644 --- a/test/browser/form_test.rb +++ b/test/browser/form_test.rb @@ -30,6 +30,82 @@ class FormTest < TestCase 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"]', + ) + exists( + browser: agent, + css: 'body div.zammad-form-modal .has-error [name="body"]', + ) + 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"]', + ) + exists( + browser: agent, + css: 'body div.zammad-form-modal .has-error [name="email"]', + ) + set( + browser: agent, + css: 'body div.zammad-form-modal [name="email"]', + value: 'notexistinginanydomainspacealsonothere@znuny.com', + ) + click( + browser: agent, + css: 'body div.zammad-form-modal button[type="submit"]', + ) + exists( + browser: agent, + css: 'body div.zammad-form-modal .has-error [name="email"]', + ) + 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, @@ -59,7 +135,7 @@ class FormTest < TestCase exists_not( browser: customer, - css: 'body div.modal', + css: 'body div.zammad-form-modal', ) # modal dialog @@ -69,28 +145,28 @@ class FormTest < TestCase ) exists( browser: customer, - css: 'body div.modal', + css: 'body div.zammad-form-modal', ) # fill form valid data - but too fast set( browser: customer, - css: 'body div.modal [name="name"]', + css: 'body div.zammad-form-modal [name="name"]', value: 'some name', ) set( browser: customer, - css: 'body div.modal [name="email"]', + css: 'body div.zammad-form-modal [name="email"]', value: 'discard@znuny.com', ) set( browser: customer, - css: 'body div.modal [name="body"]', + css: 'body div.zammad-form-modal [name="body"]', value: "some text\nnew line", ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) # check warning @@ -101,54 +177,54 @@ class FormTest < TestCase # fill form invalid data - within correct time set( browser: customer, - css: 'body div.modal [name="name"]', + css: 'body div.zammad-form-modal [name="name"]', value: 'some name', ) set( browser: customer, - css: 'body div.modal [name="email"]', + css: 'body div.zammad-form-modal [name="email"]', value: 'invalid_email', ) set( browser: customer, - css: 'body div.modal [name="body"]', + css: 'body div.zammad-form-modal [name="body"]', value: "some text\nnew line", ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) sleep 10 exists( browser: customer, - css: 'body div.modal', + css: 'body div.zammad-form-modal', ) # fill form valid data set( browser: customer, - css: 'body div.modal [name="email"]', + css: 'body div.zammad-form-modal [name="email"]', value: 'discard@znuny.com', ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) watch_for( browser: customer, - css: 'body div.modal', + 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.modal' })[0] + 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.modal', + css: 'body div.zammad-form-modal', ) # fill form invalid data - within correct time @@ -159,100 +235,100 @@ class FormTest < TestCase sleep 10 set( browser: customer, - css: 'body div.modal [name="name"]', + css: 'body div.zammad-form-modal [name="name"]', value: '', ) set( browser: customer, - css: 'body div.modal [name="email"]', + css: 'body div.zammad-form-modal [name="email"]', value: 'discard@znuny.com', ) set( browser: customer, - css: 'body div.modal [name="body"]', + css: 'body div.zammad-form-modal [name="body"]', value: "some text\nnew line", ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) exists( browser: customer, - css: 'body div.modal .has-error [name="name"]', + css: 'body div.zammad-form-modal .has-error [name="name"]', ) set( browser: customer, - css: 'body div.modal [name="name"]', + css: 'body div.zammad-form-modal [name="name"]', value: 'some sender', ) set( browser: customer, - css: 'body div.modal [name="body"]', + css: 'body div.zammad-form-modal [name="body"]', value: '', ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) exists( browser: customer, - css: 'body div.modal .has-error [name="body"]', + css: 'body div.zammad-form-modal .has-error [name="body"]', ) set( browser: customer, - css: 'body div.modal [name="body"]', + css: 'body div.zammad-form-modal [name="body"]', value: 'new body', ) set( browser: customer, - css: 'body div.modal [name="email"]', + css: 'body div.zammad-form-modal [name="email"]', value: 'somebody@notexistinginanydomainspacealsonothere.nowhere', ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) exists( browser: customer, - css: 'body div.modal .has-error [name="email"]', + css: 'body div.zammad-form-modal .has-error [name="email"]', ) set( browser: customer, - css: 'body div.modal [name="email"]', + css: 'body div.zammad-form-modal [name="email"]', value: 'notexistinginanydomainspacealsonothere@znuny.com', ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) exists( browser: customer, - css: 'body div.modal .has-error [name="email"]', + css: 'body div.zammad-form-modal .has-error [name="email"]', ) set( browser: customer, - css: 'body div.modal [name="email"]', + css: 'body div.zammad-form-modal [name="email"]', value: 'discard@znuny.com', ) click( browser: customer, - css: 'body div.modal button[type="submit"]', + css: 'body div.zammad-form-modal button[type="submit"]', ) watch_for( browser: customer, - css: 'body div.modal', + 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.modal' })[0] + 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.modal', + css: 'body div.zammad-form-modal', ) # inline form