CID-367 fix non existing user message

This commit is contained in:
Anton Chuchkalov 2016-02-24 14:33:02 +03:00
parent 80ca2d7ad1
commit fa30faed2b
10 changed files with 55 additions and 11 deletions

View File

@ -147,6 +147,7 @@ module Devops
project.delete_deploy_env(deploy_env) project.delete_deploy_env(deploy_env)
end end
# updates only run_list and description
def update_project id def update_project id
body = parser.update body = parser.update
old_project = Devops::Db.connector.project id old_project = Devops::Db.connector.project id

View File

@ -385,13 +385,9 @@ module Devops
# 201 - Created # 201 - Created
app.post_with_headers "/project", :headers => [:accept, :content_type] do app.post_with_headers "/project", :headers => [:accept, :content_type] do
check_privileges("project", "w") check_privileges("project", "w")
begin
res = Devops::API2_0::Handler::Project.new(request).create_project res = Devops::API2_0::Handler::Project.new(request).create_project
res = "Created. " + res res = "Created. " + res
create_response(res, nil, 201) create_response(res, nil, 201)
rescue InvalidRecord => e
halt_response(e.message)
end
end end
=begin =begin

View File

@ -63,7 +63,8 @@ module Devops
true true
rescue InvalidRecord => e rescue InvalidRecord => e
error_message = self.build_error_message(e.message) error_message = self.build_error_message(e.message)
raise InvalidRecord.new(error_message) # e.class may be InvalidRecord or its descendants
raise e.class.new(error_message)
end end
end end

View File

@ -7,10 +7,10 @@ module Validators
end end
def validate! def validate!
raise InvalidRecord.new(message) unless valid? raise error_class.new(message) unless valid?
rescue StandardError => e rescue StandardError => e
DevopsLogger.logger.error [e.message, e.backtrace].join("\n") DevopsLogger.logger.error [e.message, e.backtrace].join("\n")
raise InvalidRecord.new("An error raised during validation with #{self.class}: #{e.class}: #{e.message}") raise error_class.new("An error raised during validation with #{self.class}: #{e.class}: #{e.message}")
end end
def valid? def valid?
@ -21,9 +21,21 @@ module Validators
raise 'override me' raise 'override me'
end end
def error_class
self.class.get_error_class
end
class << self class << self
def get_error_class
@error_class || InvalidRecord
end
private private
def error_class(klass)
@error_class = klass
end
# this method delegates @valid? and @message methods to helper validator, passed as block # this method delegates @valid? and @message methods to helper validator, passed as block
def delegate_to_helper_validator(&block) def delegate_to_helper_validator(&block)

View File

@ -14,6 +14,18 @@ module Validators
true true
end end
# do not rescue children validators' errors. With this:
# class of child validator's error doesn't disappeared
# logs doesn't contain two similar records
def validate!
raise error_class.new(message) unless valid?
rescue InvalidRecord => e
raise e
rescue StandardError => e
DevopsLogger.logger.error [e.message, e.backtrace].join("\n")
raise error_class.new("An error raised during validation with #{self.class}: #{e.class}: #{e.message}")
end
def message def message
"Invalid project: #{@msg}." "Invalid project: #{@msg}."
end end

View File

@ -1,5 +1,7 @@
module Validators module Validators
class DeployEnv::Users < Base class DeployEnv::Users < Base
error_class ::Devops::NonExistingUser
delegate_to_helper_validator { Helpers::Users.new(@model.users) } delegate_to_helper_validator { Helpers::Users.new(@model.users) }
end end
end end

View File

@ -1,6 +1,9 @@
require 'exceptions/non_existing_user'
module Validators module Validators
class Helpers::Users < Base class Helpers::Users < Base
error_class ::Devops::NonExistingUser
def valid? def valid?
available_users = ::Devops::Db.connector.users_names(@model) available_users = ::Devops::Db.connector.users_names(@model)
@nonexistent_users = (@model || []) - available_users @nonexistent_users = (@model || []) - available_users

View File

@ -13,7 +13,9 @@ module Devops
end end
def http_body def http_body
JSON.pretty_generate(message: self.message) error_body = {message: self.message}
error_body[:error_type] = error_type if respond_to?(:error_type)
JSON.pretty_generate(error_body)
end end
def http_headers def http_headers

View File

@ -0,0 +1,8 @@
require_relative 'invalid_record'
module Devops
class NonExistingUser < ::InvalidRecord
def error_type
'unknown_user'
end
end
end

View File

@ -22,6 +22,13 @@ RSpec.describe Devops::Model::DeployEnvEc2, type: :model do
it_behaves_like 'deploy env' it_behaves_like 'deploy env'
it_behaves_like 'cloud deploy env' it_behaves_like 'cloud deploy env'
it 'raises Devops::NonExistingUser when passing non existing user' do
env = build(:deploy_env_ec2, users: %w(wrong))
expect {
env.validate!
}.to raise_error Devops::NonExistingUser
end
end end
describe '#initialize' do describe '#initialize' do