require 'spec_helper'

describe Spree::Admin::ImageSettingsController do
  include AuthenticationWorkflow

  before { login_as_admin }

  context "updating image settings" do
    it "should be able to update paperclip settings" do
      spree_put :update, preferences: { "attachment_path" => "foo/bar",
                                        "attachment_default_url" => "baz/bar" }

      expect(Spree::Config[:attachment_path]).to eq("foo/bar")
      expect(Spree::Config[:attachment_default_url]).to eq("baz/bar")
    end

    context "paperclip styles" do
      it "should be able to update the paperclip styles" do
        spree_put :update, "attachment_styles" => { "thumb" => "25x25>" }
        updated_styles = ActiveSupport::JSON.decode(Spree::Config[:attachment_styles])
        expect(updated_styles["thumb"]).to eq("25x25>")
      end

      it "should be able to add a new style" do
        spree_put :update, "attachment_styles" => {},
                           "new_attachment_styles" => { "1" => { "name" => "jumbo",
                                                                 "value" => "2000x2000>" } }
        styles = ActiveSupport::JSON.decode(Spree::Config[:attachment_styles])
        expect(styles["jumbo"]).to eq("2000x2000>")
      end
    end

    context "amazon s3" do
      after(:all) do
        Spree::Image.attachment_definitions[:attachment].delete :storage
      end

      it "should be able to update s3 settings" do
        spree_put :update, preferences:
        {
          "use_s3" => "1",
          "s3_access_key" => "a_valid_key",
          "s3_secret" => "a_secret",
          "s3_bucket" => "some_bucket"
        }
        expect(Spree::Config[:use_s3]).to be_truthy
        expect(Spree::Config[:s3_access_key]).to eq("a_valid_key")
        expect(Spree::Config[:s3_secret]).to     eq("a_secret")
        expect(Spree::Config[:s3_bucket]).to     eq("some_bucket")
      end

      context "headers" do
        before(:each) { Spree::Config[:use_s3] = true }

        it "should be able to update the s3 headers" do
          spree_put :update, "preferences" => { "use_s3" => "1" },
                             "s3_headers" => { "Cache-Control" => "max-age=1111" }
          headers = ActiveSupport::JSON.decode(Spree::Config[:s3_headers])
          expect(headers["Cache-Control"]).to eq("max-age=1111")
        end

        it "should be able to add a new header" do
          spree_put :update, "s3_headers" => {},
                             "new_s3_headers" => { "1" => { "name" => "Charset",
                                                            "value" => "utf-8" } }
          headers = ActiveSupport::JSON.decode(Spree::Config[:s3_headers])
          expect(headers["Charset"]).to eq("utf-8")
        end
      end
    end
  end
end
