summaryrefslogtreecommitdiff
path: root/features/steps/group/milestones.rb
blob: 0b0983f0d0653d2eedea4ab0bcc0e2b9bc43638e (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
class Spinach::Features::GroupMilestones < Spinach::FeatureSteps
  include WaitForAjax
  include SharedAuthentication
  include SharedPaths
  include SharedGroup
  include SharedUser

  step 'I click on group milestones' do
    visit group_milestones_path('owned')
  end

  step 'I should see group milestones index page has no milestones' do
    expect(page).to have_content('No milestones to show')
  end

  step 'Group has projects with milestones' do
    group_milestone
  end

  step 'I should see group milestones index page with milestones' do
    expect(page).to have_content('Version 7.2')
    expect(page).to have_content('GL-113')
    expect(page).to have_link('3 Issues', href: issues_group_path("owned", milestone_title: "Version 7.2"))
    expect(page).to have_link('0 Merge Requests', href: merge_requests_group_path("owned", milestone_title: "GL-113"))
  end

  step 'I click on one group milestone' do
    milestones = Milestone.where(title: 'GL-113')
    @global_milestone = GlobalMilestone.new('GL-113', milestones)

    click_link 'GL-113'
  end

  step 'I should see group milestone with descriptions and expiry date' do
    expect(page).to have_content('expires on Aug 20, 2114')
  end

  step 'I should see group milestone with all issues and MRs assigned to that milestone' do
    expect(page).to have_content('Milestone GL-113')
    expect(page).to have_content('Issues 3 Open: 3 Closed: 0')
    issue = Milestone.find_by(name: 'GL-113').issues.first
    expect(page).to have_link(issue.title, href: namespace_project_issue_path(issue.project.namespace, issue.project, issue))
  end

  step 'I fill milestone name' do
    fill_in 'milestone_title', with: 'v2.9.0'
  end

  step 'I click new milestone button' do
    click_link "New milestone"
  end

  step 'I press create mileston button' do
    click_button "Create milestone"
  end

  step 'milestone in each project should be created' do
    group = Group.find_by(name: 'Owned')
    expect(page).to have_content "Milestone v2.9.0"
    expect(group.projects).to be_present

    group.projects.each do |project|
      expect(page).to have_content project.name
    end
  end

  step 'I should see the "bug" label' do
    page.within('#tab-issues') do
      expect(page).to have_content 'bug'
    end
  end

  step 'I should see the "feature" label' do
    page.within('#tab-issues') do
      expect(page).to have_content 'bug'
    end
  end

  step 'I should see the project name in the Issue row' do
    page.within('#tab-issues') do
      @global_milestone.projects.each do |project|
        expect(page).to have_content project.name
      end
    end
  end

  step 'I click on the "Labels" tab' do
    page.within('.content .nav-links') do
      page.find(:xpath, "//a[@href='#tab-labels']").click
    end
  end

  step 'I should see the list of labels' do
    wait_for_ajax

    page.within('#tab-labels') do
      expect(page).to have_content 'bug'
      expect(page).to have_content 'feature'
    end
  end

  private

  def group_milestone
    group = owned_group

    %w(gitlabhq gitlab-ci cookbook-gitlab).each do |path|
      project = create(:empty_project, path: path, group: group)
      milestone = create :milestone, title: "Version 7.2", project: project

      create(:label, project: project, title: 'bug')
      create(:label, project: project, title: 'feature')

      create :issue,
        project: project,
        assignees: [current_user],
        author: current_user,
        milestone: milestone

      milestone = create :milestone,
        title: "GL-113",
        project: project,
        due_date: '2114-08-20',
        description: 'Lorem Ipsum is simply dummy text'

      issue = create :issue,
        project: project,
        assignees: [current_user],
        author: current_user,
        milestone: milestone

      issue.labels << project.labels.find_by(title: 'bug')
      issue.labels << project.labels.find_by(title: 'feature')
    end

    current_user.refresh_authorized_projects
  end
end