web47core 0.0.9 → 0.0.10

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.
@@ -0,0 +1,8 @@
1
+ test:
2
+ master: production
3
+ sentinels:
4
+ - host1:6379
5
+ - host2:6379
6
+ - host3:6379
7
+ role: master
8
+ namespace: 'cache'
@@ -0,0 +1,2 @@
1
+ test:
2
+ url: 'redis://localhost:6379/0'
@@ -0,0 +1,145 @@
1
+ require 'test_helper'
2
+
3
+ #
4
+ # Temp class for testing
5
+ #
6
+ class EmailModel
7
+ include Mongoid::Document
8
+ include Mongoid::Timestamps
9
+ include EmailAble
10
+ field :once, type: String
11
+ end
12
+
13
+ #
14
+ # Test the email model
15
+ #
16
+ class EmailModelTest < ActiveSupport::TestCase
17
+ should_have_field :email, type: String, klass: EmailModel
18
+ should_have_field :email_bounced_at, type: Time, klass: EmailModel
19
+ should_have_field :email_bounce_reason, type: String, klass: EmailModel
20
+ should_have_field :unconfirmed_email, type: String, klass: EmailModel
21
+ should_have_field :email_enabled, type: Mongoid::Boolean, default: true, klass: EmailModel
22
+
23
+ context 'valid email' do
24
+ should 'not be valid' do
25
+ email = EmailModel.new
26
+ email.email = 'nothing'
27
+ refute email.valid?
28
+ end
29
+ should 'be valid' do
30
+ email = EmailModel.new
31
+ email.email = 'joe@abc.com'
32
+ assert email.valid?
33
+ assert email.valid_email?
34
+ end
35
+ end
36
+
37
+ context 'valid_email?' do
38
+ setup do
39
+ @model = EmailModel.new
40
+ @email = 'known@abc.com'
41
+ @model.email = @email
42
+ assert @model.save
43
+ end
44
+ should 'be valid by default' do
45
+ assert @model.valid_email?
46
+ end
47
+ should 'not be valid with email_bounce_date' do
48
+ @model.email_bounced_at = Time.now.utc
49
+ refute @model.valid_email?
50
+ end
51
+ should 'not be valid with enabled turned off' do
52
+ @model.email_enabled = false
53
+ refute @model.valid_email?
54
+ end
55
+ should 'not be valid with enabled turned off and email_bounce_date' do
56
+ @model.email_bounced_at = Time.now.utc
57
+ @model.email_enabled = false
58
+ refute @model.valid_email?
59
+ end
60
+ end
61
+
62
+ context 'reset bounce status with mailgun' do
63
+ setup do
64
+ @model = EmailModel.new
65
+ @email = 'known@abc.com'
66
+ @model.email = @email
67
+ @model.email_bounced_at = Time.now.utc
68
+ @model.email_bounce_reason = 'Testing'
69
+ assert @model.save
70
+ end
71
+ should 'not be called if not configured' do
72
+ config = SystemConfiguration.configuration
73
+ config.unset :mailgun_api_key
74
+ assert config.save
75
+ RestClient.expects(:delete).never
76
+ @model.reset_bounce_status
77
+ assert @model.valid_email?, @model.inspect
78
+ end
79
+ should 'reset bounce status' do
80
+ refute @model.valid_email?
81
+ config = SystemConfiguration.configuration
82
+ config.smtp_name = 'app47'
83
+ config.smtp_address = 'mail.app47.com'
84
+ config.smtp_domain = 'app47.com'
85
+ config.mailgun_api_key = 'key'
86
+ assert config.save
87
+ RestClient.expects(:delete).once.returns(MockHttpResponse.new)
88
+ @model.reset_bounce_status
89
+ assert_not_nil @model.reload
90
+ assert @model.valid_email?
91
+ end
92
+ should 'handle error code from rest client' do
93
+ App47Logger.expects(:log_error).once
94
+ refute @model.valid_email?
95
+ config = SystemConfiguration.configuration
96
+ config.smtp_name = 'app47'
97
+ config.smtp_address = 'mail.app47.com'
98
+ config.smtp_domain = 'app47.com'
99
+ config.mailgun_api_key = 'key'
100
+ assert config.save
101
+ RestClient.expects(:delete).once.raises(RestClient::Exception.new(MockHttpResponse.new(404)))
102
+ @model.reset_bounce_status
103
+ assert_not_nil @model.reload
104
+ assert @model.valid_email?
105
+ end
106
+ end
107
+
108
+ context 'gravatar_url' do
109
+ setup do
110
+ @model = EmailModel.new
111
+ @email = 'known@abc.com'
112
+ @model.email = @email
113
+ assert @model.save
114
+ end
115
+ should 'go to gravatar site' do
116
+ url = @model.gravatar_url
117
+ assert url.start_with? 'https://www.gravatar.com/avatar/', url
118
+ end
119
+ should 'correct defaults' do
120
+ url = @model.gravatar_url
121
+ assert url.include?('s=32'), url
122
+ assert url.include?('d=mm'), url
123
+ end
124
+ should 'override size' do
125
+ url = @model.gravatar_url(1024)
126
+ refute url.include?('s=32'), url
127
+ assert url.include?('s=1024'), url
128
+ end
129
+ should 'override default' do
130
+ url = @model.gravatar_url(1024, 'retro')
131
+ refute url.include?('d=mm'), url
132
+ assert url.include?('d=retro'), url
133
+ end
134
+ end
135
+ end
136
+ #
137
+ # Mock class for testing
138
+ #
139
+ class MockHttpResponse
140
+ attr_accessor :code
141
+
142
+ def initialize(code = 200)
143
+ @code = code
144
+ end
145
+ end
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ class SearchableTest < ActiveSupport::TestCase
4
+
5
+ context 'Update search text on save' do
6
+
7
+ should 'update name' do
8
+ model = NameSearchable.new
9
+ assert model.save
10
+ assert_equal 'name', model.search_text
11
+ end
12
+
13
+ should 'update text' do
14
+ model = NameEmailSearchable.new
15
+ assert model.save
16
+ assert_equal 'name email@abc.com', model.search_text
17
+ end
18
+ should 'update text handle nil values' do
19
+ model = NameEmailCodeSearchable.new
20
+ assert model.save
21
+ assert_equal 'name email@abc.com', model.search_text
22
+ end
23
+ should 'update text with code' do
24
+ model = NameEmailCodeSearchable.new
25
+ model.code = 'FOOBar'
26
+ assert model.save
27
+ assert_equal 'name email@abc.com foobar', model.search_text
28
+ end
29
+ end
30
+
31
+ context 'search for items' do
32
+ should 'update text' do
33
+ NameEmailSearchable.create
34
+ NameEmailSearchable.create
35
+ NameEmailSearchable.create
36
+ model = NameEmailSearchable.new
37
+ model.name = 'defJKL'
38
+ assert model.save
39
+ assert_not_nil model
40
+ assert_equal 'defjkl email@abc.com', model.search_text
41
+ assert_equal 1, NameEmailSearchable.matching_search_text('defjkl').count
42
+ end
43
+ should 'return sort order' do
44
+ assert_equal [['name', 1], ['email', 1]], NameEmailSearchable.sort_order
45
+ end
46
+ end
47
+ end
48
+
49
+ class NameSearchable
50
+ include Mongoid::Document
51
+ include SearchAble
52
+ field :name, type: String, default: 'Name'
53
+ field :email, type: String, default: 'email@abc.com'
54
+ end
55
+
56
+ class NameEmailSearchable
57
+ include Mongoid::Document
58
+ include SearchAble
59
+ field :name, type: String, default: 'Name'
60
+ field :email, type: String, default: 'email@abc.com'
61
+
62
+ def search_fields
63
+ %w[name email]
64
+ end
65
+ end
66
+
67
+ class NameEmailCodeSearchable
68
+ include Mongoid::Document
69
+ include SearchAble
70
+ field :name, type: String, default: 'Name'
71
+ field :email, type: String, default: 'email@abc.com'
72
+ field :code, type: String
73
+
74
+ private
75
+
76
+ def search_fields
77
+ %w(name email code)
78
+ end
79
+
80
+ end
@@ -12,9 +12,18 @@ class StandardModelTest < ActiveSupport::TestCase
12
12
  end
13
13
  should 'return test input fields' do
14
14
  allowed = TestInput.allowed_param_names
15
- assert_equal 2, allowed.count
15
+ assert_equal 3, allowed.count
16
+ assert allowed.include?('input_type'), allowed.inspect
17
+ assert allowed.include?('test_form_id'), allowed.inspect
18
+ refute allowed.include?('test_input_field_ids'), allowed.inspect
19
+ end
20
+ should 'handle error' do
21
+ TestInput.expects(:all_associations).once.raises('Doh')
22
+ allowed = TestInput.allowed_param_names
23
+ assert_equal 3, allowed.count, allowed.inspect
16
24
  assert allowed.include?('input_type'), allowed.inspect
17
25
  assert allowed.include?('test_form_id'), allowed.inspect
26
+ assert allowed.include?('test_input_field_ids'), allowed.inspect
18
27
  end
19
28
  end
20
29
  context 'update the model safely' do
@@ -64,6 +73,39 @@ class StandardModelTest < ActiveSupport::TestCase
64
73
  assert @model.save
65
74
  refute Rails.cache.exist? @model.id.to_s
66
75
  end
76
+ should 'handle error' do
77
+ Rails.cache.expects(:delete_matched).once.raises('Doh')
78
+ assert Rails.cache.exist? @model.id.to_s
79
+ assert @model.save
80
+ assert Rails.cache.exist? @model.id.to_s
81
+ end
82
+ end
83
+
84
+ context 'skip call back' do
85
+ setup do
86
+ @model = TestCallBack.new value: 'foo'
87
+ end
88
+ should 'use call back' do
89
+ assert_equal 'foo', @model.value
90
+ @model.value = 'foobar'
91
+ assert @model.save
92
+ @model.reload
93
+ assert_equal 'bar', @model.value
94
+ end
95
+ should 'not use call back' do
96
+ assert_equal 'foo', @model.value
97
+ @model.value = 'foobar'
98
+ TestCallBack.without_callback(:save, :before, :bar_it) do
99
+ assert @model.save
100
+ end
101
+ @model.reload
102
+ assert_equal 'foobar', @model.value
103
+ end
104
+ end
105
+ context 'make_options' do
106
+ should 'return array' do
107
+ assert_equal [%w[one One], %w[two Two], %w[three Three]], TestForm.make_options(%w[one two three])
108
+ end
67
109
  end
68
110
  end
69
111
 
@@ -82,6 +124,14 @@ class TestInput
82
124
  include StandardModel
83
125
  field :input_type
84
126
  belongs_to :test_form
127
+ has_and_belongs_to_many :test_input_field
128
+ end
129
+
130
+ class TestInputField
131
+ include StandardModel
132
+ field :input_type
133
+ belongs_to :test_form
134
+ has_and_belongs_to_many :test_input
85
135
  end
86
136
 
87
137
  class TestAutoClearCache
@@ -90,4 +140,15 @@ class TestAutoClearCache
90
140
  def update_cache(value = 'abc123')
91
141
  Rails.cache.write id.to_s, value, expires_in: 60
92
142
  end
143
+ end
144
+
145
+ class TestCallBack
146
+ include StandardModel
147
+
148
+ field :value, type: String, default: 'foo'
149
+ before_save :bar_it
150
+
151
+ def bar_it
152
+ self.value = 'bar'
153
+ end
93
154
  end
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+
4
+ #
5
+ # Test the Searchable module
6
+ #
7
+ class TimeZoneAbleTest < ActiveSupport::TestCase
8
+ context 'have default' do
9
+ should 'set default' do
10
+ o = TimeZoneTestObject.new
11
+ assert_nil o.time_zone
12
+ assert o.save
13
+ assert_equal 'US/Eastern', o.time_zone
14
+ end
15
+ should 'have valid field values' do
16
+ o = TimeZoneTestObject.new
17
+ TZInfo::Timezone.all_identifiers.each do |tz|
18
+ o.time_zone = tz
19
+ assert o.valid?, o.errors.inspect
20
+ end
21
+ end
22
+ should 'invalid format' do
23
+ o = TimeZoneTestObject.new
24
+ o.time_zone = 'Eastern/US'
25
+ refute o.valid?
26
+ end
27
+ should 'pull from system configuration' do
28
+ assert SystemConfiguration.configuration.update default_time_zone: 'EST'
29
+ o = TimeZoneTestObject.new
30
+ assert_nil o.time_zone
31
+ assert o.save
32
+ assert_equal 'EST', o.time_zone
33
+ end
34
+ end
35
+ context 'return local time' do
36
+ setup do
37
+ @test_obj = TimeZoneTestObject.create!
38
+ @now = Time.now.utc
39
+ end
40
+ should 'give same as account' do
41
+ tz = TZInfo::Timezone.get('US/Eastern')
42
+ assert_equal I18n.l(@now.in_time_zone(tz), format: :medium), @test_obj.local_time(@now)
43
+ end
44
+ should 'handle error' do
45
+ TZInfo::Timezone.expects(:get).once.raises('Doh')
46
+ assert_equal 'Never now', @test_obj.local_time(@now, :medium, 'Never now')
47
+ end
48
+ should 'handle error with default' do
49
+ TZInfo::Timezone.expects(:get).once.raises('Doh')
50
+ assert_equal 'N/A', @test_obj.local_time(@now)
51
+ end
52
+ end
53
+ context 'return updated_at' do
54
+ setup do
55
+ @test_obj = TimeZoneTestObject.create!
56
+ @now = Time.now.utc
57
+ end
58
+ should 'give same as account' do
59
+ tz = TZInfo::Timezone.get('US/Eastern')
60
+ assert_equal I18n.l(@now.in_time_zone(tz), format: :medium), @test_obj.local_updated_time(@test_obj)
61
+ end
62
+ should 'handle error' do
63
+ @test_obj.expects(:updated_at).once.raises('Doh')
64
+ assert_equal 'Never now', @test_obj.local_updated_time(@test_obj, :medium, 'Never now')
65
+ end
66
+ should 'handle error with default' do
67
+ @test_obj.expects(:updated_at).once.raises('Doh')
68
+ assert_equal 'N/A', @test_obj.local_updated_time(@test_obj)
69
+ end
70
+ end
71
+ end
72
+
73
+ class TimeZoneTestObject
74
+ include Mongoid::Document
75
+ include Mongoid::Timestamps
76
+ include TimeZoneAble
77
+ end
@@ -0,0 +1,86 @@
1
+ require 'test_helper'
2
+
3
+ #
4
+ # Test the RedisConfiguration model
5
+ #
6
+ class RedisConfigurationTest < ActiveSupport::TestCase
7
+ context 'default file' do
8
+ should 'return the default configuration file the config file' do
9
+ config = RedisConfiguration.load
10
+ refute config[:url].eql?('redis://127.0.0.1:6379'), config.inspect
11
+ assert_equal 0, config[:db], config.inspect
12
+ end
13
+ should 'override the database' do
14
+ config = RedisConfiguration.load(9)
15
+ refute config[:url].eql?('redis://127.0.0.1:6379'), config.inspect
16
+ assert_equal 9, config[:db], config.inspect
17
+ end
18
+ end
19
+ context 'no file' do
20
+ setup do
21
+ RedisConfiguration.expects(:config_file_path).returns('config/nothing').at_least_once
22
+ end
23
+ should 'return default' do
24
+ config = RedisConfiguration.load
25
+ assert_equal '127.0.0.1', config[:host], config.inspect
26
+ assert_equal 6379, config[:port], config.inspect
27
+ assert_equal 0, config[:db], config.inspect
28
+ end
29
+ should 'set the database' do
30
+ config = RedisConfiguration.load(5)
31
+ assert_equal '127.0.0.1', config[:host], config.inspect
32
+ assert_equal 6379, config[:port], config.inspect
33
+ assert_equal 5, config[:db], config.inspect
34
+ end
35
+ end
36
+ context 'url' do
37
+ setup do
38
+ RedisConfiguration.expects(:config_file_path).returns('test/fixtures/redis/url.yml').at_least_once
39
+ end
40
+ should 'return url configuration' do
41
+ config = RedisConfiguration.load
42
+ # assert_equal 'redis://localhost:6379/0', config[:url], config.inspect
43
+ end
44
+ end
45
+ context 'host' do
46
+ setup do
47
+ RedisConfiguration.expects(:config_file_path).returns('test/fixtures/redis/host.yml').at_least_once
48
+ end
49
+ should 'load from file' do
50
+ config = RedisConfiguration.load
51
+ assert_equal '127.0.0.1', config[:host], config.inspect
52
+ assert_equal 6378, config[:port], config.inspect
53
+ assert_equal 8, config[:db], config.inspect
54
+ assert_equal 'cache', config[:namespace], config.inspect
55
+ end
56
+ should 'load from file and override database number' do
57
+ config = RedisConfiguration.load(6)
58
+ assert_equal '127.0.0.1', config[:host], config.inspect
59
+ assert_equal 6378, config[:port], config.inspect
60
+ assert_equal 6, config[:db], config.inspect
61
+ end
62
+ end
63
+ context 'sentinel' do
64
+ setup do
65
+ RedisConfiguration.expects(:config_file_path).returns('test/fixtures/redis/sentinel.yml').at_least_once
66
+ end
67
+ should 'load file' do
68
+ config = RedisConfiguration.load
69
+ assert_equal 'redis://production', config[:url], config.inspect
70
+ assert_equal 'master', config[:role], config.inspect
71
+ sentinels = config[:sentinels]
72
+ assert_not_nil sentinels
73
+ assert_equal 3, sentinels.count
74
+ assert_equal 'host1', sentinels.first[:host]
75
+ assert_equal 0, config[:db], config.inspect
76
+ assert_equal 'cache', config[:namespace], config.inspect
77
+ end
78
+ should 'load file and set database' do
79
+ config = RedisConfiguration.load(8)
80
+ sentinels = config[:sentinels]
81
+ assert_not_nil sentinels
82
+ assert_equal 3, sentinels.count, config.inspect
83
+ assert_equal 8, config[:db], config.inspect
84
+ end
85
+ end
86
+ end