# frozen_string_literal: true
RSpec.describe JavascriptCache, type: :model do
  let!(:theme) { Fabricate(:theme) }
  let(:theme_field) do
    ThemeField.create!(theme: theme, target_id: 0, name: "header", value: "<a>html</a>")
  end

  describe "#save" do
    it "updates the digest only if the content has changed" do
      javascript_cache =
        JavascriptCache.create!(content: 'console.log("hello");', theme_field: theme_field)
      expect(javascript_cache.digest).to_not be_empty

      expect { javascript_cache.save! }.to_not change { javascript_cache.reload.digest }

      expect do
        javascript_cache.content = 'console.log("world");'
        javascript_cache.save!
      end.to change { javascript_cache.reload.digest }
    end

    it "allows content to be empty, but not nil" do
      javascript_cache =
        JavascriptCache.create!(content: 'console.log("hello");', theme_field: theme_field)

      javascript_cache.content = ""
      expect(javascript_cache.valid?).to eq(true)

      javascript_cache.content = nil
      expect(javascript_cache.valid?).to eq(false)
      expect(javascript_cache.errors.details[:content]).to include(error: :empty)
    end
  end

  describe "url" do
    it "works with multisite" do
      javascript_cache =
        JavascriptCache.create!(content: 'console.log("hello");', theme_field: theme_field)
      expect(javascript_cache.url).to include("?__ws=test.localhost")
    end
  end
end