mirror of
https://github.com/opf/openproject.git
synced 2026-06-14 03:30:14 +00:00
keep workspace type url when selecting template
This commit is contained in:
@@ -30,7 +30,7 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
<%=
|
||||
component_wrapper do
|
||||
settings_primer_form_with(
|
||||
url: new_project_path,
|
||||
url: new_workspace_path,
|
||||
method: :get,
|
||||
data: {
|
||||
turbo_frame: Projects::NewComponent.wrapper_key,
|
||||
|
||||
@@ -35,12 +35,23 @@ module Projects
|
||||
include OpPrimer::ComponentHelpers
|
||||
include OpTurbo::Streamable
|
||||
|
||||
option :project
|
||||
option :template
|
||||
option :parent, optional: true
|
||||
option :current_user, default: -> { User.current }
|
||||
|
||||
private
|
||||
|
||||
def new_workspace_path
|
||||
workspace_type = if Project.workspace_types.key?(project.workspace_type)
|
||||
project.workspace_type.to_sym
|
||||
else
|
||||
:project
|
||||
end
|
||||
|
||||
url_for([:new, workspace_type])
|
||||
end
|
||||
|
||||
def template_id = template&.id
|
||||
def parent_id = parent&.id
|
||||
end
|
||||
|
||||
@@ -36,6 +36,7 @@ See COPYRIGHT and LICENSE files for more details.
|
||||
|
||||
<%=
|
||||
render Projects::TemplateSelectComponent.new(
|
||||
project: @new_project,
|
||||
template: @template,
|
||||
parent: @parent,
|
||||
current_user:
|
||||
|
||||
@@ -35,15 +35,70 @@ RSpec.describe Projects::TemplateSelectComponent, type: :component do
|
||||
render_inline(described_class.new(...))
|
||||
end
|
||||
|
||||
let(:project) { Project.new }
|
||||
let(:template) { build_stubbed(:template_project) }
|
||||
let(:current_user) { build_stubbed(:user) }
|
||||
|
||||
subject(:rendered_component) { render_component(template:, current_user:) }
|
||||
subject(:rendered_component) { render_component(project:, template:, current_user:) }
|
||||
|
||||
it "renders form" do
|
||||
expect(rendered_component).to have_element :form, method: "get"
|
||||
end
|
||||
|
||||
describe "action" do
|
||||
let(:project) { Project.new(workspace_type:) }
|
||||
|
||||
context "when workspace type is not set" do
|
||||
let(:workspace_type) { nil }
|
||||
|
||||
it "sets action to create project" do
|
||||
expect(rendered_component).to have_element :form, method: "get" do |form|
|
||||
expect(form["action"]).to eq "/projects/new"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when workspace type set to unknown value" do
|
||||
let(:workspace_type) { :unknown }
|
||||
|
||||
it "sets action to create project" do
|
||||
expect(rendered_component).to have_element :form, method: "get" do |form|
|
||||
expect(form["action"]).to eq "/projects/new"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when workspace type is set to project" do
|
||||
let(:workspace_type) { :project }
|
||||
|
||||
it "sets action to create project" do
|
||||
expect(rendered_component).to have_element :form, method: "get" do |form|
|
||||
expect(form["action"]).to eq "/projects/new"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when workspace type is set to program" do
|
||||
let(:workspace_type) { :program }
|
||||
|
||||
it "sets action to create project" do
|
||||
expect(rendered_component).to have_element :form, method: "get" do |form|
|
||||
expect(form["action"]).to eq "/programs/new"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when workspace type is set to portfolio" do
|
||||
let(:workspace_type) { :portfolio }
|
||||
|
||||
it "sets action to create project" do
|
||||
expect(rendered_component).to have_element :form, method: "get" do |form|
|
||||
expect(form["action"]).to eq "/portfolios/new"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "registers Stimulus controller" do
|
||||
expect(rendered_component).to have_element :form do |form|
|
||||
expect(form["data-controller"]).to include "auto-submit"
|
||||
|
||||
Reference in New Issue
Block a user