1 # frozen_string_literal: true
5 class UserBlocksHelperTest < ActionView::TestCase
6 include ApplicationHelper
9 block = create(:user_block, :needs_view, :ends_at => Time.now.utc)
10 assert_equal "Active until the user logs in.", block_status(block)
12 block = create(:user_block, :needs_view, :ends_at => Time.now.utc + 1.hour)
13 assert_match %r{^Ends in <time title=".*" datetime=".*">about 1 hour</time> and after the user has logged in\.$}, block_status(block)
15 block = create(:user_block, :ends_at => Time.now.utc + 1.hour)
16 assert_match %r{^Ends in <time title=".* datetime=".*">about 1 hour</time>\.$}, block_status(block)
19 def test_block_short_status
21 future_end_block = create(:user_block, :ends_at => Time.now.utc + 48.hours)
22 unread_future_end_block = create(:user_block, :needs_view, :ends_at => Time.now.utc + 48.hours)
23 past_end_block = create(:user_block, :ends_at => Time.now.utc + 1.hour)
24 unread_past_end_block = create(:user_block, :needs_view, :ends_at => Time.now.utc + 1.hour)
28 assert_equal "active", block_short_status(future_end_block)
29 assert_equal "active", block_short_status(unread_future_end_block)
30 assert_equal "ended", block_short_status(past_end_block)
31 assert_equal "active until read", block_short_status(unread_past_end_block)
35 def test_block_short_status_with_immediate_update
37 block = UserBlock.new :user => create(:user),
38 :creator => create(:moderator_user),
40 :created_at => Time.now.utc,
41 :ends_at => Time.now.utc,
42 :deactivates_at => Time.now.utc,
49 assert_equal "ended", block_short_status(block)
53 def test_block_short_status_read
55 block = create(:user_block, :needs_view, :ends_at => Time.now.utc)
59 assert_equal "active until read", block_short_status(block)
61 block.update(:needs_view => false, :deactivates_at => Time.now.utc)
63 read_date = Time.now.utc.to_date.strftime
64 short_status_dom = Rails::Dom::Testing.html_document.parse(block_short_status(block))
65 assert_dom short_status_dom, ":root", :text => "read at #{read_date}"
69 block.update(:reason => "updated reason")
71 short_status_dom = Rails::Dom::Testing.html_document.parse(block_short_status(block))
72 assert_dom short_status_dom, ":root", :text => "read at #{read_date}"
76 def test_block_duration_in_words
77 words = block_duration_in_words(364.days)
78 assert_equal "11 months", words
80 words = block_duration_in_words(24.hours)
81 assert_equal "1 day", words
83 # Ensure that nil hours is not passed to i18n.t
84 words = block_duration_in_words(10.minutes)
85 assert_equal "0 hours", words
87 words = block_duration_in_words(0)
88 assert_equal "0 hours", words
90 # Ensure that (slightly) negative durations don't mess everything up
91 # This can happen on zero hour blocks when ends_at is a millisecond before created_at
92 words = block_duration_in_words(-0.001)
93 assert_equal "0 hours", words