userteams.rb 7.15 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
class Userteams < Spinach::FeatureSteps
  include SharedAuthentication
  include SharedPaths
  include SharedProject

    When 'I do not have teams with me' do
      UserTeam.with_member(current_user).destroy_all
    end

    Then 'I should see dashboard page without teams info block' do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
11
      page.has_no_css?(".teams-box").must_equal true
12 13 14
    end

    When 'I have teams with my membership' do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
15
      team = create :user_team, owner: current_user
16 17 18 19
      team.add_member(current_user, UserTeam.access_roles["Master"], true)
    end

    Then 'I should see dashboard page with teams information block' do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
20
      page.should have_css(".teams-box")
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
    end

    When 'exist user teams' do
      team = create :user_team
      team.add_member(current_user, UserTeam.access_roles["Master"], true)
    end

    And 'I click on "All teams" link' do
      click_link("All Teams")
    end

    Then 'I should see "All teams" page' do
      current_path.should == teams_path
    end

    And 'I should see exist teams in teams list' do
      team = UserTeam.last
      find_in_list(".teams_list tr", team).must_equal true
    end

    When 'I click to "New team" link' do
      click_link("New Team")
    end

    And 'I submit form with new team info' do
      fill_in 'name', with: 'gitlab'
      click_button 'Create team'
    end

    Then 'I should be redirected to new team page' do
      team = UserTeam.last
      current_path.should == team_path(team)
    end

    When 'I have teams with projects and members' do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
56
      team = create :user_team, owner: current_user
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
      @project = create :project
      team.add_member(current_user, UserTeam.access_roles["Master"], true)
      team.assign_to_project(@project, UserTeam.access_roles["Master"])
      @event = create(:closed_issue_event, project: @project)
    end

    When 'I visit team page' do
      visit team_path(UserTeam.last)
    end

    Then 'I should see projects list' do
      page.should have_css(".projects_box")
      projects_box = find(".projects_box")
      projects_box.should have_content(@project.name)
    end

    And 'project from team has issues assigned to me' do
      team = UserTeam.last
      team.projects.each do |project|
        project.issues << create(:issue, assignee: current_user)
      end
    end

    When 'I visit team issues page' do
      team = UserTeam.last
      visit issues_team_path(team)
    end

    Then 'I should see issues from this team assigned to me' do
      team = UserTeam.last
      team.projects.each do |project|
        project.issues.assigned(current_user).each do |issue|
          page.should have_content issue.title
        end
      end
    end

    Given 'I have team with projects and members' do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
95
      team = create :user_team, owner: current_user
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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
      project = create :project
      user = create :user
      team.add_member(current_user, UserTeam.access_roles["Master"], true)
      team.add_member(user, UserTeam.access_roles["Developer"], false)
      team.assign_to_project(project, UserTeam.access_roles["Master"])
    end

    Given 'project from team has issues assigned to teams members' do
      team = UserTeam.last
      team.projects.each do |project|
        team.members.each do |member|
          project.issues << create(:issue, assignee: member)
        end
      end
    end

    Then 'I should see issues from this team assigned to teams members' do
      team = UserTeam.last
      team.projects.each do |project|
        team.members.each do |member|
          project.issues.assigned(member).each do |issue|
            page.should have_content issue.title
          end
        end
      end
    end

    Given 'project from team has merge requests assigned to me' do
      team = UserTeam.last
      team.projects.each do |project|
        team.members.each do |member|
          3.times { project.merge_requests << create(:merge_request, assignee: member) }
        end
      end
    end

    When 'I visit team merge requests page' do
      team = UserTeam.last
      visit merge_requests_team_path(team)
    end

    Then 'I should see merge requests from this team assigned to me' do
      team = UserTeam.last
      team.projects.each do |project|
        team.members.each do |member|
          project.issues.assigned(member).each do |merge_request|
            page.should have_content merge_request.title
          end
        end
      end
    end

    Given 'project from team has merge requests assigned to team members' do
      team = UserTeam.last
      team.projects.each do |project|
        team.members.each do |member|
          3.times { project.merge_requests << create(:merge_request, assignee: member) }
        end
      end
    end

    Then 'I should see merge requests from this team assigned to me' do
      team = UserTeam.last
      team.projects.each do |project|
        team.members.each do |member|
          project.issues.assigned(member).each do |merge_request|
            page.should have_content merge_request.title
          end
        end
      end
    end

    Given 'I have new user "John"' do
      create :user, name: "John"
    end

    When 'I visit team people page' do
      team = UserTeam.last
      visit team_members_path(team)
    end

    And 'I select user "John" from list with role "Reporter"' do
Andrey Kumanyaev's avatar
Andrey Kumanyaev committed
178 179 180 181 182 183
      user = User.find_by_name("John")
      within "#team_members" do
        select user.name, :from => "user_ids"
        select "Reporter", :from => "default_project_access"
      end
      click_button "Add"
184 185 186 187 188 189 190 191 192
    end

    Then 'I should see user "John" in team list' do
      user = User.find_by_name("John")
      team_members_list = find(".team-table")
      team_members_list.should have_content user.name
    end

    And 'I have my own project without teams' do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
193
      @project = create :project, namespace: current_user.namespace
194 195 196
    end

    And 'I visit my team page' do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
197
      team = UserTeam.where(owner_id: current_user.id).last
198 199 200 201 202 203 204
      visit team_path(team)
    end

    When 'I click on link "Projects"' do
      click_link "Projects"
    end

Andrey Kumanyaev's avatar
Andrey Kumanyaev committed
205 206 207 208
    And 'I click link "Assign project to Team"' do
      click_link "Assign project to Team"
    end

209 210
    Then 'I should see form with my own project in avaliable projects list' do
      projects_select = find("#project_ids")
Andrey Kumanyaev's avatar
Andrey Kumanyaev committed
211
      projects_select.should have_content(@project.name)
212 213 214
    end

    When 'I submit form with selected project and max access' do
Andrey Kumanyaev's avatar
Andrey Kumanyaev committed
215
      within "#assign_projects" do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
216
        select @project.name_with_namespace, :from => "project_ids"
217 218 219 220 221 222
        select "Reporter", :from => "greatest_project_access"
      end
      click_button "Add"
    end

    Then 'I should see my own project in team projects list' do
Andrey Kumanyaev's avatar
Andrey Kumanyaev committed
223 224
      projects = find(".projects-table")
      projects.should have_content(@project.name)
225 226 227 228 229 230 231 232 233
    end

    When 'I click link "New Team Member"' do
      click_link "New Team Member"
    end

  protected

  def current_team
Andrey Kumanyaev's avatar
Andrey Kumanyaev committed
234
    @user_team ||= UserTeam.first
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
  end

  def project
    current_team.projects.first
  end

  def assigned_to_user key, user
    project.send(key).where(assignee_id: user)
  end

  def find_in_list(selector, item)
    members_list = all(selector)
    entered = false
    members_list.each do |member_item|
      entered = true if member_item.has_content?(item.name)
    end
    entered
  end

end