imap-backup 4.2.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/imap-backup.gemspec +2 -0
  3. data/lib/imap/backup/account/connection.rb +4 -4
  4. data/lib/imap/backup/account/folder.rb +8 -0
  5. data/lib/imap/backup/cli/folders.rb +1 -1
  6. data/lib/imap/backup/cli/helpers.rb +4 -1
  7. data/lib/imap/backup/cli/local.rb +1 -1
  8. data/lib/imap/backup/cli/migrate.rb +114 -0
  9. data/lib/imap/backup/cli/remote.rb +15 -0
  10. data/lib/imap/backup/cli/restore.rb +20 -4
  11. data/lib/imap/backup/cli.rb +55 -10
  12. data/lib/imap/backup/client/default.rb +2 -2
  13. data/lib/imap/backup/downloader.rb +23 -9
  14. data/lib/imap/backup/migrator.rb +51 -0
  15. data/lib/imap/backup/sanitizer.rb +7 -4
  16. data/lib/imap/backup/version.rb +2 -2
  17. data/spec/features/backup_spec.rb +13 -12
  18. data/spec/features/configuration/minimal_configuration.rb +15 -0
  19. data/spec/features/configuration/missing_configuration.rb +14 -0
  20. data/spec/features/folders_spec.rb +36 -0
  21. data/spec/features/local/list_accounts_spec.rb +12 -0
  22. data/spec/features/local/list_emails_spec.rb +21 -0
  23. data/spec/features/local/list_folders_spec.rb +21 -0
  24. data/spec/features/local/show_an_email_spec.rb +34 -0
  25. data/spec/features/migrate_spec.rb +35 -0
  26. data/spec/features/remote/list_account_folders_spec.rb +16 -0
  27. data/spec/features/restore_spec.rb +7 -5
  28. data/spec/features/support/aruba.rb +73 -0
  29. data/spec/features/support/backup_directory.rb +0 -4
  30. data/spec/features/support/email_server.rb +1 -1
  31. data/spec/spec_helper.rb +2 -3
  32. data/spec/unit/imap/backup/account/connection_spec.rb +6 -8
  33. data/spec/unit/imap/backup/account/folder_spec.rb +26 -5
  34. data/spec/unit/imap/backup/cli/helpers_spec.rb +87 -0
  35. data/spec/unit/imap/backup/migrator_spec.rb +58 -0
  36. metadata +57 -11
  37. data/lib/thunderbird/install.rb +0 -16
  38. data/lib/thunderbird/local_folder.rb +0 -65
  39. data/lib/thunderbird/profile.rb +0 -30
  40. data/lib/thunderbird/profiles.rb +0 -71
  41. data/lib/thunderbird/subdirectory.rb +0 -93
  42. data/lib/thunderbird/subdirectory_placeholder.rb +0 -21
  43. data/lib/thunderbird.rb +0 -14
  44. data/spec/gather_rspec_coverage.rb +0 -1
@@ -0,0 +1,12 @@
1
+ require "features/helper"
2
+
3
+ RSpec.describe "Listing accounts", type: :aruba do
4
+ before do
5
+ create_config(accounts: [{"username": "me@example.com"}])
6
+ run_command_and_stop("imap-backup local accounts")
7
+ end
8
+
9
+ it "lists accounts" do
10
+ expect(last_command_started).to have_output("me@example.com")
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ require "features/helper"
2
+
3
+ RSpec.describe "Listing emails", type: :aruba do
4
+ let(:email) { "me@example.com" }
5
+ let(:account) do
6
+ {
7
+ username: email,
8
+ local_path: File.join(config_path, email.gsub("@", "_"))
9
+ }
10
+ end
11
+
12
+ before do
13
+ create_config(accounts: [account])
14
+ store_email(email: email, folder: "my_folder", subject: "Ciao")
15
+ run_command_and_stop("imap-backup local list #{email} my_folder")
16
+ end
17
+
18
+ it "lists emails" do
19
+ expect(last_command_started).to have_output(/1: Ciao/)
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require "features/helper"
2
+
3
+ RSpec.describe "Listing account folders", type: :aruba do
4
+ let(:email) { "me@example.com" }
5
+ let(:account) do
6
+ {
7
+ username: email,
8
+ local_path: File.join(config_path, email.gsub("@", "_"))
9
+ }
10
+ end
11
+
12
+ before do
13
+ create_config(accounts: [account])
14
+ store_email(email: email, folder: "my_folder", body: "Hi")
15
+ run_command_and_stop("imap-backup local folders #{email}")
16
+ end
17
+
18
+ it "lists folders that have been backed up" do
19
+ expect(last_command_started).to have_output(%q("my_folder"))
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ require "features/helper"
2
+
3
+ RSpec.describe "Show an email", type: :aruba do
4
+ let(:email) { "me@example.com" }
5
+ let(:account) do
6
+ {
7
+ username: email,
8
+ local_path: File.join(config_path, email.gsub("@", "_"))
9
+ }
10
+ end
11
+
12
+ before do
13
+ create_config(accounts: [account])
14
+ store_email(
15
+ email: email,
16
+ folder: "my_folder",
17
+ uid: 99,
18
+ from: "me@example.com",
19
+ subject: "Hello",
20
+ body: "How're things?"
21
+ )
22
+ run_command_and_stop("imap-backup local show #{email} my_folder 99")
23
+ end
24
+
25
+ it "shows the email" do
26
+ expected = <<~BODY
27
+ From: me@example.com
28
+ Subject: Hello
29
+
30
+ How're things?
31
+ BODY
32
+ expect(last_command_started).to have_output(expected)
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ require "features/helper"
2
+
3
+ RSpec.describe "Migration", type: :aruba, docker: true do
4
+ let(:email) { "me@example.com" }
5
+ let(:folder) { "my_folder" }
6
+ let(:source_account) do
7
+ {
8
+ username: email,
9
+ local_path: File.join(config_path, email.gsub("@", "_"))
10
+ }
11
+ end
12
+ let(:destination_account) { fixture("connection") }
13
+
14
+ before do
15
+ create_config(accounts: [source_account, destination_account])
16
+ store_email(email: email, folder: folder, subject: "Ciao")
17
+ run_command_and_stop("imap-backup migrate #{email} #{destination_account[:username]}")
18
+ end
19
+
20
+ after do
21
+ delete_emails(folder)
22
+ end
23
+
24
+ it "copies email to the destination account" do
25
+ messages = server_messages(folder)
26
+ expected = <<~MESSAGE.gsub("\n", "\r\n")
27
+ From: sender@example.com
28
+ Subject: Ciao
29
+
30
+ body
31
+
32
+ MESSAGE
33
+ expect(messages[0]["BODY[]"]).to eq(expected)
34
+ end
35
+ end
@@ -0,0 +1,16 @@
1
+ require "features/helper"
2
+
3
+ RSpec.describe "List account folders", type: :aruba do
4
+ let(:account) do
5
+ fixture("connection")
6
+ end
7
+
8
+ before do
9
+ create_config(accounts: [account])
10
+ run_command_and_stop("imap-backup remote folders #{account[:username]}")
11
+ end
12
+
13
+ it "lists folders" do
14
+ expect(last_command_started).to have_output(/"INBOX"/)
15
+ end
16
+ end
@@ -1,9 +1,11 @@
1
1
  require "features/helper"
2
2
 
3
- RSpec.describe "restore", type: :feature, docker: true do
3
+ RSpec.describe "restore", type: :aruba, docker: true do
4
4
  include_context "imap-backup connection"
5
5
  include_context "message-fixtures"
6
6
 
7
+ let(:local_backup_path) { File.expand_path("~/backup") }
8
+ let(:folder) { "my-stuff" }
7
9
  let(:messages_as_mbox) do
8
10
  message_as_mbox_entry(msg1) + message_as_mbox_entry(msg2)
9
11
  end
@@ -12,19 +14,19 @@ RSpec.describe "restore", type: :feature, docker: true do
12
14
  end
13
15
  let(:message_uids) { [msg1[:uid], msg2[:uid]] }
14
16
  let(:existing_imap_content) { imap_data(uid_validity, message_uids).to_json }
15
- let(:folder) { "my-stuff" }
16
17
  let(:uid_validity) { 1234 }
17
18
 
18
19
  let!(:pre) {}
19
20
  let!(:setup) do
21
+ create_directory local_backup_path
20
22
  File.write(imap_path(folder), existing_imap_content)
21
23
  File.write(mbox_path(folder), messages_as_mbox)
22
- connection.restore
24
+ create_config(accounts: [account.to_h])
25
+
26
+ run_command_and_stop("imap-backup restore #{account.username}")
23
27
  end
24
28
  let(:cleanup) do
25
- FileUtils.rm_rf local_backup_path
26
29
  server_delete_folder folder
27
- connection.disconnect
28
30
  end
29
31
 
30
32
  after { cleanup }
@@ -0,0 +1,73 @@
1
+ require "aruba/rspec"
2
+
3
+ require_relative "backup_directory"
4
+
5
+ Aruba.configure do |config|
6
+ config.home_directory = File.expand_path("./tmp/home")
7
+ config.allow_absolute_paths = true
8
+ end
9
+
10
+ module ConfigurationHelpers
11
+ def config_path
12
+ File.expand_path("~/.imap-backup")
13
+ end
14
+
15
+ def create_config(accounts:, debug: false)
16
+ pathname = File.join(config_path, "config.json")
17
+ save_data = {
18
+ version: Imap::Backup::Configuration::VERSION,
19
+ accounts: accounts,
20
+ debug: debug
21
+ }
22
+ FileUtils.mkdir_p config_path
23
+ File.open(pathname, "w") { |f| f.write(JSON.pretty_generate(save_data)) }
24
+ FileUtils.chmod(0o600, pathname)
25
+ end
26
+ end
27
+
28
+ module StoreHelpers
29
+ def store_email(
30
+ email:, folder:,
31
+ uid: 1,
32
+ from: "sender@example.com",
33
+ subject: "The Subject",
34
+ body: "body"
35
+ )
36
+ account = config.accounts.find { |a| a.username == email }
37
+ raise "Account not found" if !account
38
+ FileUtils.mkdir_p account.local_path
39
+ store = Imap::Backup::Serializer::MboxStore.new(account.local_path, folder)
40
+ store.uid_validity = "42" if !store.uid_validity
41
+ serialized = to_serialized(from: from, subject: subject, body: body)
42
+ store.add(uid, serialized)
43
+ end
44
+
45
+ def to_serialized(from:, subject:, body:)
46
+ body_and_headers = <<~BODY
47
+ From: #{from}
48
+ Subject: #{subject}
49
+
50
+ #{body}
51
+ BODY
52
+ end
53
+
54
+ def config
55
+ Imap::Backup::Configuration.new(
56
+ File.expand_path("~/.imap-backup/config.json")
57
+ )
58
+ end
59
+ end
60
+
61
+ RSpec.configure do |config|
62
+ config.include ConfigurationHelpers, type: :aruba
63
+ config.include StoreHelpers, type: :aruba
64
+ config.include BackupDirectoryHelpers, type: :aruba
65
+
66
+ config.before(:suite) do
67
+ FileUtils.rm_rf "./tmp/home"
68
+ end
69
+
70
+ config.after do
71
+ FileUtils.rm_rf "./tmp/home"
72
+ end
73
+ end
@@ -41,7 +41,3 @@ module BackupDirectoryHelpers
41
41
  JSON.parse(imap_content(name), symbolize_names: true)
42
42
  end
43
43
  end
44
-
45
- RSpec.configure do |config|
46
- config.include BackupDirectoryHelpers, type: :feature
47
- end
@@ -87,7 +87,6 @@ module EmailServerHelpers
87
87
  imap.delete folder
88
88
  imap.disconnect
89
89
  rescue StandardError => e
90
- puts e.to_s
91
90
  ensure
92
91
  @imap = nil
93
92
  end
@@ -106,5 +105,6 @@ module EmailServerHelpers
106
105
  end
107
106
 
108
107
  RSpec.configure do |config|
108
+ config.include EmailServerHelpers, type: :aruba
109
109
  config.include EmailServerHelpers, type: :feature
110
110
  end
data/spec/spec_helper.rb CHANGED
@@ -3,10 +3,9 @@ require "rspec"
3
3
 
4
4
  CodeClimate::TestReporter.start
5
5
 
6
- spec_path = File.dirname(__FILE__)
7
- $LOAD_PATH << File.expand_path("../lib", spec_path)
6
+ $LOAD_PATH << File.expand_path("../lib", __dir__)
8
7
 
9
- support_glob = File.join(spec_path, "support", "**", "*.rb")
8
+ support_glob = File.join(__dir__, "support", "**", "*.rb")
10
9
  Dir[support_glob].sort.each { |f| require f }
11
10
 
12
11
  require "simplecov"
@@ -61,14 +61,6 @@ describe Imap::Backup::Account::Connection do
61
61
  end
62
62
  end
63
63
 
64
- describe "#initialize" do
65
- it "creates the path" do
66
- expect(Imap::Backup::Utils).to receive(:make_folder)
67
-
68
- subject
69
- end
70
- end
71
-
72
64
  describe "#client" do
73
65
  let(:result) { subject.client }
74
66
 
@@ -127,6 +119,12 @@ describe Imap::Backup::Account::Connection do
127
119
  allow(Imap::Backup::Serializer::Mbox).to receive(:new) { serializer }
128
120
  end
129
121
 
122
+ it "creates the path" do
123
+ expect(Imap::Backup::Utils).to receive(:make_folder)
124
+
125
+ subject.status
126
+ end
127
+
130
128
  it "returns the names of folders" do
131
129
  expect(subject.status[0][:name]).to eq(IMAP_FOLDER)
132
130
  end
@@ -12,7 +12,10 @@ describe Imap::Backup::Account::Folder do
12
12
  append: append_response,
13
13
  create: nil,
14
14
  examine: nil,
15
- responses: responses
15
+ expunge: nil,
16
+ responses: responses,
17
+ select: nil,
18
+ uid_store: nil
16
19
  )
17
20
  end
18
21
  let(:connection) do
@@ -27,12 +30,11 @@ describe Imap::Backup::Account::Folder do
27
30
  end
28
31
  let(:responses) { [] }
29
32
  let(:append_response) { nil }
33
+ let(:uids) { [5678, 123] }
30
34
 
31
- describe "#uids" do
32
- let(:uids) { [5678, 123] }
33
-
34
- before { allow(client).to receive(:uid_search) { uids } }
35
+ before { allow(client).to receive(:uid_search) { uids } }
35
36
 
37
+ describe "#uids" do
36
38
  it "lists available messages" do
37
39
  expect(subject.uids).to eq(uids.reverse)
38
40
  end
@@ -233,6 +235,25 @@ describe Imap::Backup::Account::Folder do
233
235
  expect(subject.uid_validity).to eq(1)
234
236
  end
235
237
  end
238
+
239
+ describe "#clear" do
240
+ before do
241
+ subject.clear
242
+ end
243
+
244
+ it "uses select to have read-write access" do
245
+ expect(client).to have_received(:select)
246
+ end
247
+
248
+ it "marks all emails as deleted" do
249
+ expect(client).
250
+ to have_received(:uid_store).with(uids.sort, "+FLAGS", [:Deleted])
251
+ end
252
+
253
+ it "deletes marked emails" do
254
+ expect(client).to have_received(:expunge)
255
+ end
256
+ end
236
257
  end
237
258
 
238
259
  # rubocop:enable RSpec/PredicateMatcher
@@ -0,0 +1,87 @@
1
+ require "imap/backup/cli/helpers"
2
+
3
+ module Imap::Backup
4
+ class WithHelpers
5
+ include CLI::Helpers
6
+ end
7
+
8
+ RSpec.describe CLI::Helpers do
9
+ subject { WithHelpers.new }
10
+
11
+ let(:accounts) { instance_double(CLI::Accounts) }
12
+ let(:email) { "email@example.com" }
13
+ let(:account1) { instance_double(Account, username: email, connection: "c1") }
14
+ let(:account2) { instance_double(Account, username: "foo", connection: "c2") }
15
+ let(:items) { [account1, account2] }
16
+
17
+ before do
18
+ allow(CLI::Accounts).to receive(:new) { accounts }
19
+ allow(accounts).to receive(:each).
20
+ and_yield(account1).
21
+ and_yield(account2)
22
+ allow(accounts).to receive(:find) do |&block|
23
+ items.find { |a| block.call(a) }
24
+ end
25
+ end
26
+
27
+ describe ".symbolized" do
28
+ let(:arguments) { {"foo" => 1, "bar" => 2} }
29
+ let(:result) { subject.symbolized(arguments) }
30
+
31
+ it "converts string keys to symbols" do
32
+ expect(result.keys).to eq([:foo, :bar])
33
+ end
34
+
35
+ context "when keys have hyphens" do
36
+ let(:arguments) { {"some-option"=> 3} }
37
+
38
+ it "replaces them with underscores" do
39
+ expect(result.keys).to eq([:some_option])
40
+ end
41
+ end
42
+ end
43
+
44
+ describe ".account" do
45
+ it "returns any account with a matching username" do
46
+ expect(subject.account(email)).to eq(account1)
47
+ end
48
+
49
+ context "when no match is found" do
50
+ let(:items) { [account2] }
51
+ it "fails" do
52
+ expect do
53
+ subject.account(email)
54
+ end.to raise_error(RuntimeError, /not a configured account/)
55
+ end
56
+ end
57
+ end
58
+
59
+ describe ".connection" do
60
+ it "returns the connection for any account with a matching username" do
61
+ result = subject.connection(email)
62
+ expect(result).to be_a(Account::Connection)
63
+ expect(result.account).to eq(account1)
64
+ end
65
+ end
66
+
67
+ describe ".each_connection" do
68
+ it "yields each connection" do
69
+ expect { |b| subject.each_connection([email, "foo"], &b) }.
70
+ to yield_successive_args("c1", "c2")
71
+ end
72
+
73
+ context "when there is no configuration" do
74
+ before do
75
+ allow(accounts).to receive(:each).
76
+ and_raise(Imap::Backup::ConfigurationNotFound)
77
+ end
78
+
79
+ it "fails" do
80
+ expect do
81
+ subject.each_connection([email])
82
+ end.to raise_error(RuntimeError, /not configured/)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,58 @@
1
+ require "imap/backup/migrator"
2
+
3
+ module Imap::Backup
4
+ RSpec.describe Migrator do
5
+ subject { described_class.new(serializer, folder, reset: reset) }
6
+
7
+ let(:serializer) { instance_double(Serializer::MboxStore, uids: [1]) }
8
+ let(:folder) do
9
+ instance_double(
10
+ Account::Folder,
11
+ append: nil, clear: nil, create: nil, name: "name", uids: folder_uids
12
+ )
13
+ end
14
+ let(:folder_uids) { [] }
15
+ let(:reset) { false }
16
+ let(:messages) { [[1, message]] }
17
+ let(:message) { instance_double(Email::Mboxrd::Message, supplied_body: body) }
18
+ let(:body) { "body" }
19
+
20
+ before do
21
+ allow(serializer).to receive(:each_message) do
22
+ messages.enum_for(:each)
23
+ end
24
+ end
25
+
26
+ it "creates the folder" do
27
+ subject.run
28
+
29
+ expect(folder).to have_received(:create)
30
+ end
31
+
32
+ it "uploads messages" do
33
+ subject.run
34
+
35
+ expect(folder).to have_received(:append).with(message)
36
+ end
37
+
38
+ context "when the folder is not empty" do
39
+ let(:folder_uids) { [99] }
40
+
41
+ it "fails" do
42
+ expect do
43
+ subject.run
44
+ end.to raise_error(RuntimeError, /The destination folder 'name' is not empty/)
45
+ end
46
+
47
+ context "when `reset` is true" do
48
+ let(:reset) { true }
49
+
50
+ it "clears the folder" do
51
+ subject.run
52
+
53
+ expect(folder).to have_received(:clear)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imap-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Yates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-10 00:00:00.000000000 Z
11
+ date: 2022-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: thunderbird
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.0.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: aruba
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 0.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.0
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: codeclimate-test-reporter
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -196,6 +224,8 @@ files:
196
224
  - lib/imap/backup/cli/folders.rb
197
225
  - lib/imap/backup/cli/helpers.rb
198
226
  - lib/imap/backup/cli/local.rb
227
+ - lib/imap/backup/cli/migrate.rb
228
+ - lib/imap/backup/cli/remote.rb
199
229
  - lib/imap/backup/cli/restore.rb
200
230
  - lib/imap/backup/cli/setup.rb
201
231
  - lib/imap/backup/cli/status.rb
@@ -205,6 +235,7 @@ files:
205
235
  - lib/imap/backup/configuration.rb
206
236
  - lib/imap/backup/downloader.rb
207
237
  - lib/imap/backup/logger.rb
238
+ - lib/imap/backup/migrator.rb
208
239
  - lib/imap/backup/sanitizer.rb
209
240
  - lib/imap/backup/serializer.rb
210
241
  - lib/imap/backup/serializer/mbox.rb
@@ -221,23 +252,25 @@ files:
221
252
  - lib/imap/backup/utils.rb
222
253
  - lib/imap/backup/version.rb
223
254
  - lib/retry_on_error.rb
224
- - lib/thunderbird.rb
225
- - lib/thunderbird/install.rb
226
- - lib/thunderbird/local_folder.rb
227
- - lib/thunderbird/profile.rb
228
- - lib/thunderbird/profiles.rb
229
- - lib/thunderbird/subdirectory.rb
230
- - lib/thunderbird/subdirectory_placeholder.rb
231
255
  - spec/features/backup_spec.rb
256
+ - spec/features/configuration/minimal_configuration.rb
257
+ - spec/features/configuration/missing_configuration.rb
258
+ - spec/features/folders_spec.rb
232
259
  - spec/features/helper.rb
260
+ - spec/features/local/list_accounts_spec.rb
261
+ - spec/features/local/list_emails_spec.rb
262
+ - spec/features/local/list_folders_spec.rb
263
+ - spec/features/local/show_an_email_spec.rb
264
+ - spec/features/migrate_spec.rb
265
+ - spec/features/remote/list_account_folders_spec.rb
233
266
  - spec/features/restore_spec.rb
234
267
  - spec/features/status_spec.rb
268
+ - spec/features/support/aruba.rb
235
269
  - spec/features/support/backup_directory.rb
236
270
  - spec/features/support/email_server.rb
237
271
  - spec/features/support/shared/connection_context.rb
238
272
  - spec/features/support/shared/message_fixtures.rb
239
273
  - spec/fixtures/connection.yml
240
- - spec/gather_rspec_coverage.rb
241
274
  - spec/spec_helper.rb
242
275
  - spec/support/fixtures.rb
243
276
  - spec/support/higline_test_helpers.rb
@@ -251,12 +284,14 @@ files:
251
284
  - spec/unit/imap/backup/account/connection_spec.rb
252
285
  - spec/unit/imap/backup/account/folder_spec.rb
253
286
  - spec/unit/imap/backup/cli/accounts_spec.rb
287
+ - spec/unit/imap/backup/cli/helpers_spec.rb
254
288
  - spec/unit/imap/backup/cli/local_spec.rb
255
289
  - spec/unit/imap/backup/cli/utils_spec.rb
256
290
  - spec/unit/imap/backup/client/default_spec.rb
257
291
  - spec/unit/imap/backup/configuration_spec.rb
258
292
  - spec/unit/imap/backup/downloader_spec.rb
259
293
  - spec/unit/imap/backup/logger_spec.rb
294
+ - spec/unit/imap/backup/migrator_spec.rb
260
295
  - spec/unit/imap/backup/serializer/mbox_enumerator_spec.rb
261
296
  - spec/unit/imap/backup/serializer/mbox_spec.rb
262
297
  - spec/unit/imap/backup/serializer/mbox_store_spec.rb
@@ -302,10 +337,12 @@ test_files:
302
337
  - spec/unit/imap/backup/setup/connection_tester_spec.rb
303
338
  - spec/unit/imap/backup/setup/asker_spec.rb
304
339
  - spec/unit/imap/backup/setup/folder_chooser_spec.rb
340
+ - spec/unit/imap/backup/cli/helpers_spec.rb
305
341
  - spec/unit/imap/backup/cli/accounts_spec.rb
306
342
  - spec/unit/imap/backup/cli/utils_spec.rb
307
343
  - spec/unit/imap/backup/cli/local_spec.rb
308
344
  - spec/unit/imap/backup/downloader_spec.rb
345
+ - spec/unit/imap/backup/migrator_spec.rb
309
346
  - spec/unit/imap/backup/uploader_spec.rb
310
347
  - spec/unit/imap/backup/account/folder_spec.rb
311
348
  - spec/unit/imap/backup/account/connection_spec.rb
@@ -317,16 +354,25 @@ test_files:
317
354
  - spec/unit/email/provider/fastmail_spec.rb
318
355
  - spec/unit/email/provider/base_spec.rb
319
356
  - spec/unit/email/provider_spec.rb
357
+ - spec/features/folders_spec.rb
358
+ - spec/features/configuration/missing_configuration.rb
359
+ - spec/features/configuration/minimal_configuration.rb
320
360
  - spec/features/backup_spec.rb
321
361
  - spec/features/helper.rb
322
362
  - spec/features/restore_spec.rb
363
+ - spec/features/local/list_emails_spec.rb
364
+ - spec/features/local/list_accounts_spec.rb
365
+ - spec/features/local/show_an_email_spec.rb
366
+ - spec/features/local/list_folders_spec.rb
323
367
  - spec/features/status_spec.rb
324
368
  - spec/features/support/email_server.rb
325
369
  - spec/features/support/backup_directory.rb
370
+ - spec/features/support/aruba.rb
326
371
  - spec/features/support/shared/connection_context.rb
327
372
  - spec/features/support/shared/message_fixtures.rb
373
+ - spec/features/migrate_spec.rb
374
+ - spec/features/remote/list_account_folders_spec.rb
328
375
  - spec/support/fixtures.rb
329
376
  - spec/support/silence_logging.rb
330
377
  - spec/support/higline_test_helpers.rb
331
378
  - spec/fixtures/connection.yml
332
- - spec/gather_rspec_coverage.rb