fluke/devops-service/tests/templates/generators/path_scenarios_generator.rb
Tim Lianov 03dc3d8d99 v3
2018-04-04 22:44:39 +03:00

190 lines
6.3 KiB
Ruby

module PathScenariosGenerator
def generate_get_path_scenarios_with_provider name, path, provider, &block
concat %Q(
@#{provider}
Scenario: #{name}
When I send GET '#{path}' query
Then response should be '200'
And the Content-Type header should include 'application/json'
)
res = block.call if block_given?
generate_401_406 name, "GET", path, nil, provider
end
def generate_get_path_scenarios name, path, &block
concat %Q(
Scenario: #{name}
When I send GET '#{path}' query
Then response should be '200'
And the Content-Type header should include 'application/json'
)
res = block.call if block_given?
generate_401_406 name, "GET", path
end
def generate_mandatory_fields_validation method, name, path, body, mandatory_fields=[], provider=nil
mandatory_fields.each do |field|
types = [Array, Hash, String]
val_class = body[field].class
types.delete(val_class)
# mongoid specification: [] and {} are valid values for String
# invalid_value_code = val_class == String ? 422 : 400
types.each do |t|
value = t.new
tmp_body = body.clone
tmp_body[field] = value
concat "\n @#{provider}" if provider
concat %Q(\n Scenario: #{name} with invalid parameter '#{field}', value: '#{value}'
When I send #{method.upcase} '#{path}' query with JSON body
"""
#{JSON.pretty_generate(tmp_body)}
"""
Then response should be '400'
And the Content-Type header should include 'application/json'
)
tmp_body[field] = nil
concat "\n @#{provider}" if provider
concat %Q(\n Scenario: #{name} with invalid parameter '#{field}', value: null
When I send #{method.upcase} '#{path}' query with JSON body
"""
#{JSON.pretty_generate(tmp_body)}
"""
Then response should be '400'
And the Content-Type header should include 'application/json'
)
tmp_body.delete(field)
concat "\n @#{provider}" if provider
concat %Q(\n Scenario: #{name} without parameter '#{field}'
When I send #{method.upcase} '#{path}' query with JSON body
"""
#{JSON.pretty_generate(tmp_body)}
"""
Then response should be '400'
And the Content-Type header should include 'application/json'
)
end
end
end
def generate_create_path_scenarios_without_401 name, path, body, mandatory_fields=[], provider=nil, &block
generate_406 name, "POST", path, body, provider
generate_mandatory_fields_validation "POST", name, path, body, mandatory_fields, provider
concat "\n @#{provider}" if provider
concat %Q(\n Scenario: #{name}
When I send POST '#{path}' query with JSON body
"""
#{JSON.pretty_generate(body)}
"""
Then response should be '201'
And the Content-Type header should include 'application/json'
)
res = block.call if block_given?
concat "\n @#{provider}" if provider
concat %Q(\n Scenario: #{name} (second time)
When I send POST '#{path}' query with JSON body
"""
#{JSON.pretty_generate(body)}
"""
Then response should be '422'
And the Content-Type header should include 'application/json'
)
end
def generate_create_path_scenarios name, path, body, mandatory_fields=[], provider=nil, &block
generate_401 name, "POST", path, provider
generate_create_path_scenarios_without_401 name, path, body, mandatory_fields, provider, &block
end
def generate_401_406_415 name, method, path, body, provider=nil
generate_401_406(name, method, path, body, provider)
generate_415 name, method, path, body, provider
end
def generate_401_406 name, method, path, body=nil, provider=nil
generate_406 name, method, path, body, provider
generate_401 name, method, path, provider
end
def generate_401 name, method, path, provider=nil
concat "\n @#{provider}" unless provider.nil?
concat %Q(\n Scenario: #{name} with user without privileges
When I send #{method} '#{path}' query with user without privileges
Then response should be '401'
)
end
def generate_406 name, method, path, body=nil, provider=nil
concat "\n @#{provider}" unless provider.nil?
if body.nil?
concat %Q(\n Scenario: #{name} with header 'Accept' value not 'application/json'
When I send #{method} '#{path}' query with header 'Accept' value 'application/xml'
Then response should be '406'
)
else
concat %Q(\n Scenario: #{name} with header 'Accept' value not 'application/json'
When I send #{method} '#{path}' query with JSON body with header 'Accept' value 'application/xml'
"""
#{JSON.pretty_generate(body)}
"""
Then response should be '406'
)
end
end
def generate_415 name, method, path, body, provider=nil
concat "\n @#{provider}" unless provider.nil?
concat %Q(\n Scenario: #{name} without header 'Content-Type'
When I send #{method} '#{path}' query with JSON body without header 'Content-Type'
"""
#{JSON.pretty_generate(body)}
"""
Then response should be '415'
)
end
def generate_delete_path_scenarios name, path, provider=nil, &block
generate_401 name, "DELETE", path, provider
generate_406 name, "DELETE", path, nil, provider
concat "\n @#{provider}" if provider
concat %Q(\n Scenario: #{name}
When I send DELETE '#{path}' query
Then response should be '200'
And the Content-Type header should include 'application/json'
)
res = block.call if block_given?
concat "\n @#{provider}" unless provider.nil?
concat %Q(\n Scenario: #{name} (second time)
When I send DELETE '#{path}' query
Then response should be '404'
And the Content-Type header should include 'application/json'
And the JSON response should be an object
)
end
def generate_update_path_scenarios name, path, body, provider=nil, &block
generate_modify_path_scenarios "PUT", name, path, body, provider, &block
end
def generate_modify_path_scenarios method, name, path, body, provider=nil, &block
generate_401 name, method.upcase, path, provider
generate_406 name, method.upcase, path, body, provider
concat "\n @#{provider}" if provider
concat %Q(\n Scenario: #{name}
When I send #{method.upcase} '#{path}' query with JSON body
"""
#{JSON.pretty_generate(body)}
"""
Then response should be '200'
And the Content-Type header should include 'application/json'
)
res = block.call if block_given?
end
end