Improve performance of snippet visibility rspec
What does this MR do?
This MR improves the spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb
spec. In local, the time went from 1 min and 18 seconds to 28 seconds. Therefore, the improvement is 50 seconds.
Refs #228672 (closed)
Screenshots
Before
Top 10 slowest examples (4.66 seconds, 6.0% of total time):
SnippetsFinder behaves like snippet visibility For project snippets project_type: :public, feature_visibility: 20, user_type: :author, snippet_type: 10, outcome: true For public project and author users returns proper outcome
0.87905 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:236
SnippetsFinder behaves like snippet visibility For project snippets project_type: :private, feature_visibility: 0, user_type: :external, snippet_type: 10, outcome: false For private project and external users returns proper outcome
0.49724 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:236
SnippetsFinder behaves like snippet visibility For project snippets project_type: :private, feature_visibility: 10, user_type: :member, snippet_type: 20, outcome: true For private project and member users returns proper outcome
0.46681 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:236
SnippetsFinder behaves like snippet visibility For project snippets project_type: :internal, feature_visibility: 10, user_type: :unauthenticated, snippet_type: 0, outcome: false Without a given project and unauthenticated users returns no snippets when the user cannot read cross project
0.441 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:249
SnippetsFinder behaves like snippet visibility For project snippets project_type: :private, feature_visibility: 10, user_type: :author, snippet_type: 10, outcome: true For private project and author users returns proper outcome
0.42373 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:236
SnippetsFinder behaves like snippet visibility For project snippets project_type: :private, feature_visibility: 0, user_type: :external, snippet_type: 10, outcome: false Without a given project and external users returns proper outcome
0.39957 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:244
SnippetsFinder behaves like snippet visibility For project snippets project_type: :private, feature_visibility: 10, user_type: :member, snippet_type: 20, outcome: true Without a given project and member users returns no snippets when the user cannot read cross project
0.39016 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:249
SnippetsFinder behaves like snippet visibility For project snippets project_type: :internal, feature_visibility: 20, user_type: :external, snippet_type: 10, outcome: false For internal project and external users returns proper outcome
0.3888 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:236
SnippetsFinder behaves like snippet visibility For project snippets project_type: :private, feature_visibility: 10, user_type: :non_member, snippet_type: 20, outcome: false For private project and non_member users agrees with the read_snippet policy
0.38677 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:232
SnippetsFinder behaves like snippet visibility For project snippets project_type: :internal, feature_visibility: 20, user_type: :external, snippet_type: 10, outcome: false Without a given project and external users returns proper outcome
0.38528 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:244
Finished in 1 minute 18.14 seconds (files took 5.16 seconds to load)
After
Top 10 slowest examples (2.45 seconds, 8.7% of total time):
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :public, feature_visibility: :disabled, user_type: :external, snippet_visibility: :public, outcome: false For project and external users returns proper outcome
0.72068 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:247
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :private, feature_visibility: :private, user_type: :external, snippet_visibility: :internal, outcome: true For project and external users returns proper outcome
0.2418 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:247
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :private, feature_visibility: :enabled, user_type: :external, snippet_visibility: :private, outcome: true For project and external users returns proper outcome
0.23766 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:247
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :public, feature_visibility: :private, user_type: :unauthenticated, snippet_visibility: :internal, outcome: false Without a given project and unauthenticated users returns proper outcome
0.21766 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:259
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :private, feature_visibility: :private, user_type: :external, snippet_visibility: :private, outcome: true For project and external users returns proper outcome
0.2115 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:247
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :internal, feature_visibility: :private, user_type: :author, snippet_visibility: :internal, outcome: true For project and author users returns proper outcome
0.17094 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:247
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :private, feature_visibility: :private, user_type: :member, snippet_visibility: :public, outcome: true Without a given project and member users returns proper outcome
0.16577 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:259
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :internal, feature_visibility: :enabled, user_type: :external, snippet_visibility: :internal, outcome: false Without a given project and external users returns proper outcome
0.16278 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:259
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :public, feature_visibility: :disabled, user_type: :member, snippet_visibility: :private, outcome: false For project and member users returns proper outcome
0.1627 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:247
SnippetsFinder behaves like snippet visibility For project snippets project_visibility: :internal, feature_visibility: :disabled, user_type: :author, snippet_visibility: :private, outcome: false Without a given project and author users returns proper outcome
0.16255 seconds ./spec/support/shared_examples/finders/snippet_visibility_shared_examples.rb:259
Finished in 28.16 seconds (files took 3.94 seconds to load)
Does this MR meet the acceptance criteria?
Conformity
Edited by Francisco Javier López (ex-Gitlab)