pipeline_serializer_spec.rb 2,7 КБ
Newer Older
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
1
2
3
require 'spec_helper'

describe PipelineSerializer do
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
4
5
  let(:user) { create(:user) }

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
6
7
8
9
  let(:serializer) do
    described_class.new(user: user)
  end

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
10
  subject { serializer.represent(resource) }
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
11

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
12
  describe '#represent' do
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
    context 'when used without pagination' do
      it 'created a not paginated serializer' do
        expect(serializer).not_to be_paginated
      end

      context 'when a single object is being serialized' do
        let(:resource) { create(:ci_empty_pipeline) }

        it 'serializers the pipeline object' do
          expect(subject[:id]).to eq resource.id
        end
      end

      context 'when multiple objects are being serialized' do
        let(:resource) { create_list(:ci_pipeline, 2) }

        it 'serializers the array of pipelines' do
          expect(subject).not_to be_empty
        end
      end
    end

    context 'when used with pagination' do
      let(:request) { spy('request') }
      let(:response) { spy('response') }
      let(:pagination) { {} }

      before do
        allow(request)
          .to receive(:query_parameters)
          .and_return(pagination)
      end

      let(:serializer) do
        described_class.new(user: user)
          .with_pagination(request, response)
      end

      it 'created a paginated serializer' do
        expect(serializer).to be_paginated
      end

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
55
      context 'when resource is not paginatable' do
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
        context 'when a single pipeline object is being serialized' do
          let(:resource) { create(:ci_empty_pipeline) }
          let(:pagination) { { page: 1, per_page: 1 } }

          it 'raises error' do
            expect { subject }
              .to raise_error(PipelineSerializer::InvalidResourceError)
          end
        end
      end

      context 'when resource is paginatable relation' do
        let(:resource) { Ci::Pipeline.all }
        let(:pagination) { { page: 1, per_page: 2 } }

        context 'when a single pipeline object is present in relation' do
          before { create(:ci_empty_pipeline) }

          it 'serializes pipeline relation' do
            expect(subject.first).to have_key :id
          end
        end

        context 'when a multiple pipeline objects are being serialized' do
          before { create_list(:ci_empty_pipeline, 3) }

          it 'serializes appropriate number of objects' do
            expect(subject.count).to be 2
          end

          it 'appends relevant headers' do
            expect(response).to receive(:[]=).with('X-Total', '3')
            expect(response).to receive(:[]=).with('X-Total-Pages', '2')
            expect(response).to receive(:[]=).with('X-Per-Page', '2')
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
90

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
91
92
93
94
            subject
          end
        end
      end
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
95
96
    end
  end
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
97
end