Added new user api unit test for the new fields.
[libgcal.git] / utests / utest_contact.c
blobd884c5740d25b77cd840fef2dd8ca49a0e464c05
1 /*
2 * @file utest_contact.h
3 * @author Adenilson Cavalcanti da Silva <adenilson.silva@indt.org.br>
4 * @date Started on May 25 2008
6 * @brief Module for google contacts utests.
7 */
9 #include "utest_contact.h"
10 #include "gcal.h"
11 #include "gcont.h"
12 #include "gcontact.h"
13 #include "gcal_parser.h"
14 #include <string.h>
15 #include <stdio.h>
16 #include <unistd.h>
18 static struct gcal_resource *ptr_gcal = NULL;
20 static void setup(void)
22 /* here goes any common data allocation */
23 ptr_gcal = gcal_construct(GCONTACT);
26 static void teardown(void)
28 /* and here we clean up */
29 gcal_destroy(ptr_gcal);
33 START_TEST (test_contact_dump)
35 int result;
36 result = gcal_get_authentication(ptr_gcal, "gcal4tester", "66libgcal");
37 if (result)
38 fail_if(1, "Authentication should work");
40 result = gcal_dump(ptr_gcal, "GData-Version: 3.0");
41 fail_if(result != 0, "Failed dumping contacts");
44 END_TEST
47 START_TEST (test_contact_authenticate)
50 int result;
52 result = gcal_get_authentication(ptr_gcal, "gcal4tester", "66libgcal");
53 fail_if(result != 0, "Authentication should work");
55 result = gcal_get_authentication(ptr_gcal, "gcal4tester", "fail_fail");
56 fail_if(result == 0, "Authentication must fail");
59 END_TEST
62 START_TEST (test_contact_entries)
64 /* obs: this test is a copy of utest_gcal.c:test_gcal_event */
65 int result, i;
66 char *contacts_emails[] = { "gcal4tester@gmail.com",
67 "gcalntester@gmail.com",
68 "cavalcantii@gmail.com" };
69 char *ptr;
70 int contacts_count = 3;
72 result = gcal_get_authentication(ptr_gcal, "gcal4tester", "66libgcal");
73 if (result)
74 fail_if(1, "Authentication should work");
76 result = gcal_dump(ptr_gcal, "GData-Version: 3.0");
77 fail_if(result != 0, "Failed dumping contacts");
79 result = gcal_entry_number(ptr_gcal);
80 fail_if(result != 3, "Got wrong number of contacts");
82 for (i = 0; i < contacts_count; ++i)
83 if (!(ptr = strstr(gcal_access_buffer(ptr_gcal),
84 contacts_emails[i])))
85 fail_if(1, "Can't find contact in atom stream. "
86 "Position = %i\n", i);
90 END_TEST
93 START_TEST (test_contact_extract)
95 int result;
96 size_t count, i, j;
97 struct gcal_contact *contacts;
98 char *contacts_email[] = { "gcal4tester@gmail.com",
99 "gcalntester@gmail.com",
100 "cavalcantii@gmail.com" };
101 char *contacts_name[] = { "", /* its valid not having a name */
102 "gcalntester",
103 "Adenilson Cavalcanti" };
104 char *temp = (char *)malloc(255);
105 size_t contacts_count = 3, found_count = 0;
107 result = gcal_get_authentication(ptr_gcal, "gcal4tester", "66libgcal");
108 fail_if(result == -1, "Authentication should work");
110 result = gcal_dump(ptr_gcal, "GData-Version: 3.0");
111 fail_if(result != 0, "Failed dumping contacts");
113 contacts = gcal_get_all_contacts(ptr_gcal, &count);
114 fail_if(contacts == NULL, "Failed extracting the contacts vector!");
116 for (i = 0; i < contacts_count; ++i) {
117 for (j = 0; j < count; ++j) {
118 if(contacts[i].structured_name)
119 temp = gcal_contact_get_structured_entry(contacts[i].structured_name,0,1,"fullName");
120 if(!temp)
121 temp = "";
122 if ((!(strcmp(contacts[i].emails_field[0],
123 contacts_email[j]))) &&
124 (!(strcmp(temp,
125 contacts_name[j]))))
126 ++found_count;
130 fail_if(found_count != contacts_count, "Cannot find all 3 contacts!");
131 gcal_destroy_contacts(contacts, count);
133 END_TEST
136 START_TEST (test_contact_xml)
138 int result, length, address_nr, address_count;
139 struct gcal_contact contact;
140 char *xml = NULL, *ptr;
142 contact.common.title = NULL;
144 contact.structured_name=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
145 contact.structured_name->field_typenr = 0;
146 contact.structured_name->field_key = malloc(sizeof(char*));
147 contact.structured_name->field_key = NULL;
148 contact.structured_name->field_value = malloc(sizeof(char*));
149 contact.structured_name->field_value = NULL;
150 contact.structured_name_nr = 1;
151 gcal_contact_set_structured_entry(contact.structured_name,0,1,"givenName","John");
152 gcal_contact_set_structured_entry(contact.structured_name,0,1,"additionalName","W.");
153 gcal_contact_set_structured_entry(contact.structured_name,0,1,"familyName","Doe");
154 gcal_contact_set_structured_entry(contact.structured_name,0,1,"namePrefix","Dr.");
155 gcal_contact_set_structured_entry(contact.structured_name,0,1,"fullName","Dr. John W. Doe");
157 contact.emails_field = malloc(sizeof(char*));
158 contact.emails_field[0] = "john.doe@foo.bar.com";
159 contact.emails_nr = 1;
160 /* TODO: set etag as NULL in all utests here */
161 contact.common.id = contact.common.updated = contact.common.edit_uri = contact.common.etag = NULL;
162 contact.photo = contact.photo_data = NULL;
163 /* extra fields */
164 contact.nickname = "The Fox";
165 contact.content = "A very interesting person";
166 contact.org_name = "Foo software";
167 contact.org_title = "Software engineer";
168 contact.occupation = "Programmer";
169 contact.phone_numbers_field = malloc(sizeof(char*));
170 contact.phone_numbers_field[0] = "+9977554422119900";
171 contact.emails_type = malloc(sizeof(char*));
172 contact.emails_type[0] = "Home";
173 contact.phone_numbers_nr = 1;
174 contact.phone_numbers_type = malloc(sizeof(char*));
175 contact.phone_numbers_type[0] = "Home";
176 contact.groupMembership = malloc(sizeof(char*));
177 contact.groupMembership[0] = "http://www.google.com/m8/feeds/groups/gcal4tester%40gmail.com/base/6";
178 contact.groupMembership_nr = 1;
179 contact.birthday = "1980-10-10";
180 contact.im_address = malloc(sizeof(char*));
181 contact.im_address[0] = "john_skype";
182 contact.im_protocol = malloc(sizeof(char*));
183 contact.im_protocol[0] = "SKYPE";
184 contact.im_type = malloc(sizeof(char*));
185 contact.im_type[0] = "home";
186 contact.im_nr = 1;
187 contact.homepage = "www.homegage.com";
188 contact.blog = "myblog.homegage.com";
189 contact.post_address = NULL;
190 contact.structured_address=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
191 contact.structured_address->field_typenr = 0;
192 contact.structured_address->field_key = malloc(sizeof(char*));
193 contact.structured_address->field_key = NULL;
194 contact.structured_address->field_value = malloc(sizeof(char*));
195 contact.structured_address->field_value = NULL;
196 contact.structured_address_nr = 0;
197 contact.structured_address_type = (char**)malloc(sizeof(char*));
198 address_nr = gcal_contact_set_structured_address_nr(&contact,A_HOME);
199 address_count = contact.structured_address_nr;
200 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"street","Unknown Av St, n 69");
201 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"pobox","PO BOX 123 456");
202 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"city","Dirty Old Town");
203 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"region","Somewhere");
204 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"postcode","ABC 12345-D");
205 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"country","Madagascar");
206 address_nr = gcal_contact_set_structured_address_nr(&contact,A_WORK);
207 address_count = contact.structured_address_nr;
208 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"street","This One St, n 23");
209 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"pobox","PO BOX 333 444 5");
210 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"city","My Hometown");
211 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"region","Hereorthere");
212 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"postcode","XYZ 98765-C");
213 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"country","Island");
214 gcal_contact_set_pref_structured_address(&contact,1);
216 result = xmlcontact_create(&contact, &xml, &length);
217 fail_if(result == -1 || xml == NULL,
218 "Failed creating XML for a new contact!");
220 ptr = strstr(xml, "Dr. John W. Doe");
221 fail_if(ptr == NULL, "XML lacks a field: gd:name/gd:fullName\n");
222 ptr = strstr(xml, contact.nickname);
223 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.nickname);
224 ptr = strstr(xml, contact.occupation);
225 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.occupation);
226 ptr = strstr(xml, contact.blog);
227 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.blog);
228 ptr = strstr(xml, contact.homepage);
229 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.homepage);
230 ptr = strstr(xml, contact.emails_field[0]);
231 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.emails_field[0]);
232 ptr = strstr(xml, contact.content);
233 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.content);
234 ptr = strstr(xml, contact.org_name);
235 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.org_name);
236 ptr = strstr(xml, contact.org_title);
237 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.org_title);
238 ptr = strstr(xml, contact.phone_numbers_field[0]);
239 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.phone_numbers_field[0]);
240 ptr = strstr(xml, "This One St, n 23");
241 fail_if(ptr == NULL, "XML lacks a field: street\n");
242 ptr = strstr(xml, "PO BOX 333 444 5");
243 fail_if(ptr == NULL, "XML lacks a field: pobox\n");
244 ptr = strstr(xml, "My Hometown");
245 fail_if(ptr == NULL, "XML lacks a field: city\n");
246 ptr = strstr(xml, "Hereorthere");
247 fail_if(ptr == NULL, "XML lacks a field: region\n");
248 ptr = strstr(xml, "XYZ 98765-C");
249 fail_if(ptr == NULL, "XML lacks a field: postcode\n");
250 ptr = strstr(xml, "Island");
251 fail_if(ptr == NULL, "XML lacks a field: country\n");
252 ptr = strstr(xml, contact.birthday);
253 fail_if(ptr == NULL, "XML lacks a field: %s\n", contact.birthday);
254 ptr = strstr(xml, contact.im_address[0]);
255 fail_if(ptr == NULL, "XML lacks a field IM:%s\n",contact.im_address[0]);
257 free(xml);
259 END_TEST
262 START_TEST (test_contact_add)
264 int result, address_nr, address_count;
265 struct gcal_contact contact;
267 contact.common.title = NULL;
269 contact.structured_name=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
270 contact.structured_name->field_typenr = 0;
271 contact.structured_name->field_key = malloc(sizeof(char*));
272 contact.structured_name->field_key = NULL;
273 contact.structured_name->field_value = malloc(sizeof(char*));
274 contact.structured_name->field_value = NULL;
275 contact.structured_name_nr = 1;
276 gcal_contact_set_structured_entry(contact.structured_name,0,1,"givenName","John");
277 gcal_contact_set_structured_entry(contact.structured_name,0,1,"additionalName","W.");
278 gcal_contact_set_structured_entry(contact.structured_name,0,1,"familyName","Doe");
279 gcal_contact_set_structured_entry(contact.structured_name,0,1,"namePrefix","Dr.");
280 gcal_contact_set_structured_entry(contact.structured_name,0,1,"nameSuffix","IV.");
282 contact.emails_field = malloc(sizeof(char*));
283 contact.emails_field[0] = "john.doe@foo.bar.com";
284 contact.emails_type = malloc(sizeof(char*));
285 contact.emails_type[0] = "home";
286 contact.emails_nr = 1;
287 contact.pref_email = 0;
288 contact.common.id = contact.common.updated = contact.common.edit_uri = contact.common.etag = NULL;
289 contact.photo = contact.photo_data = NULL;
290 /* extra fields */
291 contact.nickname = "The Fox";
292 contact.content = "A very interesting person";
293 contact.org_name = "Foo software";
294 contact.org_title = "Software engineer";
295 contact.occupation = "Programmer";
296 contact.birthday = "1980-10-10";
297 contact.im_address = malloc(sizeof(char*));
298 contact.im_address[0] = "john";
299 contact.im_protocol = malloc(sizeof(char*));
300 contact.im_protocol[0] = "SKYPE";
301 contact.im_type = malloc(sizeof(char*));
302 contact.im_type[0] = "home";
303 contact.im_nr = 1;
304 contact.phone_numbers_field = malloc(sizeof(char*));
305 contact.phone_numbers_field[0] = "+9977554422119900";
306 contact.phone_numbers_type = malloc(sizeof(char*));
307 contact.phone_numbers_type[0] = "home";
308 contact.phone_numbers_nr = 1;
309 contact.groupMembership = malloc(sizeof(char*));
310 contact.groupMembership[0] = "http://www.google.com/m8/feeds/groups/gcalntester%40gmail.com/base/6";
311 contact.groupMembership_nr = 1;
312 contact.birthday = "1980-10-10";
313 contact.homepage = "www.homegage.com";
314 contact.blog = "myblog.homegage.com";
315 contact.structured_address=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
316 contact.structured_address->field_typenr = 0;
317 contact.structured_address->field_key = malloc(sizeof(char*));
318 contact.structured_address->field_key = NULL;
319 contact.structured_address->field_value = malloc(sizeof(char*));
320 contact.structured_address->field_value = NULL;
321 contact.structured_address_nr = 0;
322 contact.structured_address_type = (char**)malloc(sizeof(char*));
323 address_nr = gcal_contact_set_structured_address_nr(&contact,A_HOME);
324 address_count = contact.structured_address_nr;
325 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"street","Unknown Av St, n 69");
326 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"pobox","PO BOX 123 456");
327 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"city","Dirty Old Town");
328 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"region","Somewhere");
329 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"postcode","ABC 12345-D");
330 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"country","Madagascar");
331 address_nr = gcal_contact_set_structured_address_nr(&contact,A_WORK);
332 address_count = contact.structured_address_nr;
333 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"street","This One St, n 23");
334 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"pobox","PO BOX 333 444 5");
335 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"city","My Hometown");
336 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"region","Hereorthere");
337 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"postcode","XYZ 98765-C");
338 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"country","Island");
339 gcal_contact_set_pref_structured_address(&contact,1);
341 result = gcal_get_authentication(ptr_gcal, "gcalntester", "77libgcal");
342 fail_if(result == -1, "Authentication should work.");
344 result = gcal_create_contact(ptr_gcal, &contact, NULL);
345 fail_if(result == -1, "Failed creating a new contact!");
347 /* I commented this test because it prints too much error
348 * information to stderr. I must add a logging of some sort
349 * to library soon.
351 /* Trying to insert another contact with same email
352 * should trigger HTTP 409 Conflict code.
354 /* result = gcal_create_contact(&contact, ptr_gcal); */
355 /* fail_if(result != -1, "Adding the same contact must conflict!"); */
358 END_TEST
361 START_TEST (test_contact_delete)
363 /* This test assumes that 'test_contact_add' worked fine:
364 * I'm going to delete that contact.
366 char *test_title = "Dr. John W. Doe IV.", *temp = (char *)malloc(255);;
367 char *test_email = "john.doe@foo.bar.com";
368 struct gcal_contact *contacts;
369 int i, result, entry_index = -1;
370 size_t count = 0;
372 result = gcal_get_authentication(ptr_gcal, "gcalntester", "77libgcal");
373 fail_if(result == -1, "Authentication should work.");
375 result = gcal_dump(ptr_gcal, "GData-Version: 3.0");
376 fail_if(result != 0, "Failed dumping contacts");
378 contacts = gcal_get_all_contacts(ptr_gcal, &count);
379 fail_if(contacts == NULL, "Failed extracting contacts vector!");
381 for (i = 0; i < (int)count; ++i) {
382 if (contacts[i].structured_name)
383 temp = gcal_contact_get_structured_entry(contacts[i].structured_name,0,1,"fullName");
384 if (!temp)
385 temp = "";
387 if (contacts[i].emails_field && temp) {
388 if ((!(strcmp(contacts[i].emails_field[0], test_email))) &&
389 (!(strcmp(temp, test_title)))) {
390 entry_index = i;
391 break;
396 temp = (char *)malloc(255);
397 sprintf(temp, "Cannot locate the newly added contact!\nindex = %d\tname = %s\n", entry_index,
398 contacts[entry_index].common.title);
399 fail_if(entry_index == -1, temp);
400 free(temp);
402 // result = gcal_delete_contact(ptr_gcal, (contacts + entry_index));
403 // fail_if(result == -1, "Failed deleting contact!");
405 gcal_destroy_contacts(contacts, count);
407 END_TEST
409 START_TEST (test_contact_edit)
411 int result, address_nr, address_count;
412 struct gcal_contact contact, contact_new, updated;
413 gcal_structured_subvalues_t structured_entry;
415 contact.common.title = NULL;
417 contact.structured_name=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
418 contact.structured_name->field_typenr = 0;
419 contact.structured_name->field_key = malloc(sizeof(char*));
420 contact.structured_name->field_key = NULL;
421 contact.structured_name->field_value = malloc(sizeof(char*));
422 contact.structured_name->field_value = NULL;
423 contact.structured_name_nr = 1;
424 gcal_contact_set_structured_entry(contact.structured_name,0,1,"givenName","John");
425 gcal_contact_set_structured_entry(contact.structured_name,0,1,"additionalName","W.");
426 gcal_contact_set_structured_entry(contact.structured_name,0,1,"familyName","Doe");
427 gcal_contact_set_structured_entry(contact.structured_name,0,1,"namePrefix","Dr.");
429 contact.photo = contact.photo_data = NULL;
430 contact.photo_length = 0;
431 contact.emails_field = malloc(sizeof(char*));
432 contact.emails_field[0] = "johny.doe@foo.bar.com";
433 contact.emails_nr = 1;
434 contact.pref_email = 0;
435 contact.emails_type = malloc(sizeof(char*));
436 contact.emails_type[0] = "home";
437 contact.common.id = contact.common.updated = contact.common.edit_uri = contact.common.etag = NULL;
438 /* extra fields */
439 contact.nickname = "The Fox";
440 contact.content = "A very interesting person";
441 contact.org_name = "Foo software";
442 contact.org_title = "Software engineer";
443 contact.occupation = "Programmer";
444 contact.birthday = "1980-10-10";
445 contact.im_address = malloc(sizeof(char*));
446 contact.im_address[0] = "johny";
447 contact.im_protocol = malloc(sizeof(char*));
448 contact.im_protocol[0] = "SKYPE";
449 contact.im_type = malloc(sizeof(char*));
450 contact.im_type[0] = "home";
451 contact.im_nr = 1;
452 contact.phone_numbers_field = malloc(sizeof(char*));
453 contact.phone_numbers_field[0] = "+9977554422119900";
454 contact.phone_numbers_type= malloc(sizeof(char*));
455 contact.phone_numbers_type[0] = "home";
456 contact.phone_numbers_nr = 1;
457 contact.groupMembership = malloc(sizeof(char*));
458 contact.groupMembership[0] = "http://www.google.com/m8/feeds/groups/gcalntester%40gmail.com/base/6";
459 contact.groupMembership_nr = 1;
460 contact.birthday = "1980-10-10";
461 contact.homepage = "www.homegage.com";
462 contact.blog = "myblog.homegage.com";
463 contact.structured_address=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
464 contact.structured_address->field_typenr = 0;
465 contact.structured_address->field_key = malloc(sizeof(char*));
466 contact.structured_address->field_key = NULL;
467 contact.structured_address->field_value = malloc(sizeof(char*));
468 contact.structured_address->field_value = NULL;
469 contact.structured_address_nr = 0;
470 contact.structured_address_type = (char**)malloc(sizeof(char*));
471 address_nr = gcal_contact_set_structured_address_nr(&contact,A_HOME);
472 address_count = contact.structured_address_nr;
473 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"street","Unknown Av St, n 69");
474 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"pobox","PO BOX 123 456");
475 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"city","Dirty Old Town");
476 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"region","Somewhere");
477 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"postcode","ABC 12345-D");
478 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"country","Madagascar");
479 address_nr = gcal_contact_set_structured_address_nr(&contact,A_WORK);
480 address_count = contact.structured_address_nr;
481 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"street","This One St, n 23");
482 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"pobox","PO BOX 333 444 5");
483 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"city","My Hometown");
484 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"region","Hereorthere");
485 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"postcode","XYZ 98765-C");
486 gcal_contact_set_structured_entry(contact.structured_address,address_nr,address_count,"country","Island");
487 gcal_contact_set_pref_structured_address(&contact,1);
489 /* Authenticate and add a new contact */
490 result = gcal_get_authentication(ptr_gcal, "gcalntester", "77libgcal");
491 fail_if(result == -1, "Authentication should work.");
492 result = gcal_create_contact(ptr_gcal, &contact, &contact_new);
494 /* Edit this guy */
495 contact_new.structured_name=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
496 contact_new.structured_name->field_typenr = 0;
497 contact_new.structured_name->field_key = malloc(sizeof(char*));
498 contact_new.structured_name->field_key = NULL;
499 contact_new.structured_name->field_value = malloc(sizeof(char*));
500 contact_new.structured_name->field_value = NULL;
501 contact_new.structured_name_nr = 1;
502 gcal_contact_set_structured_entry(contact_new.structured_name,0,1,"givenName","Johny");
503 gcal_contact_set_structured_entry(contact_new.structured_name,0,1,"additionalName","'the mad'");
504 gcal_contact_set_structured_entry(contact_new.structured_name,0,1,"familyName","Doe");
506 contact_new.structured_address=(struct gcal_structured_subvalues *)malloc(sizeof(struct gcal_structured_subvalues));
507 contact_new.structured_address->field_typenr = 0;
508 contact_new.structured_address->field_key = malloc(sizeof(char*));
509 contact_new.structured_address->field_key = NULL;
510 contact_new.structured_address->field_value = malloc(sizeof(char*));
511 contact_new.structured_address->field_value = NULL;
512 contact_new.structured_address_nr = 0;
513 contact_new.structured_address_type = (char**)malloc(sizeof(char*));
514 address_nr = gcal_contact_set_structured_address_nr(&contact_new,A_HOME);
515 address_count = contact_new.structured_address_nr;
516 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"street","New Av St, n 61");
517 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"pobox","PO BOX 987 654");
518 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"city","My New Town");
519 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"region","Hereorthere");
520 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"postcode","XYZ 987654-V");
521 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"country","Italy");
522 address_nr = gcal_contact_set_structured_address_nr(&contact_new,A_WORK);
523 address_count = contact_new.structured_address_nr;
524 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"street","Longlong St, n 23");
525 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"pobox","PO BOX 1");
526 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"city","Smallville");
527 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"region","Nowhere");
528 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"postcode","QQQ 112233-WW");
529 gcal_contact_set_structured_entry(contact_new.structured_address,address_nr,address_count,"country","South Africa");
531 result = gcal_edit_contact(ptr_gcal, &contact_new, &updated);
532 fail_if(result == -1, "Failed editing contact!");
534 structured_entry = gcal_contact_get_structured_address(&contact);
535 gcal_contact_delete_structured_entry(structured_entry,gcal_contact_get_structured_address_count_obj(&contact),gcal_contact_get_structured_address_type_obj(&contact));
537 structured_entry = gcal_contact_get_structured_name(&contact);
538 gcal_contact_delete_structured_entry(structured_entry,NULL,NULL);
540 /* Delete the contact: pay attention that each edit changes
541 * the "edit_url" field!
543 result = gcal_delete_contact(ptr_gcal, &updated);
544 fail_if(result == -1, "Failed deleting contact!");
546 /* Do memory clean up */
547 gcal_destroy_contact(&contact_new);
548 gcal_destroy_contact(&updated);
550 END_TEST
553 TCase *gcontact_tcase_create(void)
555 TCase *tc = NULL;
556 int timeout_seconds = 50;
557 tc = tcase_create("gcontact");
558 tcase_add_checked_fixture(tc, setup, teardown);
559 tcase_set_timeout (tc, timeout_seconds);
560 tcase_add_test(tc, test_contact_authenticate);
561 tcase_add_test(tc, test_contact_dump);
562 tcase_add_test(tc, test_contact_entries);
563 tcase_add_test(tc, test_contact_extract);
564 tcase_add_test(tc, test_contact_xml);
565 tcase_add_test(tc, test_contact_add);
566 tcase_add_test(tc, test_contact_delete);
567 tcase_add_test(tc, test_contact_edit);
568 return tc;