Commit 020e1a8eee37e6a0acba9833f8abb5dfc80eb248

Authored by gitlabhq
1 parent 83c1194d

dashboard

app/helpers/dashboard_helper.rb
1 1 module DashboardHelper
2   - def path_to_object(project, object)
  2 + def dashboard_feed_path(project, object)
3 3 case object.class.name.to_s
4 4 when "Issue" then project_issues_path(project, project.issues.find(object.id))
5 5 when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first)
6   - else "#"
  6 + when "Note"
  7 + then
  8 + note = object
  9 + case note.noteable_type
  10 + when "Issue" then project_issue_path(project, note.noteable_id)
  11 + when "Snippet" then project_snippet_path(project, note.noteable_id)
  12 + when "Commit" then project_commit_path(project, :id => note.noteable_id)
  13 + else wall_project_path(project)
  14 + end
  15 + else "#"
7 16 end
  17 + rescue
  18 + "#"
  19 + end
  20 +
  21 + def dashboard_feed_title(object)
  22 + title = case object.class.name.to_s
  23 + when "Note" then markdown(object.note)
  24 + when "Issue" then object.title
  25 + when "Grit::Commit" then object.safe_message
  26 + else ""
  27 + end
  28 + "[#{object.class.name}] #{truncate(sanitize(title, :tags => []), :length => 60)} "
8 29 end
9 30 end
... ...
app/models/project.rb
... ... @@ -136,7 +136,7 @@ class Project < ActiveRecord::Base
136 136 notes.fresh.limit(n)
137 137 ].compact.flatten.sort do |x, y|
138 138 y.created_at <=> x.created_at
139   - end[0..n]
  139 + end[0...n]
140 140 end
141 141  
142 142 def commit(commit_id = nil)
... ... @@ -160,7 +160,7 @@ class Project &lt; ActiveRecord::Base
160 160 y.committed_date <=> x.committed_date
161 161 end
162 162  
163   - commits[0..n]
  163 + commits[0...n]
164 164 end
165 165  
166 166 def commits_since(date)
... ...
app/views/dashboard/index.html.haml
... ... @@ -3,12 +3,13 @@
3 3 #dashboard-content.dashboard-content.content
4 4 %aside
5 5 %h4
6   - %a.button-small.button-green{:href => ""} New Repository
  6 + - if current_user.can_create_project?
  7 + %a.button-small.button-green{:href => new_project_path} New Repository
7 8 Your Repositories
8 9 %ol.project-list
9 10 - @projects.each do |project|
10 11 %li
11   - %a{:href => "#"}
  12 + %a{:href => project_path(project)}
12 13 %span.arrow →
13 14 %span.project-name= project.name
14 15 %span.time
... ... @@ -18,19 +19,20 @@
18 19 %h2.icon
19 20 %span>
20 21 Dashboard
21   - - @active_projects.each do |project|
  22 + - @active_projects.first(3).each do |project|
22 23 .project-box.project-updates.ui-box.ui-box-small.ui-box-big
23 24 %h3= project.name
24 25 .data
25 26 - project.updates.each do |update|
26   - %a.project-update{:href => path_to_object(project, update)}
27   - %img{:src => "http://placehold.it/40x40"}
28   - %span.update-title [#{update.class.name}] added a matcher that helps debugging matching problems
29   - %span.update-author
30   - %strong= update.author.name
31   - authored
32   - = time_ago_in_words(update.created_at)
33   - ago
  27 + %a.project-update{:href => dashboard_feed_path(project, update)}
  28 + = image_tag gravatar_icon(update.author.email), :class => "left", :width => 40
  29 + %span.update-title
  30 + = dashboard_feed_title(update)
  31 + %span.update-author
  32 + %strong= update.author.name
  33 + authored
  34 + = time_ago_in_words(update.created_at)
  35 + ago
34 36 %br
35 37 / .project-update
36 38 / .project-updates
... ...
app/views/layouts/_head_panel.html.erb
... ... @@ -22,9 +22,9 @@
22 22 <%= link_to projects_path, :class => current_page?(projects_path) ? "current project" : "project" do %>
23 23 <span></span>Projects
24 24 <% end %>
25   - <%= link_to( admin_root_path, :class => admin_namespace? ? "current admin" : "admin" ) do %>
  25 + <%= link_to((current_user.is_admin? ? admin_root_path : "#"), :class => (admin_namespace? ? "current admin" : "admin")) do %>
26 26 <span></span>Admin
27   - <% end if current_user.is_admin? %>
  27 + <% end %>
28 28 </nav>
29 29 </header>
30 30 <!-- eo Page Header -->
... ...
spec/models/project_spec.rb
... ... @@ -62,6 +62,51 @@ describe Project do
62 62 end
63 63 end
64 64  
  65 + describe "updates" do
  66 + let(:project) { Factory :project }
  67 +
  68 + before do
  69 + @issue = Factory :issue,
  70 + :project => project,
  71 + :author => Factory(:user),
  72 + :assignee => Factory(:user)
  73 +
  74 + @note = Factory :note,
  75 + :project => project,
  76 + :author => Factory(:user)
  77 +
  78 + @commit = project.fresh_commits(1).first
  79 + end
  80 +
  81 + describe "return commit, note & issue" do
  82 + it { project.updates(3).count.should == 3 }
  83 + it { project.updates(3).last.id.should == @commit.id }
  84 + it { project.updates(3).include?(@issue).should be_true }
  85 + it { project.updates(3).include?(@note).should be_true }
  86 + end
  87 + end
  88 +
  89 + describe "last_activity" do
  90 + let(:project) { Factory :project }
  91 +
  92 + before do
  93 + @note = Factory :note,
  94 + :project => project,
  95 + :author => Factory(:user)
  96 + end
  97 +
  98 + it { project.last_activity.should == @note }
  99 + it { project.last_activity_date.to_s.should == @note.created_at.to_s }
  100 + end
  101 +
  102 + describe "fresh commits" do
  103 + let(:project) { Factory :project }
  104 +
  105 + it { project.fresh_commits(3).count.should == 3 }
  106 + it { project.fresh_commits.first.id.should == "2fb376f61875b58bceee0492e270e9c805294b1a" }
  107 + it { project.fresh_commits.last.id.should == "0dac878dbfe0b9c6104a87d65fe999149a8d862c" }
  108 + end
  109 +
65 110 describe "Git methods" do
66 111 let(:project) { Factory :project }
67 112  
... ...
spec/requests/dashboard_spec.rb 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "Dashboard" do
  4 + before { login_as :user }
  5 +
  6 + describe "GET /dashboard" do
  7 + before do
  8 + @project = Factory :project
  9 + @project.add_access(@user, :read, :write)
  10 + visit dashboard_path
  11 + end
  12 +
  13 + it "should be on dashboard page" do
  14 + current_path.should == dashboard_path
  15 + end
  16 +
  17 + it "should have projects panel" do
  18 + within ".project-list" do
  19 + page.should have_content(@project.name)
  20 + end
  21 + end
  22 +
  23 + it "should have news feed" do
  24 + within "#news-feed" do
  25 + page.should have_content(@project.commit.author.name)
  26 + page.should have_content(@project.commit.safe_message)
  27 + end
  28 + end
  29 + end
  30 +end
... ...
spec/requests/issues_spec.rb
... ... @@ -105,11 +105,6 @@ describe &quot;Issues&quot; do
105 105 Notify.should_not_receive(:new_issue_email)
106 106 click_button "Save"
107 107 end
108   -
109   - it "should send valid email to user with email & password" do
110   - click_button "Save"
111   - ActionMailer::Base.deliveries.last.should be_nil
112   - end
113 108 end
114 109  
115 110 describe 'assign to other' do
... ...