# frozen_string_literal: true
RSpec.describe ProblemCheck::S3BackupConfig do
subject(:check) { described_class.new }
describe ".call" do
let(:backup_location) { BackupLocationSiteSetting::S3 }
let(:bucket_name) { "backups" }
before do
GlobalSetting.stubs(use_s3?: globally_enabled)
SiteSetting.stubs(backup_location: backup_location)
SiteSetting.stubs(s3_backup_bucket: bucket_name)
end
context "when S3 uploads are globally enabled" do
let(:globally_enabled) { true }
it "relies on the check in GlobalSettings#use_s3?" do
expect(check).to be_chill_about_it
end
end
context "when S3 backups are disabled" do
let(:globally_enabled) { false }
let(:backup_location) { nil }
it { expect(check).to be_chill_about_it }
end
context "when S3 backups are enabled" do
let(:globally_enabled) { false }
before { SiteSetting.stubs(s3_use_iam_profile: use_iam_profile) }
context "when configured to use IAM profile" do
let(:use_iam_profile) { true }
it { expect(check).to be_chill_about_it }
end
context "when not configured to use IAM profile" do
let(:use_iam_profile) { false }
before do
SiteSetting.stubs(s3_access_key_id: access_key)
SiteSetting.stubs(s3_secret_access_key: secret_access_key)
end
context "when credentials are present" do
let(:access_key) { "foo" }
let(:secret_access_key) { "bar" }
it { expect(check).to be_chill_about_it }
end
context "when credentials are missing" do
let(:access_key) { "foo" }
let(:secret_access_key) { nil }
it do
expect(check).to have_a_problem.with_priority("low").with_message(
'The server is configured to upload backups to S3, but at least one the following setting is not set: s3_access_key_id, s3_secret_access_key, s3_use_iam_profile, or s3_backup_bucket. Go to the Site Settings and update the settings. See "How to set up image uploads to S3?" to learn more.',
)
end
end
context "when bucket name is missing" do
let(:access_key) { "foo" }
let(:secret_access_key) { "bar" }
let(:bucket_name) { nil }
it do
expect(check).to have_a_problem.with_priority("low").with_message(
'The server is configured to upload backups to S3, but at least one the following setting is not set: s3_access_key_id, s3_secret_access_key, s3_use_iam_profile, or s3_backup_bucket. Go to the Site Settings and update the settings. See "How to set up image uploads to S3?" to learn more.',
)
end
end
end
end
end
end