From 92312786f13c72188abbbe4f0b6cbdd36de2331d Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Wed, 29 Jun 2016 09:10:23 +0200
Subject: [PATCH] Add CI config entry location info to error message

This CI config entry location in configuration Hash.
---
 lib/gitlab/ci/config/node/entry.rb               | 7 +------
 lib/gitlab/ci/config/node/validator.rb           | 9 ++++++++-
 spec/lib/gitlab/ci/config/node/global_spec.rb    | 6 ------
 spec/lib/gitlab/ci/config/node/validator_spec.rb | 7 ++++++-
 4 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb
index f22dac44836..17d04fbdfec 100644
--- a/lib/gitlab/ci/config/node/entry.rb
+++ b/lib/gitlab/ci/config/node/entry.rb
@@ -8,9 +8,8 @@ module Gitlab
         class Entry
           class InvalidError < StandardError; end
 
-          attr_writer :key
           attr_reader :config
-          attr_accessor :parent, :description
+          attr_accessor :key, :parent, :description
 
           def initialize(config)
             @config = config
@@ -35,10 +34,6 @@ module Gitlab
             self.class.nodes.none?
           end
 
-          def key
-            @key || self.class.name.demodulize.underscore
-          end
-
           def valid?
             errors.none?
           end
diff --git a/lib/gitlab/ci/config/node/validator.rb b/lib/gitlab/ci/config/node/validator.rb
index 18e795d2c42..d898d521548 100644
--- a/lib/gitlab/ci/config/node/validator.rb
+++ b/lib/gitlab/ci/config/node/validator.rb
@@ -8,17 +8,24 @@ module Gitlab
 
           def initialize(node)
             super(node)
+            @node = node
           end
 
           def messages
             errors.full_messages.map do |error|
-              "#{key} #{error}".humanize
+              "#{location} #{error}".humanize
             end
           end
 
           def self.name
             'Validator'
           end
+
+          private
+
+          def location
+            key || @node.class.name.demodulize.underscore
+          end
         end
       end
     end
diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb
index 6aef6b913cf..cf7ab13c8b1 100644
--- a/spec/lib/gitlab/ci/config/node/global_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/global_spec.rb
@@ -13,12 +13,6 @@ describe Gitlab::Ci::Config::Node::Global do
     end
   end
 
-  describe '#key' do
-    it 'returns underscored class name' do
-      expect(global.key).to eq 'global'
-    end
-  end
-
   context 'when hash is valid' do
     context 'when all entries defined' do
       let(:hash) do
diff --git a/spec/lib/gitlab/ci/config/node/validator_spec.rb b/spec/lib/gitlab/ci/config/node/validator_spec.rb
index c293faa33ae..87a1bbf55c0 100644
--- a/spec/lib/gitlab/ci/config/node/validator_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/validator_spec.rb
@@ -5,6 +5,10 @@ describe Gitlab::Ci::Config::Node::Validator do
   let(:validator_instance) { validator.new(node) }
   let(:node) { spy('node') }
 
+  before do
+    allow(node).to receive(:key).and_return('node')
+  end
+
   describe 'delegated validator' do
     before do
       validator.class_eval do
@@ -42,7 +46,8 @@ describe Gitlab::Ci::Config::Node::Validator do
       it 'returns errors' do
         validator_instance.validate
 
-        expect(validator_instance.messages).not_to be_empty
+        expect(validator_instance.messages)
+          .to include "Node test attribute can't be blank"
       end
     end
   end
-- 
GitLab