diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /spec/models/snippet_input_action_spec.rb | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'spec/models/snippet_input_action_spec.rb')
-rw-r--r-- | spec/models/snippet_input_action_spec.rb | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/spec/models/snippet_input_action_spec.rb b/spec/models/snippet_input_action_spec.rb new file mode 100644 index 00000000000..5e379a48171 --- /dev/null +++ b/spec/models/snippet_input_action_spec.rb @@ -0,0 +1,89 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe SnippetInputAction do + describe 'validations' do + using RSpec::Parameterized::TableSyntax + + where(:action, :file_path, :content, :previous_path, :allowed_actions, :is_valid, :invalid_field) do + :create | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + :move | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + :delete | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + :update | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + :foo | 'foobar' | 'foobar' | 'foobar' | nil | false | :action + 'create' | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + 'move' | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + 'delete' | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + 'update' | 'foobar' | 'foobar' | 'foobar' | nil | true | nil + 'foo' | 'foobar' | 'foobar' | 'foobar' | nil | false | :action + nil | 'foobar' | 'foobar' | 'foobar' | nil | false | :action + '' | 'foobar' | 'foobar' | 'foobar' | nil | false | :action + :move | 'foobar' | 'foobar' | nil | nil | false | :previous_path + :move | 'foobar' | 'foobar' | '' | nil | false | :previous_path + :create | 'foobar' | nil | 'foobar' | nil | false | :content + :create | 'foobar' | '' | 'foobar' | nil | false | :content + :create | nil | 'foobar' | 'foobar' | nil | false | :file_path + :create | '' | 'foobar' | 'foobar' | nil | false | :file_path + :update | 'foobar' | nil | 'foobar' | nil | false | :content + :update | 'foobar' | '' | 'foobar' | nil | false | :content + :update | 'other' | 'foobar' | 'foobar' | nil | false | :file_path + :update | 'foobar' | 'foobar' | nil | nil | true | nil + :update | 'foobar' | 'foobar' | '' | nil | true | nil + :update | 'foobar' | 'foobar' | '' | :update | true | nil + :update | 'foobar' | 'foobar' | '' | 'update' | true | nil + :update | 'foobar' | 'foobar' | '' | [:update] | true | nil + :update | 'foobar' | 'foobar' | '' | [:update, :create] | true | nil + :update | 'foobar' | 'foobar' | '' | :create | false | :action + :update | 'foobar' | 'foobar' | '' | 'create' | false | :action + :update | 'foobar' | 'foobar' | '' | [:create] | false | :action + :foo | 'foobar' | 'foobar' | '' | :foo | false | :action + end + + with_them do + subject { described_class.new(action: action, file_path: file_path, content: content, previous_path: previous_path, allowed_actions: allowed_actions) } + + specify do + expect(subject.valid?).to be is_valid + + unless is_valid + expect(subject.errors).to include(invalid_field) + end + end + end + end + + describe '#to_commit_action' do + let(:action) { 'create' } + let(:file_path) { 'foo' } + let(:content) { 'bar' } + let(:previous_path) { 'previous_path' } + let(:options) { { action: action, file_path: file_path, content: content, previous_path: previous_path } } + let(:expected_options) { options.merge(action: action.to_sym) } + + subject { described_class.new(options).to_commit_action } + + it 'transforms attributes to commit action' do + expect(subject).to eq(expected_options) + end + + context 'action is update' do + let(:action) { 'update' } + + context 'when previous_path is present' do + it 'returns the existing previous_path' do + expect(subject).to eq(expected_options) + end + end + + context 'when previous_path is not present' do + let(:previous_path) { nil } + let(:expected_options) { options.merge(action: action.to_sym, previous_path: file_path) } + + it 'assigns the file_path to the previous_path' do + expect(subject).to eq(expected_options) + end + end + end + end +end |