mirror of
https://github.com/usetrmnl/terminus.git
synced 2026-08-13 14:29:27 -07:00
Fixed extension remote import creator to transform exchange templates
Necessary to apply the same transforms to exchange templates as we do for extension templates since both use Liquid templates. Issue: 306 Milestone: patch
This commit is contained in:
@@ -11,11 +11,14 @@ module Terminus
|
||||
# Creates extension from plugin (recipe).
|
||||
class Creator
|
||||
include Deps[
|
||||
:logger,
|
||||
"aspects.extensions.importers.remote.transformer",
|
||||
keyer: "aspects.extensions.importers.remote.transformers.template_keys",
|
||||
repository: "repositories.extension",
|
||||
model_repository: "repositories.model",
|
||||
exchange_repository: "repositories.extension_exchange"
|
||||
]
|
||||
|
||||
include Dry::Monads[:result]
|
||||
|
||||
def initialize(problem_detail: Aspects::ProblemDetail, **)
|
||||
@@ -49,14 +52,27 @@ module Terminus
|
||||
end
|
||||
end
|
||||
|
||||
def add_exchanges id, attributes
|
||||
def add_exchanges extension_id, attributes
|
||||
headers, verb, templates, body = attributes.values_at :poll_headers,
|
||||
:poll_verb,
|
||||
:poll_template,
|
||||
:poll_body
|
||||
|
||||
templates.each do |template|
|
||||
exchange_repository.create extension_id: id, headers:, verb:, template:, body:
|
||||
templates.each do |content|
|
||||
template = transform_exchange_template content
|
||||
exchange_repository.create extension_id:, headers:, verb:, template:, body:
|
||||
end
|
||||
end
|
||||
|
||||
def transform_exchange_template content
|
||||
case keyer.call content
|
||||
in Success(content) then content
|
||||
in Failure(message)
|
||||
logger.debug { message }
|
||||
Core::EMPTY_STRING
|
||||
else
|
||||
logger.error { "Unable to transform exchange template." }
|
||||
Core::EMPTY_STRING
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,6 +9,8 @@ RSpec.describe Terminus::Aspects::Extensions::Importers::Remote::Creator, :db do
|
||||
instance_double Terminus::Aspects::Extensions::Importers::Remote::Transformer
|
||||
end
|
||||
|
||||
include_context "with application dependencies"
|
||||
|
||||
describe "#call" do
|
||||
let :attributes do
|
||||
{
|
||||
@@ -46,7 +48,7 @@ RSpec.describe Terminus::Aspects::Extensions::Importers::Remote::Creator, :db do
|
||||
poll_verb: "post",
|
||||
poll_body: {name: "test"}
|
||||
allow(transformer).to receive(:call).and_return Success(attributes)
|
||||
creator.call(1).success
|
||||
creator.call 1
|
||||
|
||||
data = Terminus::Repositories::ExtensionExchange.new.all.map(&:to_h)
|
||||
|
||||
@@ -60,6 +62,38 @@ RSpec.describe Terminus::Aspects::Extensions::Importers::Remote::Creator, :db do
|
||||
)
|
||||
end
|
||||
|
||||
context "when exchange template can't be transformned" do
|
||||
subject(:creator) { described_class.new(transformer:, keyer:) }
|
||||
|
||||
let :keyer do
|
||||
instance_double(
|
||||
Terminus::Aspects::Extensions::Importers::Remote::Transformers::TemplateKeys,
|
||||
call: Failure("Danger!")
|
||||
)
|
||||
end
|
||||
|
||||
before { allow(transformer).to receive(:call).and_return Success(attributes) }
|
||||
|
||||
it "uses empty string for template" do
|
||||
creator.call 1
|
||||
data = Terminus::Repositories::ExtensionExchange.new.all.map(&:to_h)
|
||||
|
||||
expect(data).to contain_exactly(hash_including(template: ""))
|
||||
end
|
||||
|
||||
it "logs debug message" do
|
||||
creator.call 1
|
||||
expect(logger.reread).to match(/DEBUG.+Danger!/)
|
||||
end
|
||||
|
||||
it "logs error with unknown result" do
|
||||
allow(keyer).to receive(:call).and_return "Danger!"
|
||||
creator.call 1
|
||||
|
||||
expect(logger.reread).to match(/ERROR.+Unable to transform/)
|
||||
end
|
||||
end
|
||||
|
||||
it "fails with duplicate import" do
|
||||
Factory[:extension, name: "test"]
|
||||
allow(transformer).to receive(:call).and_return Success(attributes)
|
||||
|
||||
Reference in New Issue
Block a user