From 22d59ba4fbc8fc0810e2f422801bacddd685e93b Mon Sep 17 00:00:00 2001 From: Jose Farias Date: Fri, 29 Nov 2024 18:40:58 -0600 Subject: [PATCH] Test UploadsController --- app/controllers/uploads_controller.rb | 22 +++++++++++++----- test/controllers/uploads_controller_test.rb | 25 +++++++++++++++++++++ 2 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 test/controllers/uploads_controller_test.rb diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index c7a97d81a..fda884cef 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -1,16 +1,28 @@ class UploadsController < ApplicationController include ActiveStorage::SetCurrent + before_action :set_file, only: :create + before_action :set_attachment, only: :show + def create - file = params[:file] - blob = ActiveStorage::Blob.create_and_upload! io: file, filename: file.original_filename, content_type: file.content_type - @upload = Current.account.uploads_attachments.create! blob: blob - render :create, status: :created, formats: :json + @upload = Current.account.uploads_attachments.create! blob: create_blob! end def show - @attachment = ActiveStorage::Attachment.find_by! slug: "#{params[:slug]}.#{params[:format]}" expires_in 1.year, public: true redirect_to @attachment.url end + + private + def set_file + @file = params[:file] + end + + def set_attachment + @attachment = ActiveStorage::Attachment.find_by! slug: "#{params[:slug]}.#{params[:format]}" + end + + def create_blob! + ActiveStorage::Blob.create_and_upload! io: @file, filename: @file.original_filename, content_type: @file.content_type + end end diff --git a/test/controllers/uploads_controller_test.rb b/test/controllers/uploads_controller_test.rb new file mode 100644 index 000000000..64a092171 --- /dev/null +++ b/test/controllers/uploads_controller_test.rb @@ -0,0 +1,25 @@ +require "test_helper" + +class UploadsControllerTest < ActionDispatch::IntegrationTest + setup do + sign_in_as :kevin + end + + test "create" do + assert_changes -> { ActiveStorage::Attachment.count }, 1 do + post uploads_url(format: "json"), params: { file: fixture_file_upload("moon.jpg", "image/jpeg") }, as: :xhr + end + + assert_response :success + assert_equal ActiveStorage::Attachment.last.slug_url(host: "www.example.com", port: nil), response.parsed_body["fileUrl"] + assert_equal "image/jpeg", response.parsed_body["mimetype"] + assert_equal "moon.jpg", response.parsed_body["fileName"] + end + + test "show" do + accounts("37s").uploads.attach fixture_file_upload("moon.jpg", "image/jpeg") + get upload_url(slug: accounts("37s").uploads.last.slug) + assert_response :redirect + assert_match /\/rails\/active_storage\/.*\/moon\.jpg/, @response.redirect_url + end +end