summaryrefslogtreecommitdiff
path: root/spec/support/markdown_feature.rb
blob: c59df4e84d6ab9d99cb23135da2cd2af375eec98 (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
# This is a helper class used by the GitLab Markdown feature spec
#
# Because the feature spec only cares about the output of the Markdown, and the
# test setup and teardown and parsing is fairly expensive, we only want to do it
# once. Unfortunately RSpec will not let you access `let`s in a `before(:all)`
# block, so we fake it by encapsulating all the shared setup in this class.
#
# The class renders `spec/fixtures/markdown.md.erb` using ERB, allowing for
# reference to the factory-created objects.
class MarkdownFeature
  include FactoryGirl::Syntax::Methods

  def user
    @user ||= create(:user)
  end

  def group
    unless @group
      @group = create(:group)
      @group.add_developer(user)
    end

    @group
  end

  # Direct references ----------------------------------------------------------

  def project
    @project ||= create(:project)
  end

  def issue
    @issue ||= create(:issue, project: project)
  end

  def merge_request
    @merge_request ||= create(:merge_request, :simple, source_project: project)
  end

  def snippet
    @snippet ||= create(:project_snippet, project: project)
  end

  def commit
    @commit ||= project.commit
  end

  def commit_range
    unless @commit_range
      commit2 = project.commit('HEAD~3')
      @commit_range = CommitRange.new("#{commit.id}...#{commit2.id}", project)
    end

    @commit_range
  end

  def simple_label
    @simple_label ||= create(:label, name: 'gfm', project: project)
  end

  def label
    @label ||= create(:label, name: 'awaiting feedback', project: project)
  end

  # Cross-references -----------------------------------------------------------

  def xproject
    unless @xproject
      namespace = create(:namespace, name: 'cross-reference')
      @xproject = create(:project, namespace: namespace)
      @xproject.team << [user, :developer]
    end

    @xproject
  end

  def xissue
    @xissue ||= create(:issue, project: xproject)
  end

  def xmerge_request
    @xmerge_request ||= create(:merge_request, :simple, source_project: xproject)
  end

  def xsnippet
    @xsnippet ||= create(:project_snippet, project: xproject)
  end

  def xcommit
    @xcommit ||= xproject.commit
  end

  def xcommit_range
    unless @xcommit_range
      xcommit2 = xproject.commit('HEAD~2')
      @xcommit_range = CommitRange.new("#{xcommit.id}...#{xcommit2.id}", xproject)
    end

    @xcommit_range
  end

  def raw_markdown
    fixture = Rails.root.join('spec/fixtures/markdown.md.erb')
    ERB.new(File.read(fixture)).result(binding)
  end
end