relays_controller_spec.rb 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # frozen_string_literal: true
  2. require 'rails_helper'
  3. describe Admin::RelaysController do
  4. render_views
  5. let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
  6. before do
  7. sign_in user, scope: :user
  8. end
  9. describe 'GET #index' do
  10. it 'returns http success' do
  11. get :index
  12. expect(response).to have_http_status(:success)
  13. end
  14. end
  15. describe 'GET #new' do
  16. it 'returns http success and renders view' do
  17. get :new
  18. expect(response).to have_http_status(:success)
  19. expect(response).to render_template(:new)
  20. end
  21. end
  22. describe 'POST #create' do
  23. context 'with valid data' do
  24. let(:inbox_url) { 'https://example.com/inbox' }
  25. before do
  26. stub_request(:post, inbox_url).to_return(status: 200)
  27. end
  28. it 'creates a new relay and redirects' do
  29. expect do
  30. post :create, params: { relay: { inbox_url: inbox_url } }
  31. end.to change(Relay, :count).by(1)
  32. expect(response).to redirect_to(admin_relays_path)
  33. end
  34. end
  35. context 'with invalid data' do
  36. it 'does not create new a relay and renders new' do
  37. expect do
  38. post :create, params: { relay: { inbox_url: 'invalid' } }
  39. end.to_not change(Relay, :count)
  40. expect(response).to have_http_status(:success)
  41. expect(response).to render_template(:new)
  42. end
  43. end
  44. end
  45. describe 'DELETE #destroy' do
  46. let(:relay) { Fabricate(:relay) }
  47. it 'deletes an existing relay' do
  48. delete :destroy, params: { id: relay.id }
  49. expect { relay.reload }.to raise_error(ActiveRecord::RecordNotFound)
  50. expect(response).to redirect_to(admin_relays_path)
  51. end
  52. end
  53. describe 'POST #enable' do
  54. let(:relay) { Fabricate(:relay, state: :idle) }
  55. before do
  56. stub_request(:post, /example.com/).to_return(status: 200)
  57. end
  58. it 'updates a relay from idle to pending' do
  59. post :enable, params: { id: relay.id }
  60. expect(relay.reload).to be_pending
  61. expect(response).to redirect_to(admin_relays_path)
  62. end
  63. end
  64. describe 'POST #disable' do
  65. let(:relay) { Fabricate(:relay, state: :pending) }
  66. before do
  67. stub_request(:post, /example.com/).to_return(status: 200)
  68. end
  69. it 'updates a relay from pending to idle' do
  70. post :disable, params: { id: relay.id }
  71. expect(relay.reload).to be_idle
  72. expect(response).to redirect_to(admin_relays_path)
  73. end
  74. end
  75. end