From 020e1a8eee37e6a0acba9833f8abb5dfc80eb248 Mon Sep 17 00:00:00 2001 From: gitlabhq Date: Wed, 2 Nov 2011 22:14:03 +0200 Subject: [PATCH] dashboard --- app/helpers/dashboard_helper.rb | 25 ++++++++++++-- app/models/project.rb | 4 +-- app/views/dashboard/index.html.haml | 24 +++++++------- app/views/layouts/_head_panel.html.erb | 4 +-- spec/models/project_spec.rb | 45 ++++++++++++++++++++++++++ spec/requests/dashboard_spec.rb | 30 +++++++++++++++++ spec/requests/issues_spec.rb | 5 --- 7 files changed, 115 insertions(+), 22 deletions(-) create mode 100644 spec/requests/dashboard_spec.rb diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb index 878c877d..0560af5d 100644 --- a/app/helpers/dashboard_helper.rb +++ b/app/helpers/dashboard_helper.rb @@ -1,9 +1,30 @@ module DashboardHelper - def path_to_object(project, object) + def dashboard_feed_path(project, object) case object.class.name.to_s when "Issue" then project_issues_path(project, project.issues.find(object.id)) when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first) - else "#" + when "Note" + then + note = object + case note.noteable_type + when "Issue" then project_issue_path(project, note.noteable_id) + when "Snippet" then project_snippet_path(project, note.noteable_id) + when "Commit" then project_commit_path(project, :id => note.noteable_id) + else wall_project_path(project) + end + else "#" end + rescue + "#" + end + + def dashboard_feed_title(object) + title = case object.class.name.to_s + when "Note" then markdown(object.note) + when "Issue" then object.title + when "Grit::Commit" then object.safe_message + else "" + end + "[#{object.class.name}] #{truncate(sanitize(title, :tags => []), :length => 60)} " end end diff --git a/app/models/project.rb b/app/models/project.rb index 54cf77e4..befa1c6b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -136,7 +136,7 @@ class Project < ActiveRecord::Base notes.fresh.limit(n) ].compact.flatten.sort do |x, y| y.created_at <=> x.created_at - end[0..n] + end[0...n] end def commit(commit_id = nil) @@ -160,7 +160,7 @@ class Project < ActiveRecord::Base y.committed_date <=> x.committed_date end - commits[0..n] + commits[0...n] end def commits_since(date) diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml index 73d6eba2..761826ca 100644 --- a/app/views/dashboard/index.html.haml +++ b/app/views/dashboard/index.html.haml @@ -3,12 +3,13 @@ #dashboard-content.dashboard-content.content %aside %h4 - %a.button-small.button-green{:href => ""} New Repository + - if current_user.can_create_project? + %a.button-small.button-green{:href => new_project_path} New Repository Your Repositories %ol.project-list - @projects.each do |project| %li - %a{:href => "#"} + %a{:href => project_path(project)} %span.arrow → %span.project-name= project.name %span.time @@ -18,19 +19,20 @@ %h2.icon %span> Dashboard - - @active_projects.each do |project| + - @active_projects.first(3).each do |project| .project-box.project-updates.ui-box.ui-box-small.ui-box-big %h3= project.name .data - project.updates.each do |update| - %a.project-update{:href => path_to_object(project, update)} - %img{:src => "http://placehold.it/40x40"} - %span.update-title [#{update.class.name}] added a matcher that helps debugging matching problems - %span.update-author - %strong= update.author.name - authored - = time_ago_in_words(update.created_at) - ago + %a.project-update{:href => dashboard_feed_path(project, update)} + = image_tag gravatar_icon(update.author.email), :class => "left", :width => 40 + %span.update-title + = dashboard_feed_title(update) + %span.update-author + %strong= update.author.name + authored + = time_ago_in_words(update.created_at) + ago %br / .project-update / .project-updates diff --git a/app/views/layouts/_head_panel.html.erb b/app/views/layouts/_head_panel.html.erb index 762c87ff..a64aa3b5 100644 --- a/app/views/layouts/_head_panel.html.erb +++ b/app/views/layouts/_head_panel.html.erb @@ -22,9 +22,9 @@ <%= link_to projects_path, :class => current_page?(projects_path) ? "current project" : "project" do %> Projects <% end %> - <%= link_to( admin_root_path, :class => admin_namespace? ? "current admin" : "admin" ) do %> + <%= link_to((current_user.is_admin? ? admin_root_path : "#"), :class => (admin_namespace? ? "current admin" : "admin")) do %> Admin - <% end if current_user.is_admin? %> + <% end %> diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 7bce57e8..bd83bc80 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -62,6 +62,51 @@ describe Project do end end + describe "updates" do + let(:project) { Factory :project } + + before do + @issue = Factory :issue, + :project => project, + :author => Factory(:user), + :assignee => Factory(:user) + + @note = Factory :note, + :project => project, + :author => Factory(:user) + + @commit = project.fresh_commits(1).first + end + + describe "return commit, note & issue" do + it { project.updates(3).count.should == 3 } + it { project.updates(3).last.id.should == @commit.id } + it { project.updates(3).include?(@issue).should be_true } + it { project.updates(3).include?(@note).should be_true } + end + end + + describe "last_activity" do + let(:project) { Factory :project } + + before do + @note = Factory :note, + :project => project, + :author => Factory(:user) + end + + it { project.last_activity.should == @note } + it { project.last_activity_date.to_s.should == @note.created_at.to_s } + end + + describe "fresh commits" do + let(:project) { Factory :project } + + it { project.fresh_commits(3).count.should == 3 } + it { project.fresh_commits.first.id.should == "2fb376f61875b58bceee0492e270e9c805294b1a" } + it { project.fresh_commits.last.id.should == "0dac878dbfe0b9c6104a87d65fe999149a8d862c" } + end + describe "Git methods" do let(:project) { Factory :project } diff --git a/spec/requests/dashboard_spec.rb b/spec/requests/dashboard_spec.rb new file mode 100644 index 00000000..6940366a --- /dev/null +++ b/spec/requests/dashboard_spec.rb @@ -0,0 +1,30 @@ +require 'spec_helper' + +describe "Dashboard" do + before { login_as :user } + + describe "GET /dashboard" do + before do + @project = Factory :project + @project.add_access(@user, :read, :write) + visit dashboard_path + end + + it "should be on dashboard page" do + current_path.should == dashboard_path + end + + it "should have projects panel" do + within ".project-list" do + page.should have_content(@project.name) + end + end + + it "should have news feed" do + within "#news-feed" do + page.should have_content(@project.commit.author.name) + page.should have_content(@project.commit.safe_message) + end + end + end +end diff --git a/spec/requests/issues_spec.rb b/spec/requests/issues_spec.rb index 0ff70308..b5d6f1bc 100644 --- a/spec/requests/issues_spec.rb +++ b/spec/requests/issues_spec.rb @@ -105,11 +105,6 @@ describe "Issues" do Notify.should_not_receive(:new_issue_email) click_button "Save" end - - it "should send valid email to user with email & password" do - click_button "Save" - ActionMailer::Base.deliveries.last.should be_nil - end end describe 'assign to other' do