* test/engine/api/geary-email-properties-test.vala: Add new mock EmailProperties object. * test/engine/app/app-conversation-test.vala (ConversationTest): Set email sent and received dates to suppress warnings adding them to Conversation instances. * test/engine/app/app-conversation-set-test.vala (ConversationSetTest): Set email sent and received dates to suppress warnings adding them to Conversation instances, handle both casees when merging two conversations, that the first was merged to the second and vice versa.
160 lines
5 KiB
Vala
160 lines
5 KiB
Vala
/*
|
|
* Copyright 2017 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 Geary.App.ConversationTest : Gee.TestCase {
|
|
|
|
|
|
Conversation? test = null;
|
|
Folder? base_folder = null;
|
|
|
|
public ConversationTest() {
|
|
base("Geary.App.ConversationTest");
|
|
add_test("add_basic", add_basic);
|
|
add_test("add_duplicate", add_duplicate);
|
|
add_test("add_multipath", add_multipath);
|
|
add_test("remove_basic", remove_basic);
|
|
add_test("remove_nonexistent", remove_nonexistent);
|
|
}
|
|
|
|
public override void set_up() {
|
|
this.base_folder = new MockFolder(
|
|
null,
|
|
null,
|
|
new MockFolderRoot("test"),
|
|
SpecialFolderType.NONE,
|
|
null
|
|
);
|
|
this.test = new Conversation(this.base_folder);
|
|
}
|
|
|
|
public void add_basic() {
|
|
Geary.Email e1 = setup_email(1);
|
|
Geary.Email e2 = setup_email(2);
|
|
uint appended = 0;
|
|
this.test.appended.connect(() => {
|
|
appended++;
|
|
});
|
|
|
|
assert(this.test.add(e1, singleton(this.base_folder.path)) == true);
|
|
assert(this.test.is_in_base_folder(e1.id) == true);
|
|
assert(this.test.get_folder_count(e1.id) == 1);
|
|
assert(appended == 1);
|
|
assert(this.test.get_count() == 1);
|
|
|
|
assert(this.test.add(e2, singleton(this.base_folder.path)) == true);
|
|
assert(this.test.is_in_base_folder(e2.id) == true);
|
|
assert(this.test.get_folder_count(e2.id) == 1);
|
|
assert(appended == 2);
|
|
assert(this.test.get_count() == 2);
|
|
}
|
|
|
|
public void add_duplicate() {
|
|
Geary.Email e1 = setup_email(1);
|
|
uint appended = 0;
|
|
this.test.appended.connect(() => {
|
|
appended++;
|
|
});
|
|
|
|
assert(this.test.add(e1, singleton(this.base_folder.path)) == true);
|
|
assert(appended == 1);
|
|
assert(this.test.get_count() == 1);
|
|
|
|
assert(this.test.add(e1, singleton(this.base_folder.path)) == false);
|
|
assert(appended == 1);
|
|
assert(this.test.get_count() == 1);
|
|
}
|
|
|
|
public void add_multipath() {
|
|
Geary.Email e1 = setup_email(1);
|
|
this.test.add(e1, singleton(this.base_folder.path));
|
|
|
|
Geary.Email e2 = setup_email(2);
|
|
this.test.add(e2, singleton(this.base_folder.path));
|
|
|
|
FolderRoot other_path = new MockFolderRoot("other");
|
|
Gee.LinkedList<FolderRoot> other_paths = new Gee.LinkedList<FolderRoot>();
|
|
other_paths.add(other_path);
|
|
|
|
assert(this.test.add(e1, other_paths) == false);
|
|
assert(this.test.is_in_base_folder(e1.id) == true);
|
|
assert(this.test.get_folder_count(e1.id) == 2);
|
|
|
|
assert(this.test.is_in_base_folder(e2.id) == true);
|
|
assert(this.test.get_folder_count(e2.id) == 1);
|
|
|
|
this.test.remove_path(e1.id, other_path);
|
|
assert(this.test.is_in_base_folder(e1.id) == true);
|
|
assert(this.test.get_folder_count(e1.id) == 1);
|
|
}
|
|
|
|
public void remove_basic() {
|
|
Geary.Email e1 = setup_email(1);
|
|
this.test.add(e1, singleton(this.base_folder.path));
|
|
|
|
Geary.Email e2 = setup_email(2);
|
|
this.test.add(e2, singleton(this.base_folder.path));
|
|
|
|
uint trimmed = 0;
|
|
this.test.trimmed.connect(() => {
|
|
trimmed++;
|
|
});
|
|
|
|
Gee.Set<RFC822.MessageID>? removed = this.test.remove(e1);
|
|
assert(removed != null);
|
|
assert(removed.size == 1);
|
|
assert(removed.contains(e1.message_id));
|
|
assert(trimmed == 1);
|
|
assert(this.test.get_count() == 1);
|
|
|
|
removed = this.test.remove(e2);
|
|
assert(removed != null);
|
|
assert(removed.size == 1);
|
|
assert(removed.contains(e2.message_id));
|
|
assert(trimmed == 2);
|
|
assert(this.test.get_count() == 0);
|
|
}
|
|
|
|
public void remove_nonexistent() {
|
|
Geary.Email e1 = setup_email(1);
|
|
Geary.Email e2 = setup_email(2);
|
|
|
|
uint trimmed = 0;
|
|
this.test.trimmed.connect(() => {
|
|
trimmed++;
|
|
});
|
|
|
|
assert(this.test.remove(e2) == null);
|
|
assert(trimmed == 0);
|
|
assert(this.test.get_count() == 0);
|
|
|
|
this.test.add(e1, singleton(this.base_folder.path));
|
|
|
|
assert(this.test.remove(e2) == null);
|
|
assert(trimmed == 0);
|
|
assert(this.test.get_count() == 1);
|
|
}
|
|
|
|
private Gee.Collection<E> singleton<E>(E element) {
|
|
Gee.LinkedList<E> collection = new Gee.LinkedList<E>();
|
|
collection.add(element);
|
|
return collection;
|
|
}
|
|
|
|
|
|
private Email setup_email(int id) {
|
|
Email email = new Email(new MockEmailIdentifer(id));
|
|
DateTime now = new DateTime.now_local();
|
|
Geary.RFC822.MessageID mid = new Geary.RFC822.MessageID(
|
|
"test%d@localhost".printf(id)
|
|
);
|
|
email.set_full_references(mid, null, null);
|
|
email.set_email_properties(new MockEmailProperties(now));
|
|
email.set_send_date(new Geary.RFC822.Date.from_date_time(now));
|
|
return email;
|
|
}
|
|
|
|
}
|