Prohlížeč zdrojového kódu
spec/services/example_entry_spec.rb
require "rails_helper"
RSpec.describe ExampleEntry do
let(:base_path) { Rails.root.join("spec/fixtures/examples/test_example").to_s }
let(:data) do
{
"title" => "Test Example",
"description" => "A test example.",
"tags" => ["test", "demo"],
"source_file" => "test_example.rb",
"entry_class" => "TestExample",
"entry_method" => "greet",
"position" => 1,
"scenarios" => [
{
"name" => "Greeting",
"description" => "Say hello",
"inputs" => [
{ "name" => "name", "label" => "Name", "options" => ["Alice", "Bob"] }
]
}
]
}
end
subject(:entry) { described_class.new(slug: "test_example", data: data, base_path: base_path) }
it "exposes attributes from YAML data" do
expect(entry.slug).to eq("test_example")
expect(entry.title).to eq("Test Example")
expect(entry.description).to eq("A test example.")
expect(entry.tags).to eq(["test", "demo"])
expect(entry.entry_class).to eq("TestExample")
expect(entry.entry_method).to eq("greet")
expect(entry.position).to eq(1)
end
it "builds the full source_file path" do
expect(entry.source_file).to eq(File.join(base_path, "test_example.rb"))
end
it "reads source code from disk" do
expect(entry.source_code).to include("class TestExample")
end
it "builds scenario objects" do
expect(entry.scenarios.length).to eq(1)
scenario = entry.scenarios.first
expect(scenario.name).to eq("Greeting")
expect(scenario.inputs.length).to eq(1)
expect(scenario.inputs.first.name).to eq("name")
expect(scenario.inputs.first.options).to eq(["Alice", "Bob"])
end
it "reports has_scenarios?" do
expect(entry.has_scenarios?).to be true
end
context "with no scenarios" do
before { data["scenarios"] = [] }
it "reports has_scenarios? as false" do
expect(entry.has_scenarios?).to be false
end
end
context "with default position" do
before { data.delete("position") }
it "defaults position to 999" do
expect(entry.position).to eq(999)
end
end
end