Add action PassportConfirmationsController#create
This commit is contained in:
parent
ef000436dc
commit
b61f8f667c
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class PassportConfirmationsController < ApplicationController
|
||||
before_action :authenticate_user!
|
||||
|
||||
before_action :set_passport, only: :create
|
||||
|
||||
# POST /passports/:passport_id/passport_confirmations
|
||||
def create
|
||||
@passport_confirmation = PassportConfirmation.new(
|
||||
passport: @passport,
|
||||
user: current_user,
|
||||
)
|
||||
|
||||
authorize @passport_confirmation
|
||||
|
||||
return redirect_to @passport unless @passport_confirmation.save
|
||||
|
||||
redirect_to @passport
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_passport
|
||||
@passport = Passport.find params[:passport_id]
|
||||
end
|
||||
end
|
|
@ -36,6 +36,10 @@ class ApplicationPolicy
|
|||
false
|
||||
end
|
||||
|
||||
def policy(record)
|
||||
Pundit.policy user, record
|
||||
end
|
||||
|
||||
class Scope
|
||||
attr_reader :user, :scope
|
||||
|
||||
|
|
|
@ -28,7 +28,9 @@ Rails.application.routes.draw do
|
|||
|
||||
resources :membership_applications, only: %i[new create]
|
||||
|
||||
resources :passports, only: %i[index show new create]
|
||||
resources :passports, only: %i[index show new create] do
|
||||
resources :passport_confirmations, shallow: true, only: :create
|
||||
end
|
||||
|
||||
resources :telegram_bot_updates, only: :create
|
||||
end
|
||||
|
|
|
@ -36,6 +36,7 @@ require_relative 'support/shoulda_matchers'
|
|||
require_relative 'support/faker'
|
||||
require_relative 'support/factory_bot'
|
||||
require_relative 'support/database_cleaner'
|
||||
require_relative 'support/devise'
|
||||
|
||||
# Checks for pending migrations and applies them before tests are run.
|
||||
# If you are not using ActiveRecord, you can remove these lines.
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'POST /passports/:passport_id/passport_confirmations' do
|
||||
let!(:passport) { create :passport }
|
||||
|
||||
def make_request
|
||||
post "/passports/#{passport.id}/passport_confirmations"
|
||||
end
|
||||
|
||||
context 'when no user is authenticated' do
|
||||
specify do
|
||||
expect { make_request }.not_to change(PassportConfirmation, :count)
|
||||
end
|
||||
|
||||
context 'after request' do
|
||||
before { make_request }
|
||||
|
||||
specify do
|
||||
expect(response).to redirect_to new_user_session_url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user is authorized' do
|
||||
let(:current_user) { create :user }
|
||||
|
||||
before do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
specify do
|
||||
expect { make_request }.to \
|
||||
change(PassportConfirmation, :count).from(0).to(1)
|
||||
end
|
||||
|
||||
context 'after request' do
|
||||
before { make_request }
|
||||
|
||||
specify do
|
||||
expect(response).to redirect_to passport
|
||||
end
|
||||
|
||||
specify do
|
||||
expect(PassportConfirmation.last).to have_attributes(
|
||||
passport: passport,
|
||||
user: current_user,
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include Devise::Test::IntegrationHelpers, type: :request
|
||||
end
|
Reference in New Issue