WIP - adding a generic entity serializer that should accept a Hash coming from Arel
This commit is contained in:
parent
3b179bc37b
commit
0ddf825ddf
|
@ -0,0 +1,32 @@
|
|||
class AnalyticsGenericEntity < Grape::Entity
|
||||
include RequestAwareEntity
|
||||
include ActionView::Helpers::DateHelper
|
||||
|
||||
|
||||
expose :title
|
||||
expose :iid
|
||||
expose :started_at, as: :date
|
||||
expose :author, using: UserEntity
|
||||
|
||||
expose :total_time do |object|
|
||||
distance_of_time_in_words(object[:total_time].to_f)
|
||||
end
|
||||
|
||||
expose(:date) do |object|
|
||||
interval_in_words(object[:created_at])
|
||||
end
|
||||
|
||||
expose :url do |object|
|
||||
url_to("namespace_project_#{object[:entity]}".to_sym, id: object[:iid].to_s)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def url_to(route, id = nil)
|
||||
public_send("#{route}_url", options[:project].namespace, options[:project], id)
|
||||
end
|
||||
|
||||
def interval_in_words(diff)
|
||||
"#{distance_of_time_in_words(diff.to_f)} ago"
|
||||
end
|
||||
end
|
|
@ -0,0 +1,3 @@
|
|||
class AnalyticsGenericSerializer < BaseSerializer
|
||||
entity AnalyticsGenericEntity
|
||||
end
|
|
@ -0,0 +1,39 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe AnalyticsGenericEntity do
|
||||
let(:user) { create(:user) }
|
||||
let(:entity_hash) {
|
||||
{
|
||||
total_time: "172802.724419",
|
||||
title: "Eos voluptatem inventore in sed.",
|
||||
iid: "1",
|
||||
id: "1",
|
||||
created_at: "2016-11-12 15:04:02.948604",
|
||||
author: user,
|
||||
entity: :merge_request
|
||||
}
|
||||
}
|
||||
|
||||
let(:project) { create(:empty_project) }
|
||||
|
||||
let(:entity) do
|
||||
described_class.new(entity_hash, request: double, project: project)
|
||||
end
|
||||
|
||||
context 'generic entity' do
|
||||
subject { entity.as_json }
|
||||
|
||||
it 'contains the entity URL' do
|
||||
expect(subject).to include(:url)
|
||||
end
|
||||
|
||||
it 'contains the author' do
|
||||
expect(subject).to include(:author)
|
||||
end
|
||||
|
||||
it 'does not contain sensitive information' do
|
||||
expect(subject).not_to include(/token/)
|
||||
expect(subject).not_to include(/variables/)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,24 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe AnalyticsBuildSerializer do
|
||||
let(:serializer) do
|
||||
described_class
|
||||
.new(project: project)
|
||||
.represent(resource)
|
||||
end
|
||||
|
||||
let(:json) { serializer.as_json }
|
||||
let(:project) { create(:project) }
|
||||
let(:resource) { create(:ci_build) }
|
||||
|
||||
context 'when there is a single object provided' do
|
||||
it 'it generates payload for single object' do
|
||||
expect(json).to be_an_instance_of Hash
|
||||
end
|
||||
|
||||
it 'contains important elements of analyticsBuild' do
|
||||
expect(json)
|
||||
.to include(:name, :branch, :short_sha, :date, :total_time, :url, :branch_url, :commit_url, :author)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue