test_redmine_vz 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/README.md +71 -0
- data/Rakefile +20 -0
- data/config/currency_iso.json +2532 -0
- data/doc/CHANGELOG +55 -0
- data/doc/LICENSE.txt +339 -0
- data/lib/redmine_crm.rb +67 -0
- data/lib/redmine_crm/currency.rb +439 -0
- data/lib/redmine_crm/currency/formatting.rb +227 -0
- data/lib/redmine_crm/currency/heuristics.rb +151 -0
- data/lib/redmine_crm/currency/loader.rb +24 -0
- data/lib/redmine_crm/helpers/tags_helper.rb +15 -0
- data/lib/redmine_crm/helpers/vote_helper.rb +38 -0
- data/lib/redmine_crm/liquid/drops/issues_drop.rb +61 -0
- data/lib/redmine_crm/liquid/drops/news_drop.rb +45 -0
- data/lib/redmine_crm/liquid/drops/projects_drop.rb +78 -0
- data/lib/redmine_crm/liquid/drops/users_drop.rb +59 -0
- data/lib/redmine_crm/liquid/filters.rb +85 -0
- data/lib/redmine_crm/money_helper.rb +67 -0
- data/lib/redmine_crm/rcrm_acts_as_taggable.rb +342 -0
- data/lib/redmine_crm/rcrm_acts_as_viewed.rb +287 -0
- data/lib/redmine_crm/rcrm_acts_as_votable.rb +79 -0
- data/lib/redmine_crm/rcrm_acts_as_voter.rb +27 -0
- data/lib/redmine_crm/tag.rb +81 -0
- data/lib/redmine_crm/tag_list.rb +112 -0
- data/lib/redmine_crm/tagging.rb +20 -0
- data/lib/redmine_crm/version.rb +3 -0
- data/lib/redmine_crm/votable.rb +334 -0
- data/lib/redmine_crm/vote.rb +30 -0
- data/lib/redmine_crm/voter.rb +136 -0
- data/redmine_crm.gemspec +22 -0
- data/test/acts_as_taggable_test.rb +384 -0
- data/test/currency_test.rb +292 -0
- data/test/database.yml +17 -0
- data/test/fixtures/issue.rb +14 -0
- data/test/fixtures/issues.yml +12 -0
- data/test/fixtures/taggings.yml +32 -0
- data/test/fixtures/tags.yml +11 -0
- data/test/fixtures/user.rb +7 -0
- data/test/fixtures/users.yml +5 -0
- data/test/fixtures/votable_caches.yml +2 -0
- data/test/fixtures/votables.yml +4 -0
- data/test/fixtures/vote_classes.rb +54 -0
- data/test/fixtures/voters.yml +6 -0
- data/test/liquid_test.rb +80 -0
- data/test/money_helper_test.rb +12 -0
- data/test/schema.rb +100 -0
- data/test/tag_test.rb +63 -0
- data/test/tagging_test.rb +14 -0
- data/test/tags_helper_test.rb +29 -0
- data/test/test_helper.rb +118 -0
- data/test/viewed_test.rb +45 -0
- data/test/votable_model_test.rb +478 -0
- data/test/votable_test.rb +17 -0
- data/test/vote_helper_test.rb +28 -0
- data/test/voter_model_test.rb +296 -0
- metadata +141 -0
data/test/liquid_test.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
module RedmineCrm
|
4
|
+
class LiquidTest < ActiveSupport::TestCase
|
5
|
+
def test_today_filter
|
6
|
+
assert_match Date.today.strftime(date_format), render('{{today}}')
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_plus_days_filter
|
10
|
+
assert_match (Date.today + 3.days).strftime(date_format), render("{{today | plus_days: 3 | date: '#{date_format}'}}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_date_range_filter
|
14
|
+
assert_equal '10', render("{{today | date_range: '#{Date.today - 10.days}'}}")
|
15
|
+
end
|
16
|
+
|
17
|
+
# RedCloth3 is a part of Redmine - test will not work
|
18
|
+
# def test_textilize_filter
|
19
|
+
# assert_match '<h1>Some text</h1>', render("{{ 'Some text' | textilize }}")
|
20
|
+
# end
|
21
|
+
|
22
|
+
def test_underscore_filter
|
23
|
+
assert_match 'some_text', render("{{ 'some text' | underscore }}")
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_dasherize_filter
|
27
|
+
assert_match 'some-text', render("{{ 'some text' | dasherize }}")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_random_filter
|
31
|
+
assert render("{{ random: 10 }}").to_i <= 10
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_user_drop
|
35
|
+
user = User.first
|
36
|
+
assert_match user.name, render("{{ user.name }}")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_users_drop
|
40
|
+
users_name = User.all.map(&:name)
|
41
|
+
rendered_text = render("{% for user in users %} {{user.name }} {% endfor %}")
|
42
|
+
users_name.each do |name|
|
43
|
+
assert_match name, rendered_text
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_issue_drop
|
48
|
+
assert_match Issue.first.description, render("{{ issue.description }}")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_default_filter
|
52
|
+
user = User.first
|
53
|
+
user.name = nil
|
54
|
+
user.save
|
55
|
+
assert_match 'user', render("{{ user.name | default: 'user' }}")
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def render(content)
|
61
|
+
assigns = {}
|
62
|
+
assigns['now'] = Time.now
|
63
|
+
assigns['today'] = Date.today.strftime(date_format)
|
64
|
+
assigns['user'] = Liquid::UserDrop.new(User.first)
|
65
|
+
assigns['users'] = Liquid::UsersDrop.new(User.all)
|
66
|
+
assigns['issue'] = Liquid::IssueDrop.new(Issue.first)
|
67
|
+
|
68
|
+
registers = {}
|
69
|
+
begin
|
70
|
+
::Liquid::Template.parse(content).render(::Liquid::Context.new({}, assigns, registers)).html_safe
|
71
|
+
rescue => e
|
72
|
+
e.message
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def date_format
|
77
|
+
'%d.%m.%Y'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class MoneyHelperTest < ActiveSupport::TestCase
|
4
|
+
include RedmineCrm::MoneyHelper
|
5
|
+
|
6
|
+
def test_price_to_currency
|
7
|
+
assert_equal '$3,265.65', price_to_currency(3265.65, "USD")
|
8
|
+
assert_equal "3.265,65 ₽", price_to_currency(3265.65, "RUB")
|
9
|
+
assert_equal "3,200.0", price_to_currency(3200, "")
|
10
|
+
assert_equal "3,200.0", price_to_currency(3200, "Foo")
|
11
|
+
end
|
12
|
+
end
|
data/test/schema.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
ActiveRecord::Schema.define :version => 0 do
|
2
|
+
|
3
|
+
create_table "tags", :force => true do |t|
|
4
|
+
t.column "name", :string
|
5
|
+
end
|
6
|
+
|
7
|
+
create_table "taggings", :force => true do |t|
|
8
|
+
t.column "tag_id", :integer
|
9
|
+
t.column "taggable_id", :integer
|
10
|
+
t.column "taggable_type", :string
|
11
|
+
t.column "created_at", :datetime
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
create_table "users", :force => true do |t|
|
16
|
+
t.column "name", :string
|
17
|
+
end
|
18
|
+
|
19
|
+
create_table "issues", :force => true do |t|
|
20
|
+
t.column "description", :string
|
21
|
+
t.column "closed", :boolean
|
22
|
+
t.column "cached_tag_list", :string
|
23
|
+
t.column "user_id", :integer
|
24
|
+
t.column "views", :integer, :default => 0
|
25
|
+
t.column "total_views", :integer, :default => 0
|
26
|
+
end
|
27
|
+
|
28
|
+
create_table "votes", :force => true do |t|
|
29
|
+
t.references "votable", :polymorphic => true
|
30
|
+
t.references "voter", :polymorphic => true
|
31
|
+
|
32
|
+
t.boolean "vote_flag"
|
33
|
+
t.string "vote_scope"
|
34
|
+
t.integer "vote_weight"
|
35
|
+
|
36
|
+
t.timestamps
|
37
|
+
end
|
38
|
+
|
39
|
+
# add_index :votes, [:votable_id, :votable_type]
|
40
|
+
# add_index :votes, [:voter_id, :voter_type]
|
41
|
+
# add_index :votes, [:voter_id, :voter_type, :vote_scope]
|
42
|
+
# add_index :votes, [:votable_id, :votable_type, :vote_scope]
|
43
|
+
|
44
|
+
create_table :voters, :force => true do |t|
|
45
|
+
t.string :name
|
46
|
+
end
|
47
|
+
|
48
|
+
create_table :not_voters, :force => true do |t|
|
49
|
+
t.string :name
|
50
|
+
end
|
51
|
+
|
52
|
+
create_table :votables, :force => true do |t|
|
53
|
+
t.string :name
|
54
|
+
end
|
55
|
+
|
56
|
+
create_table :votable_voters, :force => true do |t|
|
57
|
+
t.string :name
|
58
|
+
end
|
59
|
+
|
60
|
+
create_table :sti_votables, :force => true do |t|
|
61
|
+
t.string :name
|
62
|
+
t.string :type
|
63
|
+
end
|
64
|
+
|
65
|
+
create_table :sti_not_votables, :force => true do |t|
|
66
|
+
t.string :name
|
67
|
+
t.string :type
|
68
|
+
end
|
69
|
+
|
70
|
+
create_table :not_votables, :force => true do |t|
|
71
|
+
t.string :name
|
72
|
+
end
|
73
|
+
|
74
|
+
create_table :votable_caches, :force => true do |t|
|
75
|
+
t.string :name
|
76
|
+
t.integer :cached_votes_total
|
77
|
+
t.integer :cached_votes_score
|
78
|
+
t.integer :cached_votes_up
|
79
|
+
t.integer :cached_votes_down
|
80
|
+
t.integer :cached_weighted_total
|
81
|
+
t.integer :cached_weighted_score
|
82
|
+
t.float :cached_weighted_average
|
83
|
+
|
84
|
+
t.integer :cached_scoped_test_votes_total
|
85
|
+
t.integer :cached_scoped_test_votes_score
|
86
|
+
t.integer :cached_scoped_test_votes_up
|
87
|
+
t.integer :cached_scoped_test_votes_down
|
88
|
+
t.integer :cached_scoped_weighted_total
|
89
|
+
t.integer :cached_scoped_weighted_score
|
90
|
+
t.float :cached_scoped_weighted_average
|
91
|
+
end
|
92
|
+
|
93
|
+
create_table :viewings, :force => true do |t|
|
94
|
+
t.column :viewer_id, :integer
|
95
|
+
t.column :viewed_id, :integer
|
96
|
+
t.column :viewed_type, :string
|
97
|
+
t.column :ip, :string, :limit => '24'
|
98
|
+
t.column :created_at, :datetime
|
99
|
+
end
|
100
|
+
end
|
data/test/tag_test.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
module RedmineCrm
|
4
|
+
class TagTest < ActiveSupport::TestCase
|
5
|
+
def test_name_required
|
6
|
+
t = Tag.create
|
7
|
+
assert_match /blank/, t.errors[:name].to_s
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_name_unique
|
11
|
+
t = Tag.create!(:name => "My tag")
|
12
|
+
duplicate = t.dup
|
13
|
+
assert !duplicate.save
|
14
|
+
assert_match /not uniq/, duplicate.errors[:name].to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_taggings
|
18
|
+
assert_equivalent [taggings(:tag_for_error), taggings(:tag_for_error1), taggings(:tag_for_error2)
|
19
|
+
], tags(:error).taggings
|
20
|
+
assert_equivalent [taggings(:tag_for_question1), taggings(:tag_for_question2), taggings(:tag_for_question3)], tags(:question).taggings
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_to_s
|
24
|
+
assert_equal tags(:error).name, tags(:error).to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_equality
|
28
|
+
assert_equal tags(:error), tags(:error)
|
29
|
+
assert_equal Tag.find(tags(:error).id), Tag.find(tags(:error).id)
|
30
|
+
assert_equal Tag.new(:name => 'A'), Tag.new(:name => 'A')
|
31
|
+
assert_not_equal Tag.new(:name => 'A'), Tag.new(:name => 'B')
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_taggings_removed_when_tag_destroyed
|
35
|
+
assert_difference("Tagging.count", -Tagging.where(:tag_id => tags(:error).id).count) do
|
36
|
+
assert tags(:error).destroy
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_all_counts
|
41
|
+
assert_tag_counts Tag.counts, :error => 3, :feature => 1, :bug => 1, :question => 3
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_all_counts_with_string_conditions
|
45
|
+
assert_tag_counts Tag.counts(:conditions => 'taggings.created_at >= \'2015-01-01\''),
|
46
|
+
:question => 3, :error => 2, :feature => 1, :bug => 1
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_all_counts_with_array_conditions
|
50
|
+
assert_tag_counts Tag.counts(:conditions => ['taggings.created_at >= ?', '2015-01-01']),
|
51
|
+
:question => 3, :error => 2, :feature => 1, :bug => 1
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_all_counts_with_hash_conditions
|
55
|
+
tag_counts = Tag.counts(
|
56
|
+
:conditions => {
|
57
|
+
:taggings => { :created_at => (DateTime.parse('2014-12-31 23:59') .. DateTime.parse('4000-01-01')) }
|
58
|
+
}
|
59
|
+
)
|
60
|
+
assert_tag_counts tag_counts, :question => 3, :error => 2, :feature => 1, :bug => 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
# require File.dirname(__FILE__) + '/fixtures/issue'
|
3
|
+
|
4
|
+
class TaggingTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
def test_tag
|
7
|
+
assert_equal tags(:error), taggings(:tag_for_error).tag
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_taggable
|
11
|
+
assert_equal issues(:first_issue), taggings(:tag_for_error).taggable
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
# module RedmineCrm
|
4
|
+
class TagsHelperTest < ActiveSupport::TestCase
|
5
|
+
include RedmineCrm::TagsHelper
|
6
|
+
|
7
|
+
def test_tag_cloud
|
8
|
+
cloud_elements = []
|
9
|
+
|
10
|
+
tag_cloud Issue.tag_counts, %w(css1 css2 css3 css4) do |tag, css_class|
|
11
|
+
cloud_elements << [tag, css_class]
|
12
|
+
end
|
13
|
+
assert cloud_elements.include?([tags(:error), "css4"])
|
14
|
+
assert cloud_elements.include?([tags(:question), "css4"])
|
15
|
+
assert cloud_elements.include?([tags(:bug), "css2"])
|
16
|
+
assert cloud_elements.include?([tags(:feature), "css2"])
|
17
|
+
assert_equal 4, cloud_elements.size
|
18
|
+
end
|
19
|
+
|
20
|
+
# def test_tag_cloud_when_no_tags
|
21
|
+
# cloud_elements = []
|
22
|
+
# tag_cloud SpecialIssue.tag_counts, %w(css1) do |tag, css_class|
|
23
|
+
# # assert false, "tag_cloud should not yield"
|
24
|
+
# cloud_elements << [tag, css_class]
|
25
|
+
# end
|
26
|
+
# assert_equal 0, cloud_elements.size
|
27
|
+
# end
|
28
|
+
end
|
29
|
+
# end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'byebug'
|
3
|
+
# require 'test/unit'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require File.dirname(__FILE__) + '/../../../../config/environment'
|
7
|
+
rescue LoadError
|
8
|
+
require 'rubygems'
|
9
|
+
gem 'activerecord', "4.2.7.1"
|
10
|
+
gem 'actionpack', "4.2.7.1"
|
11
|
+
require 'active_record'
|
12
|
+
# require 'action_controller'
|
13
|
+
end
|
14
|
+
require "redmine_crm"
|
15
|
+
require "active_record/fixtures"
|
16
|
+
|
17
|
+
require File.dirname(__FILE__) + '/../lib/redmine_crm/rcrm_acts_as_taggable'
|
18
|
+
require File.dirname(__FILE__) + '/../lib/redmine_crm/tag_list'
|
19
|
+
require File.dirname(__FILE__) + '/../lib/redmine_crm/tag'
|
20
|
+
require File.dirname(__FILE__) + '/../lib/redmine_crm/tagging'
|
21
|
+
require File.dirname(__FILE__) + '/../lib/redmine_crm/helpers/tags_helper'
|
22
|
+
require File.dirname(__FILE__) + '/../lib/redmine_crm/rcrm_acts_as_votable'
|
23
|
+
require File.dirname(__FILE__) + '/../lib/redmine_crm/rcrm_acts_as_voter'
|
24
|
+
|
25
|
+
# require_dependency File.dirname(__FILE__) + '/../lib/redmine_crm/tags_helper'
|
26
|
+
|
27
|
+
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/debug.log')
|
28
|
+
ActiveRecord::Base.configurations = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
29
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[ENV['DB'] || 'sqlite3'])
|
30
|
+
|
31
|
+
load(File.dirname(__FILE__) + '/schema.rb')
|
32
|
+
load(File.dirname(__FILE__) + '/fixtures/user.rb')
|
33
|
+
load(File.dirname(__FILE__) + '/fixtures/issue.rb')
|
34
|
+
load(File.dirname(__FILE__) + "/fixtures/vote_classes.rb")
|
35
|
+
|
36
|
+
# Dir["/fixtures/*.rb"].each{|file| load file}
|
37
|
+
|
38
|
+
class ActiveSupport::TestCase #:nodoc:
|
39
|
+
include ActiveRecord::TestFixtures
|
40
|
+
|
41
|
+
self.fixture_path = File.dirname(__FILE__) + "/fixtures/"
|
42
|
+
|
43
|
+
self.use_transactional_fixtures = true
|
44
|
+
self.use_instantiated_fixtures = false
|
45
|
+
set_fixture_class :tags => RedmineCrm::Tag
|
46
|
+
set_fixture_class :taggings => RedmineCrm::Tagging
|
47
|
+
|
48
|
+
set_fixture_class :votable_caches => VotableCache
|
49
|
+
fixtures :all
|
50
|
+
|
51
|
+
def assert_equivalent(expected, actual, message = nil)
|
52
|
+
if expected.first.is_a?(ActiveRecord::Base)
|
53
|
+
assert_equal expected.sort_by(&:id), actual.sort_by(&:id), message
|
54
|
+
else
|
55
|
+
assert_equal expected.sort, actual.sort, message
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def assert_tag_counts(tags, expected_values)
|
60
|
+
# Map the tag fixture names to real tag names
|
61
|
+
expected_values = expected_values.inject({}) do |hash, (tag, count)|
|
62
|
+
hash[tags(tag).name] = count
|
63
|
+
hash
|
64
|
+
end
|
65
|
+
|
66
|
+
tags.each do |tag|
|
67
|
+
value = expected_values.delete(tag.name)
|
68
|
+
|
69
|
+
assert_not_nil value, "Expected count for #{tag.name} was not provided"
|
70
|
+
assert_equal value, tag.count, "Expected value of #{value} for #{tag.name}, but was #{tag.count}"
|
71
|
+
end
|
72
|
+
|
73
|
+
unless expected_values.empty?
|
74
|
+
assert false, "The following tag counts were not present: #{expected_values.inspect}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# def assert_queries(num = 1)
|
79
|
+
# $query_count = 0
|
80
|
+
# yield
|
81
|
+
# ensure
|
82
|
+
# assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."
|
83
|
+
# end
|
84
|
+
|
85
|
+
# def assert_queries(num = 1, options = {})
|
86
|
+
# ignore_none = options.fetch(:ignore_none) { num == :any }
|
87
|
+
# SQLCounter.clear_log
|
88
|
+
# yield
|
89
|
+
# ensure
|
90
|
+
# the_log = ignore_none ? SQLCounter.log_all : SQLCounter.log
|
91
|
+
# if num == :any
|
92
|
+
# assert_operator the_log.size, :>=, 1, "1 or more queries expected, but none were executed."
|
93
|
+
# else
|
94
|
+
# mesg = "#{the_log.size} instead of #{num} queries were executed.#{the_log.size == 0 ? '' : "\nQueries:\n#{the_log.join("\n")}"}"
|
95
|
+
# assert_equal num, the_log.size, mesg
|
96
|
+
# end
|
97
|
+
# end
|
98
|
+
|
99
|
+
def assert_no_queries(&block)
|
100
|
+
assert_queries(0, &block)
|
101
|
+
end
|
102
|
+
|
103
|
+
# From Rails trunk
|
104
|
+
def assert_difference(expressions, difference = 1, message = nil, &block)
|
105
|
+
expression_evaluations = [expressions].flatten.collect{|expression| lambda { eval(expression, block.binding) } }
|
106
|
+
|
107
|
+
original_values = expression_evaluations.inject([]) { |memo, expression| memo << expression.call }
|
108
|
+
yield
|
109
|
+
expression_evaluations.each_with_index do |expression, i|
|
110
|
+
assert_equal original_values[i] + difference, expression.call, message
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def assert_no_difference(expressions, message = nil, &block)
|
115
|
+
assert_difference expressions, 0, message, &block
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
data/test/viewed_test.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class ViewedTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def user
|
6
|
+
user = users(:jonathan)
|
7
|
+
end
|
8
|
+
|
9
|
+
def issue
|
10
|
+
issue = issues(:first_issue)
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def test_zero_of_view_count
|
15
|
+
assert_equal issue.view_count, "0(0)"
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_can_view
|
19
|
+
issue.view '127.0.0.1', user
|
20
|
+
assert_equal issue.view_count, "1(1)"
|
21
|
+
# second view change only total count
|
22
|
+
issue.view '127.0.0.1', user
|
23
|
+
assert_equal issue.view_count, "2(1)"
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_viewed_by
|
27
|
+
assert !issue.viewed_by?('127.0.0.1', user)
|
28
|
+
issue.view '127.0.0.1', user
|
29
|
+
assert issue.viewed_by?('127.0.0.1', user)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_twice_view
|
33
|
+
issue.view '127.0.0.1', user
|
34
|
+
issue.view '127.0.0.1', user
|
35
|
+
assert_equal "2(1)", issue.view_count
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_viewed?
|
39
|
+
assert !issue.viewed?
|
40
|
+
issue.view '127.0.0.1', user
|
41
|
+
assert issue.viewed?
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
end
|