keywords_controller_spec.rb 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. require 'rails_helper'
  2. RSpec.describe Api::V1::Filters::KeywordsController, type: :controller do
  3. render_views
  4. let(:user) { Fabricate(:user) }
  5. let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
  6. let(:filter) { Fabricate(:custom_filter, account: user.account) }
  7. let(:other_user) { Fabricate(:user) }
  8. let(:other_filter) { Fabricate(:custom_filter, account: other_user.account) }
  9. before do
  10. allow(controller).to receive(:doorkeeper_token) { token }
  11. end
  12. describe 'GET #index' do
  13. let(:scopes) { 'read:filters' }
  14. let!(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
  15. it 'returns http success' do
  16. get :index, params: { filter_id: filter.id }
  17. expect(response).to have_http_status(200)
  18. end
  19. context "when trying to access another's user filters" do
  20. it 'returns http not found' do
  21. get :index, params: { filter_id: other_filter.id }
  22. expect(response).to have_http_status(404)
  23. end
  24. end
  25. end
  26. describe 'POST #create' do
  27. let(:scopes) { 'write:filters' }
  28. let(:filter_id) { filter.id }
  29. before do
  30. post :create, params: { filter_id: filter_id, keyword: 'magic', whole_word: false }
  31. end
  32. it 'returns http success' do
  33. expect(response).to have_http_status(200)
  34. end
  35. it 'returns a keyword' do
  36. json = body_as_json
  37. expect(json[:keyword]).to eq 'magic'
  38. expect(json[:whole_word]).to eq false
  39. end
  40. it 'creates a keyword' do
  41. filter = user.account.custom_filters.first
  42. expect(filter).to_not be_nil
  43. expect(filter.keywords.pluck(:keyword)).to eq ['magic']
  44. end
  45. context "when trying to add to another another's user filters" do
  46. let(:filter_id) { other_filter.id }
  47. it 'returns http not found' do
  48. expect(response).to have_http_status(404)
  49. end
  50. end
  51. end
  52. describe 'GET #show' do
  53. let(:scopes) { 'read:filters' }
  54. let(:keyword) { Fabricate(:custom_filter_keyword, keyword: 'foo', whole_word: false, custom_filter: filter) }
  55. before do
  56. get :show, params: { id: keyword.id }
  57. end
  58. it 'returns http success' do
  59. expect(response).to have_http_status(200)
  60. end
  61. it 'returns expected data' do
  62. json = body_as_json
  63. expect(json[:keyword]).to eq 'foo'
  64. expect(json[:whole_word]).to eq false
  65. end
  66. context "when trying to access another user's filter keyword" do
  67. let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: other_filter) }
  68. it 'returns http not found' do
  69. expect(response).to have_http_status(404)
  70. end
  71. end
  72. end
  73. describe 'PUT #update' do
  74. let(:scopes) { 'write:filters' }
  75. let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
  76. before do
  77. get :update, params: { id: keyword.id, keyword: 'updated' }
  78. end
  79. it 'returns http success' do
  80. expect(response).to have_http_status(200)
  81. end
  82. it 'updates the keyword' do
  83. expect(keyword.reload.keyword).to eq 'updated'
  84. end
  85. context "when trying to update another user's filter keyword" do
  86. let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: other_filter) }
  87. it 'returns http not found' do
  88. expect(response).to have_http_status(404)
  89. end
  90. end
  91. end
  92. describe 'DELETE #destroy' do
  93. let(:scopes) { 'write:filters' }
  94. let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) }
  95. before do
  96. delete :destroy, params: { id: keyword.id }
  97. end
  98. it 'returns http success' do
  99. expect(response).to have_http_status(200)
  100. end
  101. it 'removes the filter' do
  102. expect { keyword.reload }.to raise_error ActiveRecord::RecordNotFound
  103. end
  104. context "when trying to update another user's filter keyword" do
  105. let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: other_filter) }
  106. it 'returns http not found' do
  107. expect(response).to have_http_status(404)
  108. end
  109. end
  110. end
  111. end