Commit d98b1833612af09fb405880ef7acd63a4e2a42fa
1 parent
23d95085
Exists in
master
and in
4 other branches
first pack of tests for milestones
Showing
8 changed files
with
145 additions
and
48 deletions
Show diff stats
app/helpers/projects_helper.rb
... | ... | @@ -16,45 +16,7 @@ module ProjectsHelper |
16 | 16 | nil |
17 | 17 | end |
18 | 18 | |
19 | - def project_tab_class | |
20 | - [:show, :files, :team, :edit, :update].each do |action| | |
21 | - return "current" if current_page?(:controller => "projects", :action => action, :id => @project) | |
22 | - end | |
23 | - | |
24 | - if controller.controller_name == "snippets" || | |
25 | - controller.controller_name == "hooks" || | |
26 | - controller.controller_name == "deploy_keys" || | |
27 | - controller.controller_name == "team_members" | |
28 | - "current" | |
29 | - end | |
30 | - end | |
31 | - | |
32 | - def tree_tab_class | |
33 | - controller.controller_name == "refs" ? | |
34 | - "current" : nil | |
35 | - end | |
36 | - | |
37 | 19 | def repository_tab_class |
38 | - #if controller.controller_name == "repositories" || | |
39 | - #controller.controller_name == "hooks" || | |
40 | - #controller.controller_name == "deploy_keys" | |
41 | - #"current" | |
42 | - #end | |
43 | - end | |
44 | - | |
45 | - def commit_tab_class | |
46 | - if controller.controller_name == "commits" || | |
47 | - controller.controller_name == "repositories" || | |
48 | - controller.controller_name == "protected_branches" | |
49 | - "current" | |
50 | - end | |
51 | 20 | end |
52 | 21 | |
53 | - def branches_tab_class | |
54 | - if current_page?(branches_project_repository_path(@project)) || | |
55 | - controller.controller_name == "protected_branches" || | |
56 | - current_page?(project_repository_path(@project)) | |
57 | - 'active' | |
58 | - end | |
59 | - end | |
60 | 22 | end | ... | ... |
... | ... | @@ -0,0 +1,43 @@ |
1 | +module TabHelper | |
2 | + def issues_tab? | |
3 | + controller.controller_name == "issues" || controller.controller_name == "milestones" | |
4 | + end | |
5 | + | |
6 | + def wall_tab? | |
7 | + current_page?(:controller => "projects", :action => "wall", :id => @project) | |
8 | + end | |
9 | + | |
10 | + def project_tab_class | |
11 | + [:show, :files, :team, :edit, :update].each do |action| | |
12 | + return "current" if current_page?(:controller => "projects", :action => action, :id => @project) | |
13 | + end | |
14 | + | |
15 | + if controller.controller_name == "snippets" || | |
16 | + controller.controller_name == "hooks" || | |
17 | + controller.controller_name == "deploy_keys" || | |
18 | + controller.controller_name == "team_members" | |
19 | + "current" | |
20 | + end | |
21 | + end | |
22 | + | |
23 | + def tree_tab_class | |
24 | + controller.controller_name == "refs" ? | |
25 | + "current" : nil | |
26 | + end | |
27 | + | |
28 | + def commit_tab_class | |
29 | + if controller.controller_name == "commits" || | |
30 | + controller.controller_name == "repositories" || | |
31 | + controller.controller_name == "protected_branches" | |
32 | + "current" | |
33 | + end | |
34 | + end | |
35 | + | |
36 | + def branches_tab_class | |
37 | + if current_page?(branches_project_repository_path(@project)) || | |
38 | + controller.controller_name == "protected_branches" || | |
39 | + current_page?(project_repository_path(@project)) | |
40 | + 'active' | |
41 | + end | |
42 | + end | |
43 | +end | ... | ... |
app/views/layouts/_project_menu.html.haml
... | ... | @@ -10,7 +10,7 @@ |
10 | 10 | |
11 | 11 | = link_to "Network", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil |
12 | 12 | - if @project.issues_enabled |
13 | - = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do | |
13 | + = link_to project_issues_filter_path(@project), :class => issues_tab? ? "current" : nil do | |
14 | 14 | Issues |
15 | 15 | %span.count= @project.issues.opened.count |
16 | 16 | - if @project.merge_requests_enabled |
... | ... | @@ -19,7 +19,7 @@ |
19 | 19 | %span.count= @project.merge_requests.opened.count |
20 | 20 | |
21 | 21 | - if @project.wall_enabled |
22 | - = link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do | |
22 | + = link_to wall_project_path(@project), :class => wall_tab? ? "current" : nil do | |
23 | 23 | Wall |
24 | 24 | |
25 | 25 | - if @project.wiki_enabled | ... | ... |
db/schema.rb
... | ... | @@ -65,18 +65,18 @@ ActiveRecord::Schema.define(:version => 20120408181910) do |
65 | 65 | t.text "st_commits", :limit => 2147483647 |
66 | 66 | t.text "st_diffs", :limit => 2147483647 |
67 | 67 | t.boolean "merged", :default => false, :null => false |
68 | - t.boolean "auto_merge", :default => true, :null => false | |
69 | 68 | end |
70 | 69 | |
71 | 70 | add_index "merge_requests", ["project_id"], :name => "index_merge_requests_on_project_id" |
72 | 71 | |
73 | 72 | create_table "milestones", :force => true do |t| |
74 | - t.string "title", :null => false | |
73 | + t.string "title", :null => false | |
74 | + t.integer "project_id", :null => false | |
75 | 75 | t.text "description" |
76 | - t.date "due_date", :null => false | |
77 | - t.integer "project_id", :null => false | |
78 | - t.datetime "created_at", :null => false | |
79 | - t.datetime "updated_at", :null => false | |
76 | + t.date "due_date" | |
77 | + t.boolean "closed", :default => false, :null => false | |
78 | + t.datetime "created_at", :null => false | |
79 | + t.datetime "updated_at", :null => false | |
80 | 80 | end |
81 | 81 | |
82 | 82 | create_table "notes", :force => true do |t| | ... | ... |
spec/factories.rb
spec/models/issue_spec.rb
... | ... | @@ -5,6 +5,7 @@ describe Issue do |
5 | 5 | it { should belong_to(:project) } |
6 | 6 | it { should belong_to(:author) } |
7 | 7 | it { should belong_to(:assignee) } |
8 | + it { should belong_to(:milestone) } | |
8 | 9 | end |
9 | 10 | |
10 | 11 | describe "Validation" do |
... | ... | @@ -22,7 +23,7 @@ describe Issue do |
22 | 23 | it { Factory.create(:issue, |
23 | 24 | :author => Factory(:user), |
24 | 25 | :assignee => Factory(:user), |
25 | - :project => Factory.create(:project)).should be_valid } | |
26 | + :projet => Factory.create(:project)).should be_valid } | |
26 | 27 | |
27 | 28 | describe "plus 1" do |
28 | 29 | let(:project) { Factory(:project) } | ... | ... |
spec/models/milestone_spec.rb
1 | 1 | require 'spec_helper' |
2 | 2 | |
3 | 3 | describe Milestone do |
4 | - pending "add some examples to (or delete) #{__FILE__}" | |
4 | + describe "Associations" do | |
5 | + it { should belong_to(:project) } | |
6 | + it { should have_many(:issues) } | |
7 | + end | |
8 | + | |
9 | + describe "Validation" do | |
10 | + it { should validate_presence_of(:title) } | |
11 | + it { should validate_presence_of(:project_id) } | |
12 | + end | |
13 | + | |
14 | + let(:project) { Factory :project } | |
15 | + let(:milestone) { Factory :milestone, :project => project } | |
16 | + let(:issue) { Factory :issue, :project => project } | |
17 | + | |
18 | + it { milestone.should be_valid } | |
19 | + | |
20 | + describe "Issues" do | |
21 | + before do | |
22 | + milestone.issues << issue | |
23 | + end | |
24 | + | |
25 | + it { milestone.percent_complete.should == 0 } | |
26 | + | |
27 | + it do | |
28 | + issue.update_attributes :closed => true | |
29 | + milestone.percent_complete.should == 100 | |
30 | + end | |
31 | + end | |
32 | + | |
33 | + describe :expires_at do | |
34 | + before do | |
35 | + milestone.update_attributes :due_date => Date.today + 1.day | |
36 | + end | |
37 | + | |
38 | + it { milestone.expires_at.should_not be_nil } | |
39 | + end | |
5 | 40 | end | ... | ... |
... | ... | @@ -0,0 +1,51 @@ |
1 | +require 'spec_helper' | |
2 | + | |
3 | +describe "Milestones" do | |
4 | + let(:project) { Factory :project } | |
5 | + | |
6 | + before do | |
7 | + login_as :user | |
8 | + project.add_access(@user, :admin) | |
9 | + | |
10 | + @milestone = Factory :milestone, :project => project | |
11 | + @issue = Factory :issue, :project => project | |
12 | + | |
13 | + @milestone.issues << @issue | |
14 | + end | |
15 | + | |
16 | + describe "GET /milestones" do | |
17 | + before do | |
18 | + visit project_milestones_path(project) | |
19 | + end | |
20 | + | |
21 | + subject { page } | |
22 | + | |
23 | + it { should have_content(@milestone.title[0..10]) } | |
24 | + it { should have_content(@milestone.expires_at) } | |
25 | + it { should have_content("Browse Issues") } | |
26 | + end | |
27 | + | |
28 | + describe "GET /milestone/:id" do | |
29 | + before do | |
30 | + visit project_milestone_path(project, @milestone) | |
31 | + end | |
32 | + | |
33 | + subject { page } | |
34 | + | |
35 | + it { should have_content(@milestone.title[0..10]) } | |
36 | + it { should have_content(@milestone.expires_at) } | |
37 | + it { should have_content("Browse Issues") } | |
38 | + end | |
39 | + | |
40 | + describe "GET /milestones/new" do | |
41 | + before do | |
42 | + visit new_project_milestone_path(project) | |
43 | + fill_in "milestone_title", :with => "v2.3" | |
44 | + click_button "Create milestone" | |
45 | + end | |
46 | + | |
47 | + it { current_path.should == project_milestone_path(project, project.milestones.last) } | |
48 | + it { should have_content(@milestone.title[0..10]) } | |
49 | + it { should have_content(@milestone.expires_at) } | |
50 | + end | |
51 | +end | ... | ... |