mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-29 21:17:17 +00:00
The S3 class is calling URI.encode which is removed in Ruby 3. By providing a URI module within the S3 class makes the S3 code call that module instead.
73 lines
2.3 KiB
Ruby
73 lines
2.3 KiB
Ruby
# frozen_string_literal: false
|
|
|
|
require 'spec_helper'
|
|
|
|
module Spree
|
|
describe Image do
|
|
include FileHelper
|
|
|
|
let(:file) { Rack::Test::UploadedFile.new(black_logo_file, 'image/png') }
|
|
let(:product) { create(:product) }
|
|
|
|
describe "using local storage" do
|
|
it "stores a new image" do
|
|
image = Spree::Image.create!(
|
|
attachment: file,
|
|
viewable: product.master,
|
|
)
|
|
|
|
attachment = image.attachment
|
|
expect(attachment.exists?).to eq true
|
|
expect(attachment.file?).to eq true
|
|
expect(attachment.url).to match %r"^/spree/products/[0-9]+/product/logo-black\.png\?[0-9]+$"
|
|
end
|
|
end
|
|
|
|
describe "using AWS S3" do
|
|
let(:s3_config) {
|
|
{
|
|
url: ":s3_alias_url",
|
|
storage: :s3,
|
|
s3_credentials: {
|
|
access_key_id: "A...A",
|
|
secret_access_key: "H...H",
|
|
},
|
|
s3_headers: { "Cache-Control" => "max-age=31557600" },
|
|
bucket: "ofn",
|
|
s3_protocol: "https",
|
|
s3_host_alias: "ofn.s3.us-east-1.amazonaws.com",
|
|
|
|
# This is for easier testing:
|
|
path: "/:id/:style/:basename.:extension",
|
|
}
|
|
}
|
|
|
|
before do
|
|
attachment_definition = Spree::Image.attachment_definitions[:attachment]
|
|
allow(Spree::Image).to receive(:attachment_definitions).and_return(
|
|
attachment: attachment_definition.merge(s3_config)
|
|
)
|
|
end
|
|
|
|
it "saves a new image when none is present" do
|
|
upload_pattern = %r"^https://ofn.s3.amazonaws.com/[0-9]+/(original|mini|small|product|large)/logo-black.png$"
|
|
download_pattern = %r"^https://ofn.s3.amazonaws.com/[0-9]+/product/logo-black.png$"
|
|
public_url_pattern = %r"^https://ofn.s3.us-east-1.amazonaws.com/[0-9]+/product/logo-black.png\?[0-9]+$"
|
|
|
|
stub_request(:put, upload_pattern).to_return(status: 200, body: "", headers: {})
|
|
stub_request(:head, download_pattern).to_return(status: 200, body: "", headers: {})
|
|
|
|
image = Spree::Image.create!(
|
|
attachment: file,
|
|
viewable: product.master,
|
|
)
|
|
|
|
attachment = image.attachment
|
|
expect(attachment.exists?).to eq true
|
|
expect(attachment.file?).to eq true
|
|
expect(attachment.url).to match public_url_pattern
|
|
end
|
|
end
|
|
end
|
|
end
|