diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 16e3d9d00560595de5dc0a269af7ec7460cd3ccc..f864f6aa3aed9ce91d23c88155ea1c7357176b77 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -16,45 +16,7 @@ module ProjectsHelper nil end - def project_tab_class - [:show, :files, :team, :edit, :update].each do |action| - return "current" if current_page?(:controller => "projects", :action => action, :id => @project) - end - - if controller.controller_name == "snippets" || - controller.controller_name == "hooks" || - controller.controller_name == "deploy_keys" || - controller.controller_name == "team_members" - "current" - end - end - - def tree_tab_class - controller.controller_name == "refs" ? - "current" : nil - end - def repository_tab_class - #if controller.controller_name == "repositories" || - #controller.controller_name == "hooks" || - #controller.controller_name == "deploy_keys" - #"current" - #end - end - - def commit_tab_class - if controller.controller_name == "commits" || - controller.controller_name == "repositories" || - controller.controller_name == "protected_branches" - "current" - end end - def branches_tab_class - if current_page?(branches_project_repository_path(@project)) || - controller.controller_name == "protected_branches" || - current_page?(project_repository_path(@project)) - 'active' - end - end end diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..091853b66c366075c0a27421f086639ee1794a46 --- /dev/null +++ b/app/helpers/tab_helper.rb @@ -0,0 +1,43 @@ +module TabHelper + def issues_tab? + controller.controller_name == "issues" || controller.controller_name == "milestones" + end + + def wall_tab? + current_page?(:controller => "projects", :action => "wall", :id => @project) + end + + def project_tab_class + [:show, :files, :team, :edit, :update].each do |action| + return "current" if current_page?(:controller => "projects", :action => action, :id => @project) + end + + if controller.controller_name == "snippets" || + controller.controller_name == "hooks" || + controller.controller_name == "deploy_keys" || + controller.controller_name == "team_members" + "current" + end + end + + def tree_tab_class + controller.controller_name == "refs" ? + "current" : nil + end + + def commit_tab_class + if controller.controller_name == "commits" || + controller.controller_name == "repositories" || + controller.controller_name == "protected_branches" + "current" + end + end + + def branches_tab_class + if current_page?(branches_project_repository_path(@project)) || + controller.controller_name == "protected_branches" || + current_page?(project_repository_path(@project)) + 'active' + end + end +end diff --git a/app/views/layouts/_project_menu.html.haml b/app/views/layouts/_project_menu.html.haml index 1f1b2e601a2c5c0c29b6260e835e74d24fbfb6b9..34987e485e0b2ccb40ae2e6f64936f326d1a467e 100644 --- a/app/views/layouts/_project_menu.html.haml +++ b/app/views/layouts/_project_menu.html.haml @@ -10,7 +10,7 @@ = link_to "Network", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil - if @project.issues_enabled - = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do + = link_to project_issues_filter_path(@project), :class => issues_tab? ? "current" : nil do Issues %span.count= @project.issues.opened.count - if @project.merge_requests_enabled @@ -19,7 +19,7 @@ %span.count= @project.merge_requests.opened.count - if @project.wall_enabled - = link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do + = link_to wall_project_path(@project), :class => wall_tab? ? "current" : nil do Wall - if @project.wiki_enabled diff --git a/db/schema.rb b/db/schema.rb index 51e78b7684718dbf846a0196d6d23b54ea300aeb..906c5b0024cc2b767e471fb304f5d76da8f8aeb3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -65,18 +65,18 @@ ActiveRecord::Schema.define(:version => 20120408181910) do t.text "st_commits", :limit => 2147483647 t.text "st_diffs", :limit => 2147483647 t.boolean "merged", :default => false, :null => false - t.boolean "auto_merge", :default => true, :null => false end add_index "merge_requests", ["project_id"], :name => "index_merge_requests_on_project_id" create_table "milestones", :force => true do |t| - t.string "title", :null => false + t.string "title", :null => false + t.integer "project_id", :null => false t.text "description" - t.date "due_date", :null => false - t.integer "project_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.date "due_date" + t.boolean "closed", :default => false, :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end create_table "notes", :force => true do |t| diff --git a/spec/factories.rb b/spec/factories.rb index af0b8acb2cb8ffeb86874ed41fe8d0cae942a4c6..4e11a48bfe97c5bedd6ddf547a9d1dc85c9b2d5b 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -75,3 +75,8 @@ Factory.add(:event, Event) do |obj| obj.title = Faker::Lorem.sentence obj.project = Factory(:project) end + +Factory.add(:milestone, Milestone) do |obj| + obj.title = Faker::Lorem.sentence + obj.due_date = Date.today + 1.month +end diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index d76adff3dae5e1000434bd021b2fdba28419fc4a..68c73fe5ebc09a90d2445ded0534cfe4ba9138db 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -5,6 +5,7 @@ describe Issue do it { should belong_to(:project) } it { should belong_to(:author) } it { should belong_to(:assignee) } + it { should belong_to(:milestone) } end describe "Validation" do @@ -22,7 +23,7 @@ describe Issue do it { Factory.create(:issue, :author => Factory(:user), :assignee => Factory(:user), - :project => Factory.create(:project)).should be_valid } + :projet => Factory.create(:project)).should be_valid } describe "plus 1" do let(:project) { Factory(:project) } diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 326d908758b4b2aae5ac4c3cc3a9cc19e77bbf73..ba1179866584bd42f955572f865d455eb4b0112d 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -1,5 +1,40 @@ require 'spec_helper' describe Milestone do - pending "add some examples to (or delete) #{__FILE__}" + describe "Associations" do + it { should belong_to(:project) } + it { should have_many(:issues) } + end + + describe "Validation" do + it { should validate_presence_of(:title) } + it { should validate_presence_of(:project_id) } + end + + let(:project) { Factory :project } + let(:milestone) { Factory :milestone, :project => project } + let(:issue) { Factory :issue, :project => project } + + it { milestone.should be_valid } + + describe "Issues" do + before do + milestone.issues << issue + end + + it { milestone.percent_complete.should == 0 } + + it do + issue.update_attributes :closed => true + milestone.percent_complete.should == 100 + end + end + + describe :expires_at do + before do + milestone.update_attributes :due_date => Date.today + 1.day + end + + it { milestone.expires_at.should_not be_nil } + end end diff --git a/spec/requests/milestones_spec.rb b/spec/requests/milestones_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..d4d6713012554ff4372494511ddeaf462b517fb7 --- /dev/null +++ b/spec/requests/milestones_spec.rb @@ -0,0 +1,51 @@ +require 'spec_helper' + +describe "Milestones" do + let(:project) { Factory :project } + + before do + login_as :user + project.add_access(@user, :admin) + + @milestone = Factory :milestone, :project => project + @issue = Factory :issue, :project => project + + @milestone.issues << @issue + end + + describe "GET /milestones" do + before do + visit project_milestones_path(project) + end + + subject { page } + + it { should have_content(@milestone.title[0..10]) } + it { should have_content(@milestone.expires_at) } + it { should have_content("Browse Issues") } + end + + describe "GET /milestone/:id" do + before do + visit project_milestone_path(project, @milestone) + end + + subject { page } + + it { should have_content(@milestone.title[0..10]) } + it { should have_content(@milestone.expires_at) } + it { should have_content("Browse Issues") } + end + + describe "GET /milestones/new" do + before do + visit new_project_milestone_path(project) + fill_in "milestone_title", :with => "v2.3" + click_button "Create milestone" + end + + it { current_path.should == project_milestone_path(project, project.milestones.last) } + it { should have_content(@milestone.title[0..10]) } + it { should have_content(@milestone.expires_at) } + end +end