postfix_admin 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +0,0 @@
1
- ---
2
- database: 'sqlite::memory:'
3
- aliases: 30
4
- mailboxes: 30
5
- maxquota: 100
@@ -1,250 +0,0 @@
1
- -- phpMyAdmin SQL Dump
2
- -- version 3.4.7
3
- -- http://www.phpmyadmin.net
4
- --
5
- -- ホスト: localhost
6
- -- 生成時間: 2012 年 9 月 25 日 23:12
7
- -- サーバのバージョン: 5.5.15
8
- -- PHP のバージョン: 5.3.15
9
-
10
- SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
11
- SET time_zone = "+00:00";
12
-
13
-
14
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
15
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
16
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
17
- /*!40101 SET NAMES utf8 */;
18
-
19
- --
20
- -- データベース: `postfix_test`
21
- --
22
-
23
- -- --------------------------------------------------------
24
-
25
- --
26
- -- テーブルの構造 `admin`
27
- --
28
-
29
- CREATE TABLE IF NOT EXISTS `admin` (
30
- `username` varchar(255) NOT NULL DEFAULT '',
31
- `password` varchar(255) NOT NULL DEFAULT '',
32
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
33
- `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
34
- `active` tinyint(1) NOT NULL DEFAULT '1',
35
- PRIMARY KEY (`username`)
36
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Virtual Admins';
37
-
38
- --
39
- -- テーブルのデータをダンプしています `admin`
40
- --
41
-
42
- INSERT INTO `admin` (`username`, `password`, `created`, `modified`, `active`) VALUES
43
- ('all@example.com', 'password', '2012-08-31 15:39:02', '2012-08-31 15:39:19', 1),
44
- ('admin@example.com', 'password', '2012-08-31 10:27:58', '2012-08-31 10:28:16', 1);
45
-
46
- -- --------------------------------------------------------
47
-
48
- --
49
- -- テーブルの構造 `alias`
50
- --
51
-
52
- CREATE TABLE IF NOT EXISTS `alias` (
53
- `address` varchar(255) NOT NULL DEFAULT '',
54
- `goto` text NOT NULL,
55
- `domain` varchar(255) NOT NULL DEFAULT '',
56
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
57
- `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
58
- `active` tinyint(1) NOT NULL DEFAULT '1',
59
- PRIMARY KEY (`address`)
60
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Virtual Aliases';
61
-
62
- --
63
- -- テーブルのデータをダンプしています `alias`
64
- --
65
-
66
- INSERT INTO `alias` (`address`, `goto`, `domain`, `created`, `modified`, `active`) VALUES
67
- ('user@example.com', 'user@example.com', 'example.com', '2012-08-31 10:24:12', '2012-08-31 10:24:12', 1);
68
-
69
- -- --------------------------------------------------------
70
-
71
- --
72
- -- テーブルの構造 `config`
73
- --
74
-
75
- CREATE TABLE IF NOT EXISTS `config` (
76
- `id` int(11) NOT NULL AUTO_INCREMENT,
77
- `name` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
78
- `value` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
79
- PRIMARY KEY (`id`),
80
- UNIQUE KEY `name` (`name`)
81
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='PostfixAdmin settings' AUTO_INCREMENT=2 ;
82
-
83
- --
84
- -- テーブルのデータをダンプしています `config`
85
- --
86
-
87
- INSERT INTO `config` (`id`, `name`, `value`) VALUES
88
- (1, 'version', '352');
89
-
90
- -- --------------------------------------------------------
91
-
92
- --
93
- -- テーブルの構造 `domain`
94
- --
95
-
96
- CREATE TABLE IF NOT EXISTS `domain` (
97
- `domain` varchar(255) NOT NULL DEFAULT '',
98
- `description` varchar(255) NOT NULL DEFAULT '',
99
- `aliases` int(10) NOT NULL DEFAULT '0',
100
- `mailboxes` int(10) NOT NULL DEFAULT '0',
101
- `maxquota` bigint(20) NOT NULL DEFAULT '0',
102
- `quota` bigint(20) NOT NULL DEFAULT '0',
103
- `transport` varchar(255) DEFAULT NULL,
104
- `backupmx` tinyint(1) NOT NULL DEFAULT '0',
105
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
106
- `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
107
- `active` tinyint(1) NOT NULL DEFAULT '1',
108
- PRIMARY KEY (`domain`)
109
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Virtual Domains';
110
-
111
- --
112
- -- テーブルのデータをダンプしています `domain`
113
- --
114
-
115
- INSERT INTO `domain` (`domain`, `description`, `aliases`, `mailboxes`, `maxquota`, `quota`, `transport`, `backupmx`, `created`, `modified`, `active`) VALUES
116
- ('ALL', '', 0, 0, 0, 0, NULL, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1),
117
- ('example.com', '', 100, 100, 100, 0, 'virtual', 0, '2012-08-31 10:21:49', '2012-08-31 10:21:49', 1);
118
-
119
- -- --------------------------------------------------------
120
-
121
- --
122
- -- テーブルの構造 `domain_admins`
123
- --
124
-
125
- CREATE TABLE IF NOT EXISTS `domain_admins` (
126
- `username` varchar(255) NOT NULL DEFAULT '',
127
- `domain` varchar(255) NOT NULL DEFAULT '',
128
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
129
- `active` tinyint(1) NOT NULL DEFAULT '1',
130
- KEY `username` (`username`)
131
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Domain Admins';
132
-
133
- --
134
- -- テーブルのデータをダンプしています `domain_admins`
135
- --
136
-
137
- INSERT INTO `domain_admins` (`username`, `domain`, `created`, `active`) VALUES
138
- ('all@example.com', 'ALL', '2012-08-31 15:39:19', 1),
139
- ('admin@example.com', 'example.com', '2012-08-31 10:28:16', 1);
140
-
141
- -- --------------------------------------------------------
142
-
143
- --
144
- -- テーブルの構造 `fetchmail`
145
- --
146
-
147
- CREATE TABLE IF NOT EXISTS `fetchmail` (
148
- `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
149
- `mailbox` varchar(255) NOT NULL DEFAULT '',
150
- `src_server` varchar(255) NOT NULL DEFAULT '',
151
- `src_auth` enum('password','kerberos_v5','kerberos','kerberos_v4','gssapi','cram-md5','otp','ntlm','msn','ssh','any') DEFAULT NULL,
152
- `src_user` varchar(255) NOT NULL DEFAULT '',
153
- `src_password` varchar(255) NOT NULL DEFAULT '',
154
- `src_folder` varchar(255) NOT NULL DEFAULT '',
155
- `poll_time` int(11) unsigned NOT NULL DEFAULT '10',
156
- `fetchall` tinyint(1) unsigned NOT NULL DEFAULT '0',
157
- `keep` tinyint(1) unsigned NOT NULL DEFAULT '0',
158
- `protocol` enum('POP3','IMAP','POP2','ETRN','AUTO') DEFAULT NULL,
159
- `extra_options` text,
160
- `returned_text` text,
161
- `mda` varchar(255) NOT NULL DEFAULT '',
162
- `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
163
- PRIMARY KEY (`id`)
164
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
165
-
166
- -- --------------------------------------------------------
167
-
168
- --
169
- -- テーブルの構造 `log`
170
- --
171
-
172
- CREATE TABLE IF NOT EXISTS `log` (
173
- `timestamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
174
- `username` varchar(255) NOT NULL DEFAULT '',
175
- `domain` varchar(255) NOT NULL DEFAULT '',
176
- `action` varchar(255) NOT NULL DEFAULT '',
177
- `data` varchar(255) NOT NULL DEFAULT '',
178
- KEY `timestamp` (`timestamp`)
179
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Log';
180
-
181
- -- --------------------------------------------------------
182
-
183
- --
184
- -- テーブルの構造 `mailbox`
185
- --
186
-
187
- CREATE TABLE IF NOT EXISTS `mailbox` (
188
- `username` varchar(255) NOT NULL DEFAULT '',
189
- `password` varchar(255) NOT NULL DEFAULT '',
190
- `name` varchar(255) NOT NULL DEFAULT '',
191
- `maildir` varchar(255) NOT NULL DEFAULT '',
192
- `quota` bigint(20) NOT NULL DEFAULT '0',
193
- `domain` varchar(255) NOT NULL DEFAULT '',
194
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
195
- `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
196
- `active` tinyint(1) NOT NULL DEFAULT '1',
197
- PRIMARY KEY (`username`)
198
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Virtual Mailboxes';
199
-
200
- --
201
- -- テーブルのデータをダンプしています `mailbox`
202
- --
203
-
204
- INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `domain`, `created`, `modified`, `active`) VALUES
205
- ('user@example.com', 'password', '', 'example.com/user@example.com/', 102400000, 'example.com', '2012-08-31 10:24:12', '2012-08-31 10:24:12', 1);
206
-
207
- -- --------------------------------------------------------
208
-
209
- --
210
- -- テーブルの構造 `vacation`
211
- --
212
-
213
- CREATE TABLE IF NOT EXISTS `vacation` (
214
- `email` varchar(255) NOT NULL,
215
- `subject` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
216
- `body` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
217
- `cache` text NOT NULL,
218
- `domain` varchar(255) NOT NULL,
219
- `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
220
- `active` tinyint(1) NOT NULL DEFAULT '1',
221
- PRIMARY KEY (`email`),
222
- KEY `email` (`email`)
223
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Vacation';
224
-
225
- -- --------------------------------------------------------
226
-
227
- --
228
- -- テーブルの構造 `vacation_notification`
229
- --
230
-
231
- CREATE TABLE IF NOT EXISTS `vacation_notification` (
232
- `on_vacation` varchar(255) NOT NULL,
233
- `notified` varchar(255) NOT NULL,
234
- `notified_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
235
- PRIMARY KEY (`on_vacation`,`notified`)
236
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Vacation Notifications';
237
-
238
- --
239
- -- ダンプしたテーブルの制約
240
- --
241
-
242
- --
243
- -- テーブルの制約 `vacation_notification`
244
- --
245
- ALTER TABLE `vacation_notification`
246
- ADD CONSTRAINT `vacation_notification_pkey` FOREIGN KEY (`on_vacation`) REFERENCES `vacation` (`email`) ON DELETE CASCADE;
247
-
248
- /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
249
- /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
250
- /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
@@ -1,370 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
4
- require 'postfix_admin/runner'
5
-
6
- describe PostfixAdmin::Runner do
7
- before do
8
- db_initialize
9
- end
10
-
11
- it "version" do
12
- capture(:stdout){ Runner.start(["version"]) }.should =~ /postfix_admin \d+\.\d+\.\d/
13
- end
14
-
15
- it "summary" do
16
- capture(:stdout){ Runner.start(["summary"]) }.should =~ /\[Summary\]/
17
- capture(:stdout){ Runner.start(["summary", "example.com"]) }.should =~ /\[Summary of example.com\]/
18
- end
19
-
20
- it "schemes" do
21
- capture(:stdout){ Runner.start(["schemes"]) }.should =~ /CLEARTEXT/
22
- end
23
-
24
- describe "show" do
25
- it "shows information of example.com" do
26
- capture(:stdout){ Runner.start(["show"]) }.should =~ /example.com\s+1\s+\/\s+30\s+1\s+\/\s+30\s+100/
27
- end
28
-
29
- it "shows information of admin@example.com" do
30
- capture(:stdout){ Runner.start(["show"]) }.should =~ /admin@example.com\s+1\s+YES/
31
- end
32
-
33
- it "show the detail of example.com" do
34
- capture(:stdout){ Runner.start(["show", "example.com"]) }.should =~ /user@example.com\s+100\s+YES/
35
- end
36
-
37
- it "when no admins, no aliases and no addresses" do
38
- Admin.find('all@example.com').super_admin = false
39
- out = capture(:stdout){ Runner.start(["show", "example.org"]) }
40
- out.should =~ /No admins/
41
- out.should =~ /No addresses/
42
- out.should =~ /No aliases/
43
- end
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
-
49
- it "shows information of an account" do
50
- capture(:stdout){ Runner.start(["show", "user@example.com"]) }.should =~ /user@example.com/
51
- end
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
-
57
- it "when no domains" do
58
- capture(:stdout){ Runner.start(['delete_domain', 'example.com']) }.should =~ EX_DELETED
59
- capture(:stdout){ Runner.start(['delete_domain', 'example.org']) }.should =~ EX_DELETED
60
- capture(:stdout){ Runner.start(["show"]) }.should =~ /No domains/
61
- end
62
- end
63
-
64
- it "setup" do
65
- capture(:stdout){ Runner.start(['setup', 'example.net', 'password']) }.should =~ EX_REGISTERED
66
- capture(:stdout){ Runner.start(['delete_domain', 'example.net']) }.should =~ EX_DELETED
67
- end
68
-
69
- describe "admin_passwd" do
70
- it "can change password of an admin" do
71
- capture(:stdout){ Runner.start(['admin_passwd', 'admin@example.com', 'new_password']) }.should =~ /successfully changed/
72
- end
73
-
74
- it "can not use too short password (< 5)" do
75
- exit_capture{ Runner.start(['admin_passwd', 'admin@example.com', '124']) }.should =~ /too short/
76
- end
77
-
78
- it "can not use for unknown admin" do
79
- exit_capture{ Runner.start(['admin_passwd', 'unknown@example.com', 'new_password']) }.should =~ /Could not find/
80
- end
81
- end
82
-
83
- describe "account_passwd" do
84
- it "can change password of an account" do
85
- capture(:stdout){ Runner.start(['account_passwd', 'user@example.com', 'new_password']) }.should =~ /successfully changed/
86
- Mailbox.find('user@example.com').password.should == CRAM_MD5_NEW_PASS
87
- end
88
-
89
- it "can not use too short password (< 5)" do
90
- exit_capture{ Runner.start(['account_passwd', 'user@example.com', '1234']) }.should =~ /too short/
91
- end
92
-
93
- it "can not use for unknown account" do
94
- exit_capture{ Runner.start(['account_passwd', 'unknown@example.com', 'new_password']) }.should =~ /Could not find/
95
- end
96
- end
97
-
98
- describe "add_alias and delete_alias" do
99
- it "can add and delete an new alias." do
100
- capture(:stdout){ Runner.start(['add_alias', 'new_alias@example.com', 'goto@example.jp']) }.should =~ EX_REGISTERED
101
- capture(:stdout){ Runner.start(['delete_alias', 'new_alias@example.com']) }.should =~ EX_DELETED
102
- end
103
-
104
- it "can not delete mailbox alias." do
105
- exit_capture{ Runner.start(['delete_alias', 'user@example.com']) }.should =~ /Can not delete mailbox/
106
- end
107
-
108
- it "can not add an alias for existed mailbox" do
109
- exit_capture{ Runner.start(['add_alias', 'user@example.com', 'goto@example.jp']) }.should =~ /mailbox user@example.com is already registered!/
110
- end
111
- end
112
-
113
- describe "edit_alias" do
114
- it "can update active status" do
115
- output = capture(:stdout){ Runner.start(['edit_alias', 'alias@example.com', '--no-active']) }
116
- expect(output).to match EX_UPDATED
117
- expect(output).to match /Active.+NO/
118
- end
119
-
120
- it "can update goto" do
121
- output = capture(:stdout){ Runner.start(['edit_alias', 'alias@example.com', '-g', 'goto@example.com,user@example.com']) }
122
- expect(output).to match EX_UPDATED
123
- Alias.find('alias@example.com').goto.should == 'goto@example.com,user@example.com'
124
- end
125
- end
126
-
127
- describe "add_admin" do
128
- before do
129
- @args = ['add_admin', 'admin@example.jp', 'password']
130
- end
131
-
132
- it "can add an new admin" do
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
- exit_capture{ 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
- exit_capture{ 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
- exit_capture{ Runner.start(@args + ['-s']) }.should =~ /Specify password scheme/
156
- end
157
- end
158
-
159
- it "can use long password" do
160
- capture(:stdout){ Runner.start(['add_admin', 'admin@example.jp', '9c5e77f2da26fc03e9fa9e13ccd77aeb50c85539a4d90b70812715aea9ebda1d']) }.should =~ EX_REGISTERED
161
- end
162
-
163
- it "--super option" do
164
- capture(:stdout){ Runner.start(@args + ['--super']) }.should =~ /registered as a super admin/
165
- end
166
-
167
- it "-S (--super) option" do
168
- capture(:stdout){ Runner.start(@args + ['-S']) }.should =~ /registered as a super admin/
169
- end
170
- end
171
-
172
- describe "edit_admin" do
173
- it "when no options, shows usage" do
174
- expect(capture(:stderr){ Runner.start(['edit_admin', 'admin@example.com']) }).to match /Use one or more options/
175
- end
176
-
177
- it "can update active status" do
178
- output = capture(:stdout){ Runner.start(['edit_admin', 'admin@example.com', '--no-active']) }
179
- expect(output).to match EX_UPDATED
180
- expect(output).to match /Active.+NO/
181
- expect(output).to match /Role.+Admin/
182
- end
183
-
184
- it "can update super admin status" do
185
- output = capture(:stdout){ Runner.start(['edit_admin', 'admin@example.com', '--super']) }
186
- expect(output).to match EX_UPDATED
187
- expect(output).to match /Domains.+ALL/
188
- expect(output).to match /Active.+YES/
189
- expect(output).to match /Role.+Super admin/
190
- end
191
- end
192
-
193
- describe "edit_domain" do
194
- it "when no options, shows usage" do
195
- exit_capture{ Runner.start(['edit_domain', 'example.com']) }.should =~ /Use one or more options/
196
- end
197
-
198
- it "can edit limitations of domain" do
199
- output = capture(:stdout){ Runner.start(['edit_domain', 'example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400', '--no-active']) }
200
- expect(output).to match EX_UPDATED
201
- expect(output).to match /Active.+NO/
202
- end
203
-
204
- it "aliases options -a, -m, -q" do
205
- capture(:stdout){ Runner.start(['edit_domain', 'example.com', '-a', '40', '-m', '40', '-m', '400']) }.should =~ EX_UPDATED
206
- end
207
-
208
- it "can not use unknown domain" do
209
- exit_capture{ Runner.start(['edit_domain', 'unknown.example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400'])}.should =~ /Could not find/
210
- end
211
- end
212
-
213
- describe "edit_account" do
214
- before do
215
- @args = ['edit_account', 'user@example.com']
216
- end
217
-
218
- it "when no options, shows usage" do
219
- exit_capture{ Runner.start(@args) }.should =~ /Use one or more options/
220
- end
221
-
222
- it "can edit quota limitation" do
223
- output = capture(:stdout){ Runner.start(@args + ['--quota', '50', '--no-active'])}
224
- expect(output).to match EX_UPDATED
225
- expect(output).to match /Quota/
226
- expect(output).to match /Active.+NO/
227
- end
228
-
229
- it "can use alias -q option" do
230
- capture(:stdout){ Runner.start(@args + ['-q', '50'])}.should =~ EX_UPDATED
231
- end
232
-
233
- it "-q option require an argment" do
234
- exit_capture{ Runner.start(@args + ['-q'])}.should_not == ""
235
- end
236
-
237
- it "can update name using --name option" do
238
- capture(:stdout){ Runner.start(@args + ['--name', 'Hitoshi Kurokawa'])}.should =~ EX_UPDATED
239
- Mailbox.find('user@example.com').name.should == 'Hitoshi Kurokawa'
240
- end
241
-
242
- it "can update name using -n option" do
243
- capture(:stdout){ Runner.start(@args + ['-n', 'Hitoshi Kurokawa'])}.should =~ EX_UPDATED
244
- Mailbox.find('user@example.com').name.should == 'Hitoshi Kurokawa'
245
- end
246
-
247
- it "-n option supports Japanese" do
248
- capture(:stdout){ Runner.start(@args + ['-n', '黒川 仁'])}.should =~ EX_UPDATED
249
- Mailbox.find('user@example.com').name.should == '黒川 仁'
250
- end
251
-
252
- it "-n option require an argument" do
253
- exit_capture{ Runner.start(@args + ['-n'])}.should_not == ""
254
- end
255
-
256
- it "can update goto" do
257
- capture(:stdout){ Runner.start(@args + ['-g', 'user@example.com,forward@example.com'])}.should =~ EX_UPDATED
258
- Alias.find('user@example.com').goto.should == 'user@example.com,forward@example.com'
259
- end
260
- end
261
-
262
- it "add_admin_domain" do
263
- capture(:stdout){ Runner.start(['add_admin_domain', 'admin@example.com', 'example.org']) }.should =~ EX_REGISTERED
264
- end
265
-
266
- it "delete_admin_domain" do
267
- capture(:stdout){ Runner.start(['delete_admin_domain', 'admin@example.com', 'example.com']) }.should =~ EX_DELETED
268
- end
269
-
270
- it "delete_admin" do
271
- capture(:stdout){ Runner.start(['delete_admin', 'admin@example.com']) }.should =~ EX_DELETED
272
- end
273
-
274
- it "add_account and delete_account" do
275
- capture(:stdout){ Runner.start(['add_account', 'user2@example.com', 'password']) }.should =~ EX_REGISTERED
276
- capture(:stdout){ Runner.start(['delete_account', 'user2@example.com']) }.should =~ EX_DELETED
277
- end
278
-
279
- describe "add_account" do
280
- before do
281
- @user = 'user2@example.com'
282
- @args = ['add_account', @user, 'password']
283
- @name = 'Hitoshi Kurokawa'
284
- end
285
-
286
- it "default scheme (CRAM-MD5) is applied" do
287
- capture(:stdout){ Runner.start(@args) }.should =~ /scheme: CRAM-MD5/
288
- Mailbox.find('user2@example.com').password.should == CRAM_MD5_PASS
289
- end
290
-
291
- it "add_account can use long password" do
292
- capture(:stdout){ Runner.start(['add_account', 'user2@example.com', '9c5e77f2da26fc03e9fa9e13ccd77aeb50c85539a4d90b70812715aea9ebda1d']) }.should =~ EX_REGISTERED
293
- end
294
-
295
- describe "name option" do
296
- it "--name options does not raise error" do
297
- exit_capture{ Runner.start(@args + ['--name', @name]) }.should == ""
298
- end
299
-
300
- it "-n options does not raise error" do
301
- exit_capture{ Runner.start(@args + ['-n', @name]) }.should == ""
302
- end
303
-
304
- it "require an argument" do
305
- exit_capture{ Runner.start(@args + ['-n']) }.should_not == ""
306
- end
307
-
308
- it "can change full name" do
309
- Runner.start(@args + ['-n', @name])
310
- Mailbox.find(@user).name.should == @name
311
- end
312
-
313
- it "can use Japanese" do
314
- exit_capture{ Runner.start(@args + ['-n', '黒川 仁']) }.should == ""
315
- Mailbox.find(@user).name.should == '黒川 仁'
316
- end
317
- end
318
-
319
- describe "scheme" do
320
- it "--scheme require argument" do
321
- exit_capture{ Runner.start(@args + ['--scheme']) }.should =~ /Specify password scheme/
322
- end
323
-
324
- it "can use CRAM-MD5 using --scheme" do
325
- capture(:stdout){ Runner.start(@args + ['--scheme', 'CRAM-MD5']) }.should =~ EX_REGISTERED
326
- Mailbox.find('user2@example.com').password.should == CRAM_MD5_PASS
327
- end
328
-
329
- it "can use CRAM-MD5 using -s" do
330
- capture(:stdout){ Runner.start(@args + ['-s', 'CRAM-MD5']) }.should =~ EX_REGISTERED
331
- Mailbox.find('user2@example.com').password.should == CRAM_MD5_PASS
332
- end
333
-
334
- it "can use MD5-CRYPT using -s" do
335
- result = capture(:stdout){ Runner.start(@args + ['-s', 'MD5-CRYPT']) }
336
- result.should =~ EX_REGISTERED
337
- result.should =~ /scheme: MD5-CRYPT/
338
- Mailbox.find('user2@example.com').password.should =~ EX_MD5_CRYPT
339
- end
340
- end
341
- end
342
-
343
- it "add and delete methods" do
344
- lambda { Runner.start(['add_domain', 'example.net']) }.should_not raise_error
345
- Runner.start(['add_admin', 'admin@example.net', 'password'])
346
- Runner.start(['add_admin_domain', 'admin@example.net', 'example.net'])
347
-
348
- lambda { Runner.start(['add_account', 'user1@example.net', 'password']) }.should_not raise_error
349
- lambda { Runner.start(['add_account', 'user2@example.net', 'password']) }.should_not raise_error
350
- lambda { Runner.start(['delete_domain', 'example.net']) }.should_not raise_error
351
- end
352
-
353
- describe "log" do
354
- it "does not raise error" do
355
- exit_capture{ Runner.start(['log']) }.should == ""
356
- end
357
- end
358
-
359
- describe "dump" do
360
- it "does not raise error" do
361
- exit_capture{ Runner.start(['dump']) }.should == ""
362
- end
363
-
364
- it "all data" do
365
- result = capture(:stdout){ Runner.start(['dump']) }
366
- result.should =~ /Domains/
367
- end
368
- end
369
-
370
- end