summaryrefslogtreecommitdiffstats
path: root/test/helpers/icons_helper_test.rb
blob: ab3e743fdeddc61f801fe59e5554d7798b47eace (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# frozen_string_literal: true

# Redmine - project management software
# Copyright (C) 2006-  Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

require_relative '../test_helper'

class IconsHelperTest < Redmine::HelperTest
  include IconsHelper

  fixtures :users

  def test_sprite_icon_should_return_svg_with_defaults
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--edit"></use></svg>$}
    icon = sprite_icon('edit')

    assert_match expected, icon
  end

  def test_sprite_icon_should_return_svg_with_label
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--edit"></use></svg><span class="icon-label">Edit</span>}
    icon = sprite_icon('edit', 'Edit')

    assert_match expected, icon
  end

  def test_sprite_icon_should_return_svg_with_hidden_label_when_icon_only_is_true
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--edit"></use></svg><span class="icon-label hidden">Edit</span>}
    icon = sprite_icon('edit', 'Edit', icon_only: true)

    assert_match expected, icon
  end

  def test_sprite_icon_should_return_svg_with_custom_size
    expected = %r{<svg class="s24 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--edit"></use></svg>$}
    icon = sprite_icon('edit', size: '24')

    assert_match expected, icon
  end

  def test_sprite_icon_should_return_svg_with_custom_css_class
    expected = %r{<svg class="s18 icon-svg custom-class" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--edit"></use></svg>$}
    icon = sprite_icon('edit', css_class: 'custom-class')

    assert_match expected, icon
  end

  def test_sprite_icon_should_return_svg_with_custom_sprite
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/custom.svg#icon--edit"></use></svg>$}
    icon = sprite_icon('edit', sprite: 'custom')

    assert_match expected, icon
  end

  def test_sprite_icon_should_return_svg_with_plugin_sprite
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/plugin_assets/my_plugin/icons.svg#icon--edit"></use></svg>$}
    icon = sprite_icon('edit', plugin: 'my_plugin')

    assert_match expected, icon
  end

  def test_file_icon_should_return_folder_icon_for_directory
    entry = stub(:is_dir? => true)
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--folder"></use></svg><span class="icon-label">folder_name</span>}
    icon = file_icon(entry, "folder_name")

    assert_match expected, icon
  end

  def test_file_icon_should_return_folder_icon_for_files
    entry = stub(:is_dir? => false)
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--file"></use></svg><span class="icon-label">file_name</span>}
    icon = file_icon(entry, "file_name")

    assert_match expected, icon
  end

  def test_file_icon_should_return_file_type_icon_for_files
    entry = stub(:is_dir? => false)
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--text-plain"></use></svg><span class="icon-label">text.txt</span>}
    icon = file_icon(entry, "text.txt")

    assert_match expected, icon
  end

  def test_principal_icon_should_return_group_icon_for_group_classes
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--group"></use></svg>}

    [Principal.find(12), Principal.find(13), Principal.find(10)].each do |principal|
      assert_match expected, principal_icon(principal)
    end
  end

  def test_principal_icon_should_return_nil_for_non_group_classes
    assert_nil principal_icon('user')
  end

  def test_activity_event_type_icon_should_return_correct_icon_for_reply_events
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--comments"></use></svg>}
    assert_match expected, activity_event_type_icon('reply')
  end

  def test_activity_event_type_icon_should_return_correct_icon_for_time_entry_events
    expected = %r{<svg class="s18 icon-svg" aria-hidden="true"><use href="/assets/icons-\w+.svg#icon--time"></use></svg>}
    assert_match expected, activity_event_type_icon('time-entry')
  end

  def test_icon_for_mime_type_should_return_specific_icon_for_known_mime_types
    assert_equal 'text-plain', icon_for_mime_type('text-plain')
    assert_equal 'application-pdf', icon_for_mime_type('application-pdf')
  end

  def test_icon_for_mime_type_should_return_generic_file_icon_for_unknown_mime_types
    assert_equal 'file', icon_for_mime_type('unknown-type')
  end
end