diff --git a/app/controllers/passports_controller.rb b/app/controllers/passports_controller.rb index 41c2629..14026ea 100644 --- a/app/controllers/passports_controller.rb +++ b/app/controllers/passports_controller.rb @@ -31,15 +31,6 @@ class PassportsController < ApplicationController redirect_to @passport end - # PATCH/PUT /passports/:id - def update - authorize @passport - - return render :show unless @passport.update permitted_attributes @passport - - redirect_to @passport - end - private def set_passport diff --git a/app/models/passport.rb b/app/models/passport.rb index 258eeac..2521962 100644 --- a/app/models/passport.rb +++ b/app/models/passport.rb @@ -16,6 +16,10 @@ class Passport < ApplicationRecord validates :unit_code, presence: true validates :date_of_issue, presence: true + validate do + errors.add :image, :blank unless image.attached? + end + before_validation do self.patronymic = nil if patronymic.blank? end diff --git a/app/policies/passport_policy.rb b/app/policies/passport_policy.rb index 2e57a9c..7b2f784 100644 --- a/app/policies/passport_policy.rb +++ b/app/policies/passport_policy.rb @@ -9,21 +9,13 @@ class PassportPolicy < ApplicationPolicy true end - def update? - true - end - def permitted_attributes_for_create %i[ surname given_name patronymic sex date_of_birth place_of_birth series - number issued_by unit_code date_of_issue + number issued_by unit_code date_of_issue image ] end - def permitted_attributes_for_update - %i[image] - end - class Scope < Scope def resolve scope.all diff --git a/app/views/passports/show.html.erb b/app/views/passports/show.html.erb index 8902fbc..d887944 100644 --- a/app/views/passports/show.html.erb +++ b/app/views/passports/show.html.erb @@ -9,14 +9,7 @@
- <% if @passport.image.attached? %> - <%= image_tag url_for(@passport.image), class: 'img-fluid' %> - <% elsif policy(@passport).update? %> - <%= simple_form_for @passport do |f| %> - <%= f.input :image %> - <%= f.button :submit %> - <% end %> - <% end %> + <%= image_tag url_for(@passport.image), class: 'img-fluid' %>
diff --git a/config/routes.rb b/config/routes.rb index fecb482..991cf25 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -28,7 +28,7 @@ Rails.application.routes.draw do resources :membership_applications, only: %i[new create] - resources :passports, only: %i[index show new create update] + resources :passports, only: %i[index show new create] resources :telegram_bot_updates, only: :create end diff --git a/factories/passports.rb b/factories/passports.rb index 2cae1ef..6a6d8db 100644 --- a/factories/passports.rb +++ b/factories/passports.rb @@ -23,7 +23,7 @@ FactoryBot.define do end date_of_issue { Faker::Date.backward } - after :create do |passport, evaluator| + after :build do |passport, evaluator| passport.image.attach( filename: evaluator.image_filename, io: File.open(evaluator.image_path), diff --git a/spec/requests/passports/create_spec.rb b/spec/requests/passports/create_spec.rb index 4fe079c..1d3ace2 100644 --- a/spec/requests/passports/create_spec.rb +++ b/spec/requests/passports/create_spec.rb @@ -3,10 +3,20 @@ require 'rails_helper' RSpec.describe 'POST /passports' do - let(:passport_attributes) { attributes_for :passport } + let(:passport_plain_attributes) { attributes_for :passport } + + let :passport_all_attributes do + passport_plain_attributes.merge( + image: Rack::Test::UploadedFile.new(File.open(passport_image_path)), + ) + end + + let :passport_image_path do + Rails.root.join 'fixtures', 'passport_image_1.jpg' + end def make_request - post '/passports', params: { passport: passport_attributes } + post '/passports', params: { passport: passport_all_attributes } end specify do @@ -17,7 +27,15 @@ RSpec.describe 'POST /passports' do before { make_request } specify do - expect(Passport.last).to have_attributes passport_attributes + expect(response).to redirect_to passport_url Passport.last + end + + specify do + expect(Passport.last).to have_attributes passport_plain_attributes + end + + specify do + expect(Passport.last.image).to be_attached end end end diff --git a/spec/requests/passports/update_spec.rb b/spec/requests/passports/update_spec.rb deleted file mode 100644 index f9dafe7..0000000 --- a/spec/requests/passports/update_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe 'PATCH/PUT /passports/:id' do - let!(:passport) { create :passport } - - let :passport_attributes do - { image: Rack::Test::UploadedFile.new(File.open(passport_image_path)) } - end - - let :passport_image_path do - Rails.root.join 'fixtures', 'passport_image_1.jpg' - end - - before do - patch "/passports/#{passport.id}", params: { passport: passport_attributes } - end - - specify do - expect(response).to redirect_to passport_url passport - end -end