From 9410aecca87a1c03f7e7fb1e5e1073460c71b6e5 Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Thu, 7 Jul 2016 13:39:13 +0200
Subject: [PATCH] Add scaffold of CI config for the job stage entry

---
 lib/gitlab/ci/config/node/stage.rb           | 22 ++++++++++
 spec/lib/gitlab/ci/config/node/stage_spec.rb | 46 ++++++++++++++++++++
 2 files changed, 68 insertions(+)
 create mode 100644 lib/gitlab/ci/config/node/stage.rb
 create mode 100644 spec/lib/gitlab/ci/config/node/stage_spec.rb

diff --git a/lib/gitlab/ci/config/node/stage.rb b/lib/gitlab/ci/config/node/stage.rb
new file mode 100644
index 00000000000..53ceafaa3f4
--- /dev/null
+++ b/lib/gitlab/ci/config/node/stage.rb
@@ -0,0 +1,22 @@
+module Gitlab
+  module Ci
+    class Config
+      module Node
+        ##
+        # Entry that represents a stage for a job.
+        #
+        class Stage < Entry
+          include Validatable
+
+          validations do
+            validates :config, key: true
+          end
+
+          def self.default
+            :test
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/spec/lib/gitlab/ci/config/node/stage_spec.rb b/spec/lib/gitlab/ci/config/node/stage_spec.rb
new file mode 100644
index 00000000000..653d613ba6e
--- /dev/null
+++ b/spec/lib/gitlab/ci/config/node/stage_spec.rb
@@ -0,0 +1,46 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Config::Node::Stage do
+  let(:entry) { described_class.new(config) }
+
+  describe 'validations' do
+    context 'when entry config value is correct' do
+      let(:config) { :stage1 }
+
+      describe '#value' do
+        it 'returns a stage key' do
+          expect(entry.value).to eq config
+        end
+      end
+
+      describe '#valid?' do
+        it 'is valid' do
+          expect(entry).to be_valid
+        end
+      end
+
+      context 'when entry config is incorrect' do
+        let(:config) { { test: true } }
+
+        describe '#errors' do
+          it 'reports errors' do
+            expect(entry.errors)
+              .to include 'stage config should be a string or symbol'
+          end
+        end
+
+        describe '#valid?' do
+          it 'is not valid' do
+            expect(entry).not_to be_valid
+          end
+        end
+      end
+    end
+  end
+
+  describe '.default' do
+    it 'returns default stage' do
+      expect(described_class.default).to eq :test
+    end
+  end
+end
-- 
GitLab