|
| 1 | +require "features/helper" |
| 2 | + |
| 3 | +RSpec.describe "imap-backup migrate: avoid regression in migrating legacy backups", |
| 4 | + :container, type: :aruba do |
| 5 | + def overwrite_metadata_with_old_version(email, folder) |
| 6 | + content = imap_parsed(email, folder) |
| 7 | + uids = content[:messages].map { |m| m[:uid] } |
| 8 | + uid_validity = content[:uid_validity] |
| 9 | + old_metadata = {version: 2, uids: uids, uid_validity: uid_validity} |
| 10 | + path = imap_path(email, folder) |
| 11 | + File.open(path, "w") { |f| f.write(JSON.pretty_generate(old_metadata)) } |
| 12 | + end |
| 13 | + |
| 14 | + let(:email) { "me@example.com" } |
| 15 | + let(:folder) { "migrate-folder" } |
| 16 | + let(:source_account) do |
| 17 | + { |
| 18 | + username: email, |
| 19 | + local_path: File.join(config_path, email.gsub("@", "_")) |
| 20 | + } |
| 21 | + end |
| 22 | + let(:destination_account) { test_server_connection_parameters } |
| 23 | + let(:destination_server) { test_server } |
| 24 | + let(:config_options) { {accounts: [source_account, destination_account]} } |
| 25 | + |
| 26 | + let!(:setup) do |
| 27 | + test_server.warn_about_non_default_folders |
| 28 | + create_config(**config_options) |
| 29 | + append_local( |
| 30 | + email: email, folder: folder, subject: "Ciao", flags: [:Draft, :$CUSTOM] |
| 31 | + ) |
| 32 | + overwrite_metadata_with_old_version(email, folder) |
| 33 | + end |
| 34 | + |
| 35 | + after do |
| 36 | + destination_server.delete_folder folder |
| 37 | + destination_server.disconnect |
| 38 | + end |
| 39 | + |
| 40 | + it "copies emails to the destination account" do |
| 41 | + run_command_and_stop "imap-backup migrate #{email} #{destination_account[:username]}" |
| 42 | + |
| 43 | + messages = test_server.folder_messages(folder) |
| 44 | + expected = <<~MESSAGE.gsub("\n", "\r\n") |
| 45 | + From: sender@example.com |
| 46 | + Subject: Ciao |
| 47 | +
|
| 48 | + body |
| 49 | +
|
| 50 | + MESSAGE |
| 51 | + expect(messages[0]["BODY[]"]).to eq(expected) |
| 52 | + end |
| 53 | +end |
0 commit comments