/* -*- 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 "client-test-utils.h" #include "e-test-server-utils.h" static ETestServerClosure book_closure_sync = { E_TEST_SERVER_ADDRESS_BOOK, NULL, 0, FALSE, NULL, FALSE }; static ETestServerClosure book_closure_async = { E_TEST_SERVER_ADDRESS_BOOK, NULL, 0, FALSE, NULL, TRUE }; static void check_removed (EBookClient *book_client, const GSList *uids) { g_return_if_fail (book_client != NULL); g_return_if_fail (uids != NULL); while (uids) { GError *error = NULL; EContact *contact = NULL; if (!e_book_client_get_contact_sync (book_client, uids->data, &contact, NULL, &error) && g_error_matches (error, E_BOOK_CLIENT_ERROR, E_BOOK_CLIENT_ERROR_CONTACT_NOT_FOUND)) { g_clear_error (&error); } else g_error ("fail with get contact on removed contact: %s", error->message); uids = uids->next; } } static gboolean fill_book_client (EBookClient *book_client, GSList **uids) { EContact *contact; g_return_val_if_fail (book_client != NULL, FALSE); g_return_val_if_fail (uids != NULL, FALSE); *uids = NULL; if (!add_contact_from_test_case_verify (book_client, "simple-1", &contact)) return FALSE; *uids = g_slist_append (*uids, e_contact_get (contact, E_CONTACT_UID)); g_object_unref (contact); if (!add_contact_from_test_case_verify (book_client, "simple-2", &contact)) return FALSE; *uids = g_slist_append (*uids, e_contact_get (contact, E_CONTACT_UID)); g_object_unref (contact); return TRUE; } static void test_remove_contacts_sync (ETestServerFixture *fixture, gconstpointer user_data) { EBookClient *book_client; GError *error = NULL; GSList *uids = NULL; book_client = E_TEST_SERVER_UTILS_SERVICE (fixture, EBookClient); if (!fill_book_client (book_client, &uids)) g_error ("Failed to add contacts"); if (!e_book_client_remove_contacts_sync (book_client, uids, E_BOOK_OPERATION_FLAG_NONE, NULL, &error)) g_error ("remove contact sync: %s", error->message); /* This will assert they are actually removed */ check_removed (book_client, uids); g_slist_foreach (uids, (GFunc) g_free, NULL); g_slist_free (uids); } typedef struct { GSList *uids; GMainLoop *loop; } RemoveData; static void remove_contacts_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { GError *error = NULL; RemoveData *data = (RemoveData *) user_data; if (!e_book_client_remove_contacts_finish (E_BOOK_CLIENT (source_object), result, &error)) g_error ("remove contacts finish: %s", error->message); check_removed (E_BOOK_CLIENT (source_object), data->uids); g_main_loop_quit (data->loop); } static void test_remove_contacts_async (ETestServerFixture *fixture, gconstpointer user_data) { EBookClient *book_client; GSList *uids = NULL; RemoveData data; book_client = E_TEST_SERVER_UTILS_SERVICE (fixture, EBookClient); if (!fill_book_client (book_client, &uids)) g_error ("Failed to add contacts"); data.uids = uids; data.loop = fixture->loop; e_book_client_remove_contacts (book_client, uids, E_BOOK_OPERATION_FLAG_NONE, NULL, remove_contacts_cb, &data); g_main_loop_run (fixture->loop); g_slist_foreach (uids, (GFunc) g_free, NULL); g_slist_free (uids); } gint main (gint argc, gchar **argv) { g_test_init (&argc, &argv, NULL); g_test_bug_base ("https://gitlab.gnome.org/GNOME/evolution-data-server/"); client_test_utils_read_args (argc, argv); g_test_add ( "/EBookClient/RemoveContacts/Sync", ETestServerFixture, &book_closure_sync, e_test_server_utils_setup, test_remove_contacts_sync, e_test_server_utils_teardown); g_test_add ( "/EBookClient/RemoveContacts/Async", ETestServerFixture, &book_closure_async, e_test_server_utils_setup, test_remove_contacts_async, e_test_server_utils_teardown); return e_test_server_utils_run (argc, argv); }