attachments_spec.rb 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe 'KnowledgeBase attachments', type: :request, authenticated_as: :current_user do
  4. include_context 'basic Knowledge Base'
  5. let(:attachment) do
  6. attachment_file = File.open 'spec/fixtures/files/upload/hello_world.txt'
  7. create(:store,
  8. object: object.class.to_s,
  9. o_id: object.id,
  10. data: attachment_file.read,
  11. filename: 'hello_world.txt',
  12. preferences: {},
  13. created_by_id: 1,)
  14. end
  15. let(:endpoint) { "/api/v1/attachments/#{attachment.id}" }
  16. let(:current_user) { create(user_identifier) if defined?(user_identifier) }
  17. describe 'visible when attached to' do
  18. shared_examples 'a visible resource' do
  19. it 'and returns correct status code' do
  20. get endpoint
  21. expect(response).to have_http_status(:ok)
  22. end
  23. end
  24. shared_examples 'a non-existent resource' do
  25. it 'and returns correct status code' do
  26. get endpoint
  27. expect(response).to have_http_status(:not_found)
  28. end
  29. end
  30. describe 'draft answer' do
  31. let(:object) { draft_answer }
  32. describe 'as agent' do
  33. let(:user_identifier) { :agent }
  34. it_behaves_like 'a non-existent resource'
  35. end
  36. context 'as admin' do
  37. let(:user_identifier) { :admin }
  38. it_behaves_like 'a visible resource'
  39. end
  40. context 'as customer' do
  41. let(:user_identifier) { :customer }
  42. it_behaves_like 'a non-existent resource'
  43. end
  44. context 'as guest' do
  45. it_behaves_like 'a non-existent resource'
  46. end
  47. end
  48. describe 'internal answer' do
  49. let(:object) { internal_answer }
  50. describe 'as agent' do
  51. let(:user_identifier) { :agent }
  52. it_behaves_like 'a visible resource'
  53. end
  54. context 'as admin' do
  55. let(:user_identifier) { :admin }
  56. it_behaves_like 'a visible resource'
  57. end
  58. context 'as customer' do
  59. let(:user_identifier) { :customer }
  60. it_behaves_like 'a non-existent resource'
  61. end
  62. context 'as guest' do
  63. it_behaves_like 'a non-existent resource'
  64. end
  65. end
  66. describe 'published answer' do
  67. let(:object) { published_answer }
  68. describe 'as agent' do
  69. let(:user_identifier) { :agent }
  70. it_behaves_like 'a visible resource'
  71. end
  72. context 'as admin' do
  73. let(:user_identifier) { :admin }
  74. it_behaves_like 'a visible resource'
  75. end
  76. context 'as customer' do
  77. let(:user_identifier) { :customer }
  78. it_behaves_like 'a visible resource'
  79. end
  80. context 'as guest' do
  81. it_behaves_like 'a visible resource'
  82. end
  83. end
  84. describe 'archived answer' do
  85. let(:object) { archived_answer }
  86. describe 'as agent' do
  87. let(:user_identifier) { :agent }
  88. it_behaves_like 'a non-existent resource'
  89. end
  90. context 'as admin' do
  91. let(:user_identifier) { :admin }
  92. it_behaves_like 'a visible resource'
  93. end
  94. context 'as customer' do
  95. let(:user_identifier) { :customer }
  96. it_behaves_like 'a non-existent resource'
  97. end
  98. context 'as guest' do
  99. it_behaves_like 'a non-existent resource'
  100. end
  101. end
  102. end
  103. describe 'deletable when attached to' do
  104. shared_examples 'a deletable resource' do
  105. it { expect { delete endpoint }.to change { Store.exists? attachment.id }.from(true).to(false) }
  106. end
  107. shared_examples 'a non-deletable resource' do
  108. it { expect { delete endpoint }.not_to change { Store.exists? attachment.id }.from(true) }
  109. end
  110. describe 'draft answer' do
  111. let(:object) { draft_answer }
  112. describe 'as agent' do
  113. let(:user_identifier) { :agent }
  114. it_behaves_like 'a non-deletable resource'
  115. end
  116. context 'as admin' do
  117. let(:user_identifier) { :admin }
  118. it_behaves_like 'a deletable resource'
  119. end
  120. context 'as customer' do
  121. let(:user_identifier) { :customer }
  122. it_behaves_like 'a non-deletable resource'
  123. end
  124. context 'as guest' do
  125. it_behaves_like 'a non-deletable resource'
  126. end
  127. end
  128. describe 'internal answer' do
  129. let(:object) { internal_answer }
  130. describe 'as agent' do
  131. let(:user_identifier) { :agent }
  132. it_behaves_like 'a non-deletable resource'
  133. end
  134. context 'as admin' do
  135. let(:user_identifier) { :admin }
  136. it_behaves_like 'a deletable resource'
  137. end
  138. context 'as customer' do
  139. let(:user_identifier) { :customer }
  140. it_behaves_like 'a non-deletable resource'
  141. end
  142. context 'as guest' do
  143. it_behaves_like 'a non-deletable resource'
  144. end
  145. end
  146. describe 'published answer' do
  147. let(:object) { published_answer }
  148. describe 'as agent' do
  149. let(:user_identifier) { :agent }
  150. it_behaves_like 'a non-deletable resource'
  151. end
  152. context 'as admin' do
  153. let(:user_identifier) { :admin }
  154. it_behaves_like 'a deletable resource'
  155. end
  156. context 'as customer' do
  157. let(:user_identifier) { :customer }
  158. it_behaves_like 'a non-deletable resource'
  159. end
  160. context 'as guest' do
  161. it_behaves_like 'a non-deletable resource'
  162. end
  163. end
  164. describe 'archived answer' do
  165. let(:object) { archived_answer }
  166. describe 'as agent' do
  167. let(:user_identifier) { :agent }
  168. it_behaves_like 'a non-deletable resource'
  169. end
  170. context 'as admin' do
  171. let(:user_identifier) { :admin }
  172. it_behaves_like 'a deletable resource'
  173. end
  174. context 'as customer' do
  175. let(:user_identifier) { :customer }
  176. it_behaves_like 'a non-deletable resource'
  177. end
  178. context 'as guest' do
  179. it_behaves_like 'a non-deletable resource'
  180. end
  181. end
  182. end
  183. end