summaryrefslogtreecommitdiff
path: root/tests/libebook/test-ebook-commit-contact.c
blob: 2294c2cdb28ec3cf291e6ec1f642f1e7ebbaf61c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */

#include <stdlib.h>
#include <libebook/libebook.h>

#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 (!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 (attr != NULL);
	g_assert (e_vcard_attribute_is_single_valued (attr));
	email_value = e_vcard_attribute_get_value (attr);
	g_assert (!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 ("http://bugzilla.gnome.org/");

	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 ();
}