postfix_admin 0.1.1 → 0.1.2

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,35 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
+ require 'postfix_admin/doveadm'
3
+
4
+ describe PostfixAdmin::Doveadm do
5
+ describe "schemes" do
6
+ it "return Array" do
7
+ PostfixAdmin::Doveadm.schemes.class.should == Array
8
+ end
9
+
10
+ it "return supported schemes" do
11
+ PostfixAdmin::Doveadm.schemes.should == %W!CRYPT MD5 MD5-CRYPT SHA SHA1 SHA256 SHA512 SMD5 SSHA SSHA256 SSHA512 PLAIN CLEAR CLEARTEXT PLAIN-TRUNC CRAM-MD5 SCRAM-SHA-1 HMAC-MD5 DIGEST-MD5 PLAIN-MD4 PLAIN-MD5 LDAP-MD5 LANMAN NTLM OTP SKEY RPA!
12
+ end
13
+ end
14
+
15
+ describe "password" do
16
+ it "CRAM-MD5" do
17
+ PostfixAdmin::Doveadm.password('password', 'CRAM-MD5').should == CRAM_MD5_PASS
18
+ PostfixAdmin::Doveadm.password('dovecot', 'CRAM-MD5').should == '2dc40f88a4c2142c3b10cc4b4d11382a648f600301b78a4070172782192898d6'
19
+ end
20
+
21
+ it "SHA256" do
22
+ PostfixAdmin::Doveadm.password('password', 'SHA256').should == 'XohImNooBHFR0OVvjcYpJ3NgPQ1qq73WKhHvch0VQtg='
23
+ PostfixAdmin::Doveadm.password('dovecot', 'SHA256').should == 'KN7aHmDsiQ/Ko+HzLzHcKoPqkjk7bditnD433YQYhcs='
24
+ end
25
+
26
+ it "MD5-CRYPT" do
27
+ PostfixAdmin::Doveadm.password('password', 'MD5-CRYPT').should =~ EX_MD5_CRYPT
28
+ PostfixAdmin::Doveadm.password('dovecot', 'MD5-CRYPT').should =~ EX_MD5_CRYPT
29
+ end
30
+
31
+ it "unknown scheme raise error" do
32
+ lambda{ PostfixAdmin::Doveadm.password('password', 'UNKNOWN-SCHEME') }.should raise_error Error
33
+ end
34
+ end
35
+ end
data/spec/models_spec.rb CHANGED
@@ -1,6 +1,13 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
2
  require 'postfix_admin/models'
3
3
 
4
+ describe PostfixAdmin do
5
+ it "flag_str" do
6
+ PostfixAdmin.flag_str(true).should == "YES"
7
+ PostfixAdmin.flag_str(false).should == "NO"
8
+ end
9
+ end
10
+
4
11
  describe PostfixAdmin::Admin do
5
12
  before do
6
13
  db_initialize
@@ -12,6 +19,14 @@ describe PostfixAdmin::Admin do
12
19
  Admin.exist?('unknown@example.com').should === false
13
20
  end
14
21
 
22
+ it "active" do
23
+ Admin.find('admin@example.com').active.should === true
24
+ Admin.find('all@example.com').active.should === true
25
+ non_active_admin = create_admin('non_active_admin@example.com', false)
26
+
27
+ Admin.find('non_active_admin@example.com').active.should === false
28
+ end
29
+
15
30
  it "#super_admin?" do
16
31
  Admin.find('admin@example.com').super_admin?.should === false
17
32
  Admin.find('all@example.com').super_admin?.should === true
@@ -25,7 +40,7 @@ describe PostfixAdmin::Admin do
25
40
 
26
41
  it "should not delete 'ALL' domain" do
27
42
  Admin.find('all@example.com').super_admin = false
28
- Domain.exist?('ALL').should be_true
43
+ Domain.exist?('ALL').should be true
29
44
  end
30
45
 
31
46
  it "disable super admin flag" do
@@ -69,6 +84,14 @@ describe PostfixAdmin::Domain do
69
84
  Domain.exist?('unknown.example.com').should === false
70
85
  end
71
86
 
87
+ it "active" do
88
+ Domain.find('example.com').active.should == true
89
+ Domain.find('example.org').active.should == true
90
+
91
+ create_domain('non-active.example.com', false)
92
+ Domain.find('non-active.example.com').active.should == false
93
+ end
94
+
72
95
  describe "#num_total_aliases and .num_total_aliases" do
73
96
  it "when only alias@example.com" do
74
97
  Domain.num_total_aliases.should be(1)
@@ -103,6 +126,22 @@ describe PostfixAdmin::Mailbox do
103
126
  db_initialize
104
127
  end
105
128
 
129
+ it "active" do
130
+ Mailbox.find('user@example.com').active.should == true
131
+ domain = Domain.find('example.com')
132
+ domain.mailboxes << create_mailbox('non_active_user@example.com', nil, false)
133
+ domain.aliases << create_mailbox_alias('non_active_user@example.com', false)
134
+ domain.save
135
+
136
+ Mailbox.find('non_active_user@example.com').active.should == false
137
+ end
138
+
139
+ it "can use long maildir" do
140
+ domain = Domain.find('example.com')
141
+ domain.mailboxes << create_mailbox('long_maildir_user@example.com', 'looooooooooooong_path/example.com/long_maildir_user@example.com/')
142
+ domain.save.should == true
143
+ end
144
+
106
145
  describe ".exist?" do
107
146
  it "returns true for exist account (mailbox)" do
108
147
  Mailbox.exist?('user@example.com').should === true
@@ -123,6 +162,16 @@ describe PostfixAdmin::Alias do
123
162
  db_initialize
124
163
  end
125
164
 
165
+ it "active" do
166
+ domain = Domain.find('example.com')
167
+ domain.aliases << create_alias('non_active_alias@example.com', false)
168
+ domain.save
169
+
170
+ Alias.find('user@example.com').active.should == true
171
+ Alias.find('alias@example.com').active.should == true
172
+ Alias.find('non_active_alias@example.com').active.should == false
173
+ end
174
+
126
175
  describe ".exist?" do
127
176
  it "returns true when exist alias and account" do
128
177
  Alias.exist?('user@example.com').should === true
data/spec/runner_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
4
  require 'postfix_admin/runner'
3
5
 
@@ -15,17 +17,21 @@ describe PostfixAdmin::Runner do
15
17
  capture(:stdout){ Runner.start(["summary", "example.com"]) }.should =~ /\[Summary of example.com\]/
16
18
  end
17
19
 
20
+ it "schemes" do
21
+ capture(:stdout){ Runner.start(["schemes"]) }.should =~ /CLEARTEXT/
22
+ end
23
+
18
24
  describe "show" do
19
25
  it "shows information of example.com" do
20
26
  capture(:stdout){ Runner.start(["show"]) }.should =~ /example.com\s+1\s+\/\s+30\s+1\s+\/\s+30\s+100/
21
27
  end
22
28
 
23
29
  it "shows information of admin@example.com" do
24
- capture(:stdout){ Runner.start(["show"]) }.should =~ /admin@example.com\s+1\s+password/
30
+ capture(:stdout){ Runner.start(["show"]) }.should =~ /admin@example.com\s+1\s+YES/
25
31
  end
26
32
 
27
33
  it "show the detail of example.com" do
28
- capture(:stdout){ Runner.start(["show", "example.com"]) }.should =~ /user@example.com\s+100\s+password/
34
+ capture(:stdout){ Runner.start(["show", "example.com"]) }.should =~ /user@example.com\s+100\s+YES/
29
35
  end
30
36
 
31
37
  it "when no admins, no aliases and no addresses" do
@@ -36,10 +42,18 @@ describe PostfixAdmin::Runner do
36
42
  out.should =~ /No aliases/
37
43
  end
38
44
 
45
+ it "shows information of an admin" do
46
+ capture(:stdout){ Runner.start(["show", "admin@example.com"]) }.should =~ /admin@example.com/
47
+ end
48
+
39
49
  it "shows information of an account" do
40
50
  capture(:stdout){ Runner.start(["show", "user@example.com"]) }.should =~ /user@example.com/
41
51
  end
42
52
 
53
+ it "shows information of an alias" do
54
+ capture(:stdout){ Runner.start(["show", "alias@example.com"]) }.should =~ /alias@example.com/
55
+ end
56
+
43
57
  it "when no domains" do
44
58
  capture(:stdout){ Runner.start(['delete_domain', 'example.com']) }.should =~ EX_DELETED
45
59
  capture(:stdout){ Runner.start(['delete_domain', 'example.org']) }.should =~ EX_DELETED
@@ -83,6 +97,7 @@ describe PostfixAdmin::Runner do
83
97
  describe "account_passwd" do
84
98
  it "can change password of an account" do
85
99
  capture(:stdout){ Runner.start(['account_passwd', 'user@example.com', 'new_password']) }.should =~ /successfully changed/
100
+ Mailbox.find('user@example.com').password.should == CRAM_MD5_NEW_PASS
86
101
  end
87
102
 
88
103
  it "can not use too short password (< 5)" do
@@ -110,8 +125,35 @@ describe PostfixAdmin::Runner do
110
125
  end
111
126
 
112
127
  describe "add_admin" do
128
+ before do
129
+ @args = ['add_admin', 'admin@example.jp', 'password']
130
+ end
131
+
113
132
  it "can add an new admin" do
114
- capture(:stdout){ Runner.start(['add_admin', 'admin@example.jp', 'password']) }.should =~ EX_REGISTERED
133
+ capture(:stdout){ Runner.start(@args) }.should =~ EX_REGISTERED
134
+ end
135
+
136
+ describe "scheme option" do
137
+ it "--scheme does not show error" do
138
+ capture(:stderr){ Runner.start(@args + ['--scheme', 'CRAM-MD5']) }.should == ""
139
+ Admin.find('admin@example.jp').password.should == CRAM_MD5_PASS
140
+ end
141
+
142
+ it "--shceme can resister admin" do
143
+ capture(:stdout){ Runner.start(@args + ['--scheme', 'CRAM-MD5']) }.should =~ EX_REGISTERED
144
+ end
145
+
146
+ it "-s does not show error" do
147
+ capture(:stderr){ Runner.start(@args + ['-s', 'CRAM-MD5']) }.should == ""
148
+ end
149
+
150
+ it "-s can resister admin" do
151
+ capture(:stdout){ Runner.start(@args + ['-s', 'CRAM-MD5']) }.should =~ EX_REGISTERED
152
+ end
153
+
154
+ it "-s require argument" do
155
+ capture(:stderr){ Runner.start(@args + ['-s']) }.should =~ /Specify password scheme/
156
+ end
115
157
  end
116
158
 
117
159
  it "can use long password" do
@@ -119,11 +161,11 @@ describe PostfixAdmin::Runner do
119
161
  end
120
162
 
121
163
  it "--super option" do
122
- capture(:stdout){ Runner.start(['add_admin', 'admin@example.jp', 'password', '--super']) }.should =~ /registered as a super admin/
164
+ capture(:stdout){ Runner.start(@args + ['--super']) }.should =~ /registered as a super admin/
123
165
  end
124
166
 
125
- it "-s (--super) option" do
126
- capture(:stdout){ Runner.start(['add_admin', 'admin@example.jp', 'password', '-s']) }.should =~ /registered as a super admin/
167
+ it "-S (--super) option" do
168
+ capture(:stdout){ Runner.start(@args + ['-S']) }.should =~ /registered as a super admin/
127
169
  end
128
170
  end
129
171
 
@@ -133,11 +175,11 @@ describe PostfixAdmin::Runner do
133
175
  end
134
176
 
135
177
  it "can edit limitations of domain" do
136
- capture(:stdout){ Runner.start(['edit_domain', 'example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400']) }.should =~ /Successfully updated/
178
+ capture(:stdout){ Runner.start(['edit_domain', 'example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400']) }.should =~ EX_UPDATED
137
179
  end
138
180
 
139
181
  it "aliases options -a, -m, -q" do
140
- capture(:stdout){ Runner.start(['edit_domain', 'example.com', '-a', '40', '-m', '40', '-m', '400']) }.should =~ /Successfully updated/
182
+ capture(:stdout){ Runner.start(['edit_domain', 'example.com', '-a', '40', '-m', '40', '-m', '400']) }.should =~ EX_UPDATED
141
183
  end
142
184
 
143
185
  it "can not use unknown domain" do
@@ -146,18 +188,45 @@ describe PostfixAdmin::Runner do
146
188
  end
147
189
 
148
190
  describe "edit_account" do
191
+ before do
192
+ @args = ['edit_account', 'user@example.com']
193
+ end
194
+
149
195
  it "when no options, shows usage" do
150
- capture(:stderr){ Runner.start(['edit_account', 'user@example.com']) }.should =~ /Use one or more options/
196
+ capture(:stderr){ Runner.start(@args) }.should =~ /Use one or more options/
151
197
  end
152
198
 
153
199
  it "can edit quota limitation" do
154
- output = capture(:stdout){ Runner.start(['edit_account', 'user@example.com', '--quota', '50'])}
155
- output.should =~ /Successfully updated/
200
+ output = capture(:stdout){ Runner.start(@args + ['--quota', '50'])}
201
+ output.should =~ EX_UPDATED
156
202
  output.should =~ /Quota/
157
203
  end
158
204
 
159
205
  it "can use alias -q option" do
160
- capture(:stdout){ Runner.start(['edit_account', 'user@example.com', '-q', '50'])}.should =~ /Successfully updated/
206
+ capture(:stdout){ Runner.start(@args + ['-q', '50'])}.should =~ EX_UPDATED
207
+ end
208
+
209
+ it "-q option require an argment" do
210
+ capture(:stderr){ Runner.start(@args + ['-q'])}.should_not == ""
211
+ end
212
+
213
+ it "can update name using --name option" do
214
+ capture(:stdout){ Runner.start(@args + ['--name', 'Hitoshi Kurokawa'])}.should =~ EX_UPDATED
215
+ Mailbox.find('user@example.com').name.should == 'Hitoshi Kurokawa'
216
+ end
217
+
218
+ it "can update name using -n option" do
219
+ capture(:stdout){ Runner.start(@args + ['-n', 'Hitoshi Kurokawa'])}.should =~ EX_UPDATED
220
+ Mailbox.find('user@example.com').name.should == 'Hitoshi Kurokawa'
221
+ end
222
+
223
+ it "-n option supports Japanese" do
224
+ capture(:stdout){ Runner.start(@args + ['-n', '黒川 仁'])}.should =~ EX_UPDATED
225
+ Mailbox.find('user@example.com').name.should == '黒川 仁'
226
+ end
227
+
228
+ it "-n option require an argument" do
229
+ capture(:stderr){ Runner.start(@args + ['-n'])}.should_not == ""
161
230
  end
162
231
  end
163
232
 
@@ -178,8 +247,68 @@ describe PostfixAdmin::Runner do
178
247
  capture(:stdout){ Runner.start(['delete_account', 'user2@example.com']) }.should =~ EX_DELETED
179
248
  end
180
249
 
181
- it "add_account can use long passwrod" do
182
- capture(:stdout){ Runner.start(['add_account', 'user2@example.com', '9c5e77f2da26fc03e9fa9e13ccd77aeb50c85539a4d90b70812715aea9ebda1d']) }.should =~ EX_REGISTERED
250
+ describe "add_account" do
251
+ before do
252
+ @user = 'user2@example.com'
253
+ @args = ['add_account', @user, 'password']
254
+ @name = 'Hitoshi Kurokawa'
255
+ end
256
+
257
+ it "default scheme (CRAM-MD5) is applied" do
258
+ capture(:stdout){ Runner.start(@args) }.should =~ /scheme: CRAM-MD5/
259
+ Mailbox.find('user2@example.com').password.should == CRAM_MD5_PASS
260
+ end
261
+
262
+ it "add_account can use long password" do
263
+ capture(:stdout){ Runner.start(['add_account', 'user2@example.com', '9c5e77f2da26fc03e9fa9e13ccd77aeb50c85539a4d90b70812715aea9ebda1d']) }.should =~ EX_REGISTERED
264
+ end
265
+
266
+ describe "name option" do
267
+ it "--name options does not raise error" do
268
+ capture(:stderr){ Runner.start(@args + ['--name', @name]) }.should == ""
269
+ end
270
+
271
+ it "-n options does not raise error" do
272
+ capture(:stderr){ Runner.start(@args + ['-n', @name]) }.should == ""
273
+ end
274
+
275
+ it "require an argument" do
276
+ capture(:stderr){ Runner.start(@args + ['-n']) }.should_not == ""
277
+ end
278
+
279
+ it "can change full name" do
280
+ Runner.start(@args + ['-n', @name])
281
+ Mailbox.find(@user).name.should == @name
282
+ end
283
+
284
+ it "can use Japanese" do
285
+ capture(:stderr){ Runner.start(@args + ['-n', '黒川 仁']) }.should == ""
286
+ Mailbox.find(@user).name.should == '黒川 仁'
287
+ end
288
+ end
289
+
290
+ describe "scheme" do
291
+ it "--scheme require argument" do
292
+ capture(:stderr){ Runner.start(@args + ['--scheme']) }.should =~ /Specify password scheme/
293
+ end
294
+
295
+ it "can use CRAM-MD5 using --scheme" do
296
+ capture(:stdout){ Runner.start(@args + ['--scheme', 'CRAM-MD5']) }.should =~ EX_REGISTERED
297
+ Mailbox.find('user2@example.com').password.should == CRAM_MD5_PASS
298
+ end
299
+
300
+ it "can use CRAM-MD5 using -s" do
301
+ capture(:stdout){ Runner.start(@args + ['-s', 'CRAM-MD5']) }.should =~ EX_REGISTERED
302
+ Mailbox.find('user2@example.com').password.should == CRAM_MD5_PASS
303
+ end
304
+
305
+ it "can use MD5-CRYPT using -s" do
306
+ result = capture(:stdout){ Runner.start(@args + ['-s', 'MD5-CRYPT']) }
307
+ result.should =~ EX_REGISTERED
308
+ result.should =~ /scheme: MD5-CRYPT/
309
+ Mailbox.find('user2@example.com').password.should =~ EX_MD5_CRYPT
310
+ end
311
+ end
183
312
  end
184
313
 
185
314
  it "add and delete methods" do
@@ -191,4 +320,16 @@ describe PostfixAdmin::Runner do
191
320
  lambda { Runner.start(['add_account', 'user2@example.net', 'password']) }.should_not raise_error
192
321
  lambda { Runner.start(['delete_domain', 'example.net']) }.should_not raise_error
193
322
  end
323
+
324
+ describe "dump" do
325
+ it "does not raise error" do
326
+ capture(:stderr){ Runner.start(['dump']) }.should == ""
327
+ end
328
+
329
+ it "all data" do
330
+ result = capture(:stdout){ Runner.start(['dump']) }
331
+ result.should =~ /Domains/
332
+ end
333
+ end
334
+
194
335
  end
data/spec/spec_helper.rb CHANGED
@@ -4,9 +4,11 @@ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
4
  require 'postfix_admin'
5
5
  require 'postfix_admin/cli'
6
6
 
7
-
8
7
  include PostfixAdmin
9
8
 
9
+ # CRAM-MD5
10
+ SAMPLE_PASSWORD = "9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740"
11
+
10
12
  # [fixtures]
11
13
  # Domain:
12
14
  # ALL
@@ -28,6 +30,7 @@ def config_initialize
28
30
  end
29
31
 
30
32
  def db_clear
33
+ ::PostfixAdmin::Config.all.destroy
31
34
  DomainAdmin.all.destroy
32
35
  Mailbox.all.destroy
33
36
  Alias.all.destroy
@@ -35,7 +38,7 @@ def db_clear
35
38
  Admin.all.destroy
36
39
  end
37
40
 
38
- def create_domain(domain_name)
41
+ def create_domain(domain_name, active=true)
39
42
  domain = Domain.new
40
43
  domain.attributes = {
41
44
  :domain_name => domain_name,
@@ -43,69 +46,88 @@ def create_domain(domain_name)
43
46
  :maxaliases => 30,
44
47
  :maxmailboxes => 30,
45
48
  :maxquota => 100,
49
+ :active => active
46
50
  }
47
51
  domain.save
48
52
  end
49
53
 
50
- def db_initialize
51
- db_clear
54
+ def create_alias_base(address, goto, active)
55
+ Alias.new.attributes = {
56
+ :address => address,
57
+ :goto => goto,
58
+ :active => active
59
+ }
60
+ end
52
61
 
53
- create_domain('ALL')
54
- create_domain('example.com')
55
- create_domain('example.org')
62
+ def create_alias(address, active=true)
63
+ create_alias_base(address, 'goto@example.jp', active)
64
+ end
65
+
66
+ def create_mailbox_alias(address, active=true)
67
+ create_alias_base(address, address, active)
68
+ end
69
+
70
+ def create_mailbox(address, in_path=nil, active=true)
71
+ path = in_path || "#{address.split('@').last}/#{address}/"
72
+ Mailbox.new.attributes = {
73
+ :username => address,
74
+ :password => SAMPLE_PASSWORD,
75
+ :name => '',
76
+ :maildir => path,
77
+ :quota => 100 * KB_TO_MB,
78
+ # :local_part => user,
79
+ :active => active
80
+ }
81
+ end
56
82
 
57
- username = "admin@example.com"
83
+ def create_admin(username, active=true)
58
84
  admin = Admin.new
59
85
  admin.attributes = {
60
86
  :username => username,
61
- :password => 'password',
87
+ :password => SAMPLE_PASSWORD,
88
+ :active => active
62
89
  }
63
90
  admin.save
91
+ admin
92
+ end
64
93
 
65
- domain = Domain.find('example.com')
66
- domain.admins << admin
67
- domain.save
94
+ class ::PostfixAdmin::Mailbox
95
+ property :local_part, String
96
+ end
97
+
98
+ def db_initialize
99
+ db_clear
68
100
 
69
- all_admin = Admin.new
70
- all_admin.attributes = {
71
- :username => 'all@example.com',
72
- :password => 'password',
101
+ config = ::PostfixAdmin::Config.new
102
+ config.attributes = {
103
+ :id => 1,
104
+ :name => "version",
105
+ :value => "740"
73
106
  }
74
- all_admin.save
107
+ config.save
108
+
109
+ create_domain('ALL')
110
+ create_domain('example.com')
111
+ create_domain('example.org')
75
112
 
113
+ all_admin = create_admin('all@example.com')
76
114
  all_domain = Domain.find('ALL')
77
115
  all_domain.admins << all_admin
78
- all_domain.save
79
-
80
- address = "user@example.com"
81
- mail_alias = Alias.new
82
- mail_alias.attributes = {
83
- :address => address,
84
- :goto => address,
85
- }
86
- domain.aliases << mail_alias
87
116
 
88
- forward = Alias.new
89
- forward.attributes = {
90
- :address => 'alias@example.com',
91
- :goto => 'goto@example.jp',
92
- }
93
- domain.aliases << forward
117
+ unless all_domain.save
118
+ raise "Could not save all_domain"
119
+ end
94
120
 
95
- domain.save
121
+ admin = create_admin('admin@example.com')
122
+ domain = Domain.find('example.com')
123
+ domain.admins << admin
124
+ domain.aliases << create_alias('alias@example.com')
125
+ domain.aliases << create_alias('user@example.com')
126
+ domain.mailboxes << create_mailbox('user@example.com')
96
127
 
97
- path = "example.com/user@example.com/"
98
- mailbox = Mailbox.new
99
- mailbox.attributes = {
100
- :username => address,
101
- :password => 'password',
102
- :name => '',
103
- :maildir => path,
104
- :quota => 100 * KB_TO_MB,
105
- # :local_part => user,
106
- }
107
- domain.mailboxes << mailbox
108
- domain.save
128
+ unless domain.save
129
+ raise "Could not save domain"
130
+ end
109
131
  end
110
132
 
111
133
  DataMapper.setup(:default, 'sqlite::memory:')
@@ -126,8 +148,12 @@ module PostfixAdmin
126
148
  end
127
149
  end
128
150
 
151
+ CRAM_MD5_PASS = '9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740'
152
+ CRAM_MD5_NEW_PASS = '820de4c70957274d41111c5fbcae4c87240c9f047fc56f3e720f103571be6cbc'
129
153
  EX_DELETED = /successfully deleted/
130
154
  EX_REGISTERED = /successfully registered/
155
+ EX_UPDATED = /Successfully updated/
156
+ EX_MD5_CRYPT = /^\$1\$[\.\/0-9A-Za-z]{8}\$[\.\/0-9A-Za-z]{22}$/
131
157
 
132
158
  RSpec.configure do |config|
133
159
  config.before do