debian-mirror-gitlab/spec/lib/gitlab/github_import/representation/diff_notes/suggestion_formatter_spec.rb
2021-12-11 22:18:48 +05:30

194 lines
4.1 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::GithubImport::Representation::DiffNotes::SuggestionFormatter do
it 'does nothing when there is any text before the suggestion tag' do
note = <<~BODY
looks like```suggestion but it isn't
```
BODY
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(note)
expect(note_formatter.contains_suggestion?).to eq(false)
end
it 'handles nil value for note' do
note = nil
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(note)
expect(note_formatter.contains_suggestion?).to eq(false)
end
it 'does not allow over 3 leading spaces for valid suggestion' do
note = <<~BODY
Single-line suggestion
```suggestion
sug1
```
BODY
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(note)
expect(note_formatter.contains_suggestion?).to eq(false)
end
it 'allows up to 3 leading spaces' do
note = <<~BODY
Single-line suggestion
```suggestion
sug1
```
BODY
expected = <<~BODY
Single-line suggestion
```suggestion:-0+0
sug1
```
BODY
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(expected)
expect(note_formatter.contains_suggestion?).to eq(true)
end
it 'does nothing when there is any text without space after the suggestion tag' do
note = <<~BODY
```suggestionbut it isn't
```
BODY
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(note)
expect(note_formatter.contains_suggestion?).to eq(false)
end
it 'formats single-line suggestions' do
note = <<~BODY
Single-line suggestion
```suggestion
sug1
```
BODY
expected = <<~BODY
Single-line suggestion
```suggestion:-0+0
sug1
```
BODY
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(expected)
expect(note_formatter.contains_suggestion?).to eq(true)
end
it 'ignores text after suggestion tag on the same line' do
note = <<~BODY
looks like
```suggestion text to be ignored
suggestion
```
BODY
expected = <<~BODY
looks like
```suggestion:-0+0
suggestion
```
BODY
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(expected)
expect(note_formatter.contains_suggestion?).to eq(true)
end
it 'formats multiple single-line suggestions' do
note = <<~BODY
Single-line suggestion
```suggestion
sug1
```
OR
```suggestion
sug2
```
BODY
expected = <<~BODY
Single-line suggestion
```suggestion:-0+0
sug1
```
OR
```suggestion:-0+0
sug2
```
BODY
note_formatter = described_class.new(note: note)
expect(note_formatter.formatted_note).to eq(expected)
expect(note_formatter.contains_suggestion?).to eq(true)
end
it 'formats multi-line suggestions' do
note = <<~BODY
Multi-line suggestion
```suggestion
sug1
```
BODY
expected = <<~BODY
Multi-line suggestion
```suggestion:-2+0
sug1
```
BODY
note_formatter = described_class.new(note: note, start_line: 6, end_line: 8)
expect(note_formatter.formatted_note).to eq(expected)
expect(note_formatter.contains_suggestion?).to eq(true)
end
it 'formats multiple multi-line suggestions' do
note = <<~BODY
Multi-line suggestion
```suggestion
sug1
```
OR
```suggestion
sug2
```
BODY
expected = <<~BODY
Multi-line suggestion
```suggestion:-2+0
sug1
```
OR
```suggestion:-2+0
sug2
```
BODY
note_formatter = described_class.new(note: note, start_line: 6, end_line: 8)
expect(note_formatter.formatted_note).to eq(expected)
expect(note_formatter.contains_suggestion?).to eq(true)
end
end