sun-sword 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/generators/sun_sword/scaffold_generator.rb +4 -0
- data/lib/generators/sun_sword/templates_scaffold/controllers/controller.rb.tt +14 -14
- data/lib/generators/sun_sword/templates_scaffold/controllers/controller_spec.rb.tt +34 -58
- data/lib/sun_sword/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2eefd4a0b6dca262f359265aa4cdae141b33e7305f8c945935dfc9c2b5fab8df
|
|
4
|
+
data.tar.gz: 5eefa90794d726cda2e144abfcb9b1d368fbdc4db04a6b1d7a6d99063f6550ae
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1442f3d391b08b44242c447a2fc522a5bb94b537dc1c22e131343ac83789ff06d161448e6a6191c724a2d06ec735b1117e788726843bbf2ec2262377221db4fd
|
|
7
|
+
data.tar.gz: b8e4e72e81238060bfc29751d1ebd6a48c9f14f4bb13a33891915e78613ad48c529203eb3972ad8bd18cf5d0e1fecda2a79b07d607b0be0f860a415099280a0b
|
data/Gemfile.lock
CHANGED
|
@@ -15,6 +15,7 @@ module SunSword
|
|
|
15
15
|
|
|
16
16
|
class_option :engine, type: :string, default: nil, desc: 'Specify target engine name (e.g., admin, api)'
|
|
17
17
|
class_option :engine_structure, type: :string, default: nil, desc: 'Specify engine where structure file is located'
|
|
18
|
+
class_option :domain, type: :string, default: nil, desc: 'Specify domain prefix for UseCases (e.g., core)'
|
|
18
19
|
|
|
19
20
|
def validate_engine
|
|
20
21
|
return unless options[:engine]
|
|
@@ -83,6 +84,9 @@ module SunSword
|
|
|
83
84
|
# Engine mount path for view rendering
|
|
84
85
|
@engine_mount_path = options[:engine] ? options[:engine].to_s.downcase : ''
|
|
85
86
|
|
|
87
|
+
# UseCase domain prefix
|
|
88
|
+
@usecase_domain = options[:domain] ? options[:domain].to_s.camelize : @engine_structure_class
|
|
89
|
+
|
|
86
90
|
@mapping_fields = {
|
|
87
91
|
string: :text_field,
|
|
88
92
|
text: :text_area,
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# Template for the controller (controllers/controller.rb.tt)
|
|
2
|
-
class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::") %>Controller <
|
|
2
|
+
class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::") %>Controller < ApplicationController
|
|
3
3
|
before_action :set_<%= @variable_subject %>, only: %i[edit update]
|
|
4
4
|
layout :set_layouts
|
|
5
5
|
|
|
6
6
|
# GET /<engine_mount_path>/<%=[@scope_path].reject { |c| c.empty? }.join("/") %>
|
|
7
7
|
def index
|
|
8
|
-
use_case = <%= [@
|
|
8
|
+
use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>
|
|
9
9
|
contract = use_case.contract!(build_contract({}))
|
|
10
10
|
result = use_case.new(contract).result
|
|
11
11
|
Dry::Matcher::ResultMatcher.call(result) do |matcher|
|
|
12
12
|
matcher.success do |response|
|
|
13
13
|
@<%= @variable_subject.pluralize %> = response
|
|
14
|
-
render '<%= [@engine_mount_path, @scope_path, "index"].reject { |c| c.empty? }.join("/") %>'
|
|
14
|
+
render '<%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "/" %><%= [@engine_mount_path, @scope_path, "index"].reject { |c| c.empty? }.join("/") %>'
|
|
15
15
|
end
|
|
16
16
|
matcher.failure do |errors|
|
|
17
17
|
redirect_to root_path, success: errors
|
|
@@ -21,7 +21,7 @@ class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::")
|
|
|
21
21
|
|
|
22
22
|
# GET /<engine_mount_path>/<%=[@scope_path, ":uuid"].reject { |c| c.empty? }.join("/") %>
|
|
23
23
|
def show
|
|
24
|
-
use_case = <%= [@
|
|
24
|
+
use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>
|
|
25
25
|
contract = use_case.contract!(build_contract({ id: params[:id] }))
|
|
26
26
|
result = use_case.new(contract).result
|
|
27
27
|
Dry::Matcher::ResultMatcher.call(result) do |matcher|
|
|
@@ -45,47 +45,47 @@ class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::")
|
|
|
45
45
|
|
|
46
46
|
# POST /<%= @engine_scope_path %>/<%= @scope_path %>
|
|
47
47
|
def create
|
|
48
|
-
use_case = <%= [@
|
|
48
|
+
use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>
|
|
49
49
|
contract = use_case.contract!(build_contract(<%= @variable_subject %>_params))
|
|
50
50
|
result = use_case.new(contract).result
|
|
51
51
|
Dry::Matcher::ResultMatcher.call(result) do |matcher|
|
|
52
52
|
matcher.success do |response|
|
|
53
|
-
redirect_to <%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully created.'
|
|
53
|
+
redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully created.'
|
|
54
54
|
end
|
|
55
55
|
matcher.failure do |errors|
|
|
56
56
|
@<%= @variable_subject %> = build_form_errors(<%= @variable_subject %>_params, <%= @model_class %>.new, errors)
|
|
57
|
-
render '<%= [@engine_mount_path, @scope_path, "new"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
|
|
57
|
+
render '<%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "/" %><%= [@engine_mount_path, @scope_path, "new"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
# PATCH/PUT /<engine_mount_path>/<%=[@scope_path, ":uuid"].reject { |c| c.empty? }.join("/") %>
|
|
63
63
|
def update
|
|
64
|
-
use_case = <%= [@
|
|
64
|
+
use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>
|
|
65
65
|
contract = use_case.contract!(build_contract(<%= @variable_subject %>_params).merge({ id: params[:id] }))
|
|
66
66
|
result = use_case.new(contract).result
|
|
67
67
|
Dry::Matcher::ResultMatcher.call(result) do |matcher|
|
|
68
68
|
matcher.success do |response|
|
|
69
|
-
redirect_to <%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully updated.'
|
|
69
|
+
redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully updated.'
|
|
70
70
|
end
|
|
71
71
|
matcher.failure do |errors|
|
|
72
72
|
@<%= @variable_subject %> = build_form_errors(<%= @variable_subject %>_params, <%= @model_class %>.find(params[:id]), errors)
|
|
73
|
-
render '<%= [@engine_mount_path, @scope_path, "edit"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
|
|
73
|
+
render '<%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "/" %><%= [@engine_mount_path, @scope_path, "edit"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
# DELETE /<engine_mount_path>/<%=[@scope_path, ":uuid"].reject { |c| c.empty? }.join("/") %>
|
|
79
79
|
def destroy
|
|
80
|
-
use_case = <%= [@
|
|
80
|
+
use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>
|
|
81
81
|
contract = use_case.contract!(build_contract({ id: params[:id] }))
|
|
82
82
|
result = use_case.new(contract).result
|
|
83
83
|
Dry::Matcher::ResultMatcher.call(result) do |matcher|
|
|
84
84
|
matcher.success do |response|
|
|
85
|
-
redirect_to <%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, notice: '<%= @subject_class %> was successfully destroyed.'
|
|
85
|
+
redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, notice: '<%= @subject_class %> was successfully destroyed.'
|
|
86
86
|
end
|
|
87
87
|
matcher.failure do |errors|
|
|
88
|
-
redirect_to <%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> could not be destroyed.'
|
|
88
|
+
redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> could not be destroyed.'
|
|
89
89
|
end
|
|
90
90
|
end
|
|
91
91
|
end
|
|
@@ -107,7 +107,7 @@ class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::")
|
|
|
107
107
|
<%else -%>
|
|
108
108
|
@<%= @variable_subject %> = <%= @model_class %>.find_by(id: params[:id])
|
|
109
109
|
<%end -%>
|
|
110
|
-
redirect_to <%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> not found.' if @<%= @variable_subject %>.nil?
|
|
110
|
+
redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> not found.' if @<%= @variable_subject %>.nil?
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
# Only allow a list of trusted parameters through.
|
|
@@ -5,7 +5,7 @@ require 'rails_helper'
|
|
|
5
5
|
RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::") %>Controller, type: :controller do
|
|
6
6
|
<% if @resource_owner_id.present? -%>
|
|
7
7
|
let(:owner) { create(:<%= @resource_owner %>) }
|
|
8
|
-
let(:actor) { create(:actor) }
|
|
8
|
+
let(:actor) { create(:actor, <%= @resource_owner_id%>: owner.id) }
|
|
9
9
|
<% end -%>
|
|
10
10
|
|
|
11
11
|
let(:valid_attributes) do
|
|
@@ -43,14 +43,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
43
43
|
<% end -%>
|
|
44
44
|
describe 'GET #index' do
|
|
45
45
|
context 'when use case succeeds' do
|
|
46
|
-
let(:<%= @variable_subject.pluralize %>) { create_list(:<%= @variable_subject
|
|
47
|
-
let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>) }
|
|
48
|
-
let(:success_result) { Dry::Monads::Success(<%= @variable_subject.pluralize %>) }
|
|
46
|
+
let(:<%= @variable_subject.pluralize %>) { create_list(:<%= @variable_subject %>, 3) }
|
|
49
47
|
|
|
50
48
|
before do
|
|
51
|
-
|
|
52
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
53
|
-
allow(use_case_instance).to receive(:result).and_return(success_result)
|
|
49
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>, <%= @variable_subject.pluralize %>, response: :success)
|
|
54
50
|
end
|
|
55
51
|
|
|
56
52
|
it 'returns success response and assigns @<%= @variable_subject.pluralize %>' do
|
|
@@ -62,20 +58,18 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
62
58
|
end
|
|
63
59
|
|
|
64
60
|
it 'calls use case with correct contract' do
|
|
65
|
-
expect(
|
|
61
|
+
expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)<%= @resource_owner_id.present? ? "\n .with(hash_including(#{@resource_owner_id}: owner.id))" : '' %>
|
|
66
62
|
|
|
67
63
|
get :index
|
|
68
64
|
end
|
|
69
65
|
end
|
|
70
66
|
|
|
71
67
|
context 'when use case fails' do
|
|
72
|
-
let(:use_case_instance) { instance_double(
|
|
73
|
-
let(:failure_result) {
|
|
68
|
+
let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>) }
|
|
69
|
+
let(:failure_result) { 'Error loading <%= @variable_subject.pluralize %>' }
|
|
74
70
|
|
|
75
71
|
before do
|
|
76
|
-
|
|
77
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
78
|
-
allow(use_case_instance).to receive(:result).and_return(failure_result)
|
|
72
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
|
|
79
73
|
end
|
|
80
74
|
|
|
81
75
|
it 'redirects to root path with error' do
|
|
@@ -91,13 +85,11 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
91
85
|
let(:<%= @variable_subject %>) { create(:<%= @variable_subject %><%= @resource_owner_id.present? ? ", #{@resource_owner_id}: owner.id" : '' %>) }
|
|
92
86
|
|
|
93
87
|
context 'when use case succeeds' do
|
|
94
|
-
let(:use_case_instance) { instance_double(
|
|
95
|
-
let(:success_result) {
|
|
88
|
+
let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>) }
|
|
89
|
+
let(:success_result) { <%= @variable_subject %> }
|
|
96
90
|
|
|
97
91
|
before do
|
|
98
|
-
|
|
99
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
100
|
-
allow(use_case_instance).to receive(:result).and_return(success_result)
|
|
92
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>, success_result, response: :success)
|
|
101
93
|
end
|
|
102
94
|
|
|
103
95
|
it 'returns success response and assigns @<%= @variable_subject %>' do
|
|
@@ -108,7 +100,7 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
108
100
|
end
|
|
109
101
|
|
|
110
102
|
it 'calls use case with correct contract' do
|
|
111
|
-
expect(
|
|
103
|
+
expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
|
|
112
104
|
.with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>id: <%= @variable_subject %>.id))
|
|
113
105
|
|
|
114
106
|
get :show, params: { id: <%= @variable_subject %>.id }
|
|
@@ -116,13 +108,11 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
116
108
|
end
|
|
117
109
|
|
|
118
110
|
context 'when use case fails' do
|
|
119
|
-
let(:use_case_instance) { instance_double(
|
|
120
|
-
let(:failure_result) {
|
|
111
|
+
let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>) }
|
|
112
|
+
let(:failure_result) { '<%= @subject_class %> not found' }
|
|
121
113
|
|
|
122
114
|
before do
|
|
123
|
-
|
|
124
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
125
|
-
allow(use_case_instance).to receive(:result).and_return(failure_result)
|
|
115
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
|
|
126
116
|
end
|
|
127
117
|
|
|
128
118
|
it 'redirects to root path with error' do
|
|
@@ -178,27 +168,24 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
178
168
|
end
|
|
179
169
|
|
|
180
170
|
describe 'POST #create' do
|
|
181
|
-
let(:use_case_instance) { instance_double(
|
|
171
|
+
let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>) }
|
|
182
172
|
|
|
183
173
|
context 'with valid params' do
|
|
184
|
-
let(:
|
|
185
|
-
let(:success_result) { Dry::Monads::Success(created_<%= @variable_subject %>) }
|
|
174
|
+
let(:success_result) { Hashie::Mash.new({ id: SecureRandom.uuid }) }
|
|
186
175
|
|
|
187
176
|
before do
|
|
188
|
-
|
|
189
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
190
|
-
allow(use_case_instance).to receive(:result).and_return(success_result)
|
|
177
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>, success_result, response: :success)
|
|
191
178
|
end
|
|
192
179
|
|
|
193
180
|
it 'creates and redirects with success message' do
|
|
194
181
|
post :create, params: { models_<%= @subject_class.underscore %>: valid_attributes }
|
|
195
182
|
|
|
196
|
-
expect(response).to redirect_to(<%= [@route_scope_path, @scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id:
|
|
183
|
+
expect(response).to redirect_to(<%= [@route_scope_path, @scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: success_result.id))
|
|
197
184
|
expect(flash[:success]).to eq('<%= @subject_class %> was successfully created.')
|
|
198
185
|
end
|
|
199
186
|
|
|
200
187
|
it 'calls use case with correct contract' do
|
|
201
|
-
expect(
|
|
188
|
+
expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
|
|
202
189
|
.with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>**valid_attributes.stringify_keys))
|
|
203
190
|
|
|
204
191
|
post :create, params: { models_<%= @subject_class.underscore %>: valid_attributes }
|
|
@@ -207,12 +194,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
207
194
|
|
|
208
195
|
context 'with invalid params' do
|
|
209
196
|
let(:errors) { { <%= @fields.first.first %>: ['cannot be blank'] } }
|
|
210
|
-
let(:failure_result) {
|
|
197
|
+
let(:failure_result) { errors}
|
|
211
198
|
|
|
212
199
|
before do
|
|
213
|
-
|
|
214
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
215
|
-
allow(use_case_instance).to receive(:result).and_return(failure_result)
|
|
200
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
|
|
216
201
|
allow(controller).to receive(:build_form_errors).and_return(<%= @model_class %>.new)
|
|
217
202
|
end
|
|
218
203
|
|
|
@@ -235,7 +220,6 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
235
220
|
|
|
236
221
|
describe 'PATCH #update' do
|
|
237
222
|
let(:<%= @variable_subject %>) { create(:<%= @variable_subject %><%= @resource_owner_id.present? ? ", #{@resource_owner_id}: owner.id" : '' %>) }
|
|
238
|
-
let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>) }
|
|
239
223
|
let(:updated_attributes) { { <%= @fields.first.first %>: 'Updated Value' } }
|
|
240
224
|
|
|
241
225
|
before do
|
|
@@ -246,12 +230,9 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
246
230
|
|
|
247
231
|
context 'with valid params' do
|
|
248
232
|
let(:updated_<%= @variable_subject %>) { <%= @variable_subject %>.tap { |obj| obj.<%= @fields.first.first %> = 'Updated Value' } }
|
|
249
|
-
let(:success_result) { Dry::Monads::Success(updated_<%= @variable_subject %>) }
|
|
250
233
|
|
|
251
234
|
before do
|
|
252
|
-
|
|
253
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
254
|
-
allow(use_case_instance).to receive(:result).and_return(success_result)
|
|
235
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>, updated_campaign, response: :success)
|
|
255
236
|
end
|
|
256
237
|
|
|
257
238
|
it 'updates and redirects with success message' do
|
|
@@ -262,7 +243,7 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
262
243
|
end
|
|
263
244
|
|
|
264
245
|
it 'calls use case with correct contract' do
|
|
265
|
-
expect(
|
|
246
|
+
expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
|
|
266
247
|
.with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>id: <%= @variable_subject %>.id, **updated_attributes.stringify_keys))
|
|
267
248
|
|
|
268
249
|
patch :update, params: { id: <%= @variable_subject %>.id, models_<%= @subject_class.underscore %>: updated_attributes }
|
|
@@ -271,12 +252,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
271
252
|
|
|
272
253
|
context 'with invalid params' do
|
|
273
254
|
let(:errors) { { <%= @fields.first.first %>: ['cannot be blank'] } }
|
|
274
|
-
let(:failure_result) {
|
|
255
|
+
let(:failure_result) { errors }
|
|
275
256
|
|
|
276
257
|
before do
|
|
277
|
-
|
|
278
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
279
|
-
allow(use_case_instance).to receive(:result).and_return(failure_result)
|
|
258
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
|
|
280
259
|
allow(<%= @model_class %>).to receive(:find).with(<%= @variable_subject %>.id).and_return(<%= @variable_subject %>)
|
|
281
260
|
allow(controller).to receive(:build_form_errors).and_return(<%= @variable_subject %>)
|
|
282
261
|
end
|
|
@@ -293,15 +272,12 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
293
272
|
|
|
294
273
|
describe 'DELETE #destroy' do
|
|
295
274
|
let(:<%= @variable_subject %>) { create(:<%= @variable_subject %><%= @resource_owner_id.present? ? ", #{@resource_owner_id}: owner.id" : '' %>) }
|
|
296
|
-
let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>) }
|
|
297
275
|
|
|
298
276
|
context 'when deletion succeeds' do
|
|
299
|
-
let(:success_result) {
|
|
277
|
+
let(:success_result) { true }
|
|
300
278
|
|
|
301
279
|
before do
|
|
302
|
-
|
|
303
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
304
|
-
allow(use_case_instance).to receive(:result).and_return(success_result)
|
|
280
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>, success_result, response: :success)
|
|
305
281
|
end
|
|
306
282
|
|
|
307
283
|
it 'destroys and redirects with success notice' do
|
|
@@ -312,7 +288,7 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
312
288
|
end
|
|
313
289
|
|
|
314
290
|
it 'calls use case with correct contract' do
|
|
315
|
-
expect(
|
|
291
|
+
expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
|
|
316
292
|
.with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>id: <%= @variable_subject %>.id))
|
|
317
293
|
|
|
318
294
|
delete :destroy, params: { id: <%= @variable_subject %>.id }
|
|
@@ -320,12 +296,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
320
296
|
end
|
|
321
297
|
|
|
322
298
|
context 'when deletion fails' do
|
|
323
|
-
let(:failure_result) {
|
|
299
|
+
let(:failure_result) { 'Cannot delete <%= @variable_subject %>' }
|
|
324
300
|
|
|
325
301
|
before do
|
|
326
|
-
|
|
327
|
-
allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
|
|
328
|
-
allow(use_case_instance).to receive(:result).and_return(failure_result)
|
|
302
|
+
stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
|
|
329
303
|
end
|
|
330
304
|
|
|
331
305
|
it 'redirects with error message' do
|
|
@@ -375,10 +349,12 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
|
|
|
375
349
|
|
|
376
350
|
it 'redirects with error' do
|
|
377
351
|
controller.params[:id] = 'non-existent'
|
|
352
|
+
allow(controller).to receive(:redirect_to)
|
|
353
|
+
|
|
378
354
|
controller.send(:set_<%= @variable_subject %>)
|
|
379
355
|
|
|
380
|
-
expect(
|
|
381
|
-
expect(
|
|
356
|
+
expect(controller.instance_variable_get(:@<%= @variable_subject %>)).to be_nil
|
|
357
|
+
expect(controller).to have_received(:redirect_to).with(<%= [@route_scope_path, @scope_path].reject { |c| c.empty? }.join("_") %>_url, error: 'Campaign not found.')
|
|
382
358
|
end
|
|
383
359
|
end
|
|
384
360
|
end
|
data/lib/sun_sword/version.rb
CHANGED