Ported ECalClient tests to use ETestServerFixture framework
[platform/upstream/evolution-data-server.git] / tests / libecal / client / test-client-create-object.c
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2
3 #include <stdlib.h>
4 #include <libecal/libecal.h>
5 #include <libical/ical.h>
6
7 #include "e-test-server-utils.h"
8
9 static ETestServerClosure cal_closure =
10         { E_TEST_SERVER_CALENDAR, NULL, E_CAL_CLIENT_SOURCE_TYPE_EVENTS };
11
12 static void
13 test_icalcomps (icalcomponent *icalcomp1,
14                 icalcomponent *icalcomp2)
15 {
16         struct icaltimetype t1, t2;
17
18         if (!icalcomp2)
19                 g_error ("Failure: get object returned NULL");
20
21         g_assert_cmpstr (icalcomponent_get_uid (icalcomp1), ==, icalcomponent_get_uid (icalcomp2));
22         g_assert_cmpstr (icalcomponent_get_summary (icalcomp1), ==, icalcomponent_get_summary (icalcomp2));
23
24         t1 = icalcomponent_get_dtstart (icalcomp1);
25         t2 = icalcomponent_get_dtstart (icalcomp2);
26
27         if (icaltime_compare (t1, t2) != 0)
28                 g_error ("Failure: dtend doesn't match, expected '%s', got '%s'\n",
29                          icaltime_as_ical_string (t1), icaltime_as_ical_string (t2));
30
31         t1 = icalcomponent_get_dtend (icalcomp1);
32         t2 = icalcomponent_get_dtend (icalcomp2);
33
34         if (icaltime_compare (t1, t2) != 0)
35                 g_error ("Failure: dtend doesn't match, expected '%s', got '%s'\n",
36                          icaltime_as_ical_string (t1), icaltime_as_ical_string (t2));
37 }
38
39 static void
40 test_create_object_sync (ETestServerFixture *fixture,
41                          gconstpointer       user_data)
42 {
43         ECalClient *cal_client;
44         icalcomponent *icalcomp;
45         icalcomponent *icalcomp2 = NULL, *clone;
46         struct icaltimetype now;
47         GError *error = NULL;
48         GSList *ecalcomps = NULL;
49         gchar *uid = NULL;
50
51         cal_client = E_TEST_SERVER_UTILS_SERVICE (fixture, ECalClient);
52
53         /* Build up new component */
54         now = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
55         icalcomp = icalcomponent_new (ICAL_VEVENT_COMPONENT);
56         icalcomponent_set_summary (icalcomp, "Test event summary");
57         icalcomponent_set_dtstart (icalcomp, now);
58         icalcomponent_set_dtend   (icalcomp, icaltime_from_timet (icaltime_as_timet (now) + 60 * 60 * 60, 0));
59
60         if (!e_cal_client_create_object_sync (cal_client, icalcomp, &uid, NULL, &error))
61                 g_error ("create object sync: %s", error->message);
62
63         if (!e_cal_client_get_object_sync (cal_client, uid, NULL, &icalcomp2, NULL, &error))
64                 g_error ("get object sync: %s", error->message);
65
66         clone = icalcomponent_new_clone (icalcomp);
67         icalcomponent_set_uid (clone, uid);
68
69         test_icalcomps (clone, icalcomp2);
70
71         icalcomponent_free (icalcomp2);
72
73         if (!e_cal_client_get_objects_for_uid_sync (cal_client, uid, &ecalcomps, NULL, &error))
74                 g_error ("get objects for uid sync: %s", error->message);
75
76         if (g_slist_length (ecalcomps) != 1)
77                 g_error ("Failure: expected 1 component, bug got %d", g_slist_length (ecalcomps));
78         else {
79                 ECalComponent *ecalcomp = ecalcomps->data;
80
81                 test_icalcomps (clone, e_cal_component_get_icalcomponent (ecalcomp));
82         }
83         e_cal_client_free_ecalcomp_slist (ecalcomps);
84
85         icalcomponent_free (clone);
86         g_free (uid);
87         icalcomponent_free (icalcomp);
88 }
89
90
91 typedef struct {
92         icalcomponent *icalcomp;
93         icalcomponent *clone;
94         GMainLoop *loop;
95 } AsyncData;
96
97 static void
98 async_read2_result_ready (GObject *source_object,
99                           GAsyncResult *result,
100                           gpointer user_data)
101 {
102         ECalClient *cal_client;
103         GError *error = NULL;
104         AsyncData *data = (AsyncData *)user_data;
105         icalcomponent *icalcomp1 = data->clone;
106         GSList *ecalcomps = NULL;
107
108         g_return_if_fail (icalcomp1 != NULL);
109
110         cal_client = E_CAL_CLIENT (source_object);
111
112         if (!e_cal_client_get_objects_for_uid_finish (cal_client, result, &ecalcomps, &error))
113                 g_error ("get objects for uid finish: %s", error->message);
114
115         if (g_slist_length (ecalcomps) != 1)
116                 g_error ("Failure: expected 1 component, bug got %d", g_slist_length (ecalcomps));
117         else {
118                 ECalComponent *ecalcomp = ecalcomps->data;
119
120                 test_icalcomps (icalcomp1, e_cal_component_get_icalcomponent (ecalcomp));
121         }
122         e_cal_client_free_ecalcomp_slist (ecalcomps);
123
124         icalcomponent_free (icalcomp1);
125         g_main_loop_quit (data->loop);
126 }
127
128
129 static void
130 async_read_result_ready (GObject *source_object,
131                          GAsyncResult *result,
132                          gpointer user_data)
133 {
134         ECalClient *cal_client;
135         GError *error = NULL;
136         AsyncData *data = (AsyncData *)user_data;
137         icalcomponent *icalcomp1 = data->clone, *icalcomp2 = NULL;
138
139         g_return_if_fail (icalcomp1 != NULL);
140
141         cal_client = E_CAL_CLIENT (source_object);
142         if (!e_cal_client_get_object_finish (cal_client, result, &icalcomp2, &error))
143                 g_error ("get object finish: %s", error->message);
144
145         test_icalcomps (icalcomp1, icalcomp2);
146         icalcomponent_free (icalcomp2);
147
148         e_cal_client_get_objects_for_uid (cal_client,
149                                           icalcomponent_get_uid (icalcomp1), NULL,
150                                           async_read2_result_ready, data);
151 }
152
153 static void
154 async_write_result_ready (GObject *source_object,
155                           GAsyncResult *result,
156                           gpointer user_data)
157 {
158         ECalClient *cal_client;
159         GError *error = NULL;
160         gchar *uid = NULL;
161         AsyncData *data = (AsyncData *)user_data;
162         icalcomponent *clone, *icalcomp = data->icalcomp;
163
164         g_return_if_fail (icalcomp != NULL);
165
166         cal_client = E_CAL_CLIENT (source_object);
167
168         if (!e_cal_client_create_object_finish (cal_client, result, &uid, &error))
169                 g_error ("create object finish: %s", error->message);
170
171         clone = icalcomponent_new_clone (icalcomp);
172         icalcomponent_set_uid (clone, uid);
173
174         data->clone = clone;
175         e_cal_client_get_object (cal_client, uid, NULL, NULL, async_read_result_ready, data);
176         g_free (uid);
177 }
178
179 static void
180 test_create_object_async (ETestServerFixture *fixture,
181                           gconstpointer       user_data)
182 {
183         ECalClient *cal_client;
184         icalcomponent *icalcomp;
185         struct icaltimetype now;
186         AsyncData data = { 0, };
187
188         cal_client = E_TEST_SERVER_UTILS_SERVICE (fixture, ECalClient);
189
190         /* Build up new component */
191         now = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
192         icalcomp = icalcomponent_new (ICAL_VEVENT_COMPONENT);
193         icalcomponent_set_summary (icalcomp, "Test event summary");
194         icalcomponent_set_dtstart (icalcomp, now);
195         icalcomponent_set_dtend   (icalcomp, icaltime_from_timet (icaltime_as_timet (now) + 60 * 60 * 60, 0));
196
197         data.icalcomp = icalcomp;
198         data.loop = fixture->loop;
199         e_cal_client_create_object (cal_client, icalcomp, NULL, async_write_result_ready, &data);
200         g_main_loop_run (fixture->loop);
201
202         icalcomponent_free (icalcomp);
203 }
204
205 gint
206 main (gint argc,
207       gchar **argv)
208 {
209 #if !GLIB_CHECK_VERSION (2, 35, 1)
210         g_type_init ();
211 #endif
212         g_test_init (&argc, &argv, NULL);
213
214         g_test_add ("/ECalClient/CreateObject/Sync", ETestServerFixture, &cal_closure,
215                     e_test_server_utils_setup, test_create_object_sync, e_test_server_utils_teardown);
216         g_test_add ("/ECalClient/CreateObject/Async", ETestServerFixture, &cal_closure,
217                     e_test_server_utils_setup, test_create_object_async, e_test_server_utils_teardown);
218
219         return e_test_server_utils_run ();
220 }