# frozen_string_literal: true
RSpec.describe Hanami::Helpers::AssetsHelper, "#stylesheet", :app_integration do
subject(:obj) {
helpers = described_class
Class.new {
include helpers
attr_reader :_context
def initialize(context)
@_context = context
end
}.new(context)
}
def stylesheet_tag(...)
subject.stylesheet_tag(...)
end
let(:context) { TestApp::Views::Context.new }
let(:root) { make_tmp_directory }
before do
with_directory(root) do
write "config/app.rb", <<~RUBY
module TestApp
class App < Hanami::App
config.logger.stream = StringIO.new
end
end
RUBY
write "app/views/context.rb", <<~RUBY
# auto_register: false
require "hanami/view/context"
module TestApp
module Views
class Context < Hanami::View::Context
end
end
end
RUBY
write "app/assets/js/app.ts", <<~JS
import "../css/app.css";
console.log("Hello from index.ts");
JS
write "app/assets/css/app.css", <<~CSS
.btn {
background: #f00;
}
CSS
stub_assets("main.css")
require "hanami/setup"
before_prepare if respond_to?(:before_prepare)
require "hanami/prepare"
end
end
it "returns an instance of SafeString" do
actual = stylesheet_tag("main")
expect(actual).to be_instance_of(::Hanami::View::HTML::SafeString)
end
it "is aliased as #stylesheet_tag" do
expect(subject.stylesheet_tag("main")).to eq stylesheet_tag("main")
end
it "renders tag" do
actual = stylesheet_tag("main")
expect(actual).to eq(%())
end
xit "renders tag without appending ext after query string" do
actual = stylesheet_tag("fonts?font=Helvetica")
expect(actual).to eq(%())
end
it "renders tag with an integrity attribute" do
actual = stylesheet_tag("main", integrity: "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC")
expect(actual).to eq(%())
end
it "renders tag with a crossorigin attribute" do
actual = stylesheet_tag("main", integrity: "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC", crossorigin: "use-credentials")
expect(actual).to eq(%())
end
it "ignores href passed as an option" do
actual = stylesheet_tag("main", href: "wrong")
expect(actual).to eq(%())
end
describe "subresource_integrity mode" do
def before_prepare
Hanami.app.config.assets.subresource_integrity = [:sha384]
end
before { compile_assets! }
it "includes subresource_integrity and crossorigin attributes" do
actual = stylesheet_tag("app")
expect(actual).to match(%r{})
end
end
describe "cdn mode" do
let(:base_url) { "https://hanami.test" }
def before_prepare
Hanami.app.config.assets.base_url = base_url
end
it "returns absolute url for href attribute" do
actual = stylesheet_tag("main")
expect(actual).to eq(%())
end
end
end