required_spec.rb 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. require 'rails_helper'
  2. require 'models/object_manager/attribute/validation/backend_examples'
  3. RSpec.describe ::ObjectManager::Attribute::Validation::Required do
  4. subject do
  5. described_class.new(
  6. record: record,
  7. attribute: attribute
  8. )
  9. end
  10. let(:record) { build(:user) }
  11. let(:attribute) { build(:object_manager_attribute_date) }
  12. it_behaves_like 'validate backend'
  13. context 'when validation should be performed' do
  14. let(:value) { nil }
  15. shared_examples 'a permission based validator' do |permission:|
  16. let(:performing_user) { create(:agent) }
  17. before { UserInfo.current_user_id = performing_user.id }
  18. context "for applying permission (#{permission})" do
  19. let(:permission) { permission }
  20. before do
  21. attribute.screens = {
  22. action => {
  23. permission => {
  24. required: true
  25. }
  26. }
  27. }
  28. end
  29. context 'when action is edit' do
  30. let(:action) { 'edit' }
  31. let(:record) { create(:user) }
  32. it_behaves_like 'a validation with errors'
  33. end
  34. context 'when action is create_...' do
  35. let(:action) { 'create_middle' }
  36. it_behaves_like 'a validation with errors'
  37. end
  38. end
  39. end
  40. it_behaves_like 'a permission based validator', permission: 'ticket.agent'
  41. it_behaves_like 'a permission based validator', permission: '-all-'
  42. end
  43. context 'when validation should not be performed' do
  44. context 'for present value' do
  45. let(:value) { 'some_value' }
  46. it_behaves_like 'a validation without errors'
  47. end
  48. context 'when value is actually blank' do
  49. let(:value) { nil }
  50. context "when action wasn't performed by a user" do
  51. context 'for blank UserInfo.current_user_id', current_user_id: nil do
  52. it_behaves_like 'a validation without errors'
  53. end
  54. context 'for system UserInfo.current_user_id', current_user_id: 1 do
  55. it_behaves_like 'a validation without errors'
  56. end
  57. end
  58. context 'for required => false' do
  59. let(:performing_user) { create(:agent) }
  60. before { UserInfo.current_user_id = performing_user.id }
  61. context 'for applying permission' do
  62. let(:permission) { 'ticket.agent' }
  63. before do
  64. attribute.screens = {
  65. action => {
  66. permission => {
  67. required: false
  68. }
  69. }
  70. }
  71. end
  72. context 'when action is edit' do
  73. let(:action) { 'edit' }
  74. let(:record) { create(:user) }
  75. it_behaves_like 'a validation without errors'
  76. end
  77. context 'when action is create_...' do
  78. let(:action) { 'create_middle' }
  79. it_behaves_like 'a validation without errors'
  80. end
  81. end
  82. end
  83. context 'for not applying permission' do
  84. let(:permission) { 'ticket.customer' }
  85. before do
  86. attribute.screens = {
  87. action => {
  88. permission => {
  89. required: true
  90. }
  91. }
  92. }
  93. end
  94. context 'when action is edit' do
  95. let(:action) { 'edit' }
  96. let(:record) { create(:user) }
  97. it_behaves_like 'a validation without errors'
  98. end
  99. context 'when action is create_...' do
  100. let(:action) { 'create_middle' }
  101. it_behaves_like 'a validation without errors'
  102. end
  103. end
  104. end
  105. end
  106. end