52 lines
1.2 KiB
Ruby
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
|