Project

General

Profile

Feature #34715 » 34715.patch

Yuichi HARADA, 2021-03-30 10:11

View differences:

app/models/issue_query.rb
201 201
      "attachment",
202 202
      :type => :text, :name => l(:label_attachment)
203 203
    )
204
    add_available_filter(
205
      "attachment_description",
206
      :type => :text, :name => l(:label_attachment_description)
207
    )
204 208
    if User.current.logged?
205 209
      add_available_filter(
206 210
        "watcher_id",
......
588 592
    end
589 593
  end
590 594

  
595
  def sql_for_attachment_description_field(field, operator, value)
596
    cond_description = "a.description IS NOT NULL AND a.description <> ''"
597
    c =
598
      case operator
599
      when '*', '!*'
600
        (operator == '*' ? cond_description : "NOT (#{cond_description})")
601
      when '~', '!~'
602
        (operator == '~' ? '' : "#{cond_description} AND ") +
603
        sql_contains('a.description', value.first, :match => (operator == '~'))
604
      when '^', '$'
605
        sql_contains('a.description', value.first, (operator == '^' ? :starts_with : :ends_with) => true)
606
      else
607
        '1=0'
608
      end
609
    "EXISTS (SELECT 1 FROM #{Attachment.table_name} a WHERE a.container_type = 'Issue' AND a.container_id = #{Issue.table_name}.id AND #{c})"
610
  end
611

  
591 612
  def sql_for_parent_id_field(field, operator, value)
592 613
    case operator
593 614
    when "="
config/locales/en.yml
698 698
  label_attachment_delete: Delete file
699 699
  label_attachment_plural: Files
700 700
  label_file_added: File added
701
  label_attachment_description: File description
701 702
  label_report: Report
702 703
  label_report_plural: Reports
703 704
  label_news: News
test/fixtures/attachments.yml
197 197
  filename: private.diff
198 198
  author_id: 2
199 199
  content_type: text/x-diff
200
  description: attachement of a private issue
200
  description: attachment of a private issue
201 201
attachments_016:
202 202
  content_type: image/png
203 203
  downloads: 0
test/unit/query_test.rb
1486 1486
    assert_equal [3, 4], issues.collect(&:id).sort
1487 1487
  end
1488 1488

  
1489
  def test_filter_on_attachment_description_when_any
1490
    query = IssueQuery.new(:name => '_')
1491
    query.filters = {"attachment_description" => {:operator => '*', :values =>  ['']}}
1492
    issues = find_issues_with_query(query)
1493
    assert_equal [2, 3, 14], issues.collect(&:id).sort
1494
  end
1495

  
1496
  def test_filter_on_attachment_description_when_none
1497
    query = IssueQuery.new(:name => '_')
1498
    query.filters = {"attachment_description" => {:operator => '!*', :values =>  ['']}}
1499
    issues = find_issues_with_query(query)
1500
    assert_equal [2, 3, 4, 14], issues.collect(&:id).sort
1501
  end
1502

  
1503
  def test_filter_on_attachment_description_when_contains
1504
    query = IssueQuery.new(:name => '_')
1505
    query.filters = {"attachment_description" => {:operator => '~', :values =>  ['attachment']}}
1506
    issues = find_issues_with_query(query)
1507
    assert_equal [3, 14], issues.collect(&:id).sort
1508
  end
1509

  
1510
  def test_filter_on_attachment_description_when_does_not_contain
1511
    query = IssueQuery.new(:name => '_')
1512
    query.filters = {"attachment_description" => {:operator => '!~', :values =>  ['attachment']}}
1513
    issues = find_issues_with_query(query)
1514
    assert_equal [2], issues.collect(&:id).sort
1515
  end
1516

  
1517
  def test_filter_on_attachment_description_when_starts_with
1518
    query = IssueQuery.new(:name => '_')
1519
    query.filters = {"attachment_description" => {:operator => '^', :values =>  ['attachment']}}
1520
    issues = find_issues_with_query(query)
1521
    assert_equal [14], issues.collect(&:id).sort
1522
  end
1523

  
1524
  def test_filter_on_attachment_description_when_ends_with
1525
    query = IssueQuery.new(:name => '_')
1526
    query.filters = {"attachment_description" => {:operator => '$', :values =>  ['attachment']}}
1527
    issues = find_issues_with_query(query)
1528
    assert_equal [3], issues.collect(&:id).sort
1529
  end
1530

  
1489 1531
  def test_filter_on_subject_when_starts_with
1490 1532
    query = IssueQuery.new(:name => '_')
1491 1533
    query.filters = {'subject' => {:operator => '^', :values => ['issue']}}
(1-1/3)