asterisk-mailcmd 0.0.1

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,25 @@
1
+ require 'minitest/autorun'
2
+ require 'mocha/setup'
3
+ require 'stringio'
4
+ require 'methadone'
5
+ require 'asterisk/mailcmd'
6
+
7
+ require 'pp'
8
+
9
+ class MiniTest::Unit::TestCase
10
+ def mock_ast_stdin
11
+ # get raw email from fixture file
12
+ file = File.expand_path('fixtures/email.text',File.dirname(__FILE__))
13
+ # return mocked IO
14
+ StringIO.new(File.read file)
15
+ end
16
+
17
+ def html_tmpl_file_path
18
+ File.expand_path('fixtures/html_tmpl.erb',File.dirname(__FILE__))
19
+ end
20
+
21
+ def text_tmpl_file_path
22
+ File.expand_path('fixtures/text_tmpl.erb',File.dirname(__FILE__))
23
+ end
24
+
25
+ end
@@ -0,0 +1,42 @@
1
+ require 'helper'
2
+ include Asterisk::Mailcmd
3
+
4
+ describe Email, "reading email data from Asterisk" do
5
+
6
+ before do # setup
7
+ $stdin = mock_ast_stdin
8
+ end
9
+
10
+ after do #teardown
11
+ $stdin = STDIN
12
+ end
13
+
14
+ describe "Reading from Asterisk" do
15
+
16
+ it "must read valid raw email from STDIO" do
17
+ email = Email.read
18
+ email.rawdata.size.must_be :>, 0
19
+ end
20
+
21
+ it "must return false if invalid raw email message" do
22
+ # Valid raw email must endin
23
+ # with full stop (period) on new line
24
+ # RFC772: The last line must consist of only a single period.
25
+ $stdin.stubs(:read).once.returns("This is invalid \n.\nraw email")
26
+ email = Email.read
27
+ email.raw_valid?.must_equal false
28
+ end
29
+
30
+ it "must return true if valid raw email" do
31
+ email = Email.read
32
+ email.raw_valid?.must_equal true
33
+ end
34
+
35
+ it "must read mail to Mail class instance" do
36
+ Email.read.
37
+ mail.from.first.
38
+ must_equal "asterisk@localhost.localdomain"
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,100 @@
1
+ require 'helper'
2
+ include Asterisk::Mailcmd
3
+ include Mail::Matchers
4
+
5
+ describe Email, "setting up and delivering email" do
6
+
7
+ before do # setup
8
+ @html_tmpl_path = html_tmpl_file_path # helper method
9
+ @text_tmpl_path = text_tmpl_file_path
10
+ $stdin = mock_ast_stdin
11
+ end
12
+
13
+ after do #teardown
14
+ $stdin = STDIN
15
+ end
16
+
17
+ describe "Setting up email" do
18
+
19
+ it "must set email date to now" do
20
+ email = Email.read
21
+ # stub date
22
+ time = Time.new
23
+ Time.stubs(:now).returns(time)
24
+ email.set_date
25
+ email.mail.date.to_time. # Mail.date is DateTime class
26
+ to_s.must_equal time.to_s
27
+ end
28
+
29
+ it "must set default date" do
30
+ email = Email.read
31
+ time = Time.now
32
+ email.set_date time
33
+ email.mail.date.to_time.
34
+ to_s.must_equal time.to_s
35
+ end
36
+
37
+ it "must raise when invalid Time object" do
38
+ email = Email.read
39
+ proc {
40
+ email.set_date "some time"
41
+ }.must_raise ArgumentError
42
+ end
43
+
44
+ it "must return charset UTF-8 by default" do
45
+ email = Email.read
46
+ email.get_charset.must_equal 'UTF-8'
47
+ end
48
+
49
+ it "must set charset" do
50
+ email = Email.read
51
+ email.charset = 'ASCII'
52
+ email.get_charset.must_equal 'ASCII'
53
+ end
54
+
55
+ it "must set html template with charset ISO-8859-1" do
56
+ email = Email.read
57
+ email.extract_vars
58
+ email.set_date
59
+ chrst = 'ISO-8859-1'
60
+ email.charset = chrst
61
+ Settings.read @text_tmpl_path, :text
62
+ email.text_tmpl Settings.text_tmpl
63
+ Settings.read @html_tmpl_path
64
+ email.html_tmpl Settings.html_tmpl
65
+ email.mail.html_part.content_type.must_match(/charset=#{chrst}/)
66
+ end
67
+
68
+ it "must set default deliver method and params" do
69
+ email = Email.read
70
+ email.delivery_method.must_equal :sendmail
71
+ email.delivery_params.class.must_equal Hash
72
+ email.delivery_params.size.must_equal 0
73
+ end
74
+
75
+ it "must raise if set_and_send has no text templates set" do
76
+ proc {
77
+ Email.set_and_send :charset => 'UTF-8'
78
+ }.must_raise InvalidTxtTmpl
79
+ end
80
+
81
+ it "must raise if set_and_send has no HTML templates set" do
82
+ proc {
83
+ Email.set_and_send :text_tmpl => @text_tmpl_path
84
+ }.must_raise InvalidHtmlTmpl
85
+ end
86
+
87
+ it "must send email with set_and_send" do
88
+ Email.set_and_send :text_tmpl => @text_tmpl_path,
89
+ :html_tmpl => @html_tmpl_path,
90
+ :charset => 'ISO-8859-1',
91
+ :delivery_method => :test
92
+ # should send one email
93
+ Mail::TestMailer.deliveries.length.must_equal 1
94
+ Mail::TestMailer.deliveries.first.from.first.must_equal "asterisk@localhost.localdomain"
95
+ Mail::TestMailer.deliveries.first.html_part.content_type.must_match(/charset=ISO-8859-1/)
96
+ Mail::TestMailer.deliveries.first.html_part.body.decoded.must_match(/2275550168/)
97
+ end
98
+
99
+ end
100
+ end
@@ -0,0 +1,61 @@
1
+ require 'helper'
2
+ include Asterisk::Mailcmd
3
+
4
+ describe Email, "Body templates" do
5
+
6
+ before do # setup
7
+ @html_tmpl_path = html_tmpl_file_path # helper method
8
+ @text_tmpl_path = text_tmpl_file_path
9
+ $stdin = mock_ast_stdin
10
+ end
11
+
12
+ after do #teardown
13
+ $stdin = STDIN
14
+ end
15
+
16
+ describe "Setting up email variables and templates" do
17
+
18
+ it "must extract Asterisk variables from email" do
19
+ email = Email.read
20
+ email.extract_vars
21
+ # see fixtures for expected values
22
+ email.astvars[:VM_CIDNUM].must_equal "2275550168"
23
+ end
24
+
25
+ it "must set email HTML tamplate and inline variables" do
26
+ email = Email.read
27
+ email.extract_vars
28
+ Settings.read @html_tmpl_path
29
+ email.html_tmpl Settings.html_tmpl
30
+ email.htmlpart.must_match(email.astvars[:VM_CIDNUM])
31
+ email.mail.html_part.body.decoded.
32
+ must_match(email.astvars[:VM_CIDNUM])
33
+ end
34
+
35
+ it "must raise if variables were not extracted" do
36
+ proc {
37
+ email = Email.read
38
+ Settings.read @html_tmpl_path
39
+ email.html_tmpl Settings.html_tmpl
40
+ }.must_raise ArgumentError
41
+ end
42
+
43
+ it "must raise if invalid template type" do
44
+ proc {
45
+ email = Email.read
46
+ email.tmpl "template text", :unknown_type
47
+ }.must_raise ArgumentError
48
+ end
49
+
50
+ it "must set email TEXT tamplate and inline variables" do
51
+ email = Email.read
52
+ email.extract_vars
53
+ Settings.read @text_tmpl_path, :text
54
+ email.text_tmpl Settings.text_tmpl
55
+ email.textpart.must_match(email.astvars[:VM_CIDNUM])
56
+ email.mail.text_part.body.decoded.
57
+ must_match(email.astvars[:VM_CIDNUM])
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,51 @@
1
+ require 'helper'
2
+ include Asterisk::Mailcmd
3
+
4
+ describe Settings, "Application settings" do
5
+
6
+ before do # setup
7
+ # helper methods
8
+ @html_tmpl_path = html_tmpl_file_path
9
+ @text_tmpl_path = text_tmpl_file_path
10
+ end
11
+
12
+ after do #teardown
13
+ end
14
+
15
+ describe "Settings processing" do
16
+
17
+ it "must raise ArgumentError if template file does not exist" do
18
+ File.stubs(:exists?).once.returns(false)
19
+ proc {
20
+ Settings.read('/not/existing/file.tmpl')
21
+ }.must_raise ArgumentError
22
+ end
23
+
24
+ it "must raise ArgumentError if template file is not readable" do
25
+ File.stubs(:exists?).once.returns(true)
26
+ File.stubs(:readable?).once.returns(false)
27
+ proc {
28
+ Settings.read('/not/readable/file.tmpl')
29
+ }.must_raise ArgumentError
30
+ end
31
+
32
+ it "must set instance variable after reading html template file" do
33
+ Settings.read(@html_tmpl_path, :html).must_equal Settings.html_tmpl
34
+ end
35
+
36
+ it "must set instance variable after reading text template file" do
37
+ Settings.read(@text_tmpl_path, :text).must_equal Settings.text_tmpl
38
+ end
39
+
40
+ it "must set default template as html" do
41
+ Settings.read(@html_tmpl_path, :html).must_equal Settings.read(@html_tmpl_path)
42
+ end
43
+
44
+ it "must raise ArgumentError when template type is invalid" do
45
+ proc {
46
+ Settings.read(@html_tmpl_path, :unknown_template_type)
47
+ }.must_raise ArgumentError
48
+ end
49
+
50
+ end
51
+ end
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: asterisk-mailcmd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Stas Kobzar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: aruba
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.9.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: mail
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: methadone
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 1.2.6
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 1.2.6
125
+ description: Asterisk voicemail emails enhancement
126
+ email:
127
+ - stas@modulis.ca
128
+ executables:
129
+ - asterisk-mailcmd
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.md
138
+ - README.rdoc
139
+ - Rakefile
140
+ - asterisk-mailcmd.gemspec
141
+ - bin/asterisk-mailcmd
142
+ - features/asterisk-mailcmd.feature
143
+ - features/step_definitions/asterisk-mailcmd_steps.rb
144
+ - features/support/env.rb
145
+ - lib/asterisk/mailcmd.rb
146
+ - lib/asterisk/mailcmd/email.rb
147
+ - lib/asterisk/mailcmd/settings.rb
148
+ - lib/asterisk/mailcmd/version.rb
149
+ - sample/html_email.png
150
+ - sample/html_tmpl.erb
151
+ - sample/mailcmd.rvm.sh
152
+ - sample/text_tmpl.erb
153
+ - test/fixtures/email.text
154
+ - test/fixtures/html_tmpl.erb
155
+ - test/fixtures/text_tmpl.erb
156
+ - test/helper.rb
157
+ - test/test_read_stdin.rb
158
+ - test/test_set_mail_send.rb
159
+ - test/test_set_tmpl.rb
160
+ - test/test_settings.rb
161
+ homepage: http://www.modulis.ca
162
+ licenses:
163
+ - MIT
164
+ metadata: {}
165
+ post_install_message:
166
+ rdoc_options: []
167
+ require_paths:
168
+ - lib
169
+ required_ruby_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ requirements: []
180
+ rubyforge_project:
181
+ rubygems_version: 2.0.2
182
+ signing_key:
183
+ specification_version: 4
184
+ summary: ! 'Command to use with Asterisk mailcmp option. See: voicemail.conf'
185
+ test_files:
186
+ - features/asterisk-mailcmd.feature
187
+ - features/step_definitions/asterisk-mailcmd_steps.rb
188
+ - features/support/env.rb
189
+ - test/fixtures/email.text
190
+ - test/fixtures/html_tmpl.erb
191
+ - test/fixtures/text_tmpl.erb
192
+ - test/helper.rb
193
+ - test/test_read_stdin.rb
194
+ - test/test_set_mail_send.rb
195
+ - test/test_set_tmpl.rb
196
+ - test/test_settings.rb