From 259108ada340a0f1d49e2d80d1c433a377983e1c Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Thu, 13 Apr 2017 09:20:42 +0200 Subject: Fix registry for projects with uppercases in path --- spec/lib/container_registry/path_spec.rb | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/container_registry/path_spec.rb b/spec/lib/container_registry/path_spec.rb index b9c4572c269..f3b3a9a715f 100644 --- a/spec/lib/container_registry/path_spec.rb +++ b/spec/lib/container_registry/path_spec.rb @@ -33,10 +33,20 @@ describe ContainerRegistry::Path do end describe '#to_s' do - let(:path) { 'some/image' } + context 'when path does not have uppercase characters' do + let(:path) { 'some/image' } - it 'return a string with a repository path' do - expect(subject.to_s).to eq path + it 'return a string with a repository path' do + expect(subject.to_s).to eq 'some/image' + end + end + + context 'when path has uppercase characters' do + let(:path) { 'SoMe/ImAgE' } + + it 'return a string with a repository path' do + expect(subject.to_s).to eq 'some/image' + end end end @@ -70,6 +80,12 @@ describe ContainerRegistry::Path do it { is_expected.to be_valid } end + + context 'when path contains uppercase letters' do + let(:path) { 'Some/Registry' } + + it { is_expected.to be_valid } + end end describe '#has_repository?' do -- cgit v1.2.1 From faa5dffbcc0a2649ee8f427905d45d7061975bcb Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Thu, 13 Apr 2017 02:11:35 +0800 Subject: After Trace#limit, we seek to the next line in case of breaking ANSI sequence or Unicode --- spec/lib/gitlab/ci/trace/stream_spec.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 2e57ccef182..61ac76401ea 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -21,7 +21,7 @@ describe Gitlab::Ci::Trace::Stream do end end - it 'if size is larger we start from beggining' do + it 'if size is larger we start from beginning' do stream.limit(10) expect(stream.tell).to eq(0) @@ -32,6 +32,26 @@ describe Gitlab::Ci::Trace::Stream do expect(stream.tell).to eq(6) end + + context 'when the trace contains ANSI sequence and Unicode' do + let(:stream) do + described_class.new do + File.open(expand_fixture_path('trace/ansi-sequence-and-unicode')) + end + end + + it 'forwards to the next linefeed, case 1' do + stream.limit(7) + + expect(stream.raw).to eq('') + end + + it 'forwards to the next linefeed, case 2' do + stream.limit(29) + + expect(stream.raw).to eq("\e[01;32m許功蓋\e[0m\n") + end + end end describe '#append' do -- cgit v1.2.1 From 0a3c98a7e3b76f51902612ae302e821f54eadd74 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Thu, 13 Apr 2017 22:23:12 +0800 Subject: Update tests for the fact that we would skip one line --- spec/lib/gitlab/ci/trace/stream_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 61ac76401ea..9e3bd6d662f 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -17,12 +17,12 @@ describe Gitlab::Ci::Trace::Stream do describe '#limit' do let(:stream) do described_class.new do - StringIO.new("12345678") + StringIO.new((1..8).to_a.join("\n")) end end it 'if size is larger we start from beginning' do - stream.limit(10) + stream.limit(20) expect(stream.tell).to eq(0) end @@ -30,7 +30,7 @@ describe Gitlab::Ci::Trace::Stream do it 'if size is smaller we start from the end' do stream.limit(2) - expect(stream.tell).to eq(6) + expect(stream.raw).to eq("8") end context 'when the trace contains ANSI sequence and Unicode' do -- cgit v1.2.1 From 551d0a3c03ebb74b0893252683361c280e86849e Mon Sep 17 00:00:00 2001 From: Adam Niedzielski Date: Thu, 13 Apr 2017 17:09:30 +0200 Subject: Fix appending state to issuable references Closes #30874. Ignore nodes with no children. Append directly to the node instead of the last child of the node to avoid inheriting formatting from the last child --- .../banzai/filter/issuable_state_filter_spec.rb | 43 ++++++++++++++++------ 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/banzai/filter/issuable_state_filter_spec.rb b/spec/lib/banzai/filter/issuable_state_filter_spec.rb index 603b79a323c..5cb98163746 100644 --- a/spec/lib/banzai/filter/issuable_state_filter_spec.rb +++ b/spec/lib/banzai/filter/issuable_state_filter_spec.rb @@ -6,8 +6,8 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do let(:user) { create(:user) } - def create_link(data) - link_to('text', '', class: 'gfm has-tooltip', data: data) + def create_link(text, data) + link_to(text, '', class: 'gfm has-tooltip', data: data) end it 'ignores non-GFM links' do @@ -19,16 +19,37 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores non-issuable links' do project = create(:empty_project, :public) - link = create_link(project: project, reference_type: 'issue') + link = create_link('text', project: project, reference_type: 'issue') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text') end + it 'ignores issuable links with empty content' do + issue = create(:issue, :closed) + link = create_link('', issue: issue.id, reference_type: 'issue') + doc = filter(link, current_user: user) + + expect(doc.css('a').last.text).to eq('') + end + + it 'adds text with standard formatting' do + issue = create(:issue, :closed) + link = create_link( + 'something else'.html_safe, + issue: issue.id, + reference_type: 'issue' + ) + doc = filter(link, current_user: user) + + expect(doc.css('a').last.inner_html). + to eq('something else [closed]') + end + context 'for issue references' do it 'ignores open issue references' do issue = create(:issue) - link = create_link(issue: issue.id, reference_type: 'issue') + link = create_link('text', issue: issue.id, reference_type: 'issue') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text') @@ -36,7 +57,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores reopened issue references' do reopened_issue = create(:issue, :reopened) - link = create_link(issue: reopened_issue.id, reference_type: 'issue') + link = create_link('text', issue: reopened_issue.id, reference_type: 'issue') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text') @@ -44,7 +65,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'appends [closed] to closed issue references' do closed_issue = create(:issue, :closed) - link = create_link(issue: closed_issue.id, reference_type: 'issue') + link = create_link('text', issue: closed_issue.id, reference_type: 'issue') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text [closed]') @@ -54,7 +75,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do context 'for merge request references' do it 'ignores open merge request references' do mr = create(:merge_request) - link = create_link(merge_request: mr.id, reference_type: 'merge_request') + link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text') @@ -62,7 +83,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores reopened merge request references' do mr = create(:merge_request, :reopened) - link = create_link(merge_request: mr.id, reference_type: 'merge_request') + link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text') @@ -70,7 +91,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores locked merge request references' do mr = create(:merge_request, :locked) - link = create_link(merge_request: mr.id, reference_type: 'merge_request') + link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text') @@ -78,7 +99,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'appends [closed] to closed merge request references' do mr = create(:merge_request, :closed) - link = create_link(merge_request: mr.id, reference_type: 'merge_request') + link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text [closed]') @@ -86,7 +107,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'appends [merged] to merged merge request references' do mr = create(:merge_request, :merged) - link = create_link(merge_request: mr.id, reference_type: 'merge_request') + link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') doc = filter(link, current_user: user) expect(doc.css('a').last.text).to eq('text [merged]') -- cgit v1.2.1 From 0483019e9800dc1b4ef4493890f815f047b7c04e Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 5 Apr 2017 13:29:48 +0100 Subject: Port 'Add more usage data to EE ping' to CE CE port of https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/735 --- spec/lib/gitlab/usage_data_spec.rb | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 spec/lib/gitlab/usage_data_spec.rb (limited to 'spec/lib') diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb new file mode 100644 index 00000000000..8d2f086f0f5 --- /dev/null +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -0,0 +1,65 @@ +require 'spec_helper' + +describe Gitlab::UsageData do + let!(:project) { create(:empty_project) } + let!(:project2) { create(:empty_project) } + let!(:board) { create(:board, project: project) } + + describe '#data' do + subject { Gitlab::UsageData.data } + + it "gathers usage data" do + expect(subject.keys).to match_array(%i( + active_user_count + counts + version + recorded_at + )) + end + + it "gathers usage counts" do + count_data = subject[:counts] + + expect(count_data[:boards]).to eq(1) + expect(count_data[:projects]).to eq(2) + + expect(count_data.keys).to match_array(%i( + boards + ci_builds + ci_pipelines + ci_runners + ci_triggers + deploy_keys + deployments + environments + groups + issues + keys + labels + lfs_objects + merge_requests + milestones + notes + projects + pushes + pages_domains + protected_branches + releases + services + snippets + todos + web_hooks + )) + end + end + + describe '#license_usage_data' do + subject { Gitlab::UsageData.license_usage_data } + + it "gathers license data" do + expect(subject[:version]).to eq(Gitlab::VERSION) + expect(subject[:active_user_count]).to eq(User.active.count) + expect(subject[:recorded_at]).to be_a(Time) + end + end +end -- cgit v1.2.1 From f41b693fc713ae1c212b2118b0fc2d67c519f4c6 Mon Sep 17 00:00:00 2001 From: Ruben Davila Date: Wed, 15 Mar 2017 16:24:45 -0500 Subject: Remove pushes count from usage ping payload This query is constantly generating timeout errors on large installations and we don't have a simple solution for now and also we don't think having this counter is really critical. --- spec/lib/gitlab/usage_data_spec.rb | 1 - 1 file changed, 1 deletion(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 8d2f086f0f5..badb8e3c7ae 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -41,7 +41,6 @@ describe Gitlab::UsageData do milestones notes projects - pushes pages_domains protected_branches releases -- cgit v1.2.1 From f5b42881c88678cd85ea7743fdffa400105b4b8d Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Wed, 18 Jan 2017 19:33:33 +0100 Subject: Track Mattermost usage --- spec/lib/gitlab/usage_data_spec.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index badb8e3c7ae..2cb5d49c4c1 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -14,6 +14,7 @@ describe Gitlab::UsageData do counts version recorded_at + mattermost_enabled )) end -- cgit v1.2.1 From c53afeda0c2ee0cda89c235c9e8799baa1cfdc1a Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 5 Apr 2017 13:49:22 +0100 Subject: Port 'Add uuid to usage ping' to CE CE port of https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/1521 --- spec/lib/gitlab/usage_data_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 2cb5d49c4c1..920135f79b4 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -12,9 +12,10 @@ describe Gitlab::UsageData do expect(subject.keys).to match_array(%i( active_user_count counts - version recorded_at mattermost_enabled + version + uuid )) end @@ -57,6 +58,7 @@ describe Gitlab::UsageData do subject { Gitlab::UsageData.license_usage_data } it "gathers license data" do + expect(subject[:uuid]).to eq(current_application_settings.uuid) expect(subject[:version]).to eq(Gitlab::VERSION) expect(subject[:active_user_count]).to eq(User.active.count) expect(subject[:recorded_at]).to be_a(Time) -- cgit v1.2.1 From e21ed5fe776a6b571eaeecd243d020f53584abdc Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 9 Mar 2017 11:00:25 -0500 Subject: Add Upload count to usage data --- spec/lib/gitlab/usage_data_spec.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 920135f79b4..bfaf6154e36 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -49,6 +49,7 @@ describe Gitlab::UsageData do services snippets todos + uploads web_hooks )) end -- cgit v1.2.1 From 092258e92490f177c6262287d1eca4e33e908614 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Thu, 6 Apr 2017 20:16:57 +0100 Subject: Add edition to usage ping --- spec/lib/gitlab/usage_data_spec.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index bfaf6154e36..7ae26081022 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -14,6 +14,7 @@ describe Gitlab::UsageData do counts recorded_at mattermost_enabled + edition version uuid )) -- cgit v1.2.1 From b61199ce0ccdfcd11a338778ce300cd15e5f2a43 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Thu, 6 Apr 2017 20:52:08 +0100 Subject: Add prometheus services to usage ping --- spec/lib/gitlab/usage_data_spec.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 7ae26081022..7f21288cf88 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -44,6 +44,7 @@ describe Gitlab::UsageData do milestones notes projects + projects_prometheus_active pages_domains protected_branches releases -- cgit v1.2.1 From 91ac0e038ab51dd2f30f2bb7c91837fa588ca250 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 12 Apr 2017 12:19:45 +0100 Subject: Port 'Add user activities API' to CE CE port of https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/962 --- spec/lib/gitlab/pagination_delegate_spec.rb | 155 +++++++++++++++++++++ .../gitlab/user_activities/activity_set_spec.rb | 77 ++++++++++ spec/lib/gitlab/user_activities/activity_spec.rb | 14 ++ 3 files changed, 246 insertions(+) create mode 100644 spec/lib/gitlab/pagination_delegate_spec.rb create mode 100644 spec/lib/gitlab/user_activities/activity_set_spec.rb create mode 100644 spec/lib/gitlab/user_activities/activity_spec.rb (limited to 'spec/lib') diff --git a/spec/lib/gitlab/pagination_delegate_spec.rb b/spec/lib/gitlab/pagination_delegate_spec.rb new file mode 100644 index 00000000000..3220d611274 --- /dev/null +++ b/spec/lib/gitlab/pagination_delegate_spec.rb @@ -0,0 +1,155 @@ +require 'spec_helper' + +describe Gitlab::PaginationDelegate, lib: true do + context 'no data' do + let(:delegate) do + described_class.new(page: 1, + per_page: 10, + count: 0) + end + + it 'shows the correct total count' do + expect(delegate.total_count).to eq(0) + end + + it 'shows the correct total pages' do + expect(delegate.total_pages).to eq(0) + end + + it 'shows the correct next page' do + expect(delegate.next_page).to be_nil + end + + it 'shows the correct previous page' do + expect(delegate.prev_page).to be_nil + end + + it 'shows the correct current page' do + expect(delegate.current_page).to eq(1) + end + + it 'shows the correct limit value' do + expect(delegate.limit_value).to eq(10) + end + + it 'shows the correct first page' do + expect(delegate.first_page?).to be true + end + + it 'shows the correct last page' do + expect(delegate.last_page?).to be true + end + + it 'shows the correct offset' do + expect(delegate.offset).to eq(0) + end + end + + context 'with data' do + let(:delegate) do + described_class.new(page: 5, + per_page: 100, + count: 1000) + end + + it 'shows the correct total count' do + expect(delegate.total_count).to eq(1000) + end + + it 'shows the correct total pages' do + expect(delegate.total_pages).to eq(10) + end + + it 'shows the correct next page' do + expect(delegate.next_page).to eq(6) + end + + it 'shows the correct previous page' do + expect(delegate.prev_page).to eq(4) + end + + it 'shows the correct current page' do + expect(delegate.current_page).to eq(5) + end + + it 'shows the correct limit value' do + expect(delegate.limit_value).to eq(100) + end + + it 'shows the correct first page' do + expect(delegate.first_page?).to be false + end + + it 'shows the correct last page' do + expect(delegate.last_page?).to be false + end + + it 'shows the correct offset' do + expect(delegate.offset).to eq(400) + end + end + + context 'last page' do + let(:delegate) do + described_class.new(page: 10, + per_page: 100, + count: 1000) + end + + it 'shows the correct total count' do + expect(delegate.total_count).to eq(1000) + end + + it 'shows the correct total pages' do + expect(delegate.total_pages).to eq(10) + end + + it 'shows the correct next page' do + expect(delegate.next_page).to be_nil + end + + it 'shows the correct previous page' do + expect(delegate.prev_page).to eq(9) + end + + it 'shows the correct current page' do + expect(delegate.current_page).to eq(10) + end + + it 'shows the correct limit value' do + expect(delegate.limit_value).to eq(100) + end + + it 'shows the correct first page' do + expect(delegate.first_page?).to be false + end + + it 'shows the correct last page' do + expect(delegate.last_page?).to be true + end + + it 'shows the correct offset' do + expect(delegate.offset).to eq(900) + end + end + + context 'limits and defaults' do + it 'has a maximum limit per page' do + expect(described_class.new(page: nil, + per_page: 1000, + count: 0).limit_value).to eq(described_class::MAX_PER_PAGE) + end + + it 'has a default per page' do + expect(described_class.new(page: nil, + per_page: nil, + count: 0).limit_value).to eq(described_class::DEFAULT_PER_PAGE) + end + + it 'has a maximum page' do + expect(described_class.new(page: 100, + per_page: 10, + count: 1).current_page).to eq(1) + end + end +end diff --git a/spec/lib/gitlab/user_activities/activity_set_spec.rb b/spec/lib/gitlab/user_activities/activity_set_spec.rb new file mode 100644 index 00000000000..56745bdf0d1 --- /dev/null +++ b/spec/lib/gitlab/user_activities/activity_set_spec.rb @@ -0,0 +1,77 @@ +require 'spec_helper' + +describe Gitlab::UserActivities::ActivitySet, :redis, lib: true do + let(:user) { create(:user) } + + it 'shows the last user activity' do + Timecop.freeze do + user.record_activity + + expect(described_class.new.activities.first).to be_an_instance_of(Gitlab::UserActivities::Activity) + end + end + + context 'pagination delegation' do + let(:pagination_delegate) do + Gitlab::PaginationDelegate.new(page: 1, + per_page: 10, + count: 20) + end + + let(:delegated_methods) { %i[total_count total_pages current_page limit_value first_page? prev_page last_page? next_page] } + + before do + allow(described_class.new).to receive(:pagination_delegate).and_return(pagination_delegate) + end + + it 'includes the delegated methods' do + expect(described_class.new.public_methods).to include(*delegated_methods) + end + end + + context 'paginated activities' do + before do + Timecop.scale(3600) + + 7.times do + create(:user).record_activity + end + end + + after do + Timecop.return + end + + it 'shows the 5 oldest user activities paginated' do + expect(described_class.new(per_page: 5).activities.count).to eq(5) + end + + it 'shows the 2 reamining user activities paginated' do + expect(described_class.new(per_page: 5, page: 2).activities.count).to eq(2) + end + + it 'shows the oldest first' do + activities = described_class.new.activities + + expect(activities.first.last_activity_at).to be < activities.last.last_activity_at + end + end + + context 'filter by date' do + before do + create(:user).record_activity + end + + it 'shows activities from today' do + today = Date.today.to_s("%Y-%m-%d") + + expect(described_class.new(from: today).activities.count).to eq(1) + end + + it 'filter activities from tomorrow' do + tomorrow = Date.tomorrow.to_s("%Y-%m-%d") + + expect(described_class.new(from: tomorrow).activities.count).to eq(0) + end + end +end diff --git a/spec/lib/gitlab/user_activities/activity_spec.rb b/spec/lib/gitlab/user_activities/activity_spec.rb new file mode 100644 index 00000000000..6a1150f50c1 --- /dev/null +++ b/spec/lib/gitlab/user_activities/activity_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe Gitlab::UserActivities::Activity, :redis, lib: true do + let(:username) { 'user' } + let(:activity) { described_class.new('user', Time.new(2016, 12, 12).to_i) } + + it 'has the username' do + expect(activity.username).to eq(username) + end + + it 'has the last activity at' do + expect(activity.last_activity_at).to eq('2016-12-12 00:00:00') + end +end -- cgit v1.2.1 From cfe19b795e076b73df75ee57839640667283651c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Tue, 7 Mar 2017 19:34:43 +0100 Subject: Add a new Gitlab::UserActivities class to track user activities MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This new class uses a Redis Hash instead of a Sorted Set. Signed-off-by: Rémy Coutable --- .../gitlab/user_activities/activity_set_spec.rb | 77 ------------- spec/lib/gitlab/user_activities/activity_spec.rb | 14 --- spec/lib/gitlab/user_activities_spec.rb | 127 +++++++++++++++++++++ 3 files changed, 127 insertions(+), 91 deletions(-) delete mode 100644 spec/lib/gitlab/user_activities/activity_set_spec.rb delete mode 100644 spec/lib/gitlab/user_activities/activity_spec.rb create mode 100644 spec/lib/gitlab/user_activities_spec.rb (limited to 'spec/lib') diff --git a/spec/lib/gitlab/user_activities/activity_set_spec.rb b/spec/lib/gitlab/user_activities/activity_set_spec.rb deleted file mode 100644 index 56745bdf0d1..00000000000 --- a/spec/lib/gitlab/user_activities/activity_set_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -require 'spec_helper' - -describe Gitlab::UserActivities::ActivitySet, :redis, lib: true do - let(:user) { create(:user) } - - it 'shows the last user activity' do - Timecop.freeze do - user.record_activity - - expect(described_class.new.activities.first).to be_an_instance_of(Gitlab::UserActivities::Activity) - end - end - - context 'pagination delegation' do - let(:pagination_delegate) do - Gitlab::PaginationDelegate.new(page: 1, - per_page: 10, - count: 20) - end - - let(:delegated_methods) { %i[total_count total_pages current_page limit_value first_page? prev_page last_page? next_page] } - - before do - allow(described_class.new).to receive(:pagination_delegate).and_return(pagination_delegate) - end - - it 'includes the delegated methods' do - expect(described_class.new.public_methods).to include(*delegated_methods) - end - end - - context 'paginated activities' do - before do - Timecop.scale(3600) - - 7.times do - create(:user).record_activity - end - end - - after do - Timecop.return - end - - it 'shows the 5 oldest user activities paginated' do - expect(described_class.new(per_page: 5).activities.count).to eq(5) - end - - it 'shows the 2 reamining user activities paginated' do - expect(described_class.new(per_page: 5, page: 2).activities.count).to eq(2) - end - - it 'shows the oldest first' do - activities = described_class.new.activities - - expect(activities.first.last_activity_at).to be < activities.last.last_activity_at - end - end - - context 'filter by date' do - before do - create(:user).record_activity - end - - it 'shows activities from today' do - today = Date.today.to_s("%Y-%m-%d") - - expect(described_class.new(from: today).activities.count).to eq(1) - end - - it 'filter activities from tomorrow' do - tomorrow = Date.tomorrow.to_s("%Y-%m-%d") - - expect(described_class.new(from: tomorrow).activities.count).to eq(0) - end - end -end diff --git a/spec/lib/gitlab/user_activities/activity_spec.rb b/spec/lib/gitlab/user_activities/activity_spec.rb deleted file mode 100644 index 6a1150f50c1..00000000000 --- a/spec/lib/gitlab/user_activities/activity_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'spec_helper' - -describe Gitlab::UserActivities::Activity, :redis, lib: true do - let(:username) { 'user' } - let(:activity) { described_class.new('user', Time.new(2016, 12, 12).to_i) } - - it 'has the username' do - expect(activity.username).to eq(username) - end - - it 'has the last activity at' do - expect(activity.last_activity_at).to eq('2016-12-12 00:00:00') - end -end diff --git a/spec/lib/gitlab/user_activities_spec.rb b/spec/lib/gitlab/user_activities_spec.rb new file mode 100644 index 00000000000..187d88c8c58 --- /dev/null +++ b/spec/lib/gitlab/user_activities_spec.rb @@ -0,0 +1,127 @@ +require 'spec_helper' + +describe Gitlab::UserActivities, :redis, lib: true do + let(:now) { Time.now } + + describe '.record' do + context 'with no time given' do + it 'uses Time.now and records an activity in Redis' do + Timecop.freeze do + now # eager-load now + described_class.record(42) + end + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', [['42', now.to_i.to_s]]]) + end + end + end + + context 'with a time given' do + it 'uses the given time and records an activity in Redis' do + described_class.record(42, now) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', [['42', now.to_i.to_s]]]) + end + end + end + end + + describe '.delete' do + context 'with a single key' do + context 'and key exists' do + it 'removes the pair from Redis' do + described_class.record(42, now) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', [['42', now.to_i.to_s]]]) + end + + subject.delete(42) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', []]) + end + end + end + + context 'and key does not exist' do + it 'removes the pair from Redis' do + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', []]) + end + + subject.delete(42) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', []]) + end + end + end + end + + context 'with multiple keys' do + context 'and all keys exist' do + it 'removes the pair from Redis' do + described_class.record(41, now) + described_class.record(42, now) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', [['41', now.to_i.to_s], ['42', now.to_i.to_s]]]) + end + + subject.delete(41, 42) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', []]) + end + end + end + + context 'and some keys does not exist' do + it 'removes the existing pair from Redis' do + described_class.record(42, now) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', [['42', now.to_i.to_s]]]) + end + + subject.delete(41, 42) + + Gitlab::Redis.with do |redis| + expect(redis.hscan(described_class::KEY, 0)).to eq(['0', []]) + end + end + end + end + end + + describe 'Enumerable' do + before do + described_class.record(40, now) + described_class.record(41, now) + described_class.record(42, now) + end + + it 'allows to read the activities sequentially' do + expected = { '40' => now.to_i.to_s, '41' => now.to_i.to_s, '42' => now.to_i.to_s } + + actual = described_class.new.each_with_object({}) do |(key, time), actual| + actual[key] = time + end + + expect(actual).to eq(expected) + end + + context 'with many records' do + before do + 1_000.times { |i| described_class.record(i, now) } + end + + it 'is possible to loop through all the records' do + expect(described_class.new.count).to eq(1_000) + end + end + end +end -- cgit v1.2.1 From 380e40fee30d836e6dffb1e956df39033d43a671 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 12 Apr 2017 16:13:24 +0100 Subject: Remove unused user activities code --- spec/lib/gitlab/pagination_delegate_spec.rb | 155 ---------------------------- 1 file changed, 155 deletions(-) delete mode 100644 spec/lib/gitlab/pagination_delegate_spec.rb (limited to 'spec/lib') diff --git a/spec/lib/gitlab/pagination_delegate_spec.rb b/spec/lib/gitlab/pagination_delegate_spec.rb deleted file mode 100644 index 3220d611274..00000000000 --- a/spec/lib/gitlab/pagination_delegate_spec.rb +++ /dev/null @@ -1,155 +0,0 @@ -require 'spec_helper' - -describe Gitlab::PaginationDelegate, lib: true do - context 'no data' do - let(:delegate) do - described_class.new(page: 1, - per_page: 10, - count: 0) - end - - it 'shows the correct total count' do - expect(delegate.total_count).to eq(0) - end - - it 'shows the correct total pages' do - expect(delegate.total_pages).to eq(0) - end - - it 'shows the correct next page' do - expect(delegate.next_page).to be_nil - end - - it 'shows the correct previous page' do - expect(delegate.prev_page).to be_nil - end - - it 'shows the correct current page' do - expect(delegate.current_page).to eq(1) - end - - it 'shows the correct limit value' do - expect(delegate.limit_value).to eq(10) - end - - it 'shows the correct first page' do - expect(delegate.first_page?).to be true - end - - it 'shows the correct last page' do - expect(delegate.last_page?).to be true - end - - it 'shows the correct offset' do - expect(delegate.offset).to eq(0) - end - end - - context 'with data' do - let(:delegate) do - described_class.new(page: 5, - per_page: 100, - count: 1000) - end - - it 'shows the correct total count' do - expect(delegate.total_count).to eq(1000) - end - - it 'shows the correct total pages' do - expect(delegate.total_pages).to eq(10) - end - - it 'shows the correct next page' do - expect(delegate.next_page).to eq(6) - end - - it 'shows the correct previous page' do - expect(delegate.prev_page).to eq(4) - end - - it 'shows the correct current page' do - expect(delegate.current_page).to eq(5) - end - - it 'shows the correct limit value' do - expect(delegate.limit_value).to eq(100) - end - - it 'shows the correct first page' do - expect(delegate.first_page?).to be false - end - - it 'shows the correct last page' do - expect(delegate.last_page?).to be false - end - - it 'shows the correct offset' do - expect(delegate.offset).to eq(400) - end - end - - context 'last page' do - let(:delegate) do - described_class.new(page: 10, - per_page: 100, - count: 1000) - end - - it 'shows the correct total count' do - expect(delegate.total_count).to eq(1000) - end - - it 'shows the correct total pages' do - expect(delegate.total_pages).to eq(10) - end - - it 'shows the correct next page' do - expect(delegate.next_page).to be_nil - end - - it 'shows the correct previous page' do - expect(delegate.prev_page).to eq(9) - end - - it 'shows the correct current page' do - expect(delegate.current_page).to eq(10) - end - - it 'shows the correct limit value' do - expect(delegate.limit_value).to eq(100) - end - - it 'shows the correct first page' do - expect(delegate.first_page?).to be false - end - - it 'shows the correct last page' do - expect(delegate.last_page?).to be true - end - - it 'shows the correct offset' do - expect(delegate.offset).to eq(900) - end - end - - context 'limits and defaults' do - it 'has a maximum limit per page' do - expect(described_class.new(page: nil, - per_page: 1000, - count: 0).limit_value).to eq(described_class::MAX_PER_PAGE) - end - - it 'has a default per page' do - expect(described_class.new(page: nil, - per_page: nil, - count: 0).limit_value).to eq(described_class::DEFAULT_PER_PAGE) - end - - it 'has a maximum page' do - expect(described_class.new(page: 100, - per_page: 10, - count: 1).current_page).to eq(1) - end - end -end -- cgit v1.2.1 From e89d4741d38bdbb645d5bf92cfdac5d66e8438b0 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Sat, 15 Apr 2017 06:04:15 -0700 Subject: Fix regression in rendering Markdown references that do not exist Closes #30972 --- .../banzai/reference_parser/base_parser_spec.rb | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/banzai/reference_parser/base_parser_spec.rb b/spec/lib/banzai/reference_parser/base_parser_spec.rb index a3141894c74..d5746107ee1 100644 --- a/spec/lib/banzai/reference_parser/base_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/base_parser_spec.rb @@ -114,8 +114,27 @@ describe Banzai::ReferenceParser::BaseParser, lib: true do expect(hash).to eq({ link => user }) end - it 'returns an empty Hash when the list of nodes is empty' do - expect(subject.grouped_objects_for_nodes([], User, 'data-user')).to eq({}) + it 'returns an empty Hash when entry does not exist in the database' do + link = double(:link) + + expect(link).to receive(:has_attribute?). + with('data-user'). + and_return(true) + + expect(link).to receive(:attr). + with('data-user'). + and_return('1') + + nodes = [link] + bad_id = user.id + 100 + + expect(subject).to receive(:unique_attribute_values). + with(nodes, 'data-user'). + and_return([bad_id.to_s]) + + hash = subject.grouped_objects_for_nodes(nodes, User, 'data-user') + + expect(hash).to eq({}) end end -- cgit v1.2.1 From ee3b0c3a9ad0823f86b5c798c47c343a812228d0 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Mon, 17 Apr 2017 14:30:42 +0800 Subject: Make sure we're giving Encoding.default_external --- spec/lib/gitlab/ci/trace/stream_spec.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 9e3bd6d662f..4bbca6d2ea2 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe Gitlab::Ci::Trace::Stream do describe 'delegates' do - subject { described_class.new { nil } } + subject { described_class.new { StringIO.new } } it { is_expected.to delegate_method(:close).to(:stream) } it { is_expected.to delegate_method(:tell).to(:stream) } @@ -43,13 +43,19 @@ describe Gitlab::Ci::Trace::Stream do it 'forwards to the next linefeed, case 1' do stream.limit(7) - expect(stream.raw).to eq('') + result = stream.raw + + expect(result).to eq('') + expect(result.encoding).to eq(Encoding.default_external) end it 'forwards to the next linefeed, case 2' do stream.limit(29) - expect(stream.raw).to eq("\e[01;32m許功蓋\e[0m\n") + result = stream.raw + + expect(result).to eq("\e[01;32m許功蓋\e[0m\n") + expect(result.encoding).to eq(Encoding.default_external) end end end -- cgit v1.2.1 From c26b126502d4025230aa80e7d26736e1398c5022 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Mon, 17 Apr 2017 15:53:09 +0800 Subject: Make sure @stream.each_line would tag Encoding.default_external --- spec/lib/gitlab/ci/trace/stream_spec.rb | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 4bbca6d2ea2..6f5c9994f54 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -34,12 +34,12 @@ describe Gitlab::Ci::Trace::Stream do end context 'when the trace contains ANSI sequence and Unicode' do - let(:stream) do - described_class.new do - File.open(expand_fixture_path('trace/ansi-sequence-and-unicode')) - end + let(:io) do + File.open(expand_fixture_path('trace/ansi-sequence-and-unicode')) end + let(:stream) { described_class.new { io } } + it 'forwards to the next linefeed, case 1' do stream.limit(7) @@ -57,6 +57,16 @@ describe Gitlab::Ci::Trace::Stream do expect(result).to eq("\e[01;32m許功蓋\e[0m\n") expect(result.encoding).to eq(Encoding.default_external) end + + # See https://gitlab.com/gitlab-org/gitlab-ce/issues/30796 + it 'reads in binary, output as Encoding.default_external' do + stream.limit(29) + + result = io.read # Ci::Ansi2html::Converter would read with each_line + + expect(result).to eq("\e[01;32m許功蓋\e[0m\n") + expect(result.encoding).to eq(Encoding.default_external) + end end end -- cgit v1.2.1 From e7d3fe44f64d1efbbc0b9611cb3382feff4a2f00 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Mon, 17 Apr 2017 17:10:41 +0800 Subject: Only set the encoding before passing to Ansi2html --- spec/lib/gitlab/ci/trace/stream_spec.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 6f5c9994f54..1602a4945ad 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -34,12 +34,12 @@ describe Gitlab::Ci::Trace::Stream do end context 'when the trace contains ANSI sequence and Unicode' do - let(:io) do - File.open(expand_fixture_path('trace/ansi-sequence-and-unicode')) + let(:stream) do + described_class.new do + File.open(expand_fixture_path('trace/ansi-sequence-and-unicode')) + end end - let(:stream) { described_class.new { io } } - it 'forwards to the next linefeed, case 1' do stream.limit(7) @@ -60,11 +60,11 @@ describe Gitlab::Ci::Trace::Stream do # See https://gitlab.com/gitlab-org/gitlab-ce/issues/30796 it 'reads in binary, output as Encoding.default_external' do - stream.limit(29) + stream.limit(52) - result = io.read # Ci::Ansi2html::Converter would read with each_line + result = stream.html - expect(result).to eq("\e[01;32m許功蓋\e[0m\n") + expect(result.lines.first).to eq("ヾ(´༎ຶД༎ຶ`)ノ
許功蓋
") expect(result.encoding).to eq(Encoding.default_external) end end -- cgit v1.2.1 From f05ab97e1ef1c1e70b6b8e1286b1d626e70f5286 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Mon, 17 Apr 2017 17:12:43 +0800 Subject: Restore nil for stream --- spec/lib/gitlab/ci/trace/stream_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 1602a4945ad..28d5c2183ce 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe Gitlab::Ci::Trace::Stream do describe 'delegates' do - subject { described_class.new { StringIO.new } } + subject { described_class.new { nil } } it { is_expected.to delegate_method(:close).to(:stream) } it { is_expected.to delegate_method(:tell).to(:stream) } -- cgit v1.2.1 From 9350b9064cb9c5048f9eab8041e953a5dab5b154 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Mon, 17 Apr 2017 17:52:15 +0800 Subject: Set the encoding in c'tor and explain why it's fine --- spec/lib/gitlab/ci/trace/stream_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 28d5c2183ce..03f040f4465 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -64,7 +64,7 @@ describe Gitlab::Ci::Trace::Stream do result = stream.html - expect(result.lines.first).to eq("ヾ(´༎ຶД༎ຶ`)ノ
許功蓋
") + expect(result).to eq("ヾ(´༎ຶД༎ຶ`)ノ
許功蓋
") expect(result.encoding).to eq(Encoding.default_external) end end -- cgit v1.2.1 From d6f49b85f1cdba077f0046534314ed562a9ed418 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Mon, 17 Apr 2017 18:28:18 -0500 Subject: Fix specs --- spec/lib/gitlab/git/blob_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/git/blob_spec.rb b/spec/lib/gitlab/git/blob_spec.rb index 3f494257545..e6a07a58d73 100644 --- a/spec/lib/gitlab/git/blob_spec.rb +++ b/spec/lib/gitlab/git/blob_spec.rb @@ -234,7 +234,7 @@ describe Gitlab::Git::Blob, seed_helper: true do it { expect(blob.lfs_pointer?).to eq(true) } it { expect(blob.lfs_oid).to eq("4206f951d2691c78aac4c0ce9f2b23580b2c92cdcc4336e1028742c0274938e0") } - it { expect(blob.lfs_size).to eq("19548") } + it { expect(blob.lfs_size).to eq(19548) } it { expect(blob.id).to eq("f4d76af13003d1106be7ac8c5a2a3d37ddf32c2a") } it { expect(blob.name).to eq("image.jpg") } it { expect(blob.path).to eq("files/lfs/image.jpg") } @@ -273,7 +273,7 @@ describe Gitlab::Git::Blob, seed_helper: true do it { expect(blob.lfs_pointer?).to eq(false) } it { expect(blob.lfs_oid).to eq(nil) } - it { expect(blob.lfs_size).to eq("1575078") } + it { expect(blob.lfs_size).to eq(1575078) } it { expect(blob.id).to eq("5ae35296e1f95c1ef9feda1241477ed29a448572") } it { expect(blob.name).to eq("picture-invalid.png") } it { expect(blob.path).to eq("files/lfs/picture-invalid.png") } -- cgit v1.2.1 From b07da07c82e17f0be5bb5398b9b0cfec52cf2d2b Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Tue, 18 Apr 2017 17:03:02 +0800 Subject: Just enforce the output encoding for Ansi2html Fixes https://sentry.gitlap.com/gitlab/gitlabcom/issues/27545/ --- spec/lib/gitlab/ci/trace/stream_spec.rb | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 03f040f4465..40ac5a3ed37 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -71,12 +71,20 @@ describe Gitlab::Ci::Trace::Stream do end describe '#append' do + let(:tempfile) { Tempfile.new } + let(:stream) do described_class.new do - StringIO.new("12345678") + tempfile.write("12345678") + tempfile.rewind + tempfile end end + after do + tempfile.unlink + end + it "truncates and append content" do stream.append("89", 4) stream.seek(0) @@ -84,6 +92,17 @@ describe Gitlab::Ci::Trace::Stream do expect(stream.size).to eq(6) expect(stream.raw).to eq("123489") end + + it 'appends in binary mode' do + '😺'.force_encoding('ASCII-8BIT').each_char.with_index do |byte, offset| + stream.append(byte, offset) + end + + stream.seek(0) + + expect(stream.size).to eq(4) + expect(stream.raw).to eq('😺') + end end describe '#set' do -- cgit v1.2.1 From f6a11d00a8d938293a6a223c6f227b935ebe7a3c Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 18 Apr 2017 22:20:47 +0200 Subject: Fix duplicated container repository names --- spec/lib/container_registry/path_spec.rb | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'spec/lib') diff --git a/spec/lib/container_registry/path_spec.rb b/spec/lib/container_registry/path_spec.rb index f3b3a9a715f..0023985e1c2 100644 --- a/spec/lib/container_registry/path_spec.rb +++ b/spec/lib/container_registry/path_spec.rb @@ -189,7 +189,7 @@ describe ContainerRegistry::Path do end context 'when project exists' do - let(:group) { create(:group, path: 'some_group') } + let(:group) { create(:group, path: 'Some_Group') } let(:project) do create(:empty_project, group: group, name: 'some_project') @@ -225,4 +225,33 @@ describe ContainerRegistry::Path do end end end + + describe '#project_path' do + context 'when project does not exist' do + let(:path) { 'some/name' } + + it 'returns nil' do + expect(subject.project_path).to be_nil + end + end + + context 'when project with uppercase characters in path exists' do + let(:path) { 'somegroup/someproject' } + + let(:group) { create(:group, path: 'SomeGroup') } + + let(:project) do + create(:empty_project, group: group, name: 'SomeProject') + end + + before do + allow(path).to receive(:repository_project) + .and_return(project) + end + + it 'returns downcased project path' do + expect(subject.project_path).to eq 'somegroup/someproject' + end + end + end end -- cgit v1.2.1 From 5c92c4dda0bd8e5d836488e2fc8343f5ff024c55 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 19 Apr 2017 08:59:05 +0200 Subject: Improve container registry repository path specs --- spec/lib/container_registry/path_spec.rb | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/container_registry/path_spec.rb b/spec/lib/container_registry/path_spec.rb index 0023985e1c2..c2bcb54210b 100644 --- a/spec/lib/container_registry/path_spec.rb +++ b/spec/lib/container_registry/path_spec.rb @@ -191,13 +191,8 @@ describe ContainerRegistry::Path do context 'when project exists' do let(:group) { create(:group, path: 'Some_Group') } - let(:project) do - create(:empty_project, group: group, name: 'some_project') - end - before do - allow(path).to receive(:repository_project) - .and_return(project) + create(:empty_project, group: group, name: 'some_project') end context 'when project path equal repository path' do @@ -236,21 +231,15 @@ describe ContainerRegistry::Path do end context 'when project with uppercase characters in path exists' do - let(:path) { 'somegroup/someproject' } - + let(:path) { 'somegroup/myproject/my/image' } let(:group) { create(:group, path: 'SomeGroup') } - let(:project) do - create(:empty_project, group: group, name: 'SomeProject') - end - before do - allow(path).to receive(:repository_project) - .and_return(project) + create(:empty_project, group: group, name: 'MyProject') end it 'returns downcased project path' do - expect(subject.project_path).to eq 'somegroup/someproject' + expect(subject.project_path).to eq 'somegroup/myproject' end end end -- cgit v1.2.1 From de71a4659482aeb38da5e883eeff12b24056871a Mon Sep 17 00:00:00 2001 From: Adam Niedzielski Date: Wed, 19 Apr 2017 16:38:46 +0200 Subject: Display issuable state only in notes and issuable description Closes #30964 --- .../banzai/filter/issuable_state_filter_spec.rb | 32 ++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/banzai/filter/issuable_state_filter_spec.rb b/spec/lib/banzai/filter/issuable_state_filter_spec.rb index 5cb98163746..0df259333e4 100644 --- a/spec/lib/banzai/filter/issuable_state_filter_spec.rb +++ b/spec/lib/banzai/filter/issuable_state_filter_spec.rb @@ -5,6 +5,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do include FilterSpecHelper let(:user) { create(:user) } + let(:context) { { current_user: user, issuable_state_filter_enabled: true } } def create_link(text, data) link_to(text, '', class: 'gfm has-tooltip', data: data) @@ -20,7 +21,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores non-issuable links' do project = create(:empty_project, :public) link = create_link('text', project: project, reference_type: 'issue') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text') end @@ -28,7 +29,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores issuable links with empty content' do issue = create(:issue, :closed) link = create_link('', issue: issue.id, reference_type: 'issue') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('') end @@ -40,17 +41,26 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do issue: issue.id, reference_type: 'issue' ) - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.inner_html). to eq('something else [closed]') end + it 'does not append state when filter is not enabled' do + issue = create(:issue, :closed) + link = create_link('text', issue: issue.id, reference_type: 'issue') + context = { current_user: user } + doc = filter(link, context) + + expect(doc.css('a').last.text).to eq('text') + end + context 'for issue references' do it 'ignores open issue references' do issue = create(:issue) link = create_link('text', issue: issue.id, reference_type: 'issue') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text') end @@ -58,7 +68,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores reopened issue references' do reopened_issue = create(:issue, :reopened) link = create_link('text', issue: reopened_issue.id, reference_type: 'issue') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text') end @@ -66,7 +76,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'appends [closed] to closed issue references' do closed_issue = create(:issue, :closed) link = create_link('text', issue: closed_issue.id, reference_type: 'issue') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text [closed]') end @@ -76,7 +86,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores open merge request references' do mr = create(:merge_request) link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text') end @@ -84,7 +94,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores reopened merge request references' do mr = create(:merge_request, :reopened) link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text') end @@ -92,7 +102,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'ignores locked merge request references' do mr = create(:merge_request, :locked) link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text') end @@ -100,7 +110,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'appends [closed] to closed merge request references' do mr = create(:merge_request, :closed) link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text [closed]') end @@ -108,7 +118,7 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do it 'appends [merged] to merged merge request references' do mr = create(:merge_request, :merged) link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') - doc = filter(link, current_user: user) + doc = filter(link, context) expect(doc.css('a').last.text).to eq('text [merged]') end -- cgit v1.2.1 From 0945dc4179abbf435a9b0aaf4482c94bd0368e35 Mon Sep 17 00:00:00 2001 From: Adam Niedzielski Date: Wed, 19 Apr 2017 17:54:58 +0200 Subject: Fix PlantUML integration in GFM Fixes #30557 Use "lang" attribute instead of "class" in PlantumlFilter. --- spec/lib/banzai/filter/plantuml_filter_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/banzai/filter/plantuml_filter_spec.rb b/spec/lib/banzai/filter/plantuml_filter_spec.rb index f85a5dcbd8b..9b8ecb201f3 100644 --- a/spec/lib/banzai/filter/plantuml_filter_spec.rb +++ b/spec/lib/banzai/filter/plantuml_filter_spec.rb @@ -5,7 +5,7 @@ describe Banzai::Filter::PlantumlFilter, lib: true do it 'should replace plantuml pre tag with img tag' do stub_application_setting(plantuml_enabled: true, plantuml_url: "http://localhost:8080") - input = '
Bob -> Sara : Hello
'
+    input = '
Bob -> Sara : Hello
' output = '
' doc = filter(input) @@ -14,8 +14,8 @@ describe Banzai::Filter::PlantumlFilter, lib: true do it 'should not replace plantuml pre tag with img tag if disabled' do stub_application_setting(plantuml_enabled: false) - input = '
Bob -> Sara : Hello
'
-    output = '
Bob -> Sara : Hello
' + input = '
Bob -> Sara : Hello
' + output = '
Bob -> Sara : Hello
' doc = filter(input) expect(doc.to_s).to eq output @@ -23,7 +23,7 @@ describe Banzai::Filter::PlantumlFilter, lib: true do it 'should not replace plantuml pre tag with img tag if url is invalid' do stub_application_setting(plantuml_enabled: true, plantuml_url: "invalid") - input = '
Bob -> Sara : Hello
'
+    input = '
Bob -> Sara : Hello
' output = '
 PlantUML Error: cannot connect to PlantUML server at "invalid"
' doc = filter(input) -- cgit v1.2.1 From 1269ee4c3bd3a7875fdcd15554b904fab94fba50 Mon Sep 17 00:00:00 2001 From: Adam Niedzielski Date: Wed, 19 Apr 2017 17:15:36 +0200 Subject: Do not append issuable state to links with custom anchor Closes #30916 Change the presentation from [closed] to (closed) --- .../banzai/filter/issuable_state_filter_spec.rb | 108 +++++++++++++++------ 1 file changed, 76 insertions(+), 32 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/banzai/filter/issuable_state_filter_spec.rb b/spec/lib/banzai/filter/issuable_state_filter_spec.rb index 0df259333e4..600f3c123ed 100644 --- a/spec/lib/banzai/filter/issuable_state_filter_spec.rb +++ b/spec/lib/banzai/filter/issuable_state_filter_spec.rb @@ -34,17 +34,41 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do expect(doc.css('a').last.text).to eq('') end - it 'adds text with standard formatting' do + it 'ignores issuable links with custom anchor' do issue = create(:issue, :closed) + link = create_link('something', issue: issue.id, reference_type: 'issue') + doc = filter(link, context) + + expect(doc.css('a').last.text).to eq('something') + end + + it 'ignores issuable links to specific comments' do + issue = create(:issue, :closed) + link = create_link("#{issue.to_reference} (comment 1)", issue: issue.id, reference_type: 'issue') + doc = filter(link, context) + + expect(doc.css('a').last.text).to eq("#{issue.to_reference} (comment 1)") + end + + it 'ignores merge request links to diffs tab' do + merge_request = create(:merge_request, :closed) link = create_link( - 'something else'.html_safe, - issue: issue.id, - reference_type: 'issue' + "#{merge_request.to_reference} (diffs)", + merge_request: merge_request.id, + reference_type: 'merge_request' ) doc = filter(link, context) - expect(doc.css('a').last.inner_html). - to eq('something else [closed]') + expect(doc.css('a').last.text).to eq("#{merge_request.to_reference} (diffs)") + end + + it 'handles cross project references' do + issue = create(:issue, :closed) + project = create(:empty_project) + link = create_link(issue.to_reference(project), issue: issue.id, reference_type: 'issue') + doc = filter(link, context.merge(project: project)) + + expect(doc.css('a').last.text).to eq("#{issue.to_reference(project)} (closed)") end it 'does not append state when filter is not enabled' do @@ -59,68 +83,88 @@ describe Banzai::Filter::IssuableStateFilter, lib: true do context 'for issue references' do it 'ignores open issue references' do issue = create(:issue) - link = create_link('text', issue: issue.id, reference_type: 'issue') + link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue') doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text') + expect(doc.css('a').last.text).to eq(issue.to_reference) end it 'ignores reopened issue references' do - reopened_issue = create(:issue, :reopened) - link = create_link('text', issue: reopened_issue.id, reference_type: 'issue') + issue = create(:issue, :reopened) + link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue') doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text') + expect(doc.css('a').last.text).to eq(issue.to_reference) end - it 'appends [closed] to closed issue references' do - closed_issue = create(:issue, :closed) - link = create_link('text', issue: closed_issue.id, reference_type: 'issue') + it 'appends state to closed issue references' do + issue = create(:issue, :closed) + link = create_link(issue.to_reference, issue: issue.id, reference_type: 'issue') doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text [closed]') + expect(doc.css('a').last.text).to eq("#{issue.to_reference} (closed)") end end context 'for merge request references' do it 'ignores open merge request references' do - mr = create(:merge_request) - link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') + merge_request = create(:merge_request) + link = create_link( + merge_request.to_reference, + merge_request: merge_request.id, + reference_type: 'merge_request' + ) doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text') + expect(doc.css('a').last.text).to eq(merge_request.to_reference) end it 'ignores reopened merge request references' do - mr = create(:merge_request, :reopened) - link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') + merge_request = create(:merge_request, :reopened) + link = create_link( + merge_request.to_reference, + merge_request: merge_request.id, + reference_type: 'merge_request' + ) doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text') + expect(doc.css('a').last.text).to eq(merge_request.to_reference) end it 'ignores locked merge request references' do - mr = create(:merge_request, :locked) - link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') + merge_request = create(:merge_request, :locked) + link = create_link( + merge_request.to_reference, + merge_request: merge_request.id, + reference_type: 'merge_request' + ) doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text') + expect(doc.css('a').last.text).to eq(merge_request.to_reference) end - it 'appends [closed] to closed merge request references' do - mr = create(:merge_request, :closed) - link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') + it 'appends state to closed merge request references' do + merge_request = create(:merge_request, :closed) + link = create_link( + merge_request.to_reference, + merge_request: merge_request.id, + reference_type: 'merge_request' + ) doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text [closed]') + expect(doc.css('a').last.text).to eq("#{merge_request.to_reference} (closed)") end - it 'appends [merged] to merged merge request references' do - mr = create(:merge_request, :merged) - link = create_link('text', merge_request: mr.id, reference_type: 'merge_request') + it 'appends state to merged merge request references' do + merge_request = create(:merge_request, :merged) + link = create_link( + merge_request.to_reference, + merge_request: merge_request.id, + reference_type: 'merge_request' + ) doc = filter(link, context) - expect(doc.css('a').last.text).to eq('text [merged]') + expect(doc.css('a').last.text).to eq("#{merge_request.to_reference} (merged)") end end end -- cgit v1.2.1 From d170133bded904603833f1b9e2727def3805962d Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Thu, 20 Apr 2017 00:37:44 +0000 Subject: Refactor changing files in web UI --- spec/lib/gitlab/diff/position_tracer_spec.rb | 8 ++++---- spec/lib/gitlab/git/index_spec.rb | 20 ++++++++++++++------ spec/lib/gitlab/git_access_spec.rb | 2 +- spec/lib/gitlab/regex_spec.rb | 6 ------ 4 files changed, 19 insertions(+), 17 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/diff/position_tracer_spec.rb b/spec/lib/gitlab/diff/position_tracer_spec.rb index 994995b57b8..c166f83664a 100644 --- a/spec/lib/gitlab/diff/position_tracer_spec.rb +++ b/spec/lib/gitlab/diff/position_tracer_spec.rb @@ -100,7 +100,7 @@ describe Gitlab::Diff::PositionTracer, lib: true do project, current_user, start_branch: branch_name, - target_branch: branch_name, + branch_name: branch_name, commit_message: "Create file", file_path: file_name, file_content: content @@ -113,7 +113,7 @@ describe Gitlab::Diff::PositionTracer, lib: true do project, current_user, start_branch: branch_name, - target_branch: branch_name, + branch_name: branch_name, commit_message: "Update file", file_path: file_name, file_content: content @@ -122,11 +122,11 @@ describe Gitlab::Diff::PositionTracer, lib: true do end def delete_file(branch_name, file_name) - Files::DestroyService.new( + Files::DeleteService.new( project, current_user, start_branch: branch_name, - target_branch: branch_name, + branch_name: branch_name, commit_message: "Delete file", file_path: file_name ).execute diff --git a/spec/lib/gitlab/git/index_spec.rb b/spec/lib/gitlab/git/index_spec.rb index 07d71f6777d..21b71654251 100644 --- a/spec/lib/gitlab/git/index_spec.rb +++ b/spec/lib/gitlab/git/index_spec.rb @@ -33,7 +33,7 @@ describe Gitlab::Git::Index, seed_helper: true do end it 'raises an error' do - expect { index.create(options) }.to raise_error('Filename already exists') + expect { index.create(options) }.to raise_error('A file with this name already exists') end end @@ -89,7 +89,7 @@ describe Gitlab::Git::Index, seed_helper: true do end it 'raises an error' do - expect { index.create_dir(options) }.to raise_error('Directory already exists as a file') + expect { index.create_dir(options) }.to raise_error('A file with this name already exists') end end @@ -99,7 +99,7 @@ describe Gitlab::Git::Index, seed_helper: true do end it 'raises an error' do - expect { index.create_dir(options) }.to raise_error('Directory already exists') + expect { index.create_dir(options) }.to raise_error('A directory with this name already exists') end end end @@ -118,7 +118,7 @@ describe Gitlab::Git::Index, seed_helper: true do end it 'raises an error' do - expect { index.update(options) }.to raise_error("File doesn't exist") + expect { index.update(options) }.to raise_error("A file with this name doesn't exist") end end @@ -156,7 +156,15 @@ describe Gitlab::Git::Index, seed_helper: true do it 'raises an error' do options[:previous_path] = 'documents/story.txt' - expect { index.move(options) }.to raise_error("File doesn't exist") + expect { index.move(options) }.to raise_error("A file with this name doesn't exist") + end + end + + context 'when a file at the new path already exists' do + it 'raises an error' do + options[:file_path] = 'CHANGELOG' + + expect { index.move(options) }.to raise_error("A file with this name already exists") end end @@ -203,7 +211,7 @@ describe Gitlab::Git::Index, seed_helper: true do end it 'raises an error' do - expect { index.delete(options) }.to raise_error("File doesn't exist") + expect { index.delete(options) }.to raise_error("A file with this name doesn't exist") end end diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb index 703b41f95ac..d8b72615fab 100644 --- a/spec/lib/gitlab/git_access_spec.rb +++ b/spec/lib/gitlab/git_access_spec.rb @@ -211,7 +211,7 @@ describe Gitlab::GitAccess, lib: true do target_branch = project.repository.lookup('feature') source_branch = project.repository.create_file( user, - 'John Doe', + 'filename', 'This is the file content', message: 'This is a good commit message', branch_name: unprotected_branch) diff --git a/spec/lib/gitlab/regex_spec.rb b/spec/lib/gitlab/regex_spec.rb index ba45e2d758c..127cd8c78d8 100644 --- a/spec/lib/gitlab/regex_spec.rb +++ b/spec/lib/gitlab/regex_spec.rb @@ -32,12 +32,6 @@ describe Gitlab::Regex, lib: true do it { is_expected.to match('foo@bar') } end - describe '.file_path_regex' do - subject { described_class.file_path_regex } - - it { is_expected.to match('foo@/bar') } - end - describe '.environment_slug_regex' do subject { described_class.environment_slug_regex } -- cgit v1.2.1 From 71b6a4ba85150c88414f50ac4965cab71021202d Mon Sep 17 00:00:00 2001 From: James Lopez Date: Thu, 20 Apr 2017 16:10:33 +0200 Subject: Return empty string on UTF8 conversion with U_STRING_NOT_TERMINATED_WARNING error --- spec/lib/gitlab/git/encoding_helper_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/git/encoding_helper_spec.rb b/spec/lib/gitlab/git/encoding_helper_spec.rb index 27bcc241b82..f6ac7b23d1d 100644 --- a/spec/lib/gitlab/git/encoding_helper_spec.rb +++ b/spec/lib/gitlab/git/encoding_helper_spec.rb @@ -56,6 +56,10 @@ describe Gitlab::Git::EncodingHelper do expect(r.encoding.name).to eq('UTF-8') end end + + it 'returns empty string on conversion errors' do + expect { ext_class.encode_utf8('') }.not_to raise_error(ArgumentError) + end end describe '#clean' do -- cgit v1.2.1 From 8a570944a9d0f0e4cd607e5d2dfe2eac4bd83f47 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Thu, 20 Apr 2017 23:45:09 -0700 Subject: Fix Error 500 when referencing issue with project in pending delete Closes #31215 --- spec/lib/banzai/redactor_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'spec/lib') diff --git a/spec/lib/banzai/redactor_spec.rb b/spec/lib/banzai/redactor_spec.rb index 6d2c141e18b..334b74fab3c 100644 --- a/spec/lib/banzai/redactor_spec.rb +++ b/spec/lib/banzai/redactor_spec.rb @@ -42,6 +42,19 @@ describe Banzai::Redactor do end end + context 'when project is in pending delete' do + it 'redacts an issue attached' do + project.pending_delete = true + project.save + issue = create(:issue, project: project) + redactor = described_class.new(project, user) + doc = Nokogiri::HTML.fragment("foo") + redactor.redact([doc]) + + expect(doc.to_html).to eq('foo') + end + end + context 'when reference visible to user' do it 'does not redact an array of documents' do doc1_html = 'foo' -- cgit v1.2.1 From 31ea72b62e1f978705000a51eba02a5cffcfb17c Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Fri, 21 Apr 2017 16:02:03 +0800 Subject: Also test against external-issue for deleted projects This is based on: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/10841 --- spec/lib/banzai/redactor_spec.rb | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/banzai/redactor_spec.rb b/spec/lib/banzai/redactor_spec.rb index 334b74fab3c..e6f2963193c 100644 --- a/spec/lib/banzai/redactor_spec.rb +++ b/spec/lib/banzai/redactor_spec.rb @@ -43,12 +43,24 @@ describe Banzai::Redactor do end context 'when project is in pending delete' do + let!(:issue) { create(:issue, project: project) } + let(:redactor) { described_class.new(project, user) } + + before do + project.update(pending_delete: true) + end + it 'redacts an issue attached' do - project.pending_delete = true - project.save - issue = create(:issue, project: project) - redactor = described_class.new(project, user) - doc = Nokogiri::HTML.fragment("foo") + doc = Nokogiri::HTML.fragment("foo") + + redactor.redact([doc]) + + expect(doc.to_html).to eq('foo') + end + + it 'redacts an external issue' do + doc = Nokogiri::HTML.fragment("foo") + redactor.redact([doc]) expect(doc.to_html).to eq('foo') -- cgit v1.2.1 From d2b883b7506d7b77d57583b5e9b17c024480b721 Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Mon, 10 Apr 2017 19:36:30 +0100 Subject: Start versioning cached markdown fields --- spec/lib/banzai/object_renderer_spec.rb | 4 +- spec/lib/banzai/renderer_spec.rb | 69 ++++++++------------------------- 2 files changed, 18 insertions(+), 55 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/banzai/object_renderer_spec.rb b/spec/lib/banzai/object_renderer_spec.rb index 4817fcd031a..dd2674f9f20 100644 --- a/spec/lib/banzai/object_renderer_spec.rb +++ b/spec/lib/banzai/object_renderer_spec.rb @@ -4,13 +4,13 @@ describe Banzai::ObjectRenderer do let(:project) { create(:empty_project) } let(:user) { project.owner } let(:renderer) { described_class.new(project, user, custom_value: 'value') } - let(:object) { Note.new(note: 'hello', note_html: '

hello

') } + let(:object) { Note.new(note: 'hello', note_html: '

hello

', cached_markdown_version: CacheMarkdownField::CACHE_VERSION) } describe '#render' do it 'renders and redacts an Array of objects' do renderer.render([object], :note) - expect(object.redacted_note_html).to eq '

hello

' + expect(object.redacted_note_html).to eq '

hello

' expect(object.user_visible_reference_count).to eq 0 end diff --git a/spec/lib/banzai/renderer_spec.rb b/spec/lib/banzai/renderer_spec.rb index aaa6b12e67e..e6f8d2a1fed 100644 --- a/spec/lib/banzai/renderer_spec.rb +++ b/spec/lib/banzai/renderer_spec.rb @@ -1,73 +1,36 @@ require 'spec_helper' describe Banzai::Renderer do - def expect_render(project = :project) - expected_context = { project: project } - expect(renderer).to receive(:cacheless_render) { :html }.with(:markdown, expected_context) - end - - def expect_cache_update - expect(object).to receive(:update_column).with("field_html", :html) - end - - def fake_object(*features) - markdown = :markdown if features.include?(:markdown) - html = :html if features.include?(:html) - - object = double( - "object", - banzai_render_context: { project: :project }, - field: markdown, - field_html: html - ) + def fake_object(fresh:) + object = double('object') - allow(object).to receive(:markdown_cache_field_for).with(:field).and_return("field_html") - allow(object).to receive(:new_record?).and_return(features.include?(:new)) - allow(object).to receive(:destroyed?).and_return(features.include?(:destroyed)) + allow(object).to receive(:cached_html_up_to_date?).with(:field).and_return(fresh) + allow(object).to receive(:cached_html_for).with(:field).and_return('field_html') object end - describe "#render_field" do + describe '#render_field' do let(:renderer) { Banzai::Renderer } - let(:subject) { renderer.render_field(object, :field) } + subject { renderer.render_field(object, :field) } - context "with an empty cache" do - let(:object) { fake_object(:markdown) } - it "caches and returns the result" do - expect_render - expect_cache_update - expect(subject).to eq(:html) - end - end + context 'with a stale cache' do + let(:object) { fake_object(fresh: false) } - context "with a filled cache" do - let(:object) { fake_object(:markdown, :html) } + it 'caches and returns the result' do + expect(object).to receive(:refresh_markdown_cache!).with(do_update: true) - it "uses the cache" do - expect_render.never - expect_cache_update.never - should eq(:html) + is_expected.to eq('field_html') end end - context "new object" do - let(:object) { fake_object(:new, :markdown) } - - it "doesn't cache the result" do - expect_render - expect_cache_update.never - expect(subject).to eq(:html) - end - end + context 'with an up-to-date cache' do + let(:object) { fake_object(fresh: true) } - context "destroyed object" do - let(:object) { fake_object(:destroyed, :markdown) } + it 'uses the cache' do + expect(object).to receive(:refresh_markdown_cache!).never - it "doesn't cache the result" do - expect_render - expect_cache_update.never - expect(subject).to eq(:html) + is_expected.to eq('field_html') end end end -- cgit v1.2.1