imap-backup 4.0.3 → 4.0.7
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.
- checksums.yaml +4 -4
- data/lib/email/provider/apple_mail.rb +2 -2
- data/lib/email/provider/base.rb +8 -0
- data/lib/email/provider/fastmail.rb +2 -2
- data/lib/email/provider/gmail.rb +2 -2
- data/lib/email/provider/{default.rb → unknown.rb} +2 -3
- data/lib/email/provider.rb +2 -2
- data/lib/imap/backup/account/connection.rb +23 -31
- data/lib/imap/backup/account/folder.rb +1 -1
- data/lib/imap/backup/account.rb +98 -0
- data/lib/imap/backup/cli/helpers.rb +1 -1
- data/lib/imap/backup/cli/local.rb +1 -1
- data/lib/imap/backup/configuration/account.rb +38 -30
- data/lib/imap/backup/configuration/folder_chooser.rb +7 -9
- data/lib/imap/backup/configuration/list.rb +1 -1
- data/lib/imap/backup/configuration/setup.rb +10 -8
- data/lib/imap/backup/configuration/store.rb +33 -11
- data/lib/imap/backup/version.rb +1 -1
- data/lib/imap/backup.rb +1 -0
- data/spec/features/support/shared/connection_context.rb +7 -5
- data/spec/unit/email/provider/{default_spec.rb → base_spec.rb} +1 -7
- data/spec/unit/email/provider_spec.rb +2 -2
- data/spec/unit/imap/backup/account/connection_spec.rb +8 -17
- data/spec/unit/imap/backup/cli/local_spec.rb +9 -2
- data/spec/unit/imap/backup/cli/utils_spec.rb +44 -42
- data/spec/unit/imap/backup/configuration/account_spec.rb +47 -46
- data/spec/unit/imap/backup/configuration/folder_chooser_spec.rb +17 -18
- data/spec/unit/imap/backup/configuration/list_spec.rb +12 -5
- data/spec/unit/imap/backup/configuration/setup_spec.rb +33 -12
- data/spec/unit/imap/backup/configuration/store_spec.rb +21 -22
- metadata +32 -32
- data/spec/support/shared_examples/account_flagging.rb +0 -23
@@ -1,11 +1,14 @@
|
|
1
1
|
require "json"
|
2
2
|
require "os"
|
3
3
|
|
4
|
+
require "imap/backup/account"
|
5
|
+
|
4
6
|
module Imap::Backup
|
5
7
|
module Configuration; end
|
6
8
|
|
7
9
|
class Configuration::Store
|
8
10
|
CONFIGURATION_DIRECTORY = File.expand_path("~/.imap-backup")
|
11
|
+
VERSION = "2.0"
|
9
12
|
|
10
13
|
attr_reader :pathname
|
11
14
|
|
@@ -19,6 +22,7 @@ module Imap::Backup
|
|
19
22
|
|
20
23
|
def initialize(pathname = self.class.default_pathname)
|
21
24
|
@pathname = pathname
|
25
|
+
@debug = nil
|
22
26
|
end
|
23
27
|
|
24
28
|
def path
|
@@ -26,53 +30,71 @@ module Imap::Backup
|
|
26
30
|
end
|
27
31
|
|
28
32
|
def save
|
33
|
+
ensure_loaded!
|
29
34
|
FileUtils.mkdir(path) if !File.directory?(path)
|
30
35
|
make_private(path) if !windows?
|
31
36
|
remove_modified_flags
|
32
37
|
remove_deleted_accounts
|
33
|
-
|
38
|
+
save_data = {
|
39
|
+
version: VERSION,
|
40
|
+
accounts: accounts.map(&:to_h),
|
41
|
+
debug: debug?
|
42
|
+
}
|
43
|
+
File.open(pathname, "w") { |f| f.write(JSON.pretty_generate(save_data)) }
|
34
44
|
FileUtils.chmod(0o600, pathname) if !windows?
|
35
45
|
end
|
36
46
|
|
37
47
|
def accounts
|
38
|
-
|
48
|
+
@accounts ||= begin
|
49
|
+
ensure_loaded!
|
50
|
+
data[:accounts].map { |data| Account.new(data) }
|
51
|
+
end
|
39
52
|
end
|
40
53
|
|
41
54
|
def modified?
|
42
|
-
|
55
|
+
ensure_loaded!
|
56
|
+
accounts.any? { |a| a.modified? || a.marked_for_deletion? }
|
43
57
|
end
|
44
58
|
|
45
59
|
def debug?
|
46
|
-
|
60
|
+
ensure_loaded!
|
61
|
+
@debug
|
47
62
|
end
|
48
63
|
|
49
64
|
def debug=(value)
|
50
|
-
|
65
|
+
ensure_loaded!
|
66
|
+
@debug = [true, false].include?(value) ? value : false
|
51
67
|
end
|
52
68
|
|
53
69
|
private
|
54
70
|
|
71
|
+
def ensure_loaded!
|
72
|
+
return true if @data
|
73
|
+
|
74
|
+
data
|
75
|
+
@debug = data.key?(:debug) ? data[:debug] == true : false
|
76
|
+
true
|
77
|
+
end
|
78
|
+
|
55
79
|
def data
|
56
80
|
@data ||=
|
57
81
|
begin
|
58
82
|
if File.exist?(pathname)
|
59
83
|
Utils.check_permissions(pathname, 0o600) if !windows?
|
60
84
|
contents = File.read(pathname)
|
61
|
-
|
85
|
+
JSON.parse(contents, symbolize_names: true)
|
62
86
|
else
|
63
|
-
|
87
|
+
{accounts: []}
|
64
88
|
end
|
65
|
-
data[:debug] = data.key?(:debug) ? data[:debug] == true : false
|
66
|
-
data
|
67
89
|
end
|
68
90
|
end
|
69
91
|
|
70
92
|
def remove_modified_flags
|
71
|
-
accounts.each { |a| a.
|
93
|
+
accounts.each { |a| a.clear_changes! }
|
72
94
|
end
|
73
95
|
|
74
96
|
def remove_deleted_accounts
|
75
|
-
accounts.reject! { |a| a
|
97
|
+
accounts.reject! { |a| a.marked_for_deletion? }
|
76
98
|
end
|
77
99
|
|
78
100
|
def make_private(path)
|
data/lib/imap/backup/version.rb
CHANGED
data/lib/imap/backup.rb
CHANGED
@@ -2,11 +2,13 @@ shared_context "imap-backup connection" do
|
|
2
2
|
let(:local_backup_path) { Dir.mktmpdir(nil, "tmp") }
|
3
3
|
let(:default_connection) { fixture("connection") }
|
4
4
|
let(:backup_folders) { nil }
|
5
|
-
let(:
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
let(:account) do
|
6
|
+
Imap::Backup::Account.new(
|
7
|
+
default_connection.merge(
|
8
|
+
local_path: local_backup_path,
|
9
|
+
folders: backup_folders
|
10
|
+
)
|
9
11
|
)
|
10
12
|
end
|
11
|
-
let(:connection) { Imap::Backup::Account::Connection.new(
|
13
|
+
let(:connection) { Imap::Backup::Account::Connection.new(account) }
|
12
14
|
end
|
@@ -17,10 +17,10 @@ describe Email::Provider do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
context "with unknown providers" do
|
20
|
-
it "returns
|
20
|
+
it "returns the Unknown provider" do
|
21
21
|
result = described_class.for_address("foo@unknown.com")
|
22
22
|
|
23
|
-
expect(result).to be_a(Email::Provider::
|
23
|
+
expect(result).to be_a(Email::Provider::Unknown)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -12,7 +12,7 @@ describe Imap::Backup::Account::Connection do
|
|
12
12
|
SERVER = "imap.example.com".freeze
|
13
13
|
USERNAME = "username@example.com".freeze
|
14
14
|
|
15
|
-
subject { described_class.new(
|
15
|
+
subject { described_class.new(account) }
|
16
16
|
|
17
17
|
let(:client) do
|
18
18
|
instance_double(
|
@@ -20,14 +20,16 @@ describe Imap::Backup::Account::Connection do
|
|
20
20
|
)
|
21
21
|
end
|
22
22
|
let(:imap_folders) { [] }
|
23
|
-
let(:
|
24
|
-
|
23
|
+
let(:account) do
|
24
|
+
instance_double(
|
25
|
+
Imap::Backup::Account,
|
25
26
|
username: USERNAME,
|
26
27
|
password: PASSWORD,
|
27
28
|
local_path: LOCAL_PATH,
|
28
29
|
folders: config_folders,
|
29
|
-
server: server
|
30
|
-
|
30
|
+
server: server,
|
31
|
+
connection_options: nil
|
32
|
+
)
|
31
33
|
end
|
32
34
|
let(:config_folders) { [FOLDER_CONFIG] }
|
33
35
|
let(:root_info) do
|
@@ -59,21 +61,10 @@ describe Imap::Backup::Account::Connection do
|
|
59
61
|
end
|
60
62
|
|
61
63
|
describe "#initialize" do
|
62
|
-
[
|
63
|
-
[:username, USERNAME],
|
64
|
-
[:password, PASSWORD],
|
65
|
-
[:local_path, LOCAL_PATH],
|
66
|
-
[:server, SERVER]
|
67
|
-
].each do |attr, expected|
|
68
|
-
it "expects #{attr}" do
|
69
|
-
expect(subject.public_send(attr)).to eq(expected)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
64
|
it "creates the path" do
|
74
65
|
expect(Imap::Backup::Utils).to receive(:make_folder)
|
75
66
|
|
76
|
-
subject
|
67
|
+
subject
|
77
68
|
end
|
78
69
|
end
|
79
70
|
|
@@ -1,8 +1,15 @@
|
|
1
1
|
describe Imap::Backup::CLI::Local do
|
2
2
|
let(:list) do
|
3
|
-
instance_double(Imap::Backup::Configuration::List, accounts:
|
3
|
+
instance_double(Imap::Backup::Configuration::List, accounts: [account])
|
4
|
+
end
|
5
|
+
let(:account) do
|
6
|
+
instance_double(
|
7
|
+
Imap::Backup::Account,
|
8
|
+
username: email,
|
9
|
+
marked_for_deletion?: false,
|
10
|
+
modified?: false
|
11
|
+
)
|
4
12
|
end
|
5
|
-
let(:accounts) { [{username: email}] }
|
6
13
|
let(:connection) do
|
7
14
|
instance_double(
|
8
15
|
Imap::Backup::Account::Connection,
|
@@ -1,50 +1,52 @@
|
|
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
|
-
|
1
|
+
module Imap::Backup
|
2
|
+
describe CLI::Utils do
|
3
|
+
let(:list) do
|
4
|
+
instance_double(Configuration::List, accounts: [account])
|
5
|
+
end
|
6
|
+
let(:account) { instance_double(Account, username: email) }
|
7
|
+
let(:connection) do
|
8
|
+
instance_double(
|
9
|
+
Account::Connection,
|
10
|
+
local_folders: local_folders
|
11
|
+
)
|
12
|
+
end
|
13
|
+
let(:local_folders) { [[serializer, folder]] }
|
14
|
+
let(:folder) do
|
15
|
+
instance_double(
|
16
|
+
Account::Folder,
|
17
|
+
exist?: true,
|
18
|
+
name: "name",
|
19
|
+
uid_validity: "uid_validity",
|
20
|
+
uids: %w(123 456)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
let(:serializer) do
|
24
|
+
instance_double(
|
25
|
+
Serializer::Mbox,
|
26
|
+
uids: %w(123 789),
|
27
|
+
apply_uid_validity: nil,
|
28
|
+
save: nil
|
29
|
+
)
|
30
|
+
end
|
31
|
+
let(:email) { "foo@example.com" }
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
before do
|
34
|
+
allow(Configuration::List).to receive(:new) { list }
|
35
|
+
allow(Account::Connection).to receive(:new) { connection }
|
36
|
+
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
describe "ignore_history" do
|
39
|
+
it "ensures the local UID validity matches the server" do
|
40
|
+
subject.ignore_history(email)
|
40
41
|
|
41
|
-
|
42
|
-
|
42
|
+
expect(serializer).to have_received(:apply_uid_validity).with("uid_validity")
|
43
|
+
end
|
43
44
|
|
44
|
-
|
45
|
-
|
45
|
+
it "fills the local folder with fake emails" do
|
46
|
+
subject.ignore_history(email)
|
46
47
|
|
47
|
-
|
48
|
+
expect(serializer).to have_received(:save).with("456", /From: fake@email.com/)
|
49
|
+
end
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
@@ -6,7 +6,32 @@ describe Imap::Backup::Configuration::Account do
|
|
6
6
|
|
7
7
|
subject { described_class.new(store, account, highline) }
|
8
8
|
|
9
|
-
let(:account)
|
9
|
+
let(:account) do
|
10
|
+
instance_double(
|
11
|
+
Imap::Backup::Account,
|
12
|
+
username: existing_email,
|
13
|
+
password: existing_password,
|
14
|
+
server: current_server,
|
15
|
+
connection_options: nil,
|
16
|
+
local_path: "/backup/path",
|
17
|
+
folders: [{name: "my_folder"}]
|
18
|
+
)
|
19
|
+
end
|
20
|
+
let(:account1) do
|
21
|
+
instance_double(
|
22
|
+
Imap::Backup::Account,
|
23
|
+
username: other_email,
|
24
|
+
local_path: other_existing_path
|
25
|
+
)
|
26
|
+
end
|
27
|
+
let(:accounts) { [account, account1] }
|
28
|
+
let(:existing_email) { "user@example.com" }
|
29
|
+
let(:new_email) { "foo@example.com" }
|
30
|
+
let(:current_server) { "imap.example.com" }
|
31
|
+
let(:existing_password) { "password" }
|
32
|
+
let(:other_email) { "other@example.com" }
|
33
|
+
let(:other_existing_path) { "/other/existing/path" }
|
34
|
+
|
10
35
|
let(:highline) { HIGHLINE }
|
11
36
|
let(:store) { STORE }
|
12
37
|
|
@@ -43,28 +68,6 @@ describe Imap::Backup::Configuration::Account do
|
|
43
68
|
let(:store) do
|
44
69
|
instance_double(Imap::Backup::Configuration::Store, accounts: accounts)
|
45
70
|
end
|
46
|
-
let(:accounts) { [account, account1] }
|
47
|
-
let(:account) do
|
48
|
-
{
|
49
|
-
username: existing_email,
|
50
|
-
server: current_server,
|
51
|
-
local_path: "/backup/path",
|
52
|
-
folders: [{name: "my_folder"}],
|
53
|
-
password: existing_password
|
54
|
-
}
|
55
|
-
end
|
56
|
-
let(:account1) do
|
57
|
-
{
|
58
|
-
username: other_email,
|
59
|
-
local_path: other_existing_path
|
60
|
-
}
|
61
|
-
end
|
62
|
-
let(:existing_email) { "user@example.com" }
|
63
|
-
let(:new_email) { "foo@example.com" }
|
64
|
-
let(:current_server) { "imap.example.com" }
|
65
|
-
let(:existing_password) { "password" }
|
66
|
-
let(:other_email) { "other@example.com" }
|
67
|
-
let(:other_existing_path) { "/other/existing/path" }
|
68
71
|
|
69
72
|
before do
|
70
73
|
allow(Kernel).to receive(:system)
|
@@ -139,6 +142,8 @@ describe Imap::Backup::Configuration::Account do
|
|
139
142
|
|
140
143
|
describe "choosing 'modify email'" do
|
141
144
|
before do
|
145
|
+
allow(account).to receive(:"username=")
|
146
|
+
allow(account).to receive(:"server=")
|
142
147
|
allow(Imap::Backup::Configuration::Asker).
|
143
148
|
to receive(:email) { new_email }
|
144
149
|
subject.run
|
@@ -158,7 +163,7 @@ describe Imap::Backup::Configuration::Account do
|
|
158
163
|
let(:current_server) { nil }
|
159
164
|
|
160
165
|
it "sets a default server" do
|
161
|
-
expect(account
|
166
|
+
expect(account).to have_received(:"server=").with(expected)
|
162
167
|
end
|
163
168
|
end
|
164
169
|
|
@@ -166,7 +171,7 @@ describe Imap::Backup::Configuration::Account do
|
|
166
171
|
let(:current_server) { "" }
|
167
172
|
|
168
173
|
it "sets a default server" do
|
169
|
-
expect(account
|
174
|
+
expect(account).to have_received(:"server=").with(expected)
|
170
175
|
end
|
171
176
|
end
|
172
177
|
end
|
@@ -183,17 +188,15 @@ describe Imap::Backup::Configuration::Account do
|
|
183
188
|
end
|
184
189
|
|
185
190
|
it "does not set a default server" do
|
186
|
-
expect(account
|
191
|
+
expect(account).to_not have_received(:"server=")
|
187
192
|
end
|
188
193
|
end
|
189
194
|
end
|
190
195
|
|
191
196
|
context "when the email is new" do
|
192
197
|
it "modifies the email address" do
|
193
|
-
expect(account
|
198
|
+
expect(account).to have_received(:"username=").with(new_email)
|
194
199
|
end
|
195
|
-
|
196
|
-
include_examples "it flags the account as modified"
|
197
200
|
end
|
198
201
|
|
199
202
|
context "when the email already exists" do
|
@@ -205,10 +208,8 @@ describe Imap::Backup::Configuration::Account do
|
|
205
208
|
end
|
206
209
|
|
207
210
|
it "doesn't set the email" do
|
208
|
-
expect(account
|
211
|
+
expect(account.username).to eq(existing_email)
|
209
212
|
end
|
210
|
-
|
211
|
-
include_examples "it doesn't flag the account as modified"
|
212
213
|
end
|
213
214
|
end
|
214
215
|
|
@@ -216,6 +217,7 @@ describe Imap::Backup::Configuration::Account do
|
|
216
217
|
let(:new_password) { "new_password" }
|
217
218
|
|
218
219
|
before do
|
220
|
+
allow(account).to receive(:"password=")
|
219
221
|
allow(Imap::Backup::Configuration::Asker).
|
220
222
|
to receive(:password) { new_password }
|
221
223
|
subject.run
|
@@ -224,20 +226,16 @@ describe Imap::Backup::Configuration::Account do
|
|
224
226
|
|
225
227
|
context "when the user enters a password" do
|
226
228
|
it "updates the password" do
|
227
|
-
expect(account
|
229
|
+
expect(account).to have_received(:"password=").with(new_password)
|
228
230
|
end
|
229
|
-
|
230
|
-
include_examples "it flags the account as modified"
|
231
231
|
end
|
232
232
|
|
233
233
|
context "when the user cancels" do
|
234
234
|
let(:new_password) { nil }
|
235
235
|
|
236
236
|
it "does nothing" do
|
237
|
-
expect(account
|
237
|
+
expect(account.password).to eq(existing_password)
|
238
238
|
end
|
239
|
-
|
240
|
-
include_examples "it doesn't flag the account as modified"
|
241
239
|
end
|
242
240
|
end
|
243
241
|
|
@@ -245,6 +243,7 @@ describe Imap::Backup::Configuration::Account do
|
|
245
243
|
let(:server) { "server" }
|
246
244
|
|
247
245
|
before do
|
246
|
+
allow(account).to receive(:"server=")
|
248
247
|
allow(highline).to receive(:ask).with("server: ") { server }
|
249
248
|
|
250
249
|
subject.run
|
@@ -253,16 +252,15 @@ describe Imap::Backup::Configuration::Account do
|
|
253
252
|
end
|
254
253
|
|
255
254
|
it "updates the server" do
|
256
|
-
expect(account
|
255
|
+
expect(account).to have_received(:"server=").with(server)
|
257
256
|
end
|
258
|
-
|
259
|
-
include_examples "it flags the account as modified"
|
260
257
|
end
|
261
258
|
|
262
259
|
describe "choosing 'modify backup path'" do
|
263
260
|
let(:new_backup_path) { "/new/path" }
|
264
261
|
|
265
262
|
before do
|
263
|
+
allow(account).to receive(:"local_path=")
|
266
264
|
@validator = nil
|
267
265
|
allow(
|
268
266
|
Imap::Backup::Configuration::Asker
|
@@ -275,7 +273,7 @@ describe Imap::Backup::Configuration::Account do
|
|
275
273
|
end
|
276
274
|
|
277
275
|
it "updates the path" do
|
278
|
-
expect(account
|
276
|
+
expect(account).to have_received(:"local_path=").with(new_backup_path)
|
279
277
|
end
|
280
278
|
|
281
279
|
context "when the path is not used by other backups" do
|
@@ -293,8 +291,6 @@ describe Imap::Backup::Configuration::Account do
|
|
293
291
|
# rubocop:enable RSpec/InstanceVariable
|
294
292
|
end
|
295
293
|
end
|
296
|
-
|
297
|
-
include_examples "it flags the account as modified"
|
298
294
|
end
|
299
295
|
|
300
296
|
describe "choosing 'choose backup folders'" do
|
@@ -333,6 +329,7 @@ describe Imap::Backup::Configuration::Account do
|
|
333
329
|
let(:confirmed) { true }
|
334
330
|
|
335
331
|
before do
|
332
|
+
allow(account).to receive(:mark_for_deletion!)
|
336
333
|
allow(highline).to receive(:agree) { confirmed }
|
337
334
|
subject.run
|
338
335
|
catch :done do
|
@@ -345,13 +342,17 @@ describe Imap::Backup::Configuration::Account do
|
|
345
342
|
end
|
346
343
|
|
347
344
|
context "when the user confirms deletion" do
|
348
|
-
|
345
|
+
it "flags the account to be deleted" do
|
346
|
+
expect(account).to have_received(:mark_for_deletion!)
|
347
|
+
end
|
349
348
|
end
|
350
349
|
|
351
350
|
context "without confirmation" do
|
352
351
|
let(:confirmed) { false }
|
353
352
|
|
354
|
-
|
353
|
+
it "doesn't flag the account to be deleted" do
|
354
|
+
expect(account).to_not have_received(:mark_for_deletion!)
|
355
|
+
end
|
355
356
|
end
|
356
357
|
end
|
357
358
|
end
|
@@ -9,7 +9,14 @@ describe Imap::Backup::Configuration::FolderChooser do
|
|
9
9
|
Imap::Backup::Account::Connection, folders: connection_folders
|
10
10
|
)
|
11
11
|
end
|
12
|
-
let(:account)
|
12
|
+
let(:account) do
|
13
|
+
instance_double(
|
14
|
+
Imap::Backup::Account,
|
15
|
+
folders: account_folders,
|
16
|
+
"folders=": nil
|
17
|
+
)
|
18
|
+
end
|
19
|
+
let(:account_folders) { [] }
|
13
20
|
let(:connection_folders) { [] }
|
14
21
|
let!(:highline_streams) { prepare_highline }
|
15
22
|
let(:input) { highline_streams[0] }
|
@@ -36,7 +43,7 @@ describe Imap::Backup::Configuration::FolderChooser do
|
|
36
43
|
end
|
37
44
|
|
38
45
|
describe "folder listing" do
|
39
|
-
let(:
|
46
|
+
let(:account_folders) { [{name: "my_folder"}]}
|
40
47
|
let(:connection_folders) do
|
41
48
|
# N.B. my_folder is already backed up
|
42
49
|
%w(my_folder another_folder)
|
@@ -62,10 +69,9 @@ describe Imap::Backup::Configuration::FolderChooser do
|
|
62
69
|
end
|
63
70
|
|
64
71
|
specify "are added to the account" do
|
65
|
-
expect(account
|
72
|
+
expect(account).to have_received(:"folders=").
|
73
|
+
with([{name: "my_folder"}, {name: "another_folder"}])
|
66
74
|
end
|
67
|
-
|
68
|
-
include_examples "it flags the account as modified"
|
69
75
|
end
|
70
76
|
|
71
77
|
context "when removing folders" do
|
@@ -76,22 +82,16 @@ describe Imap::Backup::Configuration::FolderChooser do
|
|
76
82
|
end
|
77
83
|
|
78
84
|
specify "are removed from the account" do
|
79
|
-
expect(account
|
85
|
+
expect(account).to have_received(:"folders=").with([])
|
80
86
|
end
|
81
|
-
|
82
|
-
include_examples "it flags the account as modified"
|
83
87
|
end
|
84
88
|
end
|
85
89
|
|
86
90
|
context "with missing remote folders" do
|
87
|
-
let(:
|
88
|
-
|
89
|
-
end
|
90
|
-
let(:connection_folders) do
|
91
|
-
[
|
92
|
-
instance_double(Imap::Backup::Account::Folder, name: "on_server")
|
93
|
-
]
|
91
|
+
let(:account_folders) do
|
92
|
+
[{name: "on_server"}, {name: "not_on_server"}]
|
94
93
|
end
|
94
|
+
let(:connection_folders) { ["on_server"] }
|
95
95
|
|
96
96
|
before do
|
97
97
|
allow(Kernel).to receive(:puts)
|
@@ -99,10 +99,9 @@ describe Imap::Backup::Configuration::FolderChooser do
|
|
99
99
|
end
|
100
100
|
|
101
101
|
specify "are removed from the account" do
|
102
|
-
expect(account
|
102
|
+
expect(account).to have_received(:"folders=").
|
103
|
+
with([{name: "on_server"}])
|
103
104
|
end
|
104
|
-
|
105
|
-
include_examples "it flags the account as modified"
|
106
105
|
end
|
107
106
|
|
108
107
|
context "when folders are not available" do
|
@@ -1,11 +1,18 @@
|
|
1
1
|
describe Imap::Backup::Configuration::List do
|
2
2
|
subject { described_class.new }
|
3
3
|
|
4
|
-
let(:accounts)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
let(:accounts) { [account1, account2] }
|
5
|
+
let(:account1) do
|
6
|
+
instance_double(
|
7
|
+
Imap::Backup::Account,
|
8
|
+
username: "a1@example.com"
|
9
|
+
)
|
10
|
+
end
|
11
|
+
let(:account2) do
|
12
|
+
instance_double(
|
13
|
+
Imap::Backup::Account,
|
14
|
+
username: "a2@example.com"
|
15
|
+
)
|
9
16
|
end
|
10
17
|
let(:store) do
|
11
18
|
instance_double(Imap::Backup::Configuration::Store, accounts: accounts)
|