renderer_spec.rb 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe NotificationFactory::Renderer do
  4. # rubocop:disable Lint/InterpolationCheck
  5. describe 'render' do
  6. before { @user = User.where(firstname: 'Nicole').first }
  7. it 'correctly renders a blank template' do
  8. renderer = build :notification_factory_renderer
  9. expect(renderer.render).to eq ''
  10. end
  11. it 'correctly renders chained object references' do
  12. user = User.where(firstname: 'Nicole').first
  13. ticket = create :ticket, customer: user
  14. renderer = build :notification_factory_renderer,
  15. objects: { ticket: ticket },
  16. template: '#{ticket.customer.firstname.downcase}'
  17. expect(renderer.render).to eq 'nicole'
  18. end
  19. it 'correctly renders multiple value calls' do
  20. ticket = create :ticket, customer: @user
  21. renderer = build :notification_factory_renderer,
  22. objects: { ticket: ticket },
  23. template: '#{ticket.created_at.value.value.value.value.to_s.first}'
  24. expect(renderer.render).to eq '2'
  25. end
  26. it 'raises a StandardError when rendering a template with a broken syntax' do
  27. renderer = build :notification_factory_renderer, template: 'test <% if %>', objects: {}
  28. expect { renderer.render }.to raise_error(StandardError)
  29. end
  30. it 'raises a StandardError when rendering a template calling a non existant method' do
  31. renderer = build :notification_factory_renderer, template: 'test <% Ticket.non_existant_method %>', objects: {}
  32. expect { renderer.render }.to raise_error(StandardError)
  33. end
  34. it 'raises a StandardError when rendering a template referencing a non existant object' do
  35. renderer = build :notification_factory_renderer, template: 'test <% NonExistantObject.first %>', objects: {}
  36. expect { renderer.render }.to raise_error(StandardError)
  37. end
  38. context 'when handling ObjectManager::Attribute usage', db_strategy: :reset do
  39. it 'correctly renders simple select attributes' do
  40. create :object_manager_attribute_select, name: 'select'
  41. ObjectManager::Attribute.migration_execute
  42. ticket = create :ticket, customer: @user, select: 'key_1'
  43. renderer = build :notification_factory_renderer,
  44. objects: { ticket: ticket },
  45. template: '#{ticket.select} _SEPERATOR_ #{ticket.select.value}'
  46. expect(renderer.render).to eq 'key_1 _SEPERATOR_ value_1'
  47. end
  48. it 'correctly renders select attributes on chained user object' do
  49. create :object_manager_attribute_select,
  50. object_lookup_id: ObjectLookup.by_name('User'),
  51. name: 'select'
  52. ObjectManager::Attribute.migration_execute
  53. user = User.where(firstname: 'Nicole').first
  54. user.select = 'key_2'
  55. user.save
  56. ticket = create :ticket, customer: user
  57. renderer = build :notification_factory_renderer,
  58. objects: { ticket: ticket },
  59. template: '#{ticket.customer.select} _SEPERATOR_ #{ticket.customer.select.value}'
  60. expect(renderer.render).to eq 'key_2 _SEPERATOR_ value_2'
  61. end
  62. it 'correctly renders select attributes on chained group object' do
  63. create :object_manager_attribute_select,
  64. object_lookup_id: ObjectLookup.by_name('Group'),
  65. name: 'select'
  66. ObjectManager::Attribute.migration_execute
  67. ticket = create :ticket, customer: @user
  68. group = ticket.group
  69. group.select = 'key_3'
  70. group.save
  71. renderer = build :notification_factory_renderer,
  72. objects: { ticket: ticket },
  73. template: '#{ticket.group.select} _SEPERATOR_ #{ticket.group.select.value}'
  74. expect(renderer.render).to eq 'key_3 _SEPERATOR_ value_3'
  75. end
  76. it 'correctly renders select attributes on chained organization object' do
  77. create :object_manager_attribute_select,
  78. object_lookup_id: ObjectLookup.by_name('Organization'),
  79. name: 'select'
  80. ObjectManager::Attribute.migration_execute
  81. @user.organization.select = 'key_2'
  82. @user.organization.save
  83. ticket = create :ticket, customer: @user
  84. renderer = build :notification_factory_renderer,
  85. objects: { ticket: ticket },
  86. template: '#{ticket.customer.organization.select} _SEPERATOR_ #{ticket.customer.organization.select.value}'
  87. expect(renderer.render).to eq 'key_2 _SEPERATOR_ value_2'
  88. end
  89. it 'correctly renders tree select attributes' do
  90. create :object_manager_attribute_tree_select, name: 'tree_select'
  91. ObjectManager::Attribute.migration_execute
  92. ticket = create :ticket, customer: @user, tree_select: 'Incident::Hardware::Laptop'
  93. renderer = build :notification_factory_renderer,
  94. objects: { ticket: ticket },
  95. template: '#{ticket.tree_select} _SEPERATOR_ #{ticket.tree_select.value}'
  96. expect(renderer.render).to eq 'Incident::Hardware::Laptop _SEPERATOR_ Incident::Hardware::Laptop'
  97. end
  98. end
  99. end
  100. # rubocop:enable Lint/InterpolationCheck
  101. end