create_spec.rb 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. require 'rails_helper'
  2. require 'system/examples/text_modules_examples'
  3. RSpec.describe 'Ticket Create', type: :system do
  4. context 'when applying ticket templates' do
  5. let(:agent) { create(:agent, groups: [permitted_group]) }
  6. let(:permitted_group) { create(:group) }
  7. let(:unpermitted_group) { create(:group) }
  8. let!(:template) { create(:template, :dummy_data, group: unpermitted_group, owner: agent) }
  9. # Regression test for issue #2424 - Unavailable ticket template attributes get applied
  10. it 'unavailable attributes do not get applied', authenticated_as: :agent do
  11. visit 'ticket/create'
  12. use_template(template)
  13. expect(page).to have_no_selector 'select[name="group_id"]'
  14. end
  15. end
  16. context 'when using text modules' do
  17. include_examples 'text modules', path: 'ticket/create'
  18. end
  19. context 'S/MIME', authenticated_as: :authenticate do
  20. def authenticate
  21. Setting.set('smime_integration', true)
  22. Setting.set('smime_config', smime_config) if defined?(smime_config)
  23. current_user
  24. end
  25. context 'no certificate present' do
  26. let!(:template) { create(:template, :dummy_data) }
  27. let(:current_user) { true }
  28. it 'has no security selections' do
  29. visit 'ticket/create'
  30. within(:active_content) do
  31. use_template(template)
  32. expect(page).to have_no_css('div.js-securityEncrypt.btn--active')
  33. expect(page).to have_no_css('div.js-securitySign.btn--active')
  34. click '.js-submit'
  35. expect(page).to have_css('.ticket-article-item', count: 1)
  36. open_article_meta
  37. expect(page).to have_no_css('span', text: 'Signed')
  38. expect(page).to have_no_css('span', text: 'Encrypted')
  39. security_result = Ticket::Article.last.preferences['security']
  40. expect(security_result['encryption']['success']).to be nil
  41. expect(security_result['sign']['success']).to be nil
  42. end
  43. end
  44. end
  45. context 'private key configured' do
  46. let(:current_user) { agent }
  47. let!(:template) { create(:template, :dummy_data, group: group, owner: agent, customer: customer) }
  48. let(:system_email_address) { 'smime1@example.com' }
  49. let(:email_address) { create(:email_address, email: system_email_address) }
  50. let(:group) { create(:group, email_address: email_address) }
  51. let(:agent_groups) { [group] }
  52. let(:agent) { create(:agent, groups: agent_groups) }
  53. before do
  54. create(:smime_certificate, :with_private, fixture: system_email_address)
  55. end
  56. context 'recipient certificate present' do
  57. let(:recipient_email_address) { 'smime2@example.com' }
  58. let(:customer) { create(:customer, email: recipient_email_address) }
  59. before do
  60. create(:smime_certificate, fixture: recipient_email_address)
  61. end
  62. it 'plain' do
  63. visit 'ticket/create'
  64. within(:active_content) do
  65. use_template(template)
  66. # wait till S/MIME check AJAX call is ready
  67. expect(page).to have_css('div.js-securityEncrypt.btn--active', wait: 5)
  68. expect(page).to have_css('div.js-securitySign.btn--active', wait: 5)
  69. # deactivate encryption and signing
  70. click '.js-securityEncrypt'
  71. click '.js-securitySign'
  72. click '.js-submit'
  73. expect(page).to have_css('.ticket-article-item', count: 1)
  74. open_article_meta
  75. expect(page).to have_no_css('span', text: 'Signed')
  76. expect(page).to have_no_css('span', text: 'Encrypted')
  77. security_result = Ticket::Article.last.preferences['security']
  78. expect(security_result['encryption']['success']).to be nil
  79. expect(security_result['sign']['success']).to be nil
  80. end
  81. end
  82. it 'signed' do
  83. visit 'ticket/create'
  84. within(:active_content) do
  85. use_template(template)
  86. # wait till S/MIME check AJAX call is ready
  87. expect(page).to have_css('div.js-securityEncrypt.btn--active', wait: 5)
  88. expect(page).to have_css('div.js-securitySign.btn--active', wait: 5)
  89. # deactivate encryption
  90. click '.js-securityEncrypt'
  91. click '.js-submit'
  92. expect(page).to have_css('.ticket-article-item', count: 1)
  93. open_article_meta
  94. expect(page).to have_css('span', text: 'Signed')
  95. expect(page).to have_no_css('span', text: 'Encrypted')
  96. security_result = Ticket::Article.last.preferences['security']
  97. expect(security_result['encryption']['success']).to be nil
  98. expect(security_result['sign']['success']).to be true
  99. end
  100. end
  101. it 'encrypted' do
  102. visit 'ticket/create'
  103. within(:active_content) do
  104. use_template(template)
  105. # wait till S/MIME check AJAX call is ready
  106. expect(page).to have_css('div.js-securityEncrypt.btn--active', wait: 5)
  107. expect(page).to have_css('div.js-securitySign.btn--active', wait: 5)
  108. # deactivate signing
  109. click '.js-securitySign'
  110. click '.js-submit'
  111. expect(page).to have_css('.ticket-article-item', count: 1)
  112. open_article_meta
  113. expect(page).to have_no_css('span', text: 'Signed')
  114. expect(page).to have_css('span', text: 'Encrypted')
  115. security_result = Ticket::Article.last.preferences['security']
  116. expect(security_result['encryption']['success']).to be true
  117. expect(security_result['sign']['success']).to be nil
  118. end
  119. end
  120. it 'signed and encrypted' do
  121. visit 'ticket/create'
  122. within(:active_content) do
  123. use_template(template)
  124. # wait till S/MIME check AJAX call is ready
  125. expect(page).to have_css('div.js-securityEncrypt.btn--active', wait: 5)
  126. expect(page).to have_css('div.js-securitySign.btn--active', wait: 5)
  127. click '.js-submit'
  128. expect(page).to have_css('.ticket-article-item', count: 1)
  129. open_article_meta
  130. expect(page).to have_css('span', text: 'Signed')
  131. expect(page).to have_css('span', text: 'Encrypted')
  132. security_result = Ticket::Article.last.preferences['security']
  133. expect(security_result['encryption']['success']).to be true
  134. expect(security_result['sign']['success']).to be true
  135. end
  136. end
  137. context 'Group default behavior' do
  138. let(:smime_config) { {} }
  139. shared_examples 'security defaults example' do |sign:, encrypt:|
  140. it "security defaults sign: #{sign}, encrypt: #{encrypt}" do
  141. within(:active_content) do
  142. encrypt_button = find('.js-securityEncrypt', wait: 5)
  143. sign_button = find('.js-securitySign', wait: 5)
  144. await_empty_ajax_queue
  145. active_button_class = '.btn--active'
  146. expect(encrypt_button.matches_css?(active_button_class, wait: 2)).to be(encrypt)
  147. expect(sign_button.matches_css?(active_button_class, wait: 2)).to be(sign)
  148. end
  149. end
  150. end
  151. shared_examples 'security defaults' do |sign:, encrypt:|
  152. before do
  153. visit 'ticket/create'
  154. within(:active_content) do
  155. use_template(template)
  156. end
  157. end
  158. include_examples 'security defaults example', sign: sign, encrypt: encrypt
  159. end
  160. shared_examples 'security defaults group change' do |sign:, encrypt:|
  161. before do
  162. visit 'ticket/create'
  163. within(:active_content) do
  164. use_template(template)
  165. await_empty_ajax_queue
  166. select new_group.name, from: 'group_id'
  167. end
  168. end
  169. include_examples 'security defaults example', sign: sign, encrypt: encrypt
  170. end
  171. context 'not configured' do
  172. it_behaves_like 'security defaults', sign: true, encrypt: true
  173. end
  174. context 'configuration present' do
  175. let(:smime_config) do
  176. {
  177. 'group_id' => group_defaults
  178. }
  179. end
  180. let(:group_defaults) do
  181. {
  182. 'default_encryption' => {
  183. group.id.to_s => default_encryption,
  184. },
  185. 'default_sign' => {
  186. group.id.to_s => default_sign,
  187. }
  188. }
  189. end
  190. let(:default_sign) { true }
  191. let(:default_encryption) { true }
  192. shared_examples 'sign and encrypt variations' do |check_examples_name|
  193. it_behaves_like check_examples_name, sign: true, encrypt: true
  194. context 'no value' do
  195. let(:group_defaults) { {} }
  196. it_behaves_like check_examples_name, sign: true, encrypt: true
  197. end
  198. context 'signing disabled' do
  199. let(:default_sign) { false }
  200. it_behaves_like check_examples_name, sign: false, encrypt: true
  201. end
  202. context 'encryption disabled' do
  203. let(:default_encryption) { false }
  204. it_behaves_like check_examples_name, sign: true, encrypt: false
  205. end
  206. end
  207. context 'same Group' do
  208. it_behaves_like 'sign and encrypt variations', 'security defaults'
  209. end
  210. context 'Group change' do
  211. let(:new_group) { create(:group, email_address: email_address) }
  212. let(:agent_groups) { [group, new_group] }
  213. let(:group_defaults) do
  214. {
  215. 'default_encryption' => {
  216. new_group.id.to_s => default_encryption,
  217. },
  218. 'default_sign' => {
  219. new_group.id.to_s => default_sign,
  220. }
  221. }
  222. end
  223. it_behaves_like 'sign and encrypt variations', 'security defaults group change'
  224. end
  225. end
  226. end
  227. end
  228. end
  229. end
  230. describe 'object manager attributes maxlength', authenticated_as: :authenticate, db_strategy: :reset do
  231. def authenticate
  232. create :object_manager_attribute_text, name: 'maxtest', display: 'maxtest', screens: attributes_for(:required_screen), data_option: {
  233. 'type' => 'text',
  234. 'maxlength' => 3,
  235. 'null' => true,
  236. 'translate' => false,
  237. 'default' => '',
  238. 'options' => {},
  239. 'relation' => '',
  240. }
  241. ObjectManager::Attribute.migration_execute
  242. true
  243. end
  244. it 'checks ticket create' do
  245. visit 'ticket/create'
  246. within(:active_content) do
  247. fill_in 'maxtest', with: 'hellu'
  248. expect(page.find_field('maxtest').value).to eq('hel')
  249. end
  250. end
  251. end
  252. end