Skip to content

Speed up and cleanup events helper spec

Peter Leitzen requested to merge pl-spec-events-helper into master

What does this MR do and why?

This MR attempts to cleanup and speed up spec/helpers/events_helper_spec.rb:

  • Use let_it_be
  • Use factory defaults (via test-prof)
  • Resolve all pending RuboCop offenses
  • Fix static localization definitions
  • Avoid slow membership creations
  • Run specs in random order

How to set up and validate locally

bin/rspec spec/helpers/events_helper_spec.rb

REVEAL_RUBOCOP_TODO=1 bundle exec rubocop spec/helpers/events_helper_spec.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

RSpec Profiling

Here's the output from test-prof when run with FPROF=1. Note:

  • Total amount of factories created went down from 200 to 98 🚀
  • Total events went down from 7112 to 2267
  • Queries saved: 4845

Before

Finished in 40.02 seconds (files took 2.92 seconds to load)
55 examples, 0 failures

Randomized with seed 29629

[TEST PROF INFO] Time spent in factories: 00:28.538 (66.06% of total time)
[TEST PROF INFO] Factories usage

 Total: 200
 Total top-level: 68
 Total time: 00:28.538 (out of 00:43.831)
 Total uniq factories: 32

   total   top-level     total time      time per call      top-level time               name

      44           0        6.0905s            0.1384s             0.0000s          namespace
      41          12       19.0680s            0.4651s             7.6107s            project
      31           4        3.4175s            0.1102s             0.3836s               user
      22          22        7.9500s            0.3614s             7.9500s              event
       8           0        0.1458s            0.0182s             0.0000s     work_item_type
       7           4        2.0389s            0.2913s             1.6549s              issue
       4           1        0.8553s            0.2138s             0.4196s          wiki_page
       4           4        2.0671s            0.5168s             2.0671s    wiki_page_event
       4           0        0.1495s            0.0374s             0.0000s     wiki_page_meta
       3           0        0.0004s            0.0001s             0.0000s               wiki
       3           2        2.5138s            0.8379s             2.1460s      merge_request
       3           3        1.3119s            0.4373s             1.3119s         push_event
       3           0        0.9839s            0.3280s             0.0000s project_empty_repo
       2           2        0.0779s            0.0390s             0.0779s project_group_link
       2           2        0.7688s            0.3844s             0.7688s     note_on_commit
       2           1        0.3818s            0.1909s             0.3511s               note
       2           2        0.0281s            0.0140s             0.0281s push_event_payload
       1           1        0.0797s            0.0797s             0.0797s              group
       1           0        0.0064s            0.0064s             0.0000s namespace_settings
       1           0        0.0049s            0.0049s             0.0000s namespace_ci_cd_settings
       1           1        0.0004s            0.0004s             0.0004s       project_wiki
       1           1        0.6251s            0.6251s             0.6251s note_on_personal_snippet
       1           0        0.4410s            0.4410s             0.0000s   personal_snippet
       1           0        0.1296s            0.1296s             0.0000s             author
       1           1        1.2257s            1.2257s             1.2257s      note_on_issue
       1           1        0.3371s            0.3371s             0.3371s note_on_project_snippet
       1           0        0.0360s            0.0360s             0.0000s    project_snippet
       1           1        0.6833s            0.6833s             0.6833s note_on_merge_request
       1           0        0.0306s            0.0306s             0.0000s             design
       1           1        0.4243s            0.4243s             0.4243s          work_item
       1           1        0.3813s            0.3813s             0.3813s          milestone
       1           1        0.0122s            0.0122s             0.0122s            license

After

Finished in 13.8 seconds (files took 2.18 seconds to load)
55 examples, 0 failures

Randomized with seed 44504

[TEST PROF INFO] Time spent in factories: 00:06.175 (38.46% of total time)
[TEST PROF INFO] Factories usage

 Total: 98
 Total top-level: 54
 Total time: 00:06.175 (out of 00:16.555)
 Total uniq factories: 32

   total   top-level     total time      time per call      top-level time               name

      18          18        0.2438s            0.0135s             0.2438s              event
       9           0        0.7086s            0.0787s             0.0000s          namespace
       8           0        0.0731s            0.0091s             0.0000s     work_item_type
       7           4        0.5320s            0.0760s             0.2028s              issue
       6           3        1.8899s            0.3150s             1.2553s            project
       4           4        0.2763s            0.0691s             0.2763s               user
       4           1        0.3251s            0.0813s             0.1187s          wiki_page
       4           4        0.7103s            0.1776s             0.7103s    wiki_page_event
       4           0        0.0582s            0.0146s             0.0000s     wiki_page_meta
       3           3        0.7018s            0.2339s             0.7018s         push_event
       3           0        0.6262s            0.2087s             0.0000s project_empty_repo
       3           2        0.7229s            0.2410s             0.5541s      merge_request
       3           0        0.0053s            0.0018s             0.0000s               wiki
       2           2        0.0161s            0.0081s             0.0161s push_event_payload
       2           1        1.1619s            0.5809s             1.1361s               note
       2           2        0.0826s            0.0413s             0.0826s     note_on_commit
       1           1        0.0609s            0.0609s             0.0609s              group
       1           0        0.0042s            0.0042s             0.0000s namespace_settings
       1           0        0.0035s            0.0035s             0.0000s namespace_ci_cd_settings
       1           1        0.0659s            0.0659s             0.0659s project_group_link
       1           1        0.0759s            0.0759s             0.0759s note_on_project_snippet
       1           0        0.0538s            0.0538s             0.0000s    project_snippet
       1           1        0.1023s            0.1023s             0.1023s note_on_personal_snippet
       1           0        0.0837s            0.0837s             0.0000s   personal_snippet
       1           0        0.0591s            0.0591s             0.0000s             author
       1           1        0.0686s            0.0686s             0.0686s      note_on_issue
       1           1        0.1915s            0.1915s             0.1915s note_on_merge_request
       1           0        0.0211s            0.0211s             0.0000s             design
       1           1        0.0053s            0.0053s             0.0053s       project_wiki
       1           1        0.0588s            0.0588s             0.0588s          work_item
       1           1        0.2421s            0.2421s             0.2421s          milestone
       1           1        0.0067s            0.0067s             0.0067s            license

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Peter Leitzen

Merge request reports