lib/image_slideshow_test_helper.rb

Summary

Maintainability
B
6 hrs
Test Coverage

Unprotected mass assignment
Open

          new_still_image = StillImage.create({ title: 'Child Image', basket_id: Basket.first }.merge(options))
Severity: Critical
Found in lib/image_slideshow_test_helper.rb by brakeman

Mass assignment is a feature of Rails which allows an application to create a record from the values of a hash.

Example:

User.new(params[:user])

Unfortunately, if there is a user field called admin which controls administrator access, now any user can make themselves an administrator.

attr_accessible and attr_protected can be used to limit mass assignment. However, Brakeman will warn unless attr_accessible is used, or mass assignment is completely disabled.

There are two different mass assignment warnings which can arise. The first is when mass assignment actually occurs, such as the example above. This results in a warning like

Unprotected mass assignment near line 61: User.new(params[:user])

The other warning is raised whenever a model is found which does not use attr_accessible. This produces generic warnings like

Mass assignment is not restricted using attr_accessible

with a list of affected models.

In Rails 3.1 and newer, mass assignment can easily be disabled:

config.active_record.whitelist_attributes = true

Unfortunately, it can also easily be bypassed:

User.new(params[:user], :without_protection => true)

Brakeman will warn on uses of without_protection.

Assignment Branch Condition size for included is too high. [135.2/15]
Open

    def self.included(base)
      base.class_eval do
        if base.name == 'IndexPageControllerTest'
          context 'The index page' do
            setup do
Severity: Minor
Found in lib/image_slideshow_test_helper.rb by rubocop

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Method has too many lines. [114/10]
Open

    def self.included(base)
      base.class_eval do
        if base.name == 'IndexPageControllerTest'
          context 'The index page' do
            setup do
Severity: Minor
Found in lib/image_slideshow_test_helper.rb by rubocop

This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Module has too many lines. [118/100]
Open

module ImageSlideshowTestHelper
  unless included_modules.include? ImageSlideshowTestHelper
    def self.included(base)
      base.class_eval do
        if base.name == 'IndexPageControllerTest'
Severity: Minor
Found in lib/image_slideshow_test_helper.rb by rubocop

This cop checks if the length a module exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Block has too many lines. [112/25]
Open

      base.class_eval do
        if base.name == 'IndexPageControllerTest'
          context 'The index page' do
            setup do
              3.times { |i| create_new_still_image_with(title: "site basket image #{i + 1}") }
Severity: Minor
Found in lib/image_slideshow_test_helper.rb by rubocop

This cop checks if the length of a block exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable. The cop can be configured to ignore blocks passed to certain methods.

Assignment Branch Condition size for run_through_selected_images is too high. [45.5/15]
Open

        def run_through_selected_images(options = {})
          options[:current] = options[:current].blank? ? 1 : options[:current].blank?
          selected_image_params = options.delete(:selected_image_params)

          if @topic
Severity: Minor
Found in lib/image_slideshow_test_helper.rb by rubocop

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Method included has 114 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    def self.included(base)
      base.class_eval do
        if base.name == 'IndexPageControllerTest'
          context 'The index page' do
            setup do
Severity: Major
Found in lib/image_slideshow_test_helper.rb - About 4 hrs to fix

    Assignment Branch Condition size for check_slideshow_values_correct is too high. [34.37/15]
    Open

            def check_slideshow_values_correct(options = {})
              assert_equal (options[:total] || 3), session['image_slideshow']['results'].size
              assert_equal (options[:total] || 3), session['image_slideshow']['total']
              assert_equal (options[:topic_id] || @topic.id), session['image_slideshow']['key']['slideshow_topic_id'] if options[:topic_id]
              # we do not store a last requested if this is the last image in the slideshow
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

    Method has too many lines. [27/10]
    Open

            def run_through_selected_images(options = {})
              options[:current] = options[:current].blank? ? 1 : options[:current].blank?
              selected_image_params = options.delete(:selected_image_params)
    
              if @topic
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

    Perceived complexity for included is too high. [12/7]
    Open

        def self.included(base)
          base.class_eval do
            if base.name == 'IndexPageControllerTest'
              context 'The index page' do
                setup do
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

    Example:

    def my_method                   # 1
      if cond                       # 1
        case var                    # 2 (0.8 + 4 * 0.2, rounded)
        when 1 then func_one
        when 2 then func_two
        when 3 then func_three
        when 4..10 then func_other
        end
      else                          # 1
        do_something until a && b   # 2
      end                           # ===
    end                             # 7 complexity points

    Cyclomatic complexity for included is too high. [10/6]
    Open

        def self.included(base)
          base.class_eval do
            if base.name == 'IndexPageControllerTest'
              context 'The index page' do
                setup do
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

    An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one.

    Method run_through_selected_images has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
    Open

            def run_through_selected_images(options = {})
              options[:current] = options[:current].blank? ? 1 : options[:current].blank?
              selected_image_params = options.delete(:selected_image_params)
    
              if @topic
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb - About 1 hr to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Method check_slideshow_values_correct has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
    Open

            def check_slideshow_values_correct(options = {})
              assert_equal (options[:total] || 3), session['image_slideshow']['results'].size
              assert_equal (options[:total] || 3), session['image_slideshow']['total']
              assert_equal (options[:topic_id] || @topic.id), session['image_slideshow']['key']['slideshow_topic_id'] if options[:topic_id]
              # we do not store a last requested if this is the last image in the slideshow
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb - About 55 mins to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Block has too many lines. [29/25]
    Open

              context 'The topic related image slideshow' do
                context 'when several images are related to a topic' do
                  setup do
                    @non_site_basket_1 = create_new_basket({ name: 'basket 1' })
    
    
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks if the length of a block exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable. The cop can be configured to ignore blocks passed to certain methods.

    Block has too many lines. [27/25]
    Open

                context 'when several images are related to a topic' do
                  setup do
                    @non_site_basket_1 = create_new_basket({ name: 'basket 1' })
    
                    @topic = Topic.create(title: 'Parent Topic', topic_type_id: TopicType.first, basket_id: @non_site_basket_1.id)
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks if the length of a block exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable. The cop can be configured to ignore blocks passed to certain methods.

    Unused method argument - topic. If it's necessary, use _ or _topic as an argument name to indicate that it won't be used.
    Open

            def create_new_image_relation_to(topic, options = {})
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for unused method arguments.

    Example:

    # bad
    
    def some_method(used, unused, _unused_but_allowed)
      puts used
    end

    Example:

    # good
    
    def some_method(used, _unused, _unused_but_allowed)
      puts used
    end

    Redundant curly braces around a hash parameter.
    Open

                check_slideshow_values_correct(options.merge({ current: nil }))
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

    Example: EnforcedStyle: braces

    # The `braces` style enforces braces around all method
    # parameters that are hashes.
    
    # bad
    some_method(x, y, a: 1, b: 2)
    
    # good
    some_method(x, y, {a: 1, b: 2})

    Example: EnforcedStyle: no_braces (default)

    # The `no_braces` style checks that the last parameter doesn't
    # have braces around it.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    
    # good
    some_method(x, y, a: 1, b: 2)

    Example: EnforcedStyle: context_dependent

    # The `context_dependent` style checks that the last parameter
    # doesn't have braces around it, but requires braces if the
    # second to last parameter is also a hash literal.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
    
    # good
    some_method(x, y, a: 1, b: 2)
    some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

    Redundant curly braces around a hash parameter.
    Open

                check_slideshow_values_correct(options.merge({ current: 0 }))
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

    Example: EnforcedStyle: braces

    # The `braces` style enforces braces around all method
    # parameters that are hashes.
    
    # bad
    some_method(x, y, a: 1, b: 2)
    
    # good
    some_method(x, y, {a: 1, b: 2})

    Example: EnforcedStyle: no_braces (default)

    # The `no_braces` style checks that the last parameter doesn't
    # have braces around it.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    
    # good
    some_method(x, y, a: 1, b: 2)

    Example: EnforcedStyle: context_dependent

    # The `context_dependent` style checks that the last parameter
    # doesn't have braces around it, but requires braces if the
    # second to last parameter is also a hash literal.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
    
    # good
    some_method(x, y, a: 1, b: 2)
    some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

    Redundant curly braces around a hash parameter.
    Open

                  @different_basket = create_new_basket({ name: 'different basket' })
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

    Example: EnforcedStyle: braces

    # The `braces` style enforces braces around all method
    # parameters that are hashes.
    
    # bad
    some_method(x, y, a: 1, b: 2)
    
    # good
    some_method(x, y, {a: 1, b: 2})

    Example: EnforcedStyle: no_braces (default)

    # The `no_braces` style checks that the last parameter doesn't
    # have braces around it.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    
    # good
    some_method(x, y, a: 1, b: 2)

    Example: EnforcedStyle: context_dependent

    # The `context_dependent` style checks that the last parameter
    # doesn't have braces around it, but requires braces if the
    # second to last parameter is also a hash literal.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
    
    # good
    some_method(x, y, a: 1, b: 2)
    some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

    Redundant curly braces around a hash parameter.
    Open

                    @non_site_basket_1 = create_new_basket({ name: 'basket 1' })
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

    Example: EnforcedStyle: braces

    # The `braces` style enforces braces around all method
    # parameters that are hashes.
    
    # bad
    some_method(x, y, a: 1, b: 2)
    
    # good
    some_method(x, y, {a: 1, b: 2})

    Example: EnforcedStyle: no_braces (default)

    # The `no_braces` style checks that the last parameter doesn't
    # have braces around it.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    
    # good
    some_method(x, y, a: 1, b: 2)

    Example: EnforcedStyle: context_dependent

    # The `context_dependent` style checks that the last parameter
    # doesn't have braces around it, but requires braces if the
    # second to last parameter is also a hash literal.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
    
    # good
    some_method(x, y, a: 1, b: 2)
    some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

    Redundant curly braces around a hash parameter.
    Open

                          basket_id: create_new_basket({ name: "basket #{i + 1}" }).id,
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

    Example: EnforcedStyle: braces

    # The `braces` style enforces braces around all method
    # parameters that are hashes.
    
    # bad
    some_method(x, y, a: 1, b: 2)
    
    # good
    some_method(x, y, {a: 1, b: 2})

    Example: EnforcedStyle: no_braces (default)

    # The `no_braces` style checks that the last parameter doesn't
    # have braces around it.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    
    # good
    some_method(x, y, a: 1, b: 2)

    Example: EnforcedStyle: context_dependent

    # The `context_dependent` style checks that the last parameter
    # doesn't have braces around it, but requires braces if the
    # second to last parameter is also a hash literal.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
    
    # good
    some_method(x, y, a: 1, b: 2)
    some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

    Redundant curly braces around a hash parameter.
    Open

              check_slideshow_values_correct(options.merge({ current: 0 }))
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for braces around the last parameter in a method call if the last parameter is a hash. It supports braces, no_braces and context_dependent styles.

    Example: EnforcedStyle: braces

    # The `braces` style enforces braces around all method
    # parameters that are hashes.
    
    # bad
    some_method(x, y, a: 1, b: 2)
    
    # good
    some_method(x, y, {a: 1, b: 2})

    Example: EnforcedStyle: no_braces (default)

    # The `no_braces` style checks that the last parameter doesn't
    # have braces around it.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    
    # good
    some_method(x, y, a: 1, b: 2)

    Example: EnforcedStyle: context_dependent

    # The `context_dependent` style checks that the last parameter
    # doesn't have braces around it, but requires braces if the
    # second to last parameter is also a hash literal.
    
    # bad
    some_method(x, y, {a: 1, b: 2})
    some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
    
    # good
    some_method(x, y, a: 1, b: 2)
    some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})

    Use normalcase for variable numbers.
    Open

                    @non_site_basket_1 = create_new_basket({ name: 'basket 1' })
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop makes sure that all numbered variables use the configured style, snakecase, normalcase or noninteger, for their numbering.

    Example: EnforcedStyle: snake_case

    # bad
    
    variable1 = 1
    
    # good
    
    variable_1 = 1

    Example: EnforcedStyle: normalcase (default)

    # bad
    
    variable_1 = 1
    
    # good
    
    variable1 = 1

    Example: EnforcedStyle: non_integer

    # bad
    
    variable1 = 1
    
    variable_1 = 1
    
    # good
    
    variableone = 1
    
    variable_one = 1

    Useless assignment to variable - new_image_file.
    Open

              new_image_file = ImageFile.create(uploaded_data: @@documentdata, still_image_id: new_still_image.id)
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for every useless assignment to local variable in every scope. The basic idea for this cop was from the warning of ruby -cw:

    assigned but unused variable - foo

    Currently this cop has advanced logic that detects unreferenced reassignments and properly handles varied cases such as branch, loop, rescue, ensure, etc.

    Example:

    # bad
    
    def some_method
      some_var = 1
      do_something
    end

    Example:

    # good
    
    def some_method
      some_var = 1
      do_something(some_var)
    end

    Replace class var @@documentdata with a class instance var.
    Open

              @@documentdata ||= fixture_file_upload('/files/white.jpg', 'image/jpeg')
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop checks for uses of class variables. Offenses are signaled only on assignment to class variables to reduce the number of offenses that would be reported.

    Do not use unless with else. Rewrite these with the positive case first.
    Open

              unless options[:current].blank?
                assert_equal session['image_slideshow']['results'][options[:current]], session['image_slideshow']['last_requested']
              else
                assert_equal nil, session['image_slideshow']['last_requested']
              end
    Severity: Minor
    Found in lib/image_slideshow_test_helper.rb by rubocop

    This cop looks for unless expressions with else clauses.

    Example:

    # bad
    unless foo_bar.nil?
      # do something...
    else
      # do a different thing...
    end
    
    # good
    if foo_bar.present?
      # do something...
    else
      # do a different thing...
    end

    There are no issues that match your filters.

    Category
    Status