reblogs_controller_spec.rb 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # frozen_string_literal: true
  2. require 'rails_helper'
  3. describe Api::V1::Statuses::ReblogsController do
  4. render_views
  5. let(:user) { Fabricate(:user) }
  6. let(:app) { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') }
  7. let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:statuses', application: app) }
  8. context 'with an oauth token' do
  9. around do |example|
  10. Sidekiq::Testing.fake! do
  11. example.run
  12. end
  13. end
  14. before do
  15. allow(controller).to receive(:doorkeeper_token) { token }
  16. end
  17. describe 'POST #create' do
  18. let(:status) { Fabricate(:status, account: user.account) }
  19. before do
  20. post :create, params: { status_id: status.id }
  21. end
  22. context 'with public status' do
  23. it 'reblogs the status', :aggregate_failures do
  24. expect(response).to have_http_status(200)
  25. expect(status.reblogs.count).to eq 1
  26. expect(user.account.reblogged?(status)).to be true
  27. hash_body = body_as_json
  28. expect(hash_body[:reblog][:id]).to eq status.id.to_s
  29. expect(hash_body[:reblog][:reblogs_count]).to eq 1
  30. expect(hash_body[:reblog][:reblogged]).to be true
  31. end
  32. end
  33. context 'with private status of not-followed account' do
  34. let(:status) { Fabricate(:status, visibility: :private) }
  35. it 'returns http not found' do
  36. expect(response).to have_http_status(404)
  37. end
  38. end
  39. end
  40. describe 'POST #destroy' do
  41. context 'with public status' do
  42. let(:status) { Fabricate(:status, account: user.account) }
  43. before do
  44. ReblogService.new.call(user.account, status)
  45. post :destroy, params: { status_id: status.id }
  46. end
  47. it 'destroys the reblog', :aggregate_failures do
  48. expect(response).to have_http_status(200)
  49. expect(status.reblogs.count).to eq 0
  50. expect(user.account.reblogged?(status)).to be false
  51. hash_body = body_as_json
  52. expect(hash_body[:id]).to eq status.id.to_s
  53. expect(hash_body[:reblogs_count]).to eq 0
  54. expect(hash_body[:reblogged]).to be false
  55. end
  56. end
  57. context 'with public status when blocked by its author' do
  58. let(:status) { Fabricate(:status, account: user.account) }
  59. before do
  60. ReblogService.new.call(user.account, status)
  61. status.account.block!(user.account)
  62. post :destroy, params: { status_id: status.id }
  63. end
  64. it 'destroys the reblog', :aggregate_failures do
  65. expect(response).to have_http_status(200)
  66. expect(status.reblogs.count).to eq 0
  67. expect(user.account.reblogged?(status)).to be false
  68. hash_body = body_as_json
  69. expect(hash_body[:id]).to eq status.id.to_s
  70. expect(hash_body[:reblogs_count]).to eq 0
  71. expect(hash_body[:reblogged]).to be false
  72. end
  73. end
  74. context 'with private status that was not reblogged' do
  75. let(:status) { Fabricate(:status, visibility: :private) }
  76. before do
  77. post :destroy, params: { status_id: status.id }
  78. end
  79. it 'returns http not found' do
  80. expect(response).to have_http_status(404)
  81. end
  82. end
  83. end
  84. end
  85. end