diff options
| author | Jan Provaznik <jprovaznik@gitlab.com> | 2018-10-29 16:10:32 +0000 | 
|---|---|---|
| committer | Jan Provaznik <jprovaznik@gitlab.com> | 2018-10-29 16:10:32 +0000 | 
| commit | 5b0b73d922f5081e84697d439b30959161966727 (patch) | |
| tree | 4b1aef1253a3895cea2ee42a86cf377a87ae617d /spec/lib | |
| parent | f0b3edf2ca9f7f1dd64d3b17eda006ab9983cfc4 (diff) | |
| parent | c1c1496405620d99d5943b1c4b5277b4b7d6ad63 (diff) | |
| download | gitlab-ce-5b0b73d922f5081e84697d439b30959161966727.tar.gz | |
Merge branch 'security-redact-links' into 'master'
[master] Redact unsubscribe links in issuable texts
See merge request gitlab/gitlabhq!2528
Diffstat (limited to 'spec/lib')
| -rw-r--r-- | spec/lib/gitlab/background_migration/redact_links_spec.rb | 96 | 
1 files changed, 96 insertions, 0 deletions
| diff --git a/spec/lib/gitlab/background_migration/redact_links_spec.rb b/spec/lib/gitlab/background_migration/redact_links_spec.rb new file mode 100644 index 00000000000..a40e68069cc --- /dev/null +++ b/spec/lib/gitlab/background_migration/redact_links_spec.rb @@ -0,0 +1,96 @@ +require 'spec_helper' + +describe Gitlab::BackgroundMigration::RedactLinks, :migration, schema: 20181014121030 do +  let(:namespaces) { table(:namespaces) } +  let(:projects) { table(:projects) } +  let(:issues) { table(:issues) } +  let(:notes) { table(:notes) } +  let(:snippets) { table(:snippets) } +  let(:users) { table(:users) } +  let(:merge_requests) { table(:merge_requests) } +  let(:namespace) { namespaces.create(name: 'gitlab', path: 'gitlab-org') } +  let(:project) { projects.create(namespace_id: namespace.id, name: 'foo') } +  let(:user) { users.create!(email: 'test@example.com', projects_limit: 100, username: 'test') } + +  def create_merge_request(id, params) +    params.merge!(id: id, +                  target_project_id: project.id, +                  target_branch: 'master', +                  source_project_id: project.id, +                  source_branch: 'mr name', +                  title: "mr name#{id}") + +    merge_requests.create(params) +  end + +  def create_issue(id, params) +    params.merge!(id: id, title: "issue#{id}", project_id: project.id) + +    issues.create(params) +  end + +  def create_note(id, params) +    params[:id] = id + +    notes.create(params) +  end + +  def create_snippet(id, params) +    params.merge!(id: id, author_id: user.id) + +    snippets.create(params) +  end + +  def create_resource(model, id, params) +    send("create_#{model.name.underscore}", id, params) +  end + +  shared_examples_for 'redactable resource' do +    it 'updates only matching texts' do +      matching_text = 'some text /sent_notifications/00000000000000000000000000000000/unsubscribe more text' +      redacted_text = 'some text /sent_notifications/REDACTED/unsubscribe more text' +      create_resource(model, 1, { field => matching_text }) +      create_resource(model, 2, { field => 'not matching text' }) +      create_resource(model, 3, { field => matching_text }) +      create_resource(model, 4, { field => redacted_text }) +      create_resource(model, 5, { field => matching_text }) + +      expected = { field => 'some text /sent_notifications/REDACTED/unsubscribe more text', +                   "#{field}_html" => nil } +      expect_any_instance_of("Gitlab::BackgroundMigration::RedactLinks::#{model}".constantize).to receive(:update_columns).with(expected).and_call_original + +      subject.perform(model, field, 2, 4) + +      expect(model.where(field => matching_text).pluck(:id)).to eq [1, 5] +      expect(model.find(3).reload[field]).to eq redacted_text +    end +  end + +  context 'resource is Issue' do +    it_behaves_like 'redactable resource' do +      let(:model) { Issue } +      let(:field) { :description } +    end +  end + +  context 'resource is Merge Request' do +    it_behaves_like 'redactable resource' do +      let(:model) { MergeRequest } +      let(:field) { :description } +    end +  end + +  context 'resource is Note' do +    it_behaves_like 'redactable resource' do +      let(:model) { Note } +      let(:field) { :note } +    end +  end + +  context 'resource is Snippet' do +    it_behaves_like 'redactable resource' do +      let(:model) { Snippet } +      let(:field) { :description } +    end +  end +end | 
