<% default_org = default_organization_for_form(f.object) %>
diff --git a/spec/models/story_idea_spec.rb b/spec/models/story_idea_spec.rb
index 663e12a8a5..f0b08737ac 100644
--- a/spec/models/story_idea_spec.rb
+++ b/spec/models/story_idea_spec.rb
@@ -3,6 +3,40 @@
RSpec.describe StoryIdea, type: :model do
it_behaves_like "author_creditable", factory: :story_idea
+ describe "validations" do
+ context "workshop selection" do
+ it "is valid with a workshop_id" do
+ story_idea = create(:story_idea, external_workshop_title: nil)
+ expect(story_idea).to be_persisted
+ expect(story_idea.workshop).to be_present
+ end
+
+ it "is valid with external_workshop_title and no workshop" do
+ story_idea = create(:story_idea,
+ workshop: nil,
+ external_workshop_title: "My External Workshop")
+ expect(story_idea).to be_persisted
+ expect(story_idea.external_workshop_title).to eq("My External Workshop")
+ end
+
+ it "is invalid without workshop_id or external_workshop_title" do
+ story_idea = build(:story_idea,
+ workshop: nil,
+ external_workshop_title: nil)
+ expect(story_idea).not_to be_valid
+ expect(story_idea.errors[:base]).to include("Please select a workshop or enter an external workshop title")
+ end
+
+ it "is valid with both workshop_id and external_workshop_title" do
+ story_idea = create(:story_idea,
+ external_workshop_title: "My External Workshop")
+ expect(story_idea).to be_persisted
+ expect(story_idea.workshop).to be_present
+ expect(story_idea.external_workshop_title).to eq("My External Workshop")
+ end
+ end
+ end
+
describe "#workshop_title" do
it "returns workshop title when only workshop is present" do
workshop = create(:workshop, title: "Healing Art")
@@ -22,12 +56,12 @@
end
it "returns nil when both workshop and external_workshop_title are absent" do
- idea = create(:story_idea, workshop: nil, external_workshop_title: nil)
+ idea = build(:story_idea, workshop: nil, external_workshop_title: nil)
expect(idea.workshop_title).to be_nil
end
it "returns nil when external_workshop_title is blank" do
- idea = create(:story_idea, workshop: nil, external_workshop_title: "")
+ idea = build(:story_idea, workshop: nil, external_workshop_title: "")
expect(idea.workshop_title).to be_nil
end
end
@@ -40,29 +74,31 @@
end
it "omits workshop section when no workshop or external title" do
- idea = create(:story_idea, workshop: nil, external_workshop_title: nil)
+ idea = create(:story_idea, workshop: nil, external_workshop_title: "Temp")
+ idea.update_column(:external_workshop_title, nil)
+ idea.reload
expect(idea.full_name).not_to include(":")
expect(idea.full_name).to include(idea.author_credit)
end
end
- describe '.search_by_params' do
- let!(:idea_alpha) { create(:story_idea, title: 'Art Healing Journey') }
- let!(:idea_beta) { create(:story_idea, title: 'Community Impact Report') }
+ describe ".search_by_params" do
+ let!(:idea_alpha) { create(:story_idea, title: "Art Healing Journey") }
+ let!(:idea_beta) { create(:story_idea, title: "Community Impact Report") }
- it 'returns all when no params' do
+ it "returns all when no params" do
results = StoryIdea.search_by_params({})
expect(results).to include(idea_alpha, idea_beta)
end
- it 'filters by query matching title' do
- results = StoryIdea.search_by_params(query: 'Art Healing')
+ it "filters by query matching title" do
+ results = StoryIdea.search_by_params(query: "Art Healing")
expect(results).to include(idea_alpha)
expect(results).not_to include(idea_beta)
end
- it 'returns empty for non-matching query' do
- results = StoryIdea.search_by_params(query: 'nonexistent')
+ it "returns empty for non-matching query" do
+ results = StoryIdea.search_by_params(query: "nonexistent")
expect(results).not_to include(idea_alpha, idea_beta)
end
diff --git a/spec/requests/story_ideas_spec.rb b/spec/requests/story_ideas_spec.rb
index 9106dfaa7c..66eb9a09a7 100644
--- a/spec/requests/story_ideas_spec.rb
+++ b/spec/requests/story_ideas_spec.rb
@@ -139,6 +139,19 @@
}.to change(StoryIdea, :count).by(1)
end
+ it "creates a StoryIdea with external_workshop_title when workshop_id is 'new'" do
+ attrs = valid_attributes.merge(
+ workshop_id: "new",
+ external_workshop_title: "My Custom Workshop"
+ )
+
+ post story_ideas_url, params: { story_idea: attrs }
+
+ story_idea = StoryIdea.last
+ expect(story_idea.workshop_id).to be_nil
+ expect(story_idea.external_workshop_title).to eq("My Custom Workshop")
+ end
+
it "redirects to show after create" do
post story_ideas_url, params: { story_idea: valid_attributes }
expect(response).to redirect_to(story_idea_url(StoryIdea.last))