Blame gdata/tests/tasks.c

Packit 4b6dd7
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit 4b6dd7
/*
Packit 4b6dd7
 * GData Client
Packit 4b6dd7
 * Copyright (C) Philip Withnall 2014 <philip@tecnocode.co.uk>
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is free software; you can redistribute it and/or
Packit 4b6dd7
 * modify it under the terms of the GNU Lesser General Public
Packit 4b6dd7
 * License as published by the Free Software Foundation; either
Packit 4b6dd7
 * version 2.1 of the License, or (at your option) any later version.
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is distributed in the hope that it will be useful,
Packit 4b6dd7
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 4b6dd7
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 4b6dd7
 * Lesser General Public License for more details.
Packit 4b6dd7
 *
Packit 4b6dd7
 * You should have received a copy of the GNU Lesser General Public
Packit 4b6dd7
 * License along with GData Client.  If not, see <http://www.gnu.org/licenses/>.
Packit 4b6dd7
 */
Packit 4b6dd7
Packit 4b6dd7
#include <glib.h>
Packit 4b6dd7
#include <unistd.h>
Packit 4b6dd7
#include <string.h>
Packit 4b6dd7
Packit 4b6dd7
#include "gdata.h"
Packit 4b6dd7
#include "common.h"
Packit 4b6dd7
#include "gdata-dummy-authorizer.h"
Packit 4b6dd7
Packit 4b6dd7
static UhmServer *mock_server = NULL;  /* owned */
Packit 4b6dd7
Packit 4b6dd7
#undef CLIENT_ID  /* from common.h */
Packit 4b6dd7
Packit 4b6dd7
#define CLIENT_ID "352818697630-nqu2cmt5quqd6lr17ouoqmb684u84l1f.apps.googleusercontent.com"
Packit 4b6dd7
#define CLIENT_SECRET "-fA4pHQJxR3zJ-FyAMPQsikg"
Packit 4b6dd7
#define REDIRECT_URI "urn:ietf:wg:oauth:2.0:oob"
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_authentication (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataOAuth2Authorizer *authorizer = NULL;  /* owned */
Packit 4b6dd7
	gchar *authentication_uri, *authorisation_code;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "authentication");
Packit 4b6dd7
Packit 4b6dd7
	authorizer = gdata_oauth2_authorizer_new (CLIENT_ID, CLIENT_SECRET,
Packit 4b6dd7
	                                          REDIRECT_URI,
Packit 4b6dd7
	                                          GDATA_TYPE_TASKS_SERVICE);
Packit 4b6dd7
Packit 4b6dd7
	/* Get an authentication URI. */
Packit 4b6dd7
	authentication_uri = gdata_oauth2_authorizer_build_authentication_uri (authorizer, NULL, FALSE);
Packit 4b6dd7
	g_assert (authentication_uri != NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Get the authorisation code off the user. */
Packit 4b6dd7
	if (uhm_server_get_enable_online (mock_server)) {
Packit 4b6dd7
		authorisation_code = gdata_test_query_user_for_verifier (authentication_uri);
Packit 4b6dd7
	} else {
Packit 4b6dd7
		/* Hard coded, extracted from the trace file. */
Packit 4b6dd7
		authorisation_code = g_strdup ("4/OEX-S1iMbOA_dOnNgUlSYmGWh3TK.QrR73axcNMkWoiIBeO6P2m_su7cwkQI");
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	g_free (authentication_uri);
Packit 4b6dd7
Packit 4b6dd7
	if (authorisation_code == NULL) {
Packit 4b6dd7
		/* Skip tests. */
Packit 4b6dd7
		goto skip_test;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	/* Authorise the token */
Packit 4b6dd7
	g_assert (gdata_oauth2_authorizer_request_authorization (authorizer, authorisation_code, NULL, NULL) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	/* Check all is as it should be */
Packit 4b6dd7
	g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (authorizer),
Packit 4b6dd7
	                                                     gdata_tasks_service_get_primary_authorization_domain ()) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
skip_test:
Packit 4b6dd7
	g_free (authorisation_code);
Packit 4b6dd7
	g_object_unref (authorizer);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that building a query URI works with the various parameters. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_uri (void)
Packit 4b6dd7
{
Packit 4b6dd7
	gchar *query_uri;
Packit 4b6dd7
	GDataTasksQuery *query = gdata_tasks_query_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* General properties. */
Packit 4b6dd7
	gdata_query_set_updated_min (GDATA_QUERY (query), 6789);
Packit 4b6dd7
	g_assert_cmpint (gdata_query_get_updated_min (GDATA_QUERY (query)), ==,
Packit 4b6dd7
	                                              6789);
Packit 4b6dd7
Packit 4b6dd7
	gdata_query_set_max_results (GDATA_QUERY (query), 10);
Packit 4b6dd7
	g_assert_cmpint (gdata_query_get_max_results (GDATA_QUERY (query)), ==,
Packit 4b6dd7
	                                              10);
Packit 4b6dd7
Packit 4b6dd7
	/* Google-Tasks-specific properties. */
Packit 4b6dd7
	gdata_tasks_query_set_completed_max (query, 1234);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_query_get_completed_max (query), ==, 1234);
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_completed_min (query, 5678);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_query_get_completed_min (query), ==, 5678);
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_due_max (query, 3456);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_query_get_due_max (query), ==, 3456);
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_due_min (query, 2345);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_query_get_due_min (query), ==, 2345);
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_show_completed (query, TRUE);
Packit 4b6dd7
	g_assert (gdata_tasks_query_get_show_completed (query));
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_show_deleted (query, TRUE);
Packit 4b6dd7
	g_assert (gdata_tasks_query_get_show_deleted (query));
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_show_hidden (query, TRUE);
Packit 4b6dd7
	g_assert (gdata_tasks_query_get_show_hidden (query));
Packit 4b6dd7
Packit 4b6dd7
	/* Test the URI. */
Packit 4b6dd7
	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query),
Packit 4b6dd7
	                                       "http://example.com");
Packit 4b6dd7
	g_assert_cmpstr (query_uri, ==,
Packit 4b6dd7
	                 "http://example.com"
Packit 4b6dd7
	                 /* FIXME: First two are outdated fallbacks */
Packit 4b6dd7
	                 "?updated-min=1970-01-01T01:53:09Z"
Packit 4b6dd7
	                 "&max-results=10"
Packit 4b6dd7
	                 "&maxResults=10"
Packit 4b6dd7
	                 "&updatedMin=1970-01-01T01:53:09.000001+00:00"
Packit 4b6dd7
	                 "&completedMin=1970-01-01T01:34:38.000001+00:00"
Packit 4b6dd7
	                 "&completedMax=1970-01-01T00:20:34.000001+00:00"
Packit 4b6dd7
	                 "&dueMin=1970-01-01T00:39:05.000001+00:00"
Packit 4b6dd7
	                 "&dueMax=1970-01-01T00:57:36.000001+00:00"
Packit 4b6dd7
	                 "&showCompleted=true"
Packit 4b6dd7
	                 "&showDeleted=true"
Packit 4b6dd7
	                 "&showHidden=true");
Packit 4b6dd7
	g_free (query_uri);
Packit 4b6dd7
Packit 4b6dd7
	/* Flip the booleans and try again. */
Packit 4b6dd7
	gdata_tasks_query_set_show_completed (query, FALSE);
Packit 4b6dd7
	g_assert (!gdata_tasks_query_get_show_completed (query));
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_show_deleted (query, FALSE);
Packit 4b6dd7
	g_assert (!gdata_tasks_query_get_show_deleted (query));
Packit 4b6dd7
Packit 4b6dd7
	gdata_tasks_query_set_show_hidden (query, FALSE);
Packit 4b6dd7
	g_assert (!gdata_tasks_query_get_show_hidden (query));
Packit 4b6dd7
Packit 4b6dd7
	/* Test the URI. */
Packit 4b6dd7
	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query),
Packit 4b6dd7
	                                       "http://example.com");
Packit 4b6dd7
	g_assert_cmpstr (query_uri, ==,
Packit 4b6dd7
	                 "http://example.com"
Packit 4b6dd7
	                 "?updated-min=1970-01-01T01:53:09Z"
Packit 4b6dd7
	                 "&max-results=10"
Packit 4b6dd7
	                 "&maxResults=10"
Packit 4b6dd7
	                 "&updatedMin=1970-01-01T01:53:09.000001+00:00"
Packit 4b6dd7
	                 "&completedMin=1970-01-01T01:34:38.000001+00:00"
Packit 4b6dd7
	                 "&completedMax=1970-01-01T00:20:34.000001+00:00"
Packit 4b6dd7
	                 "&dueMin=1970-01-01T00:39:05.000001+00:00"
Packit 4b6dd7
	                 "&dueMax=1970-01-01T00:57:36.000001+00:00"
Packit 4b6dd7
	                 "&showCompleted=false"
Packit 4b6dd7
	                 "&showDeleted=false"
Packit 4b6dd7
	                 "&showHidden=false");
Packit 4b6dd7
	g_free (query_uri);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: pageToken */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (query);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that setting any property will unset the ETag on a query. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_etag (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksQuery *query = NULL;  /* owned */
Packit 4b6dd7
Packit 4b6dd7
	query = gdata_tasks_query_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
#define CHECK_ETAG(C) \
Packit 4b6dd7
	gdata_query_set_etag (GDATA_QUERY (query), "foobar");		\
Packit 4b6dd7
	(C);								\
Packit 4b6dd7
	g_assert (gdata_query_get_etag (GDATA_QUERY (query)) == NULL);
Packit 4b6dd7
Packit 4b6dd7
	CHECK_ETAG (gdata_query_set_max_results (GDATA_QUERY (query), 50))
Packit 4b6dd7
	CHECK_ETAG (gdata_tasks_query_set_show_deleted (query, FALSE))
Packit 4b6dd7
	CHECK_ETAG (gdata_query_set_updated_min (GDATA_QUERY (query), 1234))
Packit 4b6dd7
	CHECK_ETAG (gdata_tasks_query_set_completed_min (query, 4567))
Packit 4b6dd7
Packit 4b6dd7
#undef CHECK_ETAG
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (query);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that getting/setting query properties works. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_properties (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksQuery *query = NULL;  /* owned */
Packit 4b6dd7
	gint64 completed_min, completed_max, due_min, due_max;
Packit 4b6dd7
	gboolean show_completed, show_deleted, show_hidden;
Packit 4b6dd7
Packit 4b6dd7
	query = gdata_tasks_query_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Set the properties. */
Packit 4b6dd7
	g_object_set (G_OBJECT (query),
Packit 4b6dd7
	              "completed-min", (gint64) 1234,
Packit 4b6dd7
	              "completed-max", (gint64) 2345,
Packit 4b6dd7
	              "due-min", (gint64) 3456,
Packit 4b6dd7
	              "due-max", (gint64) 4567,
Packit 4b6dd7
	              "show-completed", TRUE,
Packit 4b6dd7
	              "show-deleted", TRUE,
Packit 4b6dd7
	              "show-hidden", TRUE,
Packit 4b6dd7
	              NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the query’s properties. */
Packit 4b6dd7
	g_object_get (G_OBJECT (query),
Packit 4b6dd7
	              "completed-min", &completed_min,
Packit 4b6dd7
	              "completed-max", &completed_max,
Packit 4b6dd7
	              "due-min", &due_min,
Packit 4b6dd7
	              "due-max", &due_max,
Packit 4b6dd7
	              "show-completed", &show_completed,
Packit 4b6dd7
	              "show-deleted", &show_deleted,
Packit 4b6dd7
	              "show-hidden", &show_hidden,
Packit 4b6dd7
	              NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpint (completed_min, ==, 1234);
Packit 4b6dd7
	g_assert_cmpint (completed_max, ==, 2345);
Packit 4b6dd7
	g_assert_cmpint (due_min, ==, 3456);
Packit 4b6dd7
	g_assert_cmpint (due_max, ==, 4567);
Packit 4b6dd7
	g_assert (show_completed);
Packit 4b6dd7
	g_assert (show_deleted);
Packit 4b6dd7
	g_assert (show_hidden);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (query);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that getting/setting task properties works. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_properties (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTask *task;
Packit 4b6dd7
	gchar *id, *etag, *title, *parent, *position, *notes, *status;
Packit 4b6dd7
	gint64 updated, due, completed;
Packit 4b6dd7
	gboolean is_deleted, is_hidden;
Packit 4b6dd7
Packit 4b6dd7
	task = gdata_tasks_task_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the kind is present and correct */
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASK (task));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (task), "tasks#task", NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Set all the properties of the object. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "some-title");
Packit 4b6dd7
	gdata_tasks_task_set_notes (task, "some-notes");
Packit 4b6dd7
	gdata_tasks_task_set_status (task, GDATA_TASKS_STATUS_NEEDS_ACTION);
Packit 4b6dd7
	gdata_tasks_task_set_due (task, 1409419209);
Packit 4b6dd7
	gdata_tasks_task_set_completed (task, 1409419200);  /* 9 seconds to spare! */
Packit 4b6dd7
	gdata_tasks_task_set_is_deleted (task, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the properties of the object */
Packit 4b6dd7
	g_object_get (G_OBJECT (task),
Packit 4b6dd7
	              "id", &id,
Packit 4b6dd7
	              "etag", &etag,
Packit 4b6dd7
	              "title", &title,
Packit 4b6dd7
	              "updated", &updated,
Packit 4b6dd7
	              "parent", &parent,
Packit 4b6dd7
	              "position", &position,
Packit 4b6dd7
	              "notes", &notes,
Packit 4b6dd7
	              "status", &status,
Packit 4b6dd7
	              "due", &due,
Packit 4b6dd7
	              "completed", &completed,
Packit 4b6dd7
	              "is-deleted", &is_deleted,
Packit 4b6dd7
	              "is-hidden", &is_hidden,
Packit 4b6dd7
	              NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpstr (id, ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (etag, ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (title, ==, "some-title");
Packit 4b6dd7
	g_assert_cmpint (updated, ==, -1);
Packit 4b6dd7
	g_assert_cmpstr (parent, ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (position, ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (notes, ==, "some-notes");
Packit 4b6dd7
	g_assert_cmpstr (status, ==, GDATA_TASKS_STATUS_NEEDS_ACTION);
Packit 4b6dd7
	g_assert_cmpint (due, ==, 1409419209);
Packit 4b6dd7
	g_assert_cmpint (completed, ==, 1409419200);
Packit 4b6dd7
	g_assert (!is_deleted);
Packit 4b6dd7
	g_assert (!is_hidden);
Packit 4b6dd7
Packit 4b6dd7
	g_free (status);
Packit 4b6dd7
	g_free (notes);
Packit 4b6dd7
	g_free (position);
Packit 4b6dd7
	g_free (parent);
Packit 4b6dd7
	g_free (title);
Packit 4b6dd7
	g_free (etag);
Packit 4b6dd7
	g_free (id);
Packit 4b6dd7
Packit 4b6dd7
	/* Set the properties another way. */
Packit 4b6dd7
	g_object_set (G_OBJECT (task),
Packit 4b6dd7
	              "title", "some-other-title",
Packit 4b6dd7
	              "notes", "more-notes",
Packit 4b6dd7
	              "status", GDATA_TASKS_STATUS_COMPLETED,
Packit 4b6dd7
	              "due", (gint64) 1409419200,
Packit 4b6dd7
	              "completed", (gint64) 1409419200,  /* no time to spare! */
Packit 4b6dd7
	              "is-deleted", TRUE,
Packit 4b6dd7
	              NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the properties using the getters. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_parent (task), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_position (task), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_notes (task), ==, "more-notes");
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_status (task), ==,
Packit 4b6dd7
	                 GDATA_TASKS_STATUS_COMPLETED);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_task_get_due (task), ==, 1409419200);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_task_get_completed (task), ==, 1409419200);
Packit 4b6dd7
	g_assert (gdata_tasks_task_is_deleted (task));
Packit 4b6dd7
	g_assert (!gdata_tasks_task_is_hidden (task));
Packit 4b6dd7
Packit 4b6dd7
	/* Check the JSON. */
Packit 4b6dd7
	gdata_test_assert_json (task,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#task\","
Packit 4b6dd7
			"\"title\": \"some-other-title\","
Packit 4b6dd7
			"\"notes\": \"more-notes\","
Packit 4b6dd7
			"\"status\": \"completed\","
Packit 4b6dd7
			"\"due\": \"2014-08-30T17:20:00.000001+00:00\","
Packit 4b6dd7
			"\"completed\": \"2014-08-30T17:20:00.000001+00:00\","
Packit 4b6dd7
			"\"deleted\": true,"
Packit 4b6dd7
			"\"hidden\": false"
Packit 4b6dd7
		"}");
Packit 4b6dd7
Packit 4b6dd7
	/* Try again, marking it as undeleted. */
Packit 4b6dd7
	gdata_tasks_task_set_is_deleted (task, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_assert_json (task,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#task\","
Packit 4b6dd7
			"\"title\": \"some-other-title\","
Packit 4b6dd7
			"\"notes\": \"more-notes\","
Packit 4b6dd7
			"\"status\": \"completed\","
Packit 4b6dd7
			"\"due\": \"2014-08-30T17:20:00.000001+00:00\","
Packit 4b6dd7
			"\"completed\": \"2014-08-30T17:20:00.000001+00:00\","
Packit 4b6dd7
			"\"deleted\": false,"
Packit 4b6dd7
			"\"hidden\": false"
Packit 4b6dd7
		"}");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that escaping task properties for JSON works. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_escaping (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTask *task;
Packit 4b6dd7
Packit 4b6dd7
	task = gdata_tasks_task_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "Title \"with quotes\"");
Packit 4b6dd7
	gdata_tasks_task_set_notes (task, "Notes \"with quotes\" and Emoji 😂.");
Packit 4b6dd7
	gdata_tasks_task_set_status (task, "invalid status \"with quotes\"");
Packit 4b6dd7
Packit 4b6dd7
	/* Check the outputted JSON is escaped properly. */
Packit 4b6dd7
	gdata_test_assert_json (task,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#task\","
Packit 4b6dd7
			"\"title\": \"Title \\\"with quotes\\\"\","
Packit 4b6dd7
			"\"notes\": \"Notes \\\"with quotes\\\" and Emoji 😂.\","
Packit 4b6dd7
			"\"status\": \"invalid status \\\"with quotes\\\"\","
Packit 4b6dd7
			"\"deleted\": false,"
Packit 4b6dd7
			"\"hidden\": false"
Packit 4b6dd7
		"}");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test the task parser with the minimal number of properties specified. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_parser_minimal (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTask *task = NULL;  /* owned */
Packit 4b6dd7
	GDataEntry *entry;  /* unowned */
Packit 4b6dd7
	GDataLink *self_link;  /* unowned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	task = GDATA_TASKS_TASK (gdata_parsable_new_from_json (GDATA_TYPE_TASKS_TASK,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#task\","
Packit 4b6dd7
			"\"id\": \"some-id\","
Packit 4b6dd7
			"\"title\": \"some-title \\\"with quotes\\\"\","
Packit 4b6dd7
			"\"updated\": \"2014-08-30T19:40:00Z\","
Packit 4b6dd7
			"\"selfLink\": \"http://some-uri/\","
Packit 4b6dd7
			"\"position\": \"some-position\","
Packit 4b6dd7
			"\"status\": \"needsAction\","
Packit 4b6dd7
			"\"deleted\": true,"
Packit 4b6dd7
			"\"hidden\": true"
Packit 4b6dd7
		"}", -1, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASK (task));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (task), "tasks#task", NULL);
Packit 4b6dd7
Packit 4b6dd7
	entry = GDATA_ENTRY (task);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the task’s properties. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_id (entry), ==, "some-id");
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_etag (entry), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (entry), ==,
Packit 4b6dd7
	                 "some-title \"with quotes\"");
Packit 4b6dd7
	g_assert_cmpint (gdata_entry_get_updated (entry), ==, 1409427600);
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_parent (task), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_notes (task), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_status (task), ==,
Packit 4b6dd7
	                 GDATA_TASKS_STATUS_NEEDS_ACTION);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_task_get_due (task), ==, -1);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_task_get_completed (task), ==, -1);
Packit 4b6dd7
	g_assert (gdata_tasks_task_is_deleted (task));
Packit 4b6dd7
	g_assert (gdata_tasks_task_is_hidden (task));
Packit 4b6dd7
Packit 4b6dd7
	self_link = gdata_entry_look_up_link (entry, GDATA_LINK_SELF);
Packit 4b6dd7
	g_assert (GDATA_IS_LINK (self_link));
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_uri (self_link), ==,
Packit 4b6dd7
	                 "http://some-uri/");
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_relation_type (self_link), ==,
Packit 4b6dd7
	                 GDATA_LINK_SELF);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_content_type (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_language (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_title (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpint (gdata_link_get_length (self_link), ==, -1);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test the task parser with a maximal number of properties specified. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_parser_normal (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTask *task = NULL;  /* owned */
Packit 4b6dd7
	GDataEntry *entry;  /* unowned */
Packit 4b6dd7
	GDataLink *self_link;  /* unowned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	task = GDATA_TASKS_TASK (gdata_parsable_new_from_json (GDATA_TYPE_TASKS_TASK,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#task\","
Packit 4b6dd7
			"\"id\": \"some-id\","
Packit 4b6dd7
			"\"etag\": \"some-etag\","
Packit 4b6dd7
			"\"title\": \"some-title \\\"with quotes\\\"\","
Packit 4b6dd7
			"\"updated\": \"2014-08-30T19:40:00Z\","
Packit 4b6dd7
			"\"selfLink\": \"http://some-uri/\","
Packit 4b6dd7
			"\"parent\": \"some-parent-id\","
Packit 4b6dd7
			"\"position\": \"some-position\","
Packit 4b6dd7
			"\"notes\": \"Some notes!\","
Packit 4b6dd7
			"\"status\": \"needsAction\","
Packit 4b6dd7
			"\"due\": \"2014-08-30T20:00:00Z\","
Packit 4b6dd7
			"\"completed\": \"2014-08-30T20:10:05Z\","
Packit 4b6dd7
			"\"deleted\": false,"
Packit 4b6dd7
			"\"hidden\": true,"
Packit 4b6dd7
			/* Unhandled for the moment: */
Packit 4b6dd7
			"\"links\": ["
Packit 4b6dd7
				"{"
Packit 4b6dd7
					"\"type\": \"email\","
Packit 4b6dd7
					"\"description\": \"some-email\","
Packit 4b6dd7
					"\"link\": \"example@example.com\""
Packit 4b6dd7
				"}"
Packit 4b6dd7
			"]"
Packit 4b6dd7
		"}", -1, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASK (task));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (task), "tasks#task", NULL);
Packit 4b6dd7
Packit 4b6dd7
	entry = GDATA_ENTRY (task);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the task’s properties. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_id (entry), ==, "some-id");
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_etag (entry), ==, "some-etag");
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (entry), ==,
Packit 4b6dd7
	                 "some-title \"with quotes\"");
Packit 4b6dd7
	g_assert_cmpint (gdata_entry_get_updated (entry), ==, 1409427600);
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_parent (task), ==,
Packit 4b6dd7
	                 "some-parent-id");
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_notes (task), ==, "Some notes!");
Packit 4b6dd7
	g_assert_cmpstr (gdata_tasks_task_get_status (task), ==,
Packit 4b6dd7
	                 GDATA_TASKS_STATUS_NEEDS_ACTION);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_task_get_due (task), ==, 1409428800);
Packit 4b6dd7
	g_assert_cmpint (gdata_tasks_task_get_completed (task), ==, 1409429405);
Packit 4b6dd7
	g_assert (!gdata_tasks_task_is_deleted (task));
Packit 4b6dd7
	g_assert (gdata_tasks_task_is_hidden (task));
Packit 4b6dd7
Packit 4b6dd7
	self_link = gdata_entry_look_up_link (entry, GDATA_LINK_SELF);
Packit 4b6dd7
	g_assert (GDATA_IS_LINK (self_link));
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_uri (self_link), ==,
Packit 4b6dd7
	                 "http://some-uri/");
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_relation_type (self_link), ==,
Packit 4b6dd7
	                 GDATA_LINK_SELF);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_content_type (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_language (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_title (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpint (gdata_link_get_length (self_link), ==, -1);
Packit 4b6dd7
Packit 4b6dd7
	/* Check that the same JSON is re-generated. */
Packit 4b6dd7
	gdata_test_assert_json (task,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#task\","
Packit 4b6dd7
			"\"id\": \"some-id\","
Packit 4b6dd7
			"\"etag\": \"some-etag\","
Packit 4b6dd7
			"\"title\": \"some-title \\\"with quotes\\\"\","
Packit 4b6dd7
			"\"updated\": \"2014-08-30T19:40:00.000001+00:00\","
Packit 4b6dd7
			"\"selfLink\": \"http://some-uri/\","
Packit 4b6dd7
			"\"parent\": \"some-parent-id\","
Packit 4b6dd7
			"\"position\": \"some-position\","
Packit 4b6dd7
			"\"notes\": \"Some notes!\","
Packit 4b6dd7
			"\"status\": \"needsAction\","
Packit 4b6dd7
			"\"due\": \"2014-08-30T20:00:00.000001+00:00\","
Packit 4b6dd7
			"\"completed\": \"2014-08-30T20:10:05.000001+00:00\","
Packit 4b6dd7
			"\"deleted\": false,"
Packit 4b6dd7
			"\"hidden\": true,"
Packit 4b6dd7
			/* Unhandled for the moment: */
Packit 4b6dd7
			"\"links\": ["
Packit 4b6dd7
				"{"
Packit 4b6dd7
					"\"type\": \"email\","
Packit 4b6dd7
					"\"description\": \"some-email\","
Packit 4b6dd7
					"\"link\": \"example@example.com\""
Packit 4b6dd7
				"}"
Packit 4b6dd7
			"]"
Packit 4b6dd7
		"}");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that inserting a tasklist works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *new_tasklist;
Packit 4b6dd7
} InsertTasklistData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_insert_tasklist (InsertTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	data->new_tasklist = NULL;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_insert_tasklist (InsertTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-insert-tasklist");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the new tasklist. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->new_tasklist), NULL, NULL) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (data->new_tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_insert (InsertTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GDataEntry *new_entry;  /* unowned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "tasklist-insert");
Packit 4b6dd7
Packit 4b6dd7
	/* Create the tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "My list of things");
Packit 4b6dd7
Packit 4b6dd7
	/* Insert it. */
Packit 4b6dd7
	data->new_tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                          tasklist,
Packit 4b6dd7
	                                                          NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASKLIST (data->new_tasklist));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (data->new_tasklist),
Packit 4b6dd7
	                         "tasks#taskList", NULL);
Packit 4b6dd7
Packit 4b6dd7
	new_entry = GDATA_ENTRY (data->new_tasklist);
Packit 4b6dd7
Packit 4b6dd7
	/* Check properties. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_id (new_entry), !=, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_etag (new_entry), !=, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (new_entry), ==,
Packit 4b6dd7
	                 gdata_entry_get_title (GDATA_ENTRY (tasklist)));
Packit 4b6dd7
	g_assert_cmpint (gdata_entry_get_updated (new_entry), >, -1);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_insert_unauthorised (gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GDataTasksTasklist *new_tasklist = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server,
Packit 4b6dd7
	                                    "tasklist-insert-unauthorised");
Packit 4b6dd7
Packit 4b6dd7
	/* Create the tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "My list of things");
Packit 4b6dd7
Packit 4b6dd7
	/* Insert it. */
Packit 4b6dd7
	new_tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                    tasklist,
Packit 4b6dd7
	                                                    NULL, &error);
Packit 4b6dd7
	g_assert_error (error, GDATA_SERVICE_ERROR,
Packit 4b6dd7
	                GDATA_SERVICE_ERROR_AUTHENTICATION_REQUIRED);
Packit 4b6dd7
	g_assert (new_tasklist == NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that listing tasklists works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *tasklist1;
Packit 4b6dd7
	GDataTasksTasklist *tasklist2;
Packit 4b6dd7
	GDataTasksTasklist *tasklist3;
Packit 4b6dd7
} ListTasklistData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_list_tasklist (ListTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-list-tasklist");
Packit 4b6dd7
Packit 4b6dd7
	/* Create the tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Insert it. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Tasklist 1");
Packit 4b6dd7
	data->tasklist1 = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                       tasklist,
Packit 4b6dd7
	                                                       NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Tasklist 2");
Packit 4b6dd7
	data->tasklist2 = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                       tasklist,
Packit 4b6dd7
	                                                       NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Tasklist 3");
Packit 4b6dd7
	data->tasklist3 = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                       tasklist,
Packit 4b6dd7
	                                                       NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_list_tasklist (ListTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-list-tasklist");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasklists. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist1), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist2), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist3), NULL, NULL) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (data->tasklist1);
Packit 4b6dd7
	g_object_unref (data->tasklist2);
Packit 4b6dd7
	g_object_unref (data->tasklist3);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_list (ListTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFeed *feed = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "tasklist-list");
Packit 4b6dd7
Packit 4b6dd7
	feed = gdata_tasks_service_query_all_tasklists (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                NULL, NULL, NULL, NULL,
Packit 4b6dd7
	                                                &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the three tasklists are present. */
Packit 4b6dd7
	g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->tasklist1))) != NULL);
Packit 4b6dd7
	g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->tasklist2))) != NULL);
Packit 4b6dd7
	g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->tasklist3))) != NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (feed);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that updating a single tasklist works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
} UpdateTasklistData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_update_tasklist (UpdateTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-update-tasklist");
Packit 4b6dd7
Packit 4b6dd7
	/* Create the tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Insert it. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
Packit 4b6dd7
	data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                      tasklist,
Packit 4b6dd7
	                                                      NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_update_tasklist (UpdateTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-update-tasklist");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasklist. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_update (UpdateTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *updated_tasklist = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "tasklist-update");
Packit 4b6dd7
Packit 4b6dd7
	/* Update the tasklist. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (data->tasklist), "New Title!");
Packit 4b6dd7
Packit 4b6dd7
	updated_tasklist = gdata_tasks_service_update_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                        data->tasklist,
Packit 4b6dd7
	                                                        NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the updated tasklist. */
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASKLIST (updated_tasklist));
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (updated_tasklist)),
Packit 4b6dd7
	                 ==, "New Title!");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (data->tasklist);
Packit 4b6dd7
	data->tasklist = updated_tasklist;
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that deleting a single tasklist works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
} DeleteTasklistData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_delete_tasklist (DeleteTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-delete-tasklist");
Packit 4b6dd7
Packit 4b6dd7
	/* Create the tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Insert it. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
Packit 4b6dd7
	data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                      tasklist,
Packit 4b6dd7
	                                                      NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_delete_tasklist (DeleteTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	g_object_unref (data->tasklist);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_delete (DeleteTasklistData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean retval;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "tasklist-delete");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasklist. */
Packit 4b6dd7
	retval = gdata_tasks_service_delete_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                              data->tasklist,
Packit 4b6dd7
	                                              NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (retval);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that inserting a task works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
	GDataTasksTask *new_task;
Packit 4b6dd7
} InsertTaskData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_insert_task (InsertTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-insert-task");
Packit 4b6dd7
Packit 4b6dd7
	/* Create a tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
Packit 4b6dd7
	data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                      tasklist,
Packit 4b6dd7
	                                                      NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	data->new_task = NULL;
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_insert_task (InsertTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-insert-task");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the new task. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->new_task), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->new_task);
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasklist. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_insert (InsertTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTask *task = NULL;  /* owned */
Packit 4b6dd7
	GDataEntry *new_entry;  /* unowned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "task-insert");
Packit 4b6dd7
Packit 4b6dd7
	/* Create the task. */
Packit 4b6dd7
	task = gdata_tasks_task_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "My list of things");
Packit 4b6dd7
Packit 4b6dd7
	/* Insert it. */
Packit 4b6dd7
	data->new_task = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                  task, data->tasklist,
Packit 4b6dd7
	                                                  NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASK (data->new_task));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (data->new_task),
Packit 4b6dd7
	                         "tasks#task", NULL);
Packit 4b6dd7
Packit 4b6dd7
	new_entry = GDATA_ENTRY (data->new_task);
Packit 4b6dd7
Packit 4b6dd7
	/* Check properties. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_id (new_entry), !=, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_etag (new_entry), !=, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (new_entry), ==,
Packit 4b6dd7
	                 gdata_entry_get_title (GDATA_ENTRY (task)));
Packit 4b6dd7
	g_assert_cmpint (gdata_entry_get_updated (new_entry), >, -1);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that listing tasks works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
	GDataTasksTask *task1;
Packit 4b6dd7
	GDataTasksTask *task2;
Packit 4b6dd7
	GDataTasksTask *task3;
Packit 4b6dd7
} ListTaskData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_list_task (ListTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GDataTasksTask *task = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-list-task");
Packit 4b6dd7
Packit 4b6dd7
	/* Create a tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
Packit 4b6dd7
	data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                      tasklist,
Packit 4b6dd7
	                                                      NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	/* Create the task. */
Packit 4b6dd7
	task = gdata_tasks_task_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Insert it. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "Task 1");
Packit 4b6dd7
	data->task1 = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                               task, data->tasklist,
Packit 4b6dd7
	                                               NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "Task 2");
Packit 4b6dd7
	data->task2 = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                               task, data->tasklist,
Packit 4b6dd7
	                                               NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "Task 3");
Packit 4b6dd7
	data->task3 = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                               task, data->tasklist,
Packit 4b6dd7
	                                               NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_list_task (ListTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-list-task");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasks. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->task1), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->task2), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->task3), NULL, NULL) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (data->task1);
Packit 4b6dd7
	g_object_unref (data->task2);
Packit 4b6dd7
	g_object_unref (data->task3);
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasklist. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_list (ListTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFeed *feed = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "task-list");
Packit 4b6dd7
Packit 4b6dd7
	feed = gdata_tasks_service_query_tasks (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                        data->tasklist, NULL, NULL,
Packit 4b6dd7
	                                        NULL, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the three tasks are present. */
Packit 4b6dd7
	g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->task1))) != NULL);
Packit 4b6dd7
	g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->task2))) != NULL);
Packit 4b6dd7
	g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->task3))) != NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (feed);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that updating a single task works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
	GDataTasksTask *task;
Packit 4b6dd7
} UpdateTaskData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_update_task (UpdateTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GDataTasksTask *task = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-update-task");
Packit 4b6dd7
Packit 4b6dd7
	/* Create a tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
Packit 4b6dd7
	data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                      tasklist,
Packit 4b6dd7
	                                                      NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	/* Create the task. */
Packit 4b6dd7
	task = gdata_tasks_task_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "Some task");
Packit 4b6dd7
	data->task = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                              task, data->tasklist,
Packit 4b6dd7
	                                              NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_update_task (UpdateTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-update-task");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the task. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->task), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->task);
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasklist. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_update (UpdateTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTask *updated_task = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "task-update");
Packit 4b6dd7
Packit 4b6dd7
	/* Update the task. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (data->task), "New Title!");
Packit 4b6dd7
Packit 4b6dd7
	updated_task = gdata_tasks_service_update_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                data->task,
Packit 4b6dd7
	                                                NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the updated task. */
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASK (updated_task));
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (updated_task)),
Packit 4b6dd7
	                 ==, "New Title!");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (data->task);
Packit 4b6dd7
	data->task = updated_task;
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that deleting a single task works. */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
	GDataTasksTask *task;
Packit 4b6dd7
} DeleteTaskData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_delete_task (DeleteTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GDataTasksTask *task = NULL;  /* owned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-delete-task");
Packit 4b6dd7
Packit 4b6dd7
	/* Create a tasklist. */
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
Packit 4b6dd7
	data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                                      tasklist,
Packit 4b6dd7
	                                                      NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	/* Create the task. */
Packit 4b6dd7
	task = gdata_tasks_task_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (task), "Some task");
Packit 4b6dd7
	data->task = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                              task, data->tasklist,
Packit 4b6dd7
	                                              NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (task);
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_delete_task (DeleteTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-delete-task");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (data->task);
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the tasklist. */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_tasks_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->tasklist);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_task_delete (DeleteTaskData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean retval;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "task-delete");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the task. */
Packit 4b6dd7
	retval = gdata_tasks_service_delete_task (GDATA_TASKS_SERVICE (service),
Packit 4b6dd7
	                                          data->task, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (retval);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that getting/setting tasklist properties works. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_properties (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
	gchar *id, *etag, *title;
Packit 4b6dd7
	gint64 updated;
Packit 4b6dd7
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the kind is present and correct */
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASKLIST (tasklist));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (tasklist),
Packit 4b6dd7
	                         "tasks#taskList", NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Set all the properties of the object. */
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "some-title");
Packit 4b6dd7
Packit 4b6dd7
	/* Check the properties of the object */
Packit 4b6dd7
	g_object_get (G_OBJECT (tasklist),
Packit 4b6dd7
	              "id", &id,
Packit 4b6dd7
	              "etag", &etag,
Packit 4b6dd7
	              "title", &title,
Packit 4b6dd7
	              "updated", &updated,
Packit 4b6dd7
	              NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpstr (id, ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (etag, ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (title, ==, "some-title");
Packit 4b6dd7
	g_assert_cmpint (updated, ==, -1);
Packit 4b6dd7
Packit 4b6dd7
	g_free (title);
Packit 4b6dd7
	g_free (etag);
Packit 4b6dd7
	g_free (id);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the properties using the getters. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_id (GDATA_ENTRY (tasklist)), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_etag (GDATA_ENTRY (tasklist)), ==,
Packit 4b6dd7
	                 NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (tasklist)), ==,
Packit 4b6dd7
	                 "some-title");
Packit 4b6dd7
	g_assert_cmpint (gdata_entry_get_updated (GDATA_ENTRY (tasklist)), ==,
Packit 4b6dd7
	                 -1);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the JSON. */
Packit 4b6dd7
	gdata_test_assert_json (tasklist,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#taskList\","
Packit 4b6dd7
			"\"title\": \"some-title\""
Packit 4b6dd7
		"}");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that escaping tasklist properties for JSON works. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_escaping (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist;
Packit 4b6dd7
Packit 4b6dd7
	tasklist = gdata_tasks_tasklist_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (tasklist), "Title \"with quotes\"");
Packit 4b6dd7
Packit 4b6dd7
	/* Check the outputted JSON is escaped properly. */
Packit 4b6dd7
	gdata_test_assert_json (tasklist,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#taskList\","
Packit 4b6dd7
			"\"title\": \"Title \\\"with quotes\\\"\""
Packit 4b6dd7
		"}");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test the tasklist parser with a maximal number of properties specified. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_tasklist_parser_normal (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataTasksTasklist *tasklist = NULL;  /* owned */
Packit 4b6dd7
	GDataEntry *entry;  /* unowned */
Packit 4b6dd7
	GDataLink *self_link;  /* unowned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	tasklist = GDATA_TASKS_TASKLIST (gdata_parsable_new_from_json (GDATA_TYPE_TASKS_TASKLIST,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"tasks#taskList\","
Packit 4b6dd7
			"\"id\": \"some-id\","
Packit 4b6dd7
			"\"etag\": \"some-etag\","
Packit 4b6dd7
			"\"title\": \"some-title \\\"with quotes\\\"\","
Packit 4b6dd7
			"\"updated\": \"2014-08-30T19:40:00Z\","
Packit 4b6dd7
			"\"selfLink\": \"http://some-uri/\""
Packit 4b6dd7
		"}", -1, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_TASKS_TASKLIST (tasklist));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (tasklist),
Packit 4b6dd7
	                         "tasks#taskList", NULL);
Packit 4b6dd7
Packit 4b6dd7
	entry = GDATA_ENTRY (tasklist);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the tasklist’s properties. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_id (entry), ==, "some-id");
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_etag (entry), ==, "some-etag");
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (entry), ==,
Packit 4b6dd7
	                 "some-title \"with quotes\"");
Packit 4b6dd7
	g_assert_cmpint (gdata_entry_get_updated (entry), ==, 1409427600);
Packit 4b6dd7
Packit 4b6dd7
	self_link = gdata_entry_look_up_link (entry, GDATA_LINK_SELF);
Packit 4b6dd7
	g_assert (GDATA_IS_LINK (self_link));
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_uri (self_link), ==,
Packit 4b6dd7
	                 "http://some-uri/");
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_relation_type (self_link), ==,
Packit 4b6dd7
	                 GDATA_LINK_SELF);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_content_type (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_language (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpstr (gdata_link_get_title (self_link), ==, NULL);
Packit 4b6dd7
	g_assert_cmpint (gdata_link_get_length (self_link), ==, -1);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (tasklist);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec,
Packit 4b6dd7
                                gpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	UhmServer *server;
Packit 4b6dd7
	UhmResolver *resolver;
Packit 4b6dd7
Packit 4b6dd7
	server = UHM_SERVER (object);
Packit 4b6dd7
Packit 4b6dd7
	/* Set up the expected domain names here. This should technically be
Packit 4b6dd7
	 * split up between the different unit test suites, but that's too much
Packit 4b6dd7
	 * effort. */
Packit 4b6dd7
	resolver = uhm_server_get_resolver (server);
Packit 4b6dd7
Packit 4b6dd7
	if (resolver != NULL) {
Packit 4b6dd7
		const gchar *ip_address = uhm_server_get_address (server);
Packit 4b6dd7
Packit 4b6dd7
		uhm_resolver_add_A (resolver, "www.google.com", ip_address);
Packit 4b6dd7
		uhm_resolver_add_A (resolver, "www.googleapis.com", ip_address);
Packit 4b6dd7
		uhm_resolver_add_A (resolver,
Packit 4b6dd7
		                    "accounts.google.com", ip_address);
Packit 4b6dd7
	}
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Set up a global GDataAuthorizer to be used for all the tests. Unfortunately,
Packit 4b6dd7
 * the Google Tasks API is limited to OAuth1 and OAuth2 authorisation, so this
Packit 4b6dd7
 * requires user interaction when online.
Packit 4b6dd7
 *
Packit 4b6dd7
 * If not online, use a dummy authoriser. */
Packit 4b6dd7
static GDataAuthorizer *
Packit 4b6dd7
create_global_authorizer (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataOAuth2Authorizer *authorizer = NULL;  /* owned */
Packit 4b6dd7
	gchar *authentication_uri, *authorisation_code;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	/* If not online, just return a dummy authoriser. */
Packit 4b6dd7
	if (!uhm_server_get_enable_online (mock_server)) {
Packit 4b6dd7
		return GDATA_AUTHORIZER (gdata_dummy_authorizer_new (GDATA_TYPE_TASKS_SERVICE));
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	/* Otherwise, go through the interactive OAuth dance. */
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "global-authentication");
Packit 4b6dd7
	authorizer = gdata_oauth2_authorizer_new (CLIENT_ID, CLIENT_SECRET,
Packit 4b6dd7
	                                          REDIRECT_URI,
Packit 4b6dd7
	                                          GDATA_TYPE_TASKS_SERVICE);
Packit 4b6dd7
Packit 4b6dd7
	/* Get an authentication URI */
Packit 4b6dd7
	authentication_uri = gdata_oauth2_authorizer_build_authentication_uri (authorizer, NULL, FALSE);
Packit 4b6dd7
	g_assert (authentication_uri != NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Get the authorisation code off the user. */
Packit 4b6dd7
	authorisation_code = gdata_test_query_user_for_verifier (authentication_uri);
Packit 4b6dd7
Packit 4b6dd7
	g_free (authentication_uri);
Packit 4b6dd7
Packit 4b6dd7
	if (authorisation_code == NULL) {
Packit 4b6dd7
		/* Skip tests. */
Packit 4b6dd7
		g_object_unref (authorizer);
Packit 4b6dd7
		authorizer = NULL;
Packit 4b6dd7
		goto skip_test;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	/* Authorise the token */
Packit 4b6dd7
	g_assert (gdata_oauth2_authorizer_request_authorization (authorizer, authorisation_code, NULL, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
Packit 4b6dd7
skip_test:
Packit 4b6dd7
	g_free (authorisation_code);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
Packit 4b6dd7
	return GDATA_AUTHORIZER (authorizer);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
int
Packit 4b6dd7
main (int argc, char *argv[])
Packit 4b6dd7
{
Packit 4b6dd7
	gint retval;
Packit 4b6dd7
	GDataAuthorizer *authorizer = NULL;  /* owned */
Packit 4b6dd7
	GDataAuthorizer *unauthorised_authorizer = NULL;  /* owned */
Packit 4b6dd7
	GDataService *service = NULL;  /* owned */
Packit 4b6dd7
	GDataService *unauthorised_service = NULL;  /* owned */
Packit 4b6dd7
	GFile *trace_directory = NULL;  /* owned */
Packit 4b6dd7
	gchar *path = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_init (argc, argv);
Packit 4b6dd7
Packit 4b6dd7
	mock_server = gdata_test_get_mock_server ();
Packit 4b6dd7
	g_signal_connect (G_OBJECT (mock_server), "notify::resolver",
Packit 4b6dd7
	                  (GCallback) mock_server_notify_resolver_cb, NULL);
Packit 4b6dd7
	path = g_test_build_filename (G_TEST_DIST, "traces/tasks", NULL);
Packit 4b6dd7
	trace_directory = g_file_new_for_path (path);
Packit 4b6dd7
	g_free (path);
Packit 4b6dd7
	uhm_server_set_trace_directory (mock_server, trace_directory);
Packit 4b6dd7
	g_object_unref (trace_directory);
Packit 4b6dd7
Packit 4b6dd7
	authorizer = create_global_authorizer ();
Packit 4b6dd7
	unauthorised_authorizer = GDATA_AUTHORIZER (gdata_oauth2_authorizer_new (CLIENT_ID,
Packit 4b6dd7
	                                                                         CLIENT_SECRET,
Packit 4b6dd7
	                                                                         REDIRECT_URI,
Packit 4b6dd7
	                                                                         GDATA_TYPE_TASKS_SERVICE));
Packit 4b6dd7
Packit 4b6dd7
	service = GDATA_SERVICE (gdata_tasks_service_new (authorizer));
Packit 4b6dd7
	unauthorised_service = GDATA_SERVICE (gdata_tasks_service_new (unauthorised_authorizer));
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/tasks/authentication", test_authentication);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_data_func ("/tasks/tasklist/insert/unauthorised",
Packit 4b6dd7
	                      unauthorised_service,
Packit 4b6dd7
	                      test_tasklist_insert_unauthorised);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add ("/tasks/tasklist/insert", InsertTasklistData, service,
Packit 4b6dd7
	            set_up_insert_tasklist, test_tasklist_insert,
Packit 4b6dd7
	            tear_down_insert_tasklist);
Packit 4b6dd7
	g_test_add ("/tasks/tasklist/list", ListTasklistData, service,
Packit 4b6dd7
	            set_up_list_tasklist, test_tasklist_list,
Packit 4b6dd7
	            tear_down_list_tasklist);
Packit 4b6dd7
	g_test_add ("/tasks/tasklist/update", UpdateTasklistData, service,
Packit 4b6dd7
	            set_up_update_tasklist, test_tasklist_update,
Packit 4b6dd7
	            tear_down_update_tasklist);
Packit 4b6dd7
	g_test_add ("/tasks/tasklist/delete", DeleteTasklistData, service,
Packit 4b6dd7
	            set_up_delete_tasklist, test_tasklist_delete,
Packit 4b6dd7
	            tear_down_delete_tasklist);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add ("/tasks/task/insert", InsertTaskData, service,
Packit 4b6dd7
	            set_up_insert_task, test_task_insert,
Packit 4b6dd7
	            tear_down_insert_task);
Packit 4b6dd7
	g_test_add ("/tasks/task/list", ListTaskData, service,
Packit 4b6dd7
	            set_up_list_task, test_task_list,
Packit 4b6dd7
	            tear_down_list_task);
Packit 4b6dd7
	g_test_add ("/tasks/task/update", UpdateTaskData, service,
Packit 4b6dd7
	            set_up_update_task, test_task_update,
Packit 4b6dd7
	            tear_down_update_task);
Packit 4b6dd7
	g_test_add ("/tasks/task/delete", DeleteTaskData, service,
Packit 4b6dd7
	            set_up_delete_task, test_task_delete,
Packit 4b6dd7
	            tear_down_delete_task);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/tasks/task/properties", test_task_properties);
Packit 4b6dd7
	g_test_add_func ("/tasks/task/escaping", test_task_escaping);
Packit 4b6dd7
	g_test_add_func ("/tasks/task/parser/minimal",
Packit 4b6dd7
	                 test_task_parser_minimal);
Packit 4b6dd7
	g_test_add_func ("/tasks/task/parser/normal", test_task_parser_normal);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/tasks/tasklist/properties",
Packit 4b6dd7
	                 test_tasklist_properties);
Packit 4b6dd7
	g_test_add_func ("/tasks/tasklist/escaping", test_tasklist_escaping);
Packit 4b6dd7
	g_test_add_func ("/tasks/tasklist/parser/normal",
Packit 4b6dd7
	                 test_tasklist_parser_normal);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/tasks/query/uri", test_query_uri);
Packit 4b6dd7
	g_test_add_func ("/tasks/query/etag", test_query_etag);
Packit 4b6dd7
	g_test_add_func ("/tasks/query/properties", test_query_properties);
Packit 4b6dd7
Packit 4b6dd7
	retval = g_test_run ();
Packit 4b6dd7
Packit 4b6dd7
	g_clear_object (&unauthorised_service);
Packit 4b6dd7
	g_clear_object (&service);
Packit 4b6dd7
	g_clear_object (&unauthorised_authorizer);
Packit 4b6dd7
	g_clear_object (&authorizer);
Packit 4b6dd7
Packit 4b6dd7
	return retval;
Packit 4b6dd7
}