/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include #include "ebook-test-utils.h" #include "e-test-server-utils.h" static ETestServerClosure book_closure = { E_TEST_SERVER_DEPRECATED_ADDRESS_BOOK, NULL, 0 }; #define EMAIL_ADD "foo@bar.com" /* Global data */ static EBook *book = NULL; static gchar *uid = NULL; static void verify_precommit_and_prepare_contact (EContact *contact) { EVCardAttribute *attr; /* ensure there is no email address to begin with, then add one */ g_assert_true (!e_vcard_get_attribute (E_VCARD (contact), EVC_EMAIL)); attr = e_vcard_attribute_new (NULL, EVC_EMAIL); e_vcard_add_attribute_with_value (E_VCARD (contact), attr, EMAIL_ADD); } static void verify_commit (EContact *contact) { EVCardAttribute *attr; gchar *email_value; attr = e_vcard_get_attribute (E_VCARD (contact), EVC_EMAIL); g_assert_true (attr != NULL); g_assert_true (e_vcard_attribute_is_single_valued (attr)); email_value = e_vcard_attribute_get_value (attr); g_assert_true (!g_strcmp0 (email_value, EMAIL_ADD)); } static gboolean commit_verify_cb (EBookTestClosure *closure) { EContact *contact; contact = ebook_test_utils_book_get_contact (book, uid); verify_commit (contact); g_main_loop_quit ((GMainLoop *) (closure->user_data)); return FALSE; } static void test_commit_contact_sync (ETestServerFixture *fixture, gconstpointer user_data) { EContact *contact; book = E_TEST_SERVER_UTILS_SERVICE (fixture, EBook); uid = ebook_test_utils_book_add_contact_from_test_case_verify (book, "name-only", &contact); verify_precommit_and_prepare_contact (contact); ebook_test_utils_book_commit_contact (book, contact); verify_commit (contact); test_print ("successfully committed changes to contact contact '%s'\n", uid); g_object_unref (contact); g_free (uid); contact = NULL; uid = NULL; } static void test_commit_contact_async (ETestServerFixture *fixture, gconstpointer user_data) { EContact *contact; book = E_TEST_SERVER_UTILS_SERVICE (fixture, EBook); uid = ebook_test_utils_book_add_contact_from_test_case_verify (book, "name-only", &contact); verify_precommit_and_prepare_contact (contact); ebook_test_utils_book_async_commit_contact ( book, contact, (GSourceFunc) commit_verify_cb, fixture->loop); g_main_loop_run (fixture->loop); g_object_unref (contact); g_free (uid); contact = NULL; uid = NULL; } gint main (gint argc, gchar **argv) { g_test_init (&argc, &argv, NULL); g_test_bug_base ("https://gitlab.gnome.org/GNOME/evolution-data-server/"); ebook_test_utils_read_args (argc, argv); g_test_add ( "/EBook/CommitContact/Sync", ETestServerFixture, &book_closure, e_test_server_utils_setup, test_commit_contact_sync, e_test_server_utils_teardown); g_test_add ( "/EBook/CommitContact/Async", ETestServerFixture, &book_closure, e_test_server_utils_setup, test_commit_contact_async, e_test_server_utils_teardown); return e_test_server_utils_run (argc, argv); }