geary/test/client/accounts/accounts-manager-test.vala
2020-06-30 17:31:07 +10:00

273 lines
9.5 KiB
Vala

/*
* Copyright 2018 Michael Gratton <mike@vee.net>
*
* This software is licensed under the GNU Lesser General Public License
* (version 2.1 or later). See the COPYING file in this distribution.
*/
class Accounts.ManagerTest : TestCase {
private const string TEST_ID = "test";
private Manager? test = null;
private Geary.CredentialsMediator? mediator = null;
private Geary.AccountInformation? account = null;
private Geary.RFC822.MailboxAddress primary_mailbox;
private File? tmp = null;
public ManagerTest() {
base("AccountManagerTest");
add_test("create_account", create_account);
add_test("create_orphan_account", create_orphan_account);
add_test(
"create_orphan_account_with_legacy",
create_orphan_account_with_legacy
);
add_test(
"create_orphan_account_with_existing_dirs",
create_orphan_account_with_existing_dirs
);
add_test("account_config_v1", account_config_v1);
add_test("account_config_legacy", account_config_legacy);
add_test("service_config_v1", service_config_v1);
add_test("service_config_legacy", service_config_legacy);
}
public override void set_up() throws GLib.Error {
// XXX this whole thing stinks. We need to be able to test the
// engine without creating all of these dirs.
this.tmp = GLib.File.new_for_path(
GLib.DirUtils.make_tmp("accounts-manager-test-XXXXXX")
);
this.primary_mailbox = new Geary.RFC822.MailboxAddress(
null, "test1@example.com"
);
this.mediator = new Geary.MockCredentialsMediator();
this.account = new Geary.AccountInformation(
TEST_ID,
Geary.ServiceProvider.OTHER,
this.mediator,
this.primary_mailbox
);
this.test = new Manager(this.mediator, this.tmp, this.tmp);
}
public override void tear_down() throws GLib.Error {
this.account = null;
this.mediator = null;
this.test = null;
this.primary_mailbox = null;
@delete(this.tmp);
}
public void create_account() throws GLib.Error {
bool was_added = false;
bool was_enabled = false;
this.test.account_added.connect((added, status) => {
was_added = (added == account);
was_enabled = (status == Manager.Status.ENABLED);
});
this.test.create_account.begin(
account, new GLib.Cancellable(),
this.async_completion
);
this.test.create_account.end(async_result());
assert_equal<int?>(this.test.size, 1, "Account manager size");
assert_equal(this.test.get_account(TEST_ID), account, "Is not contained");
assert_true(was_added, "Was not added");
assert_true(was_enabled, "Was not enabled");
}
public void create_orphan_account() throws GLib.Error {
this.test.new_orphan_account.begin(
Geary.ServiceProvider.OTHER, this.primary_mailbox, null,
this.async_completion
);
Geary.AccountInformation account1 =
this.test.new_orphan_account.end(async_result());
assert(account1.id == "account_01");
this.test.create_account.begin(
account1, new GLib.Cancellable(),
this.async_completion
);
this.test.create_account.end(async_result());
this.test.new_orphan_account.begin(
Geary.ServiceProvider.OTHER, this.primary_mailbox, null,
this.async_completion
);
Geary.AccountInformation account2 =
this.test.new_orphan_account.end(async_result());
assert(account2.id == "account_02");
}
public void create_orphan_account_with_legacy() throws GLib.Error {
this.test.create_account.begin(
account, new GLib.Cancellable(),
this.async_completion
);
this.test.create_account.end(async_result());
this.test.new_orphan_account.begin(
Geary.ServiceProvider.OTHER, this.primary_mailbox, null,
this.async_completion
);
Geary.AccountInformation account1 =
this.test.new_orphan_account.end(async_result());
assert(account1.id == "account_01");
this.test.create_account.begin(
account1, new GLib.Cancellable(),
this.async_completion
);
this.test.create_account.end(async_result());
this.test.new_orphan_account.begin(
Geary.ServiceProvider.OTHER, this.primary_mailbox, null,
this.async_completion
);
Geary.AccountInformation account2 =
this.test.new_orphan_account.end(async_result());
assert(account2.id == "account_02");
}
public void create_orphan_account_with_existing_dirs() throws GLib.Error {
GLib.File existing = this.test.config_dir.get_child("account_01");
existing.make_directory();
existing = this.test.data_dir.get_child("account_02");
existing.make_directory();
this.test.new_orphan_account.begin(
Geary.ServiceProvider.OTHER, this.primary_mailbox, null,
this.async_completion
);
Geary.AccountInformation account =
this.test.new_orphan_account.end(async_result());
assert(account.id == "account_03");
}
public void account_config_v1() throws GLib.Error {
this.account.label = "test-name";
this.account.ordinal = 100;
this.account.prefetch_period_days = 42;
this.account.save_drafts = false;
this.account.save_sent = false;
this.account.signature = "blarg";
this.account.use_signature = false;
Geary.ConfigFile file =
new Geary.ConfigFile(this.tmp.get_child("config.ini"));
Accounts.AccountConfigV1 config = new Accounts.AccountConfigV1(false);
config.save(this.account, file);
Geary.AccountInformation copy = config.load(
file, TEST_ID, this.mediator, null, null
);
assert_true(this.account.equal_to(copy));
}
public void account_config_legacy() throws GLib.Error {
this.account.label = "test-name";
this.account.ordinal = 100;
this.account.prefetch_period_days = 42;
this.account.save_drafts = false;
this.account.save_sent = false;
this.account.signature = "blarg";
this.account.use_signature = false;
Accounts.AccountConfigLegacy config =
new Accounts.AccountConfigLegacy();
Geary.ConfigFile file =
new Geary.ConfigFile(this.tmp.get_child("config.ini"));
config.save(this.account, file);
Geary.AccountInformation copy = config.load(
file, TEST_ID, this.mediator, null, null
);
assert_true(this.account.equal_to(copy));
}
public void service_config_v1() throws GLib.Error {
// take a copy before updating the service info so we don't
// also copy the test data
Geary.AccountInformation copy = new Geary.AccountInformation.copy(
this.account
);
this.account.outgoing.host = "blarg";
this.account.outgoing.port = 1234;
this.account.outgoing.transport_security = Geary.TlsNegotiationMethod.NONE;
this.account.outgoing.credentials = new Geary.Credentials(
Geary.Credentials.Method.PASSWORD, "testerson"
);
this.account.outgoing.credentials_requirement =
Geary.Credentials.Requirement.NONE;
Accounts.ServiceConfigV1 config = new Accounts.ServiceConfigV1();
Geary.ConfigFile file =
new Geary.ConfigFile(this.tmp.get_child("config.ini"));
config.save(this.account, this.account.outgoing, file);
config.load(file, copy, copy.outgoing);
assert_true(this.account.outgoing.equal_to(copy.outgoing));
}
public void service_config_legacy() throws GLib.Error {
// take a copy before updating the service info so we don't
// also copy the test data
Geary.AccountInformation copy = new Geary.AccountInformation.copy(
this.account
);
this.account.outgoing.host = "blarg";
this.account.outgoing.port = 1234;
this.account.outgoing.transport_security = Geary.TlsNegotiationMethod.NONE;
this.account.outgoing.credentials = new Geary.Credentials(
Geary.Credentials.Method.PASSWORD, "testerson"
);
this.account.outgoing.credentials_requirement =
Geary.Credentials.Requirement.NONE;
Accounts.ServiceConfigLegacy config = new Accounts.ServiceConfigLegacy();
Geary.ConfigFile file =
new Geary.ConfigFile(this.tmp.get_child("config.ini"));
config.save(this.account, this.account.outgoing, file);
config.load(file, copy, copy.outgoing);
assert_true(this.account.outgoing.equal_to(copy.outgoing));
}
private void delete(File parent) throws GLib.Error {
FileInfo info = parent.query_info(
"standard::*",
FileQueryInfoFlags.NOFOLLOW_SYMLINKS
);
if (info.get_file_type () == FileType.DIRECTORY) {
FileEnumerator enumerator = parent.enumerate_children(
"standard::*",
FileQueryInfoFlags.NOFOLLOW_SYMLINKS
);
info = null;
while (((info = enumerator.next_file()) != null)) {
@delete(parent.get_child(info.get_name()));
}
}
parent.delete();
}
}