From afe61430bd216dad27d1fd53a1a24ed3bdad28d1 Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Wed, 11 Apr 2018 10:07:15 +0200
Subject: [PATCH] Fix file-specific variables collection item option

---
 lib/gitlab/ci/variables/collection/item.rb    |  7 ++--
 .../ci/variables/collection/item_spec.rb      | 35 ++++++++++++++++---
 2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/lib/gitlab/ci/variables/collection/item.rb b/lib/gitlab/ci/variables/collection/item.rb
index 23ed71db8b0e..d00e5b07f957 100644
--- a/lib/gitlab/ci/variables/collection/item.rb
+++ b/lib/gitlab/ci/variables/collection/item.rb
@@ -3,12 +3,9 @@ module Ci
     module Variables
       class Collection
         class Item
-          def initialize(**options)
+          def initialize(key:, value:, public: true, file: false)
             @variable = {
-              key: options.fetch(:key),
-              value: options.fetch(:value),
-              public: options.fetch(:public, true),
-              file: options.fetch(:files, false)
+              key: key, value: value, public: public, file: file
             }
           end
 
diff --git a/spec/lib/gitlab/ci/variables/collection/item_spec.rb b/spec/lib/gitlab/ci/variables/collection/item_spec.rb
index bf9208f1ff4e..e79f0a7f257f 100644
--- a/spec/lib/gitlab/ci/variables/collection/item_spec.rb
+++ b/spec/lib/gitlab/ci/variables/collection/item_spec.rb
@@ -5,6 +5,18 @@
     { key: 'VAR', value: 'something', public: true }
   end
 
+  describe '.new' do
+    it 'raises error if unknown key i specified' do
+      expect { described_class.new(key: 'VAR', value: 'abc', files: true) }
+        .to raise_error ArgumentError, 'unknown keyword: files'
+    end
+
+    it 'raises error when required keywords are not specified' do
+      expect { described_class.new(key: 'VAR') }
+        .to raise_error ArgumentError, 'missing keyword: value'
+    end
+  end
+
   describe '.fabricate' do
     it 'supports using a hash' do
       resource = described_class.fabricate(variable)
@@ -47,12 +59,25 @@
   end
 
   describe '#to_runner_variable' do
-    it 'returns a runner-compatible hash representation' do
-      runner_variable = described_class
-        .new(**variable)
-        .to_runner_variable
+    context 'when variable is not a file-related' do
+      it 'returns a runner-compatible hash representation' do
+        runner_variable = described_class
+          .new(**variable)
+          .to_runner_variable
+
+        expect(runner_variable).to eq variable
+      end
+    end
+
+    context 'when variable is file-related' do
+      it 'appends file description component' do
+        runner_variable = described_class
+          .new(key: 'VAR', value: 'value', file: true)
+          .to_runner_variable
 
-      expect(runner_variable).to eq variable
+        expect(runner_variable)
+          .to eq(key: 'VAR', value: 'value', public: true, file: true)
+      end
     end
   end
 end
-- 
GitLab