summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/gitaly_client/wiki_service_spec.rb
blob: d82c9c28da0febbc71eb3ba2880afd36b5f913c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
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
55
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
require 'spec_helper'

describe Gitlab::GitalyClient::WikiService do
  let(:project) { create(:project) }
  let(:storage_name) { project.repository_storage }
  let(:relative_path) { project.disk_path + '.git' }
  let(:client) { described_class.new(project.repository) }
  let(:commit) { create(:gitaly_commit) }
  let(:page_version) { Gitaly::WikiPageVersion.new(format: 'markdown', commit: commit) }
  let(:page_info) { { title: 'My Page', raw_data: 'a', version: page_version } }

  describe '#find_page' do
    let(:response) do
      [
        Gitaly::WikiFindPageResponse.new(page: Gitaly::WikiPage.new(page_info)),
        Gitaly::WikiFindPageResponse.new(page: Gitaly::WikiPage.new(raw_data: 'b'))
      ]
    end
    let(:wiki_page) { subject.first }
    let(:wiki_page_version) { subject.last }

    subject { client.find_page(title: 'My Page', version: 'master', dir: '') }

    it 'sends a wiki_find_page message' do
      expect_any_instance_of(Gitaly::WikiService::Stub)
        .to receive(:wiki_find_page)
        .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
        .and_return([].each)

      subject
    end

    it 'concatenates the raw data and returns a pair of WikiPage and WikiPageVersion' do
      expect_any_instance_of(Gitaly::WikiService::Stub)
        .to receive(:wiki_find_page)
        .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
        .and_return(response.each)

      expect(wiki_page.title).to eq('My Page')
      expect(wiki_page.raw_data).to eq('ab')
      expect(wiki_page_version.format).to eq('markdown')

      expect(wiki_page.title).to be_utf8
      expect(wiki_page.path).to be_utf8
      expect(wiki_page.name).to be_utf8
    end
  end

  describe '#get_all_pages' do
    let(:page_2_info) { { title: 'My Page 2', raw_data: 'c', version: page_version } }
    let(:response) do
      [
        Gitaly::WikiGetAllPagesResponse.new(page: Gitaly::WikiPage.new(page_info)),
        Gitaly::WikiGetAllPagesResponse.new(page: Gitaly::WikiPage.new(raw_data: 'b')),
        Gitaly::WikiGetAllPagesResponse.new(end_of_page: true),
        Gitaly::WikiGetAllPagesResponse.new(page: Gitaly::WikiPage.new(page_2_info)),
        Gitaly::WikiGetAllPagesResponse.new(page: Gitaly::WikiPage.new(raw_data: 'd')),
        Gitaly::WikiGetAllPagesResponse.new(end_of_page: true)
      ]
    end
    let(:wiki_page_1) { subject[0].first }
    let(:wiki_page_1_version) { subject[0].last }
    let(:wiki_page_2) { subject[1].first }
    let(:wiki_page_2_version) { subject[1].last }

    subject { client.get_all_pages }

    it 'sends a wiki_get_all_pages message' do
      expect_any_instance_of(Gitaly::WikiService::Stub)
        .to receive(:wiki_get_all_pages)
        .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
        .and_return([].each)

      subject
    end

    it 'sends a limit of 0 to wiki_get_all_pages' do
      expect_any_instance_of(Gitaly::WikiService::Stub)
        .to receive(:wiki_get_all_pages)
        .with(gitaly_request_with_params(limit: 0), kind_of(Hash))
        .and_return([].each)

      subject
    end

    it 'concatenates the raw data and returns a pair of WikiPage and WikiPageVersion for each page' do
      expect_any_instance_of(Gitaly::WikiService::Stub)
        .to receive(:wiki_get_all_pages)
        .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
        .and_return(response.each)

      expect(subject.size).to be(2)
      expect(wiki_page_1.title).to eq('My Page')
      expect(wiki_page_1.raw_data).to eq('ab')
      expect(wiki_page_1_version.format).to eq('markdown')
      expect(wiki_page_2.title).to eq('My Page 2')
      expect(wiki_page_2.raw_data).to eq('cd')
      expect(wiki_page_2_version.format).to eq('markdown')
    end

    context 'with limits' do
      subject { client.get_all_pages(limit: 1) }

      it 'sends a request with the limit' do
        expect_any_instance_of(Gitaly::WikiService::Stub)
        .to receive(:wiki_get_all_pages)
        .with(gitaly_request_with_params(limit: 1), kind_of(Hash))
        .and_return([].each)

        subject
      end
    end
  end
end