Files
discourse-hledger/spec/lib/hledger/journal_spec.rb
T
2026-09-27 10:31:47 +02:00

52 lines
1.2 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Hledger::Journal do
def raw_with(journal)
"Intro\n\n```hledger\n#{journal}\n```\n\nOutro\n"
end
it "extracts a single fenced journal" do
result = described_class.extract(raw_with("2024-01-01 x\n a 1\n b -1"))
expect(result).to be_ok
expect(result.source).to include("2024-01-01 x")
end
it "returns :none when there is no journal" do
expect(described_class.extract("just text").error).to eq(:none)
end
it "returns :ambiguous for multiple journals" do
raw = <<~RAW
```hledger
2024-01-01 x
a 1
b -1
```
```hledger
2024-01-02 y
a 1
b -1
```
RAW
expect(described_class.extract(raw).error).to eq(:ambiguous)
end
it "rejects include directives" do
result = described_class.extract(raw_with("include /etc/hostname"))
expect(result.error).to eq(:include_not_allowed)
end
it "rejects oversized journals" do
SiteSetting.hledger_max_journal_bytes = 10
result = described_class.extract(raw_with("2024-01-01 xxxxxxxxxxxxxxxxxxxx"))
expect(result.error).to eq(:too_large)
ensure
SiteSetting.hledger_max_journal_bytes = 262_144
end
end