newsletter_plugin_admin_controller_test.rb
5.07 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
require 'test_helper'
class NewsletterPluginAdminControllerTest < ActionController::TestCase
def setup
@controller = NewsletterPluginAdminController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@admin = create_user('admin_newsletter').person
@environment = @admin.environment
@environment.add_admin(@admin)
@environment.enable_plugin(NewsletterPlugin)
@controller.stubs(:environment).returns(@environment)
end
should 'allow access to admin' do
login_as @admin.identifier
get :index
assert_response :success
end
should 'save footer setting' do
login_as @admin.identifier
post :index,
:newsletter => { :footer => 'footer of newsletter' }
assert_equal 'footer of newsletter', assigns(:newsletter).footer
end
should 'save header image' do
login_as @admin.identifier
post :index,
:newsletter => {
:image_builder => {
:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')
}
}
assert_equal 'rails.png', assigns(:newsletter).image.filename
end
should 'save enabled newsletter information' do
login_as @admin.identifier
post :index,
:newsletter => { :enabled => 'true' }
newsletter = NewsletterPlugin::Newsletter.find_by_environment_id(@environment.id)
assert newsletter.enabled
end
should 'save periodicity newsletter information' do
login_as @admin.identifier
post :index,
:newsletter => { :periodicity => '10' }
newsletter = NewsletterPlugin::Newsletter.find_by_environment_id(@environment.id)
assert_equal 10, newsletter.periodicity
end
should 'save number of posts per blog setting' do
login_as @admin.identifier
post :index,
:newsletter => { :posts_per_blog => '6' }
assert_equal 6, assigns(:newsletter).posts_per_blog
end
should 'show error if number of posts per blog is not a positive number' do
login_as @admin.identifier
post :index,
:newsletter => { :posts_per_blog => '-4' }
assert_select 'li', 'Posts per blog must be a positive number'
end
should 'save blogs for compiling newsletter setting' do
login_as @admin.identifier
blog1 = fast_create(Blog)
blog1.profile = fast_create(Profile, environment_id: @environment.id)
blog1.save
blog2 = fast_create(Blog)
blog2.profile = fast_create(Profile, environment_id: @environment.id)
blog2.save
post :index,
:newsletter => { :blog_ids => "#{blog1.id},#{blog2.id}" }
assert_equivalent [blog1.id,blog2.id], assigns(:newsletter).blog_ids
end
should 'show error if blog is not in environment' do
login_as @admin.identifier
blog = fast_create(Blog)
blog.profile = fast_create(Profile, environment_id: fast_create(Environment).id)
blog.save
post :index,
:newsletter => { :blog_ids => "#{blog.id}" }
assert_select 'li', 'Blog ids must be valid'
end
should 'save logged in admin as person' do
login_as @admin.identifier
post :index, :newsletter => { }
assert_equal @admin, assigns(:newsletter).person
end
should 'receive csv file from user' do
content = <<-EOS
Coop1,name1@example.com
Coop2,name2@example.com
Coop3,name3@example.com
EOS
file = Tempfile.new(['recipients', '.csv'])
file.write(content)
file.rewind
login_as @admin.identifier
post :index, newsletter: {}, :file => { recipients: Rack::Test::UploadedFile.new(file, 'text/csv') }
file.close
file.unlink
assert_equivalent ["name1@example.com", "name2@example.com", "name3@example.com"], assigns(:newsletter).additional_recipients.map { |recipient| recipient[:email] }
assert_equivalent ["Coop1", "Coop2", "Coop3"], assigns(:newsletter).additional_recipients.map { |recipient| recipient[:name] }
end
should 'parse csv file with configuration set by user' do
content = <<-EOS
Id,Name,City,Email
1,Coop1,Moscow,name1@example.com
2,Coop2,Beijing,name2@example.com
3,Coop3,Paris,name3@example.com
EOS
file = Tempfile.new(['recipients', '.csv'])
file.write(content)
file.rewind
login_as @admin.identifier
post :index, newsletter: {}, :file => { recipients: Rack::Test::UploadedFile.new(file, 'text/csv'), headers: 1, name: 2, email: 4 }
file.close
file.unlink
assert_equivalent ["name1@example.com", "name2@example.com", "name3@example.com"], assigns(:newsletter).additional_recipients.map { |recipient| recipient[:email] }
assert_equivalent ["Coop1", "Coop2", "Coop3"], assigns(:newsletter).additional_recipients.map { |recipient| recipient[:name] }
end
should 'list additional recipients' do
login_as @admin.identifier
get :recipients
assert_select 'p', 'There are no additional recipients.'
newsletter = NewsletterPlugin::Newsletter.create!(environment: @environment, person: fast_create(Person))
newsletter.additional_recipients = [ {name: 'Coop1', email: 'name1@example.com'} ]
newsletter.save!
get :recipients
assert_select 'tr' do
assert_select 'td', 'Coop1'
assert_select 'td', 'name1@example.com'
end
end
end