# frozen_string_literal: true

describe "Uploading files in the composer to S3", type: :system do
  fab!(:current_user) { Fabricate(:admin) }

  let(:modal) { PageObjects::Modals::Base.new }
  let(:composer) { PageObjects::Components::Composer.new }
  let(:topic) { PageObjects::Pages::Topic.new }

  describe "direct S3 uploads" do
    describe "single part uploads" do
      it "uploads custom avatars to S3" do
        skip_unless_s3_system_specs_enabled!

        setup_s3_system_test
        sign_in(current_user)

        visit "/my/preferences/account"

        find("#edit-avatar").click
        find("#uploaded-avatar").click
        attach_file(File.absolute_path(file_from_fixtures("logo.jpg"))) do
          find("#avatar-uploader").click
        end
        expect(page).to have_css(".avatar-uploader .avatar-uploader__button[data-uploaded]")
        modal.click_primary_button
        expect(modal).to be_closed
        expect(page).to have_css(
          "#user-avatar-uploads[data-custom-avatar-upload-id]",
          visible: :hidden,
        )
        expect(current_user.reload.uploaded_avatar_id).to eq(
          find("#user-avatar-uploads", visible: false)["data-custom-avatar-upload-id"].to_i,
        )
      end
    end

    describe "multipart uploads" do
      it "uploads a file in the post composer" do
        skip_unless_s3_system_specs_enabled!

        setup_s3_system_test
        sign_in(current_user)

        topic.open_new_topic

        file_path = file_from_fixtures("logo.png", "images").path
        attach_file(file_path) { composer.click_toolbar_button("upload") }

        expect(page).to have_no_css("#file-uploading")
        expect(composer.preview).to have_css(".image-wrapper")
      end
    end
  end
end