Commit cd779e56e1ce799fc6ec25dc2fbc8a3e0f775ee8
1 parent
4107f2cc
Exists in
master
and in
4 other branches
dashboard v1
Showing
24 changed files
with
255 additions
and
250 deletions
Show diff stats
app/controllers/dashboard_controller.rb
1 | class DashboardController < ApplicationController | 1 | class DashboardController < ApplicationController |
2 | + respond_to :js, :html | ||
3 | + | ||
2 | def index | 4 | def index |
3 | @projects = current_user.projects.all | 5 | @projects = current_user.projects.all |
4 | @active_projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse | 6 | @active_projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse |
7 | + | ||
8 | + respond_to do |format| | ||
9 | + format.html | ||
10 | + format.js { no_cache_headers } | ||
11 | + end | ||
12 | + end | ||
13 | + | ||
14 | + def merge_requests | ||
15 | + @projects = current_user.projects.all | ||
16 | + @merge_requests = current_user.assigned_merge_requests.order("created_at DESC").limit(40) | ||
17 | + | ||
18 | + respond_to do |format| | ||
19 | + format.html | ||
20 | + format.js { no_cache_headers } | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | + def issues | ||
25 | + @projects = current_user.projects.all | ||
26 | + @user = current_user | ||
27 | + @issues = current_user.assigned_issues.opened.order("created_at DESC").limit(40) | ||
28 | + | ||
29 | + @issues = @issues.includes(:author, :project) | ||
30 | + | ||
31 | + respond_to do |format| | ||
32 | + format.html | ||
33 | + format.js { no_cache_headers } | ||
34 | + format.atom { render :layout => false } | ||
35 | + end | ||
5 | end | 36 | end |
6 | end | 37 | end |
app/controllers/user_issues_controller.rb
@@ -1,20 +0,0 @@ | @@ -1,20 +0,0 @@ | ||
1 | -class UserIssuesController < ApplicationController | ||
2 | - before_filter :authenticate_user! | ||
3 | - | ||
4 | - respond_to :js, :html | ||
5 | - | ||
6 | - def index | ||
7 | - @projects = current_user.projects.all | ||
8 | - @user = current_user | ||
9 | - @issues = current_user.assigned_issues.opened | ||
10 | - | ||
11 | - @issues = @issues.includes(:author, :project) | ||
12 | - | ||
13 | - respond_to do |format| | ||
14 | - format.html | ||
15 | - format.js | ||
16 | - format.atom { render :layout => false } | ||
17 | - end | ||
18 | - end | ||
19 | - | ||
20 | -end |
app/controllers/user_merge_requests_controller.rb
app/views/dashboard/_issues_feed.html.haml
1 | -#news-feed.news-feed | ||
2 | - %div | ||
3 | - = link_to dashboard_path, :class => "left" do | ||
4 | - .box-arrow | ||
5 | - ← | ||
6 | - %h2{:style => "width:86%; text-align:center"} | ||
7 | - Issues | ||
8 | - = link_to merge_requests_path, :class => "right" do | ||
9 | - .box-arrow | ||
10 | - → | 1 | +%div |
2 | + = link_to dashboard_path, :remote => true, :class => "left" do | ||
3 | + .box-arrow | ||
4 | + ← | ||
5 | + %h2{:style => "width:86%; text-align:center"} | ||
6 | + Issues | ||
7 | + = link_to dashboard_merge_requests_path, :remote => true, :class => "right" do | ||
8 | + .box-arrow | ||
9 | + → | ||
11 | 10 | ||
12 | 11 | ||
12 | +#feeds_content_holder | ||
13 | .project-box.project-updates.ui-box.ui-box-small.ui-box-big | 13 | .project-box.project-updates.ui-box.ui-box-small.ui-box-big |
14 | .data | 14 | .data |
15 | - @issues.each do |update| | 15 | - @issues.each do |update| |
16 | %a.project-update{:href => dashboard_feed_path(update.project, update)} | 16 | %a.project-update{:href => dashboard_feed_path(update.project, update)} |
17 | = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 | 17 | = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 |
18 | %span.update-title | 18 | %span.update-title |
19 | - = dashboard_feed_title(update) | 19 | + = truncate update.title, :length => 50 |
20 | + .right= update.project.name | ||
20 | %span.update-author | 21 | %span.update-author |
21 | %strong= update.author_name | 22 | %strong= update.author_name |
22 | authored | 23 | authored |
23 | = time_ago_in_words(update.created_at) | 24 | = time_ago_in_words(update.created_at) |
24 | ago | 25 | ago |
25 | .right | 26 | .right |
26 | - - klass = update.class.to_s.split("::").last.downcase | ||
27 | - %span.tag{ :class => klass }= klass | 27 | + - if update.critical |
28 | + %span.tag.high critical | ||
29 | + - if update.today? | ||
30 | + %span.tag.today today | ||
28 | 31 |
app/views/dashboard/_merge_requests_feed.html.haml
1 | -#news-feed.news-feed | ||
2 | - %div | ||
3 | - = link_to issues_path, :class => "left" do | ||
4 | - .box-arrow | ||
5 | - ← | ||
6 | - %h2{:style => "width:86%; text-align:center"} | ||
7 | - Merge Requests | ||
8 | - = link_to dashboard_path, :class => "right" do | ||
9 | - .box-arrow | ||
10 | - → | 1 | +%div |
2 | + = link_to dashboard_issues_path, :remote => true, :class => "left" do | ||
3 | + .box-arrow | ||
4 | + ← | ||
5 | + %h2{:style => "width:86%; text-align:center"} | ||
6 | + Merge Requests | ||
7 | + = link_to dashboard_path, :remote => true, :class => "right" do | ||
8 | + .box-arrow | ||
9 | + → | ||
11 | 10 | ||
11 | +#feeds_content_holder | ||
12 | .project-box.project-updates.ui-box.ui-box-small.ui-box-big | 12 | .project-box.project-updates.ui-box.ui-box-small.ui-box-big |
13 | .data | 13 | .data |
14 | - @merge_requests.each do |update| | 14 | - @merge_requests.each do |update| |
15 | - %a.project-update{:href => dashboard_feed_path(update.project, update)} | 15 | + %a.project-update{:href => project_merge_request_path(update.project, update)} |
16 | = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 | 16 | = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 |
17 | %span.update-title | 17 | %span.update-title |
18 | - = dashboard_feed_title(update) | 18 | + = truncate update.title, :length => 70 |
19 | + .right= update.project.name | ||
19 | %span.update-author | 20 | %span.update-author |
20 | %strong= update.author_name | 21 | %strong= update.author_name |
21 | authored | 22 | authored |
22 | = time_ago_in_words(update.created_at) | 23 | = time_ago_in_words(update.created_at) |
23 | ago | 24 | ago |
24 | .right | 25 | .right |
25 | - - klass = update.class.to_s.split("::").last.downcase | ||
26 | - %span.tag{ :class => klass }= klass | ||
27 | - | 26 | + %span.tag.commit= update.source_branch |
27 | + → | ||
28 | + %span.tag.commit= update.target_branch |
app/views/dashboard/_projects_feed.html.haml
1 | -#news-feed.news-feed | ||
2 | - %div | ||
3 | - = link_to merge_requests_path, :class => "left" do | ||
4 | - .box-arrow | ||
5 | - ← | ||
6 | - %h2{:style => "width:86%; text-align:center"} | ||
7 | - Activities | ||
8 | - = link_to issues_path, :class => "right" do | ||
9 | - .box-arrow | ||
10 | - → | 1 | +%div |
2 | + = link_to dashboard_merge_requests_path, :remote => true, :class => "left", :id => "merge_requests_slide" do | ||
3 | + .box-arrow | ||
4 | + ← | ||
5 | + %h2{:style => "width:86%; text-align:center"} | ||
6 | + Activities | ||
7 | + = link_to dashboard_issues_path, :remote => true, :class => "right", :id => "issues_slide" do | ||
8 | + .box-arrow | ||
9 | + → | ||
11 | 10 | ||
11 | +#feeds_content_holder | ||
12 | - @active_projects.first(3).each do |project| | 12 | - @active_projects.first(3).each do |project| |
13 | .project-box.project-updates.ui-box.ui-box-small.ui-box-big | 13 | .project-box.project-updates.ui-box.ui-box-small.ui-box-big |
14 | = link_to project, do | 14 | = link_to project, do |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +%aside | ||
2 | + %h4 | ||
3 | + - if current_user.can_create_project? | ||
4 | + %a.button-small.button-green{:href => new_project_path} New Project | ||
5 | + Your Projects | ||
6 | + %ol.project-list | ||
7 | + - @projects.each do |project| | ||
8 | + %li | ||
9 | + %a{:href => project_path(project)} | ||
10 | + %span.arrow → | ||
11 | + %span.project-name= project.name | ||
12 | + %span.time | ||
13 | + %strong Last activity: | ||
14 | + = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never" | ||
15 | + |
app/views/dashboard/index.html.haml
1 | - content_for(:body_class, "dashboard-page") | 1 | - content_for(:body_class, "dashboard-page") |
2 | 2 | ||
3 | #dashboard-content.dashboard-content.content | 3 | #dashboard-content.dashboard-content.content |
4 | - %aside | ||
5 | - %h4 | ||
6 | - - if current_user.can_create_project? | ||
7 | - %a.button-small.button-green{:href => new_project_path} New Project | ||
8 | - Your Projects | ||
9 | - %ol.project-list | ||
10 | - - @projects.each do |project| | ||
11 | - %li | ||
12 | - %a{:href => project_path(project)} | ||
13 | - %span.arrow → | ||
14 | - %span.project-name= project.name | ||
15 | - %span.time | ||
16 | - %strong Last activity: | ||
17 | - = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never" | ||
18 | - = render "dashboard/projects_feed" | 4 | + = render "dashboard/sidebar" |
5 | + #news-feed.news-feed= render "dashboard/projects_feed" |
@@ -0,0 +1,7 @@ | @@ -0,0 +1,7 @@ | ||
1 | +:plain | ||
2 | + $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){ | ||
3 | + $("#news-feed").html("#{escape_javascript(render(:partial => "projects_feed"))}"); | ||
4 | + $("#feeds_content_holder").show("slide", { direction: "right" }, 150); | ||
5 | + history.pushState({ path: this.path }, '', '#{dashboard_path}') | ||
6 | + }); | ||
7 | + |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +xml.instruct! | ||
2 | +xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do | ||
3 | + xml.title "#{@user.name} issues" | ||
4 | + xml.link :href => dashboard_issues_url(:atom, :private_token => @user.private_token), :rel => "self", :type => "application/atom+xml" | ||
5 | + xml.link :href => dashboard_issues_url(:private_token => @user.private_token), :rel => "alternate", :type => "text/html" | ||
6 | + xml.id dashboard_issues_url(:private_token => @user.private_token) | ||
7 | + xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any? | ||
8 | + | ||
9 | + @issues.each do |issue| | ||
10 | + xml.entry do | ||
11 | + xml.id project_issue_url(issue.project, issue) | ||
12 | + xml.link :href => project_issue_url(issue.project, issue) | ||
13 | + xml.title truncate(issue.title, :length => 80) | ||
14 | + xml.updated issue.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") | ||
15 | + xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(issue.author_email) | ||
16 | + xml.author do |author| | ||
17 | + xml.name issue.author_name | ||
18 | + xml.email issue.author_email | ||
19 | + end | ||
20 | + xml.summary issue.title | ||
21 | + end | ||
22 | + end | ||
23 | +end | ||
24 | + |
@@ -0,0 +1,7 @@ | @@ -0,0 +1,7 @@ | ||
1 | +:plain | ||
2 | + $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){ | ||
3 | + $("#news-feed").html("#{escape_javascript(render(:partial => "issues_feed"))}"); | ||
4 | + $("#feeds_content_holder").show("slide", { direction: "right" }, 150); | ||
5 | + history.pushState({ path: this.path }, '', '#{dashboard_issues_path}') | ||
6 | + }); | ||
7 | + |
@@ -0,0 +1,7 @@ | @@ -0,0 +1,7 @@ | ||
1 | +:plain | ||
2 | + $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){ | ||
3 | + $("#news-feed").html("#{escape_javascript(render(:partial => "merge_requests_feed"))}"); | ||
4 | + $("#feeds_content_holder").show("slide", { direction: "right" }, 150); | ||
5 | + history.pushState({ path: this.path }, '', '#{dashboard_merge_requests_path}') | ||
6 | + }); | ||
7 | + |
app/views/merge_requests/_merge_request.html.haml
@@ -3,9 +3,6 @@ | @@ -3,9 +3,6 @@ | ||
3 | %span.update-title | 3 | %span.update-title |
4 | = merge_request.title | 4 | = merge_request.title |
5 | %span.update-author | 5 | %span.update-author |
6 | - - if not @project.present? | ||
7 | - %strong= merge_request.project.name | ||
8 | - = '-' | ||
9 | %strong= merge_request.author_name | 6 | %strong= merge_request.author_name |
10 | authored | 7 | authored |
11 | = time_ago_in_words(merge_request.created_at) | 8 | = time_ago_in_words(merge_request.created_at) |
app/views/user_issues/index.atom.builder
@@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
1 | -xml.instruct! | ||
2 | -xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do | ||
3 | - xml.title "#{@user.name} issues" | ||
4 | - xml.link :href => issues_url(:atom, :private_token => @user.private_token), :rel => "self", :type => "application/atom+xml" | ||
5 | - xml.link :href => issues_url(:private_token => @user.private_token), :rel => "alternate", :type => "text/html" | ||
6 | - xml.id issues_url(:private_token => @user.private_token) | ||
7 | - xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any? | ||
8 | - | ||
9 | - @issues.each do |issue| | ||
10 | - xml.entry do | ||
11 | - xml.id project_issue_url(issue.project, issue) | ||
12 | - xml.link :href => project_issue_url(issue.project, issue) | ||
13 | - xml.title truncate(issue.title, :length => 80) | ||
14 | - xml.updated issue.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") | ||
15 | - xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(issue.author_email) | ||
16 | - xml.author do |author| | ||
17 | - xml.name issue.author_name | ||
18 | - xml.email issue.author_email | ||
19 | - end | ||
20 | - xml.summary issue.title | ||
21 | - end | ||
22 | - end | ||
23 | -end | ||
24 | - |
app/views/user_issues/index.html.haml
@@ -1,18 +0,0 @@ | @@ -1,18 +0,0 @@ | ||
1 | -- content_for(:body_class, "dashboard-page") | ||
2 | - | ||
3 | -#dashboard-content.dashboard-content.content | ||
4 | - %aside | ||
5 | - %h4 | ||
6 | - - if current_user.can_create_project? | ||
7 | - %a.button-small.button-green{:href => new_project_path} New Project | ||
8 | - Your Projects | ||
9 | - %ol.project-list | ||
10 | - - @projects.each do |project| | ||
11 | - %li | ||
12 | - %a{:href => project_path(project)} | ||
13 | - %span.arrow → | ||
14 | - %span.project-name= project.name | ||
15 | - %span.time | ||
16 | - %strong Last activity: | ||
17 | - = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never" | ||
18 | - = render "dashboard/issues_feed" |
app/views/user_merge_requests/index.html.haml
@@ -1,18 +0,0 @@ | @@ -1,18 +0,0 @@ | ||
1 | -- content_for(:body_class, "dashboard-page") | ||
2 | - | ||
3 | -#dashboard-content.dashboard-content.content | ||
4 | - %aside | ||
5 | - %h4 | ||
6 | - - if current_user.can_create_project? | ||
7 | - %a.button-small.button-green{:href => new_project_path} New Project | ||
8 | - Your Projects | ||
9 | - %ol.project-list | ||
10 | - - @projects.each do |project| | ||
11 | - %li | ||
12 | - %a{:href => project_path(project)} | ||
13 | - %span.arrow → | ||
14 | - %span.project-name= project.name | ||
15 | - %span.time | ||
16 | - %strong Last activity: | ||
17 | - = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never" | ||
18 | - = render "dashboard/merge_requests_feed" |
config/routes.rb
1 | Gitlab::Application.routes.draw do | 1 | Gitlab::Application.routes.draw do |
2 | 2 | ||
3 | - get "user_issues/index" | ||
4 | 3 | ||
5 | get 'tags'=> 'tags#index' | 4 | get 'tags'=> 'tags#index' |
6 | get 'tags/:tag' => 'projects#index' | 5 | get 'tags/:tag' => 'projects#index' |
@@ -22,9 +21,10 @@ Gitlab::Application.routes.draw do | @@ -22,9 +21,10 @@ Gitlab::Application.routes.draw do | ||
22 | put "profile/reset_private_token", :to => "profile#reset_private_token" | 21 | put "profile/reset_private_token", :to => "profile#reset_private_token" |
23 | put "profile/edit", :to => "profile#social_update" | 22 | put "profile/edit", :to => "profile#social_update" |
24 | get "profile", :to => "profile#show" | 23 | get "profile", :to => "profile#show" |
24 | + | ||
25 | get "dashboard", :to => "dashboard#index" | 25 | get "dashboard", :to => "dashboard#index" |
26 | - get "issues", :to => "user_issues#index", :as => "issues" | ||
27 | - get "merge_requests", :to => "user_merge_requests#index", :as => "merge_requests" | 26 | + get "dashboard/issues", :to => "dashboard#issues" |
27 | + get "dashboard/merge_requests", :to => "dashboard#merge_requests" | ||
28 | 28 | ||
29 | #get "profile/:id", :to => "profile#show" | 29 | #get "profile/:id", :to => "profile#show" |
30 | 30 |
@@ -0,0 +1,58 @@ | @@ -0,0 +1,58 @@ | ||
1 | +require 'spec_helper' | ||
2 | + | ||
3 | +describe "User Issues Dashboard", :js => true do | ||
4 | + describe "GET /issues" do | ||
5 | + before do | ||
6 | + | ||
7 | + login_as :user | ||
8 | + | ||
9 | + @project1 = Factory :project, | ||
10 | + :path => "project1", | ||
11 | + :code => "TEST1" | ||
12 | + | ||
13 | + @project2 = Factory :project, | ||
14 | + :path => "project2", | ||
15 | + :code => "TEST2" | ||
16 | + | ||
17 | + @project1.add_access(@user, :read, :write) | ||
18 | + @project2.add_access(@user, :read, :write) | ||
19 | + | ||
20 | + @issue1 = Factory :issue, | ||
21 | + :author => @user, | ||
22 | + :assignee => @user, | ||
23 | + :project => @project1 | ||
24 | + | ||
25 | + @issue2 = Factory :issue, | ||
26 | + :author => @user, | ||
27 | + :assignee => @user, | ||
28 | + :project => @project2 | ||
29 | + | ||
30 | + visit dashboard_path | ||
31 | + click_link "issues_slide" | ||
32 | + end | ||
33 | + | ||
34 | + subject { page } | ||
35 | + | ||
36 | + it { should have_content(@issue1.title[0..10]) } | ||
37 | + it { should have_content(@issue1.project.name) } | ||
38 | + it { should have_content(@issue1.assignee.name) } | ||
39 | + | ||
40 | + it { should have_content(@issue2.title[0..10]) } | ||
41 | + it { should have_content(@issue2.project.name) } | ||
42 | + it { should have_content(@issue2.assignee.name) } | ||
43 | + | ||
44 | + describe "atom feed", :js => false do | ||
45 | + it "should render atom feed via private token" do | ||
46 | + logout | ||
47 | + visit dashboard_issues_path(:atom, :private_token => @user.private_token) | ||
48 | + | ||
49 | + page.response_headers['Content-Type'].should have_content("application/atom+xml") | ||
50 | + page.body.should have_selector("title", :text => "#{@user.name} issues") | ||
51 | + page.body.should have_selector("author email", :text => @issue1.author_email) | ||
52 | + page.body.should have_selector("entry summary", :text => @issue1.title) | ||
53 | + page.body.should have_selector("author email", :text => @issue2.author_email) | ||
54 | + page.body.should have_selector("entry summary", :text => @issue2.title) | ||
55 | + end | ||
56 | + end | ||
57 | + end | ||
58 | +end |
@@ -0,0 +1,48 @@ | @@ -0,0 +1,48 @@ | ||
1 | +require 'spec_helper' | ||
2 | + | ||
3 | +describe "User MergeRequests", :js => true do | ||
4 | + describe "GET /issues" do | ||
5 | + before do | ||
6 | + | ||
7 | + login_as :user | ||
8 | + | ||
9 | + @project1 = Factory :project, | ||
10 | + :path => "project1", | ||
11 | + :code => "TEST1" | ||
12 | + | ||
13 | + @project2 = Factory :project, | ||
14 | + :path => "project2", | ||
15 | + :code => "TEST2" | ||
16 | + | ||
17 | + @project1.add_access(@user, :read, :write) | ||
18 | + @project2.add_access(@user, :read, :write) | ||
19 | + | ||
20 | + @merge_request1 = Factory :merge_request, | ||
21 | + :author => @user, | ||
22 | + :assignee => @user, | ||
23 | + :project => @project1 | ||
24 | + | ||
25 | + @merge_request2 = Factory :merge_request, | ||
26 | + :author => @user, | ||
27 | + :assignee => @user, | ||
28 | + :project => @project2 | ||
29 | + | ||
30 | + visit dashboard_path | ||
31 | + click_link "merge_requests_slide" | ||
32 | + end | ||
33 | + | ||
34 | + subject { page } | ||
35 | + | ||
36 | + it { should have_content(@merge_request1.title) } | ||
37 | + it { should have_content(@merge_request1.project.name) } | ||
38 | + it { should have_content(@merge_request1.target_branch) } | ||
39 | + it { should have_content(@merge_request1.source_branch) } | ||
40 | + it { should have_content(@merge_request1.assignee.name) } | ||
41 | + | ||
42 | + it { should have_content(@merge_request2.title) } | ||
43 | + it { should have_content(@merge_request2.project.name) } | ||
44 | + it { should have_content(@merge_request2.target_branch) } | ||
45 | + it { should have_content(@merge_request2.source_branch) } | ||
46 | + it { should have_content(@merge_request2.assignee.name) } | ||
47 | + end | ||
48 | +end |
spec/requests/issues_spec.rb
@@ -23,7 +23,7 @@ describe "Issues" do | @@ -23,7 +23,7 @@ describe "Issues" do | ||
23 | 23 | ||
24 | subject { page } | 24 | subject { page } |
25 | 25 | ||
26 | - it { should have_content(@issue.title) } | 26 | + it { should have_content(@issue.title[0..20]) } |
27 | it { should have_content(@issue.project.name) } | 27 | it { should have_content(@issue.project.name) } |
28 | it { should have_content(@issue.assignee.name) } | 28 | it { should have_content(@issue.assignee.name) } |
29 | 29 |
spec/requests/user_issues_spec.rb
@@ -1,55 +0,0 @@ | @@ -1,55 +0,0 @@ | ||
1 | -require 'spec_helper' | ||
2 | - | ||
3 | -describe "User Issues Dashboard" do | ||
4 | - describe "GET /issues" do | ||
5 | - before do | ||
6 | - | ||
7 | - login_as :user | ||
8 | - | ||
9 | - @project1 = Factory :project, | ||
10 | - :path => "project1", | ||
11 | - :code => "TEST1" | ||
12 | - | ||
13 | - @project2 = Factory :project, | ||
14 | - :path => "project2", | ||
15 | - :code => "TEST2" | ||
16 | - | ||
17 | - @project1.add_access(@user, :read, :write) | ||
18 | - @project2.add_access(@user, :read, :write) | ||
19 | - | ||
20 | - @issue1 = Factory :issue, | ||
21 | - :author => @user, | ||
22 | - :assignee => @user, | ||
23 | - :project => @project1 | ||
24 | - | ||
25 | - @issue2 = Factory :issue, | ||
26 | - :author => @user, | ||
27 | - :assignee => @user, | ||
28 | - :project => @project2 | ||
29 | - | ||
30 | - visit issues_path | ||
31 | - end | ||
32 | - | ||
33 | - subject { page } | ||
34 | - | ||
35 | - it { should have_content(@issue1.title) } | ||
36 | - it { should have_content(@issue1.project.name) } | ||
37 | - it { should have_content(@issue1.assignee.name) } | ||
38 | - | ||
39 | - it { should have_content(@issue2.title) } | ||
40 | - it { should have_content(@issue2.project.name) } | ||
41 | - it { should have_content(@issue2.assignee.name) } | ||
42 | - | ||
43 | - it "should render atom feed via private token" do | ||
44 | - logout | ||
45 | - visit issues_path(:atom, :private_token => @user.private_token) | ||
46 | - | ||
47 | - page.response_headers['Content-Type'].should have_content("application/atom+xml") | ||
48 | - page.body.should have_selector("title", :text => "#{@user.name} issues") | ||
49 | - page.body.should have_selector("author email", :text => @issue1.author_email) | ||
50 | - page.body.should have_selector("entry summary", :text => @issue1.title) | ||
51 | - page.body.should have_selector("author email", :text => @issue2.author_email) | ||
52 | - page.body.should have_selector("entry summary", :text => @issue2.title) | ||
53 | - end | ||
54 | - end | ||
55 | -end |
spec/requests/user_merge_requests_spec.rb
@@ -1,47 +0,0 @@ | @@ -1,47 +0,0 @@ | ||
1 | -require 'spec_helper' | ||
2 | - | ||
3 | -describe "User MergeRequests" do | ||
4 | - describe "GET /issues" do | ||
5 | - before do | ||
6 | - | ||
7 | - login_as :user | ||
8 | - | ||
9 | - @project1 = Factory :project, | ||
10 | - :path => "project1", | ||
11 | - :code => "TEST1" | ||
12 | - | ||
13 | - @project2 = Factory :project, | ||
14 | - :path => "project2", | ||
15 | - :code => "TEST2" | ||
16 | - | ||
17 | - @project1.add_access(@user, :read, :write) | ||
18 | - @project2.add_access(@user, :read, :write) | ||
19 | - | ||
20 | - @merge_request1 = Factory :merge_request, | ||
21 | - :author => @user, | ||
22 | - :assignee => @user, | ||
23 | - :project => @project1 | ||
24 | - | ||
25 | - @merge_request2 = Factory :merge_request, | ||
26 | - :author => @user, | ||
27 | - :assignee => @user, | ||
28 | - :project => @project2 | ||
29 | - | ||
30 | - visit merge_requests_path | ||
31 | - end | ||
32 | - | ||
33 | - subject { page } | ||
34 | - | ||
35 | - it { should have_content(@merge_request1.title) } | ||
36 | - it { should have_content(@merge_request1.project.name) } | ||
37 | - it { should have_content(@merge_request1.target_branch) } | ||
38 | - it { should have_content(@merge_request1.source_branch) } | ||
39 | - it { should have_content(@merge_request1.assignee.name) } | ||
40 | - | ||
41 | - it { should have_content(@merge_request2.title) } | ||
42 | - it { should have_content(@merge_request2.project.name) } | ||
43 | - it { should have_content(@merge_request2.target_branch) } | ||
44 | - it { should have_content(@merge_request2.source_branch) } | ||
45 | - it { should have_content(@merge_request2.assignee.name) } | ||
46 | - end | ||
47 | -end |