geary/test/engine/common/common-contact-harvester-test.vala
Michael Gratton 2030b2dec7 test: Break out engine mock objects into their own name-space
Engine mocks don't need to be in the `Geary` namespace, and including
them there makes it difficult to use them in client tests, so put them
all in their own name-space and corresponding directory.
2020-08-13 19:51:33 +10:00

180 lines
6.4 KiB
Vala

/*
* Copyright 2019 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.ContactHarvesterImplTest : TestCase {
private Mock.ContactStore? store = null;
private Email? email = null;
private RFC822.MailboxAddress test_address = null;
private RFC822.MailboxAddress sender_address = null;
private Gee.Collection<RFC822.MailboxAddress> senders = null;
public ContactHarvesterImplTest() {
base("Geary.ContactHarvesterImplTest");
add_test("whitelisted_folder_type", whitelisted_folder_type);
add_test("blacklisted_folder_type", blacklisted_folder_type);
add_test("seen_priority", seen_priority);
add_test("sent_priority", sent_priority);
add_test("received_priority", received_priority);
}
public override void set_up() throws GLib.Error {
this.store = new Mock.ContactStore();
this.email = new Email(
new ImapDB.EmailIdentifier.no_message_id(new Imap.UID(1))
);
// Ensure the minimum required email flags are set
this.email.set_originators(null, null, null);
this.email.set_receivers(null, null, null);
this.test_address = new RFC822.MailboxAddress(
"Test", "test@example.com"
);
this.sender_address = new RFC822.MailboxAddress(
"Sender", "sender@example.com"
);
this.senders = Collection.single(this.sender_address);
}
public override void tear_down() throws GLib.Error {
this.store = null;
this.email = null;
this.test_address = null;
this.sender_address = null;
this.senders = null;
}
public void whitelisted_folder_type() throws GLib.Error {
ContactHarvesterImpl whitelisted = new ContactHarvesterImpl(
this.store,
INBOX,
this.senders
);
this.store.expect_call("get_by_rfc822");
ValaUnit.ExpectedCall update_call = this.store.expect_call("update_contacts");
this.email.set_receivers(
new RFC822.MailboxAddresses.single(this.test_address), null, null
);
whitelisted.harvest_from_email.begin(
Collection.single(this.email), null, this.async_completion);
whitelisted.harvest_from_email.end(async_result());
this.store.assert_expectations();
Gee.Collection<Contact> contacts = update_call.called_arg<Gee.Collection<Contact>>(0);
assert_collection(contacts).size(1);
Contact? created = Collection.first(contacts) as Contact;
assert_non_null(created, "contacts contents");
assert_equal(created.real_name, "Test");
assert_equal(created.email, "test@example.com");
assert_equal(created.normalized_email, "test@example.com");
}
public void blacklisted_folder_type() throws GLib.Error {
ContactHarvesterImpl whitelisted = new ContactHarvesterImpl(
this.store,
JUNK,
this.senders
);
this.email.set_receivers(
new RFC822.MailboxAddresses.single(this.test_address), null, null
);
whitelisted.harvest_from_email.begin(
Collection.single(this.email), null, this.async_completion);
whitelisted.harvest_from_email.end(async_result());
this.store.assert_expectations();
}
public void seen_priority() throws GLib.Error {
ContactHarvesterImpl whitelisted = new ContactHarvesterImpl(
this.store,
INBOX,
this.senders
);
this.store.expect_call("get_by_rfc822");
ValaUnit.ExpectedCall update_call = this.store.expect_call("update_contacts");
this.email.set_receivers(
new RFC822.MailboxAddresses.single(this.test_address), null, null
);
whitelisted.harvest_from_email.begin(
Collection.single(this.email), null, this.async_completion);
whitelisted.harvest_from_email.end(async_result());
this.store.assert_expectations();
Gee.Collection<Contact> contacts = update_call.called_arg<Gee.Collection<Contact>>(0);
Contact? created = Collection.first(contacts) as Contact;
assert_equal<int?>(
created.highest_importance,
Contact.Importance.SEEN,
"call contact importance"
);
}
public void sent_priority() throws GLib.Error {
ContactHarvesterImpl whitelisted = new ContactHarvesterImpl(
this.store,
SENT,
this.senders
);
this.store.expect_call("get_by_rfc822");
ValaUnit.ExpectedCall update_call = this.store.expect_call("update_contacts");
this.email.set_receivers(
new RFC822.MailboxAddresses.single(this.test_address), null, null
);
whitelisted.harvest_from_email.begin(
Collection.single(this.email), null, this.async_completion);
whitelisted.harvest_from_email.end(async_result());
this.store.assert_expectations();
Gee.Collection<Contact> contacts = update_call.called_arg<Gee.Collection<Contact>>(0);
Contact? created = Collection.first(contacts) as Contact;
assert_equal<int?>(
created.highest_importance,
Contact.Importance.SENT_TO,
"call contact importance"
);
}
public void received_priority() throws GLib.Error {
ContactHarvesterImpl whitelisted = new ContactHarvesterImpl(
this.store,
SENT,
this.senders
);
this.store.expect_call("get_by_rfc822");
ValaUnit.ExpectedCall update_call = this.store.expect_call("update_contacts");
this.email.set_receivers(
new RFC822.MailboxAddresses.single(this.sender_address), null, null
);
whitelisted.harvest_from_email.begin(
Collection.single(this.email), null, this.async_completion);
whitelisted.harvest_from_email.end(async_result());
this.store.assert_expectations();
Gee.Collection<Contact> contacts = update_call.called_arg<Gee.Collection<Contact>>(0);
Contact? created = Collection.first(contacts) as Contact;
assert_equal<int?>(
created.highest_importance,
Contact.Importance.RECEIVED_FROM,
"call contact importance"
);
}
}