116 lines
2.7 KiB
Ruby
116 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "hanami"
|
|
|
|
RSpec.describe "App action / View rendering / Paired view inference", :app_integration do
|
|
before do
|
|
module TestApp
|
|
class App < Hanami::App
|
|
end
|
|
end
|
|
|
|
Hanami.app.prepare
|
|
|
|
module TestApp
|
|
class Action < Hanami::Action
|
|
end
|
|
end
|
|
end
|
|
|
|
let(:action) { action_class.new }
|
|
|
|
describe "Ordinary action" do
|
|
before do
|
|
module TestApp
|
|
module Actions
|
|
module Articles
|
|
class Index < TestApp::Action
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
let(:action_class) { TestApp::Actions::Articles::Index }
|
|
|
|
context "Paired view exists" do
|
|
before do
|
|
TestApp::App.register "views.articles.index", view
|
|
end
|
|
|
|
let(:view) { double(:view) }
|
|
|
|
it "auto-injects a paired view from a matching container identifier" do
|
|
expect(action.view).to be view
|
|
end
|
|
|
|
context "Another view explicitly auto-injected" do
|
|
before do
|
|
module TestApp
|
|
module Actions
|
|
module Articles
|
|
class Index < TestApp::Action
|
|
include Deps[view: "views.articles.custom"]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
TestApp::App.register "views.articles.custom", explicit_view
|
|
end
|
|
|
|
let(:action_class) { TestApp::Actions::Articles::Index }
|
|
let(:explicit_view) { double(:explicit_view) }
|
|
|
|
it "respects the explicitly auto-injected view" do
|
|
expect(action.view).to be explicit_view
|
|
end
|
|
end
|
|
end
|
|
|
|
context "No paired view exists" do
|
|
it "does not auto-inject any view" do
|
|
expect(action.view).to be_nil
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "RESTful action" do
|
|
before do
|
|
module TestApp
|
|
module Actions
|
|
module Articles
|
|
class Create < TestApp::Action
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
let(:action_class) { TestApp::Actions::Articles::Create }
|
|
let(:direct_paired_view) { double(:direct_paired_view) }
|
|
let(:alternative_paired_view) { double(:alternative_paired_view) }
|
|
|
|
context "Direct paired view exists" do
|
|
before do
|
|
TestApp::App.register "views.articles.create", direct_paired_view
|
|
TestApp::App.register "views.articles.new", alternative_paired_view
|
|
end
|
|
|
|
it "auto-injects the directly paired view" do
|
|
expect(action.view).to be direct_paired_view
|
|
end
|
|
end
|
|
|
|
context "Alternative paired view exists" do
|
|
before do
|
|
TestApp::App.register "views.articles.new", alternative_paired_view
|
|
end
|
|
|
|
it "auto-injects the alternative paired view" do
|
|
expect(action.view).to be alternative_paired_view
|
|
end
|
|
end
|
|
end
|
|
end
|