flood-io/ruby-jmeter

View on GitHub
lib/ruby-jmeter/extend/assertions/response_assertion.rb

Summary

Maintainability
A
0 mins
Test Coverage
module RubyJmeter
  class ExtendedDSL < DSL
    def response_assertion(params, &block)
      params[:test_type] = parse_test_type(params)
      params['0'] = params.values.first

      if params[:json]
        params[:EXPECTED_VALUE] = params[:value]
        params[:JSON_PATH] = params[:json]
        node = RubyJmeter::Plugins::JsonPathAssertion.new(params)
      end

      node ||= RubyJmeter::ResponseAssertion.new(params).tap do |node|
        if params[:variable]
          params['Scope.variable'] = params[:variable]
          node.doc.xpath("//stringProp[@name='Assertion.scope']").first.content = 'variable'

          node.doc.children.first.add_child (
            Nokogiri::XML(<<-EOS.strip_heredoc).children
              <stringProp name="Scope.variable">#{params[:variable]}</stringProp>
            EOS
          )
        end

        if params[:scope] == 'main'
          node.doc.xpath("//stringProp[@name='Assertion.scope']").remove
        end
      end

      attach_node(node, &block)
    end

    alias assert response_assertion
    alias web_reg_find response_assertion
  end
end