renderer_spec.rb 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. require 'rails_helper'
  2. RSpec.describe NotificationFactory::Renderer do
  3. # rubocop:disable Lint/InterpolationCheck
  4. describe 'render' do
  5. before { @user = User.where(firstname: 'Nicole').first }
  6. it 'correctly renders a blank template' do
  7. renderer = build :notification_factory_renderer
  8. expect(renderer.render).to eq ''
  9. end
  10. context 'when rendering templates with ERB tags' do
  11. let(:template) { '<%% <%= "<%" %> %%>' }
  12. it 'ignores pre-existing ERB tags in an untrusted template' do
  13. renderer = build :notification_factory_renderer, template: template
  14. expect(renderer.render).to eq '<% <%= "<%" %> %%>'
  15. end
  16. it 'executes pre-existing ERB tags in a trusted template' do
  17. renderer = build :notification_factory_renderer, template: template, trusted: true
  18. expect(renderer.render).to eq '<% <% %%>'
  19. end
  20. end
  21. it 'correctly renders chained object references' do
  22. user = User.where(firstname: 'Nicole').first
  23. ticket = create :ticket, customer: user
  24. renderer = build :notification_factory_renderer,
  25. objects: { ticket: ticket },
  26. template: '#{ticket.customer.firstname.downcase}'
  27. expect(renderer.render).to eq 'nicole'
  28. ticket.destroy
  29. end
  30. it 'correctly renders multiple value calls' do
  31. ticket = create :ticket, customer: @user
  32. renderer = build :notification_factory_renderer,
  33. objects: { ticket: ticket },
  34. template: '#{ticket.created_at.value.value.value.value.to_s.first}'
  35. expect(renderer.render).to eq '2'
  36. ticket.destroy
  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. ticket.destroy
  48. ObjectManager::Attribute.remove(
  49. object: 'Ticket',
  50. name: 'select',
  51. )
  52. ObjectManager::Attribute.migration_execute
  53. end
  54. it 'correctly renders select attributes on chained user object' do
  55. create :object_manager_attribute_select,
  56. object_lookup_id: ObjectLookup.by_name('User'),
  57. name: 'select'
  58. ObjectManager::Attribute.migration_execute
  59. user = User.where(firstname: 'Nicole').first
  60. user.select = 'key_2'
  61. user.save
  62. ticket = create :ticket, customer: user
  63. renderer = build :notification_factory_renderer,
  64. objects: { ticket: ticket },
  65. template: '#{ticket.customer.select} _SEPERATOR_ #{ticket.customer.select.value}'
  66. expect(renderer.render).to eq 'key_2 _SEPERATOR_ value_2'
  67. ticket.destroy
  68. ObjectManager::Attribute.remove(
  69. object: 'User',
  70. name: 'select',
  71. )
  72. ObjectManager::Attribute.migration_execute
  73. end
  74. it 'correctly renders select attributes on chained group object' do
  75. create :object_manager_attribute_select,
  76. object_lookup_id: ObjectLookup.by_name('Group'),
  77. name: 'select'
  78. ObjectManager::Attribute.migration_execute
  79. ticket = create :ticket, customer: @user
  80. group = ticket.group
  81. group.select = 'key_3'
  82. group.save
  83. renderer = build :notification_factory_renderer,
  84. objects: { ticket: ticket },
  85. template: '#{ticket.group.select} _SEPERATOR_ #{ticket.group.select.value}'
  86. expect(renderer.render).to eq 'key_3 _SEPERATOR_ value_3'
  87. ticket.destroy
  88. ObjectManager::Attribute.remove(
  89. object: 'Group',
  90. name: 'select',
  91. )
  92. ObjectManager::Attribute.migration_execute
  93. end
  94. it 'correctly renders select attributes on chained organization object' do
  95. create :object_manager_attribute_select,
  96. object_lookup_id: ObjectLookup.by_name('Organization'),
  97. name: 'select'
  98. ObjectManager::Attribute.migration_execute
  99. @user.organization.select = 'key_2'
  100. @user.organization.save
  101. ticket = create :ticket, customer: @user
  102. renderer = build :notification_factory_renderer,
  103. objects: { ticket: ticket },
  104. template: '#{ticket.customer.organization.select} _SEPERATOR_ #{ticket.customer.organization.select.value}'
  105. expect(renderer.render).to eq 'key_2 _SEPERATOR_ value_2'
  106. ticket.destroy
  107. ObjectManager::Attribute.remove(
  108. object: 'Organization',
  109. name: 'select',
  110. )
  111. ObjectManager::Attribute.migration_execute
  112. end
  113. it 'correctly renders tree select attributes' do
  114. create :object_manager_attribute_tree_select, name: 'tree_select'
  115. ObjectManager::Attribute.migration_execute
  116. ticket = create :ticket, customer: @user, tree_select: 'Incident::Hardware::Laptop'
  117. renderer = build :notification_factory_renderer,
  118. objects: { ticket: ticket },
  119. template: '#{ticket.tree_select} _SEPERATOR_ #{ticket.tree_select.value}'
  120. expect(renderer.render).to eq 'Incident::Hardware::Laptop _SEPERATOR_ Incident::Hardware::Laptop'
  121. ticket.destroy
  122. ObjectManager::Attribute.remove(
  123. object: 'Ticket',
  124. name: 'tree_select',
  125. )
  126. ObjectManager::Attribute.migration_execute
  127. end
  128. end
  129. end
  130. # rubocop:enable Lint/InterpolationCheck
  131. end