Project

General

Profile

Defect #26023 » 26023_test_added.patch

Takenori TAKAKI, 2018-09-26 06:47

View differences:

app/models/issue_category.rb
28 28
  safe_attributes 'name', 'assigned_to_id'
29 29

  
30 30
  scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)}
31
  scope :visible, lambda {|*args|
32
    joins(:project).
33
    where(Project.allowed_to_condition(args.first || User.current, :view_issues))
34
  }
31 35

  
32 36
  alias :destroy_without_reassign :destroy
33 37

  
app/models/issue_query.rb
124 124

  
125 125
    add_available_filter "category_id",
126 126
      :type => :list_optional,
127
      :values => lambda { project.issue_categories.collect{|s| [s.name, s.id.to_s] } } if project
127
      :values => lambda { issue_category_values }
128 128

  
129 129
    add_available_filter "subject", :type => :text
130 130
    add_available_filter "description", :type => :text
app/models/project.rb
330 330
    @users = nil
331 331
    @shared_versions = nil
332 332
    @rolled_up_versions = nil
333
    @rolled_up_issue_categories = nil
333 334
    @rolled_up_trackers = nil
334 335
    @rolled_up_statuses = nil
335 336
    @rolled_up_custom_fields = nil
......
482 483
        where("#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status <> ?", lft, rgt, STATUS_ARCHIVED)
483 484
  end
484 485

  
486
  def rolled_up_issue_categories
487
    @rolled_up_issue_categories ||=
488
      IssueCategory.
489
        joins(:project).
490
        where("#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status <> ?", lft, rgt, STATUS_ARCHIVED)
491
  end
492

  
485 493
  # Returns a scope of the Versions used by the project
486 494
  def shared_versions
487 495
    if new_record?
app/models/query.rb
570 570
    watcher_values
571 571
  end
572 572

  
573
  def issue_category_values
574
    categories = []
575
    if project
576
      categories = project.rolled_up_issue_categories.to_a
577
    else
578
      categories = IssueCategory.visible.to_a
579
    end
580
    categories.collect {|c| [c.name, c.id.to_s] }
581
  end
582

  
573 583
  # Returns a scope of issue custom fields that are available as columns or filters
574 584
  def issue_custom_fields
575 585
    if project
test/unit/project_test.rb
555 555
      project.rolled_up_versions.sort
556 556
  end
557 557

  
558
  test "#rolled_up_issue_categories should include the categories for the current project" do
559
    project = Project.generate!
560
    current_category_1 = IssueCategory.create!(:name => 'Current Category 1' ,:project => project)
561
    current_category_2 = IssueCategory.create!(:name => 'Current Category 2' ,:project => project)
562
    expected_categories = [current_category_1, current_category_2].sort
563

  
564
    assert_equal expected_categories, project.rolled_up_issue_categories.sort
565
  end
566

  
567
  test "#rolled_up_issue_categories should include categories for a subproject" do
568
    project = Project.generate!
569
    parent_category_1 = IssueCategory.create!(:name => 'Parent Category 1' ,:project => project)
570
    parent_category_2 = IssueCategory.create!(:name => 'Parent Category 2' ,:project => project)
571
    subproject = Project.generate_with_parent!(project)
572
    subproject_category = IssueCategory.create!(:name => 'Subproject Category' ,:project => subproject)
573
    expected_categories = [parent_category_1, parent_category_2, subproject_category].sort
574

  
575
    assert_equal expected_categories, project.rolled_up_issue_categories.sort
576
  end
577

  
578
  test "#rolled_up_issue_categories should include categories for a sub-subproject" do
579
    project = Project.generate!
580
    parent_category_1 = IssueCategory.create!(:name => 'Parent Category 1' ,:project => project)
581
    parent_category_2 = IssueCategory.create!(:name => 'Parent Category 2' ,:project => project)
582
    subproject = Project.generate_with_parent!(project)
583
    sub_subproject = Project.generate_with_parent!(subproject)
584
    sub_subproject_category = IssueCategory.create!(:name => 'Sub Subproject Category' ,:project => sub_subproject)
585
    project.reload
586
    expected_categories = [parent_category_1, parent_category_2, sub_subproject_category].sort
587

  
588
    assert_equal expected_categories, project.rolled_up_issue_categories.sort
589
  end
590

  
591
  test "#rolled_up_issue_categories should only check active projects" do
592
    project = Project.generate!
593
    parent_category_1 = IssueCategory.create!(:name => 'Parent Category 1' ,:project => project)
594
    parent_category_2 = IssueCategory.create!(:name => 'Parent Category 2' ,:project => project)
595
    subproject = Project.generate_with_parent!(project)
596
    subproject_category = IssueCategory.create!(:name => 'Subproject Category' ,:project => subproject)
597
    assert subproject.archive
598
    project.reload
599
    expected_categories =  [parent_category_1, parent_category_2].sort
600

  
601
    assert !subproject.active?
602
    assert_equal expected_categories, project.rolled_up_issue_categories.sort
603
  end
604

  
558 605
  def test_shared_versions_none_sharing
559 606
    p = Project.find(5)
560 607
    v = Version.create!(:name => 'none_sharing', :project => p, :sharing => 'none')
(3-3/5)