From f1e9c97d64b96bdd398616743ad048f8d147e26b Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Wed, 2 Nov 2016 14:36:21 +0100
Subject: [PATCH] Use entity request object in environment entity

---
 app/serializers/environment_entity.rb           | 14 +++++++++++---
 app/serializers/project_entity.rb               |  4 +++-
 app/serializers/request_aware_entity.rb         |  5 -----
 spec/serializers/environment_serializer_spec.rb | 17 ++++++++---------
 4 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/app/serializers/environment_entity.rb b/app/serializers/environment_entity.rb
index 9415f1dd450..006b2841e8f 100644
--- a/app/serializers/environment_entity.rb
+++ b/app/serializers/environment_entity.rb
@@ -9,9 +9,17 @@ class EnvironmentEntity < Grape::Entity
     as: :deployment,
     using: API::Entities::Deployment
 
-  expose :environment_path
+  expose :gitlab_path do |environment|
+    namespace_project_environment_path(
+      environment.project.namespace,
+      environment.project,
+      environment
+    )
+  end
+
+  expose :can_read?
 
-  def environment_path
-    request.path
+  def can_read?
+    Ability.allowed?(request.user, :read_environment, @object)
   end
 end
diff --git a/app/serializers/project_entity.rb b/app/serializers/project_entity.rb
index b8e23db470b..047366eb687 100644
--- a/app/serializers/project_entity.rb
+++ b/app/serializers/project_entity.rb
@@ -1,8 +1,10 @@
 class ProjectEntity < Grape::Entity
+  include RequestAwareEntity
+
   expose :id
   expose :name
 
   expose :test do |project|
-    'something'
+    request.user.email
   end
 end
diff --git a/app/serializers/request_aware_entity.rb b/app/serializers/request_aware_entity.rb
index f6b6f64d0f8..fc7d1698b1a 100644
--- a/app/serializers/request_aware_entity.rb
+++ b/app/serializers/request_aware_entity.rb
@@ -1,9 +1,4 @@
 module RequestAwareEntity
-  # We use SerializableRequest class to collect parameters and variables
-  # from the controller. Because options that are being passed to the entity
-  # are appear in each entity in the chain, we need a way to access data
-  # that is present in the controller (see  #20045).
-  #
   def request
     options[:request] ||
       raise(StandardError, 'Request not set!!')
diff --git a/spec/serializers/environment_serializer_spec.rb b/spec/serializers/environment_serializer_spec.rb
index 3470863681c..cd9486111f1 100644
--- a/spec/serializers/environment_serializer_spec.rb
+++ b/spec/serializers/environment_serializer_spec.rb
@@ -2,18 +2,21 @@ require 'spec_helper'
 
 describe EnvironmentSerializer do
   let(:serializer) do
-    described_class.new(path: 'some path').represent(resource)
+    described_class.new(path: 'some path', user: user)
+      .represent(resource)
   end
 
+  let(:user) { create(:user) }
+
   context 'when there is a single object provided' do
     let(:resource) { create(:environment) }
 
     it 'shows json' do
-      puts serializer.to_json
+      puts serializer.as_json
     end
 
     it 'it generates payload for single object' do
-      expect(parsed_json).to be_an_instance_of Hash
+      expect(serializer.as_json).to be_an_instance_of Hash
     end
   end
 
@@ -21,15 +24,11 @@ describe EnvironmentSerializer do
     let(:resource) { create_list(:environment, 2) }
 
     it 'shows json' do
-      puts serializer.to_json
+      puts serializer.as_json
     end
 
     it 'generates payload for collection' do
-      expect(parsed_json).to be_an_instance_of Array
+      expect(serializer.as_json).to be_an_instance_of Array
     end
   end
-
-  def parsed_json
-    JSON.parse(serializer.to_json)
-  end
 end
-- 
GitLab