Blame gdata/tests/calendar.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 2009, 2010, 2014, 2015, 2017 <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;
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
typedef struct {
Packit 4b6dd7
	GDataCalendarCalendar *calendar;
Packit 4b6dd7
} TempCalendarData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_temp_calendar (TempCalendarData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarCalendar *calendar;
Packit 4b6dd7
	GDataColor colour;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-temp-calendar");
Packit 4b6dd7
Packit 4b6dd7
	g_assert (gdata_color_from_hexadecimal ("#7A367A", &colour) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	/* Create a single temporary test calendar */
Packit 4b6dd7
	calendar = gdata_calendar_calendar_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (calendar), "Temp Test Calendar");
Packit 4b6dd7
	gdata_calendar_calendar_set_color (calendar, &colour);
Packit 4b6dd7
	data->calendar = GDATA_CALENDAR_CALENDAR (gdata_service_insert_entry (GDATA_SERVICE (service),
Packit 4b6dd7
	                                                                      gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                                                      "https://www.googleapis.com/calendar/v3/calendars",
Packit 4b6dd7
	                                                                      GDATA_ENTRY (calendar), NULL, NULL));
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_CALENDAR (data->calendar));
Packit 4b6dd7
	g_object_unref (calendar);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_temp_calendar (TempCalendarData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-temp-calendar");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the calendar */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->calendar), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->calendar);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
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_CALENDAR_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_calendar_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
typedef struct {
Packit 4b6dd7
	GDataCalendarCalendar *calendar1;
Packit 4b6dd7
	GDataCalendarCalendar *calendar2;
Packit 4b6dd7
} QueryCalendarsData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_query_calendars (QueryCalendarsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarCalendar *calendar;
Packit 4b6dd7
	GDataColor colour;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-query-calendars");
Packit 4b6dd7
Packit 4b6dd7
	g_assert (gdata_color_from_hexadecimal ("#7A367A", &colour) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	/* Create some new calendars for queries */
Packit 4b6dd7
	calendar = gdata_calendar_calendar_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (calendar), "Test Calendar 1");
Packit 4b6dd7
	gdata_calendar_calendar_set_color (calendar, &colour);
Packit 4b6dd7
	data->calendar1 = GDATA_CALENDAR_CALENDAR (gdata_service_insert_entry (GDATA_SERVICE (service),
Packit 4b6dd7
	                                                                       gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                                                       "https://www.googleapis.com/calendar/v3/calendars",
Packit 4b6dd7
	                                                                       GDATA_ENTRY (calendar), NULL, NULL));
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_CALENDAR (data->calendar1));
Packit 4b6dd7
	g_object_unref (calendar);
Packit 4b6dd7
Packit 4b6dd7
	calendar = gdata_calendar_calendar_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (calendar), "Test Calendar 2");
Packit 4b6dd7
	gdata_calendar_calendar_set_color (calendar, &colour);
Packit 4b6dd7
	data->calendar2 = GDATA_CALENDAR_CALENDAR (gdata_service_insert_entry (GDATA_SERVICE (service),
Packit 4b6dd7
	                                                                       gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                                                       "https://www.googleapis.com/calendar/v3/calendars",
Packit 4b6dd7
	                                                                       GDATA_ENTRY (calendar), NULL, NULL));
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_CALENDAR (data->calendar2));
Packit 4b6dd7
	g_object_unref (calendar);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_query_calendars (QueryCalendarsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-query-calendars");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the calendars */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->calendar1), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->calendar1);
Packit 4b6dd7
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->calendar2), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->calendar2);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_all_calendars (QueryCalendarsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFeed *feed;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "query-all-calendars");
Packit 4b6dd7
Packit 4b6dd7
	feed = gdata_calendar_service_query_all_calendars (GDATA_CALENDAR_SERVICE (service), NULL, NULL, NULL, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_FEED (feed));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: check entries and feed properties */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (feed);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_calendars, QueryCalendarsData);
Packit 4b6dd7
Packit 4b6dd7
GDATA_ASYNC_TEST_FUNCTIONS (query_all_calendars, QueryCalendarsData,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	gdata_calendar_service_query_all_calendars_async (GDATA_CALENDAR_SERVICE (service), NULL, cancellable, NULL,
Packit 4b6dd7
	                                                  NULL, NULL, async_ready_callback, async_data);
Packit 4b6dd7
} G_STMT_END,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	GDataFeed *feed;
Packit 4b6dd7
Packit 4b6dd7
	feed = gdata_service_query_finish (GDATA_SERVICE (obj), async_result, &error);
Packit 4b6dd7
Packit 4b6dd7
	if (error == NULL) {
Packit 4b6dd7
		/* TODO: Tests? */
Packit 4b6dd7
		g_assert (GDATA_IS_CALENDAR_FEED (feed));
Packit 4b6dd7
Packit 4b6dd7
		g_object_unref (feed);
Packit 4b6dd7
	} else {
Packit 4b6dd7
		g_assert (feed == NULL);
Packit 4b6dd7
	}
Packit 4b6dd7
} G_STMT_END);
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_all_calendars_async_progress_closure (QueryCalendarsData *query_data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataAsyncProgressClosure *data = g_slice_new0 (GDataAsyncProgressClosure);
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "query-all-calendars-async-progress-closure");
Packit 4b6dd7
Packit 4b6dd7
	data->main_loop = g_main_loop_new (NULL, TRUE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_service_query_all_calendars_async (GDATA_CALENDAR_SERVICE (service), NULL, NULL,
Packit 4b6dd7
	                                                  (GDataQueryProgressCallback) gdata_test_async_progress_callback,
Packit 4b6dd7
	                                                  data, (GDestroyNotify) gdata_test_async_progress_closure_free,
Packit 4b6dd7
	                                                  (GAsyncReadyCallback) gdata_test_async_progress_finish_callback, data);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (data->main_loop);
Packit 4b6dd7
	g_main_loop_unref (data->main_loop);
Packit 4b6dd7
Packit 4b6dd7
	/* Check that both callbacks were called exactly once */
Packit 4b6dd7
	g_assert_cmpuint (data->progress_destroy_notify_count, ==, 1);
Packit 4b6dd7
	g_assert_cmpuint (data->async_ready_notify_count, ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_slice_free (GDataAsyncProgressClosure, data);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_own_calendars (QueryCalendarsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFeed *feed;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "query-own-calendars");
Packit 4b6dd7
Packit 4b6dd7
	feed = gdata_calendar_service_query_own_calendars (GDATA_CALENDAR_SERVICE (service), NULL, NULL, NULL, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_FEED (feed));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: check entries and feed properties */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (feed);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
GDATA_ASYNC_TEST_FUNCTIONS (query_own_calendars, QueryCalendarsData,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	gdata_calendar_service_query_own_calendars_async (GDATA_CALENDAR_SERVICE (service), NULL, cancellable, NULL,
Packit 4b6dd7
	                                                  NULL, NULL, async_ready_callback, async_data);
Packit 4b6dd7
} G_STMT_END,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	GDataFeed *feed;
Packit 4b6dd7
Packit 4b6dd7
	feed = gdata_service_query_finish (GDATA_SERVICE (obj), async_result, &error);
Packit 4b6dd7
Packit 4b6dd7
	if (error == NULL) {
Packit 4b6dd7
		g_assert (GDATA_IS_CALENDAR_FEED (feed));
Packit 4b6dd7
		/* TODO: Tests? */
Packit 4b6dd7
Packit 4b6dd7
		g_object_unref (feed);
Packit 4b6dd7
	} else {
Packit 4b6dd7
		g_assert (feed == NULL);
Packit 4b6dd7
	}
Packit 4b6dd7
} G_STMT_END);
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_own_calendars_async_progress_closure (QueryCalendarsData *query_data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataAsyncProgressClosure *data = g_slice_new0 (GDataAsyncProgressClosure);
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "query-own-calendars-async-progress-closure");
Packit 4b6dd7
Packit 4b6dd7
	data->main_loop = g_main_loop_new (NULL, TRUE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_service_query_own_calendars_async (GDATA_CALENDAR_SERVICE (service), NULL, NULL,
Packit 4b6dd7
	                                               (GDataQueryProgressCallback) gdata_test_async_progress_callback,
Packit 4b6dd7
	                                               data, (GDestroyNotify) gdata_test_async_progress_closure_free,
Packit 4b6dd7
	                                               (GAsyncReadyCallback) gdata_test_async_progress_finish_callback, data);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (data->main_loop);
Packit 4b6dd7
	g_main_loop_unref (data->main_loop);
Packit 4b6dd7
Packit 4b6dd7
	/* Check that both callbacks were called exactly once */
Packit 4b6dd7
	g_assert_cmpuint (data->progress_destroy_notify_count, ==, 1);
Packit 4b6dd7
	g_assert_cmpuint (data->async_ready_notify_count, ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_slice_free (GDataAsyncProgressClosure, data);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	TempCalendarData parent;
Packit 4b6dd7
	GDataCalendarEvent *event1;
Packit 4b6dd7
	GDataCalendarEvent *event2;
Packit 4b6dd7
	GDataCalendarEvent *event3;
Packit 4b6dd7
} QueryEventsData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_query_events (QueryEventsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event;
Packit 4b6dd7
	GDataGDWhen *when;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	/* Set up a temporary calendar */
Packit 4b6dd7
	set_up_temp_calendar ((TempCalendarData*) data, service);
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-query-events");
Packit 4b6dd7
Packit 4b6dd7
	/* Add some test events to it */
Packit 4b6dd7
	event = gdata_calendar_event_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (event), "Test Event 1");
Packit 4b6dd7
Packit 4b6dd7
	when = gdata_gd_when_new (1419113727, 1419113728, FALSE);
Packit 4b6dd7
	gdata_calendar_event_add_time (event, when);
Packit 4b6dd7
	g_object_unref (when);
Packit 4b6dd7
Packit 4b6dd7
	data->event1 = gdata_calendar_service_insert_calendar_event (GDATA_CALENDAR_SERVICE (service), data->parent.calendar, event, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_EVENT (data->event1));
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
Packit 4b6dd7
	event = gdata_calendar_event_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (event), "Test Event 2");
Packit 4b6dd7
Packit 4b6dd7
	when = gdata_gd_when_new (1419113000, 1419114000, FALSE);
Packit 4b6dd7
	gdata_calendar_event_add_time (event, when);
Packit 4b6dd7
	g_object_unref (when);
Packit 4b6dd7
Packit 4b6dd7
	data->event2 = gdata_calendar_service_insert_calendar_event (GDATA_CALENDAR_SERVICE (service), data->parent.calendar, event, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_EVENT (data->event2));
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
Packit 4b6dd7
	event = gdata_calendar_event_new (NULL);
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (event), "Test Event 3");
Packit 4b6dd7
Packit 4b6dd7
	when = gdata_gd_when_new (1419110000, 1419120000, TRUE);
Packit 4b6dd7
	gdata_calendar_event_add_time (event, when);
Packit 4b6dd7
	g_object_unref (when);
Packit 4b6dd7
Packit 4b6dd7
	data->event3 = gdata_calendar_service_insert_calendar_event (GDATA_CALENDAR_SERVICE (service), data->parent.calendar, event, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_EVENT (data->event3));
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_query_events (QueryEventsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-query-events");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the events */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->event1), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->event1);
Packit 4b6dd7
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->event2), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->event2);
Packit 4b6dd7
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->event3), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->event3);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the calendar */
Packit 4b6dd7
	tear_down_temp_calendar ((TempCalendarData*) data, service);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_events (QueryEventsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFeed *feed;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "query-events");
Packit 4b6dd7
Packit 4b6dd7
	/* Get the entry feed */
Packit 4b6dd7
	feed = gdata_calendar_service_query_events (GDATA_CALENDAR_SERVICE (service), data->parent.calendar, NULL, NULL, NULL, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_FEED (feed));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: check entries and feed properties */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (feed);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_events, QueryEventsData);
Packit 4b6dd7
Packit 4b6dd7
GDATA_ASYNC_TEST_FUNCTIONS (query_events, QueryEventsData,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	gdata_calendar_service_query_events_async (GDATA_CALENDAR_SERVICE (service), data->parent.calendar, NULL, cancellable, NULL, NULL, NULL,
Packit 4b6dd7
	                                           async_ready_callback, async_data);
Packit 4b6dd7
} G_STMT_END,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	GDataFeed *feed;
Packit 4b6dd7
Packit 4b6dd7
	feed = gdata_service_query_finish (GDATA_SERVICE (obj), async_result, &error);
Packit 4b6dd7
Packit 4b6dd7
	if (error == NULL) {
Packit 4b6dd7
		g_assert (GDATA_IS_CALENDAR_FEED (feed));
Packit 4b6dd7
Packit 4b6dd7
		g_object_unref (feed);
Packit 4b6dd7
	} else {
Packit 4b6dd7
		g_assert (feed == NULL);
Packit 4b6dd7
	}
Packit 4b6dd7
} G_STMT_END);
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_events_async_progress_closure (QueryEventsData *query_data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataAsyncProgressClosure *data = g_slice_new0 (GDataAsyncProgressClosure);
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "query-events-async-progress-closure");
Packit 4b6dd7
Packit 4b6dd7
	data->main_loop = g_main_loop_new (NULL, TRUE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_service_query_events_async (GDATA_CALENDAR_SERVICE (service), query_data->parent.calendar, NULL, NULL,
Packit 4b6dd7
	                                           (GDataQueryProgressCallback) gdata_test_async_progress_callback,
Packit 4b6dd7
	                                           data, (GDestroyNotify) gdata_test_async_progress_closure_free,
Packit 4b6dd7
	                                           (GAsyncReadyCallback) gdata_test_async_progress_finish_callback, data);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (data->main_loop);
Packit 4b6dd7
	g_main_loop_unref (data->main_loop);
Packit 4b6dd7
Packit 4b6dd7
	/* Check that both callbacks were called exactly once */
Packit 4b6dd7
	g_assert_cmpuint (data->progress_destroy_notify_count, ==, 1);
Packit 4b6dd7
	g_assert_cmpuint (data->async_ready_notify_count, ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_slice_free (GDataAsyncProgressClosure, data);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	TempCalendarData parent;
Packit 4b6dd7
	GDataCalendarEvent *new_event;
Packit 4b6dd7
} InsertEventData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_insert_event (InsertEventData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	set_up_temp_calendar ((TempCalendarData*) data, service);
Packit 4b6dd7
	data->new_event = NULL;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_insert_event (InsertEventData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "teardown-insert-event");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the new event */
Packit 4b6dd7
	g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->new_event), NULL, NULL) == TRUE);
Packit 4b6dd7
	g_object_unref (data->new_event);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the calendar too */
Packit 4b6dd7
	tear_down_temp_calendar ((TempCalendarData*) data, service);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_event_insert (InsertEventData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event, *new_event;
Packit 4b6dd7
	GDataGDWhere *where;
Packit 4b6dd7
	GDataGDWho *who;
Packit 4b6dd7
	GDataGDWhen *when;
Packit 4b6dd7
	GTimeVal start_time, end_time;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "event-insert");
Packit 4b6dd7
Packit 4b6dd7
	event = gdata_calendar_event_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (event), "Tennis with Beth");
Packit 4b6dd7
	gdata_entry_set_content (GDATA_ENTRY (event), "Meet for a quick lesson.");
Packit 4b6dd7
	gdata_calendar_event_set_transparency (event, GDATA_GD_EVENT_TRANSPARENCY_OPAQUE);
Packit 4b6dd7
	gdata_calendar_event_set_status (event, GDATA_GD_EVENT_STATUS_CONFIRMED);
Packit 4b6dd7
	where = gdata_gd_where_new (NULL, "Rolling Lawn Courts", NULL);
Packit 4b6dd7
	gdata_calendar_event_add_place (event, where);
Packit 4b6dd7
	g_object_unref (where);
Packit 4b6dd7
	who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ORGANIZER, "John Smith‽", "john.smith@example.com");
Packit 4b6dd7
	gdata_calendar_event_add_person (event, who);
Packit 4b6dd7
	g_object_unref (who);
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &start_time);
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T17:00:00.000Z", &end_time);
Packit 4b6dd7
	when = gdata_gd_when_new (start_time.tv_sec, end_time.tv_sec, FALSE);
Packit 4b6dd7
	gdata_calendar_event_add_time (event, when);
Packit 4b6dd7
	g_object_unref (when);
Packit 4b6dd7
Packit 4b6dd7
	/* Insert the event */
Packit 4b6dd7
	new_event = data->new_event = gdata_calendar_service_insert_calendar_event (GDATA_CALENDAR_SERVICE (service),
Packit 4b6dd7
	                                                                            data->parent.calendar, event, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_EVENT (new_event));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: check entries and feed properties */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
GDATA_ASYNC_CLOSURE_FUNCTIONS (insert_event, InsertEventData);
Packit 4b6dd7
Packit 4b6dd7
GDATA_ASYNC_TEST_FUNCTIONS (event_insert, InsertEventData,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	GDataCalendarEvent *event;
Packit 4b6dd7
	GDataGDWhere *where;
Packit 4b6dd7
	GDataGDWho *who;
Packit 4b6dd7
	GDataGDWhen *when;
Packit 4b6dd7
	GTimeVal start_time;
Packit 4b6dd7
	GTimeVal end_time;
Packit 4b6dd7
Packit 4b6dd7
	event = gdata_calendar_event_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (event), "Tennis with Beth");
Packit 4b6dd7
	gdata_entry_set_content (GDATA_ENTRY (event), "Meet for a quick lesson.");
Packit 4b6dd7
	gdata_calendar_event_set_transparency (event, GDATA_GD_EVENT_TRANSPARENCY_OPAQUE);
Packit 4b6dd7
	gdata_calendar_event_set_status (event, GDATA_GD_EVENT_STATUS_CONFIRMED);
Packit 4b6dd7
	where = gdata_gd_where_new (NULL, "Rolling Lawn Courts", NULL);
Packit 4b6dd7
	gdata_calendar_event_add_place (event, where);
Packit 4b6dd7
	g_object_unref (where);
Packit 4b6dd7
	who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ORGANIZER, "John Smith‽", "john.smith@example.com");
Packit 4b6dd7
	gdata_calendar_event_add_person (event, who);
Packit 4b6dd7
	g_object_unref (who);
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &start_time);
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T17:00:00.000Z", &end_time);
Packit 4b6dd7
	when = gdata_gd_when_new (start_time.tv_sec, end_time.tv_sec, FALSE);
Packit 4b6dd7
	gdata_calendar_event_add_time (event, when);
Packit 4b6dd7
	g_object_unref (when);
Packit 4b6dd7
Packit 4b6dd7
	/* Insert the event */
Packit 4b6dd7
	gdata_calendar_service_insert_calendar_event_async (GDATA_CALENDAR_SERVICE (service),
Packit 4b6dd7
	                                                    data->parent.calendar, event, cancellable,
Packit 4b6dd7
	                                                    async_ready_callback, async_data);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
} G_STMT_END,
Packit 4b6dd7
G_STMT_START {
Packit 4b6dd7
	GDataEntry *event;
Packit 4b6dd7
	event = gdata_service_insert_entry_finish (GDATA_SERVICE (obj), async_result, &error);
Packit 4b6dd7
	if (error == NULL) {
Packit 4b6dd7
		g_assert (GDATA_IS_CALENDAR_EVENT (event));
Packit 4b6dd7
		data->new_event = GDATA_CALENDAR_EVENT (event);
Packit 4b6dd7
		g_assert_cmpstr (gdata_entry_get_title (event), ==, "Tennis with Beth");
Packit 4b6dd7
	} else {
Packit 4b6dd7
		g_assert (event == NULL);
Packit 4b6dd7
	}
Packit 4b6dd7
} G_STMT_END);
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_event_json (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event;
Packit 4b6dd7
	GDataGDWhere *where;
Packit 4b6dd7
	GDataGDWho *who;
Packit 4b6dd7
	GDataGDWhen *when;
Packit 4b6dd7
	GTimeVal start_time, end_time;
Packit 4b6dd7
Packit 4b6dd7
	event = gdata_calendar_event_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	gdata_entry_set_title (GDATA_ENTRY (event), "Tennis with Beth");
Packit 4b6dd7
	gdata_entry_set_content (GDATA_ENTRY (event), "Meet for a quick lesson.");
Packit 4b6dd7
	gdata_calendar_event_set_transparency (event, GDATA_GD_EVENT_TRANSPARENCY_OPAQUE);
Packit 4b6dd7
	gdata_calendar_event_set_status (event, GDATA_GD_EVENT_STATUS_CONFIRMED);
Packit 4b6dd7
	where = gdata_gd_where_new (NULL, "Rolling Lawn Courts", NULL);
Packit 4b6dd7
	gdata_calendar_event_add_place (event, where);
Packit 4b6dd7
	g_object_unref (where);
Packit 4b6dd7
	who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ORGANIZER, "John Smith‽", "john.smith@example.com");
Packit 4b6dd7
	gdata_calendar_event_add_person (event, who);
Packit 4b6dd7
	g_object_unref (who);
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &start_time);
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T17:00:00.000Z", &end_time);
Packit 4b6dd7
	when = gdata_gd_when_new (start_time.tv_sec, end_time.tv_sec, FALSE);
Packit 4b6dd7
	gdata_calendar_event_add_time (event, when);
Packit 4b6dd7
	g_object_unref (when);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the JSON */
Packit 4b6dd7
	gdata_test_assert_json (event, "{"
Packit 4b6dd7
		"'summary': 'Tennis with Beth',"
Packit 4b6dd7
		"'description': 'Meet for a quick lesson.',"
Packit 4b6dd7
		"'kind': 'calendar#event',"
Packit 4b6dd7
		"'status': 'confirmed',"
Packit 4b6dd7
		"'transparency': 'opaque',"
Packit 4b6dd7
		"'guestsCanModify': false,"
Packit 4b6dd7
		"'guestsCanInviteOthers': false,"
Packit 4b6dd7
		"'guestsCanSeeOtherGuests': false,"
Packit 4b6dd7
		"'anyoneCanAddSelf': false,"
Packit 4b6dd7
		"'start': {"
Packit 4b6dd7
			"'dateTime': '2009-04-17T15:00:00Z',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'end': {"
Packit 4b6dd7
			"'dateTime': '2009-04-17T17:00:00Z',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'attendees': ["
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'john.smith@example.com',"
Packit 4b6dd7
				"'displayName': 'John Smith‽',"
Packit 4b6dd7
				"'organizer': true"
Packit 4b6dd7
			"}"
Packit 4b6dd7
		"],"
Packit 4b6dd7
		"'organizer': {"
Packit 4b6dd7
			"'email': 'john.smith@example.com',"
Packit 4b6dd7
			"'displayName': 'John Smith‽'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'location': 'Rolling Lawn Courts'"
Packit 4b6dd7
	"}");
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_event_json_attendees (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event;
Packit 4b6dd7
	GList/*<unowned GDataGDWho>*/ *l;
Packit 4b6dd7
	guint n_people;
Packit 4b6dd7
	const struct {
Packit 4b6dd7
		const gchar *relation_type;
Packit 4b6dd7
		const gchar *value_string;
Packit 4b6dd7
		const gchar *email_address;
Packit 4b6dd7
	} expected[] = {
Packit 4b6dd7
		{ GDATA_GD_WHO_EVENT_ATTENDEE, "Joe Hibbs", "person1@gmail.com" },
Packit 4b6dd7
		{ GDATA_GD_WHO_EVENT_ATTENDEE, "Me McMeeson", "me@gmail.com" },
Packit 4b6dd7
		{ GDATA_GD_WHO_EVENT_ATTENDEE, NULL, "person2@gmail.com" },
Packit 4b6dd7
		{ GDATA_GD_WHO_EVENT_ATTENDEE, "Example Person 3", "person3@gmail.com" },
Packit 4b6dd7
		{ GDATA_GD_WHO_EVENT_ATTENDEE, NULL, "person4@gmail.com" },
Packit 4b6dd7
		{ GDATA_GD_WHO_EVENT_ORGANIZER, "Ruth Pettut", "blah@example.com" },
Packit 4b6dd7
	};
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	event = GDATA_CALENDAR_EVENT (gdata_parsable_new_from_json (GDATA_TYPE_CALENDAR_EVENT, "{"
Packit 4b6dd7
		"'kind': 'calendar#event',"
Packit 4b6dd7
		"'id': 'some-id',"
Packit 4b6dd7
		"'created': '2017-02-04T17:53:47.000Z',"
Packit 4b6dd7
		"'summary': 'Duff this',"
Packit 4b6dd7
		"'organizer': {"
Packit 4b6dd7
			"'email': 'blah@example.com',"
Packit 4b6dd7
			"'displayName': 'Ruth Pettut'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'attendees': ["
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'person1@gmail.com',"
Packit 4b6dd7
				"'displayName': 'Joe Hibbs',"
Packit 4b6dd7
				"'responseStatus': 'accepted'"
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'me@gmail.com',"
Packit 4b6dd7
				"'displayName': 'Me McMeeson',"
Packit 4b6dd7
				"'self': true,"
Packit 4b6dd7
				"'responseStatus': 'needsAction'"
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'person2@gmail.com',"
Packit 4b6dd7
				"'responseStatus': 'needsAction'"
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'person3@gmail.com',"
Packit 4b6dd7
				"'displayName': 'Example Person 3',"
Packit 4b6dd7
				"'responseStatus': 'tentative',"
Packit 4b6dd7
				"'comment': 'Some poor excuse about not coming.'"
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'person4@gmail.com',"
Packit 4b6dd7
				"'responseStatus': 'accepted'"
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'blah@example.com',"
Packit 4b6dd7
				"'displayName': 'Ruth Pettut',"
Packit 4b6dd7
				"'organizer': true,"
Packit 4b6dd7
				"'responseStatus': 'accepted'"
Packit 4b6dd7
			"}"
Packit 4b6dd7
		"]"
Packit 4b6dd7
	"}", -1, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_ENTRY (event));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	/* Check attendee details. */
Packit 4b6dd7
	for (n_people = 0, l = gdata_calendar_event_get_people (event);
Packit 4b6dd7
	     l != NULL;
Packit 4b6dd7
	     n_people += 1, l = l->next) {
Packit 4b6dd7
		GDataGDWho *who = GDATA_GD_WHO (l->data);
Packit 4b6dd7
		gsize i;
Packit 4b6dd7
Packit 4b6dd7
		g_test_message ("Examining attendee: %s",
Packit 4b6dd7
		                gdata_gd_who_get_email_address (who));
Packit 4b6dd7
Packit 4b6dd7
		for (i = 0; i < G_N_ELEMENTS (expected); i++) {
Packit 4b6dd7
			if (g_strcmp0 (gdata_gd_who_get_email_address (who),
Packit 4b6dd7
			               expected[i].email_address) == 0) {
Packit 4b6dd7
				g_assert_cmpstr (gdata_gd_who_get_relation_type (who), ==, expected[i].relation_type);
Packit 4b6dd7
				g_assert_cmpstr (gdata_gd_who_get_value_string (who), ==, expected[i].value_string);
Packit 4b6dd7
				break;
Packit 4b6dd7
			}
Packit 4b6dd7
		}
Packit 4b6dd7
Packit 4b6dd7
		g_assert_cmpuint (i, <, G_N_ELEMENTS (expected));
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (n_people, ==, G_N_ELEMENTS (expected));
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_event_json_dates (void)
Packit 4b6dd7
{
Packit 4b6dd7
	guint i;
Packit 4b6dd7
Packit 4b6dd7
	const struct {
Packit 4b6dd7
		const gchar *json;
Packit 4b6dd7
		gboolean is_date;
Packit 4b6dd7
		gint64 start_time;
Packit 4b6dd7
		gint64 end_time;
Packit 4b6dd7
		const gchar *output_json;  /* NULL if equal to @json */
Packit 4b6dd7
	} test_vectors[] = {
Packit 4b6dd7
		/* Plain date, single day. */
Packit 4b6dd7
		{ "'start': {"
Packit 4b6dd7
			"'date': '2009-04-17',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'end': {"
Packit 4b6dd7
			"'date': '2009-04-18',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"}", TRUE, 1239926400, 1239926400 + 86400, NULL },
Packit 4b6dd7
		/* Full date and time. */
Packit 4b6dd7
		{ "'start': {"
Packit 4b6dd7
			"'dateTime': '2009-04-17T15:00:00Z',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'end': {"
Packit 4b6dd7
			"'dateTime': '2009-04-17T16:00:00Z',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"}", FALSE, 1239926400 + 54000, 1239926400 + 54000 + 3600, NULL },
Packit 4b6dd7
		/* Start and end time. */
Packit 4b6dd7
		{ "'start': {"
Packit 4b6dd7
			"'date': '2009-04-27',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'end': {"
Packit 4b6dd7
			"'date': '20090506',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"}", TRUE, 1239926400 + 864000, 1241568000, "'start': {"
Packit 4b6dd7
			"'date': '2009-04-27',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'end': {"
Packit 4b6dd7
			"'date': '2009-05-06',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"}" },
Packit 4b6dd7
	};
Packit 4b6dd7
Packit 4b6dd7
	for (i = 0; i < G_N_ELEMENTS (test_vectors); i++) {
Packit 4b6dd7
		gchar *json = NULL, *output_json = NULL;  /* owned */
Packit 4b6dd7
		GDataCalendarEvent *event;
Packit 4b6dd7
		GList *j;
Packit 4b6dd7
		GDataGDWhen *when;
Packit 4b6dd7
		gint64 _time;
Packit 4b6dd7
		GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
		json = g_strdup_printf ("{"
Packit 4b6dd7
			"'summary': 'Tennis with Beth',"
Packit 4b6dd7
			"'description': 'Meet for a quick lesson.',"
Packit 4b6dd7
			"'kind': 'calendar#event',"
Packit 4b6dd7
			"%s"
Packit 4b6dd7
		"}", test_vectors[i].json);
Packit 4b6dd7
		output_json = g_strdup_printf ("{"
Packit 4b6dd7
			"'summary': 'Tennis with Beth',"
Packit 4b6dd7
			"'description': 'Meet for a quick lesson.',"
Packit 4b6dd7
			"'kind': 'calendar#event',"
Packit 4b6dd7
			"'guestsCanModify': false,"
Packit 4b6dd7
			"'guestsCanInviteOthers': false,"
Packit 4b6dd7
			"'guestsCanSeeOtherGuests': false,"
Packit 4b6dd7
			"'anyoneCanAddSelf': false,"
Packit 4b6dd7
			"'attendees': [],"
Packit 4b6dd7
			"%s"
Packit 4b6dd7
		"}", (test_vectors[i].output_json != NULL) ? test_vectors[i].output_json : test_vectors[i].json);
Packit 4b6dd7
Packit 4b6dd7
		event = GDATA_CALENDAR_EVENT (gdata_parsable_new_from_json (GDATA_TYPE_CALENDAR_EVENT, json, -1, &error));
Packit 4b6dd7
		g_assert_no_error (error);
Packit 4b6dd7
		g_assert (GDATA_IS_ENTRY (event));
Packit 4b6dd7
		g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
		/* Check the times */
Packit 4b6dd7
		j = gdata_calendar_event_get_times (event);
Packit 4b6dd7
		g_assert (j != NULL);
Packit 4b6dd7
Packit 4b6dd7
		when = GDATA_GD_WHEN (j->data);
Packit 4b6dd7
		g_assert (gdata_gd_when_is_date (when) == test_vectors[i].is_date);
Packit 4b6dd7
		_time = gdata_gd_when_get_start_time (when);
Packit 4b6dd7
		g_assert_cmpint (_time, ==, test_vectors[i].start_time);
Packit 4b6dd7
		_time = gdata_gd_when_get_end_time (when);
Packit 4b6dd7
		g_assert_cmpint (_time, ==, test_vectors[i].end_time);
Packit 4b6dd7
		g_assert (gdata_gd_when_get_value_string (when) == NULL);
Packit 4b6dd7
		g_assert (gdata_gd_when_get_reminders (when) == NULL);
Packit 4b6dd7
Packit 4b6dd7
		/* Should be no other times. */
Packit 4b6dd7
		g_assert (j->next == NULL);
Packit 4b6dd7
Packit 4b6dd7
		/* Check the JSON */
Packit 4b6dd7
		gdata_test_assert_json (event, output_json);
Packit 4b6dd7
Packit 4b6dd7
		g_object_unref (event);
Packit 4b6dd7
		g_free (output_json);
Packit 4b6dd7
		g_free (json);
Packit 4b6dd7
	}
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_event_json_organizer (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	event = GDATA_CALENDAR_EVENT (gdata_parsable_new_from_json (GDATA_TYPE_CALENDAR_EVENT, "{"
Packit 4b6dd7
		"'kind': 'calendar#event',"
Packit 4b6dd7
		"'id': 'some-id',"
Packit 4b6dd7
		"'created': '2013-12-22T18:00:00.000Z',"
Packit 4b6dd7
		"'summary': 'FOSDEM GNOME Beer Event',"
Packit 4b6dd7
		"'organizer': {"
Packit 4b6dd7
			"'id': 'another-id',"
Packit 4b6dd7
			"'displayName': 'Guillaume Desmottes'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'attendees': ["
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'id': 'another-id',"
Packit 4b6dd7
				"'displayName': 'Guillaume Desmottes',"
Packit 4b6dd7
				"'organizer': true,"
Packit 4b6dd7
				"'responseStatus': 'accepted'"
Packit 4b6dd7
			"}"
Packit 4b6dd7
		"]"
Packit 4b6dd7
	"}", -1, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_ENTRY (event));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_event_json_recurrence (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
	gchar *id, *uri;
Packit 4b6dd7
Packit 4b6dd7
	event = GDATA_CALENDAR_EVENT (gdata_parsable_new_from_json (GDATA_TYPE_CALENDAR_EVENT, "{"
Packit 4b6dd7
		"'id': 'https://www.googleapis.com/calendar/v3/calendars/libgdata.test@googlemail.com/events/g5928e82rrch95b25f8ud0dlsg_20090429T153000Z',"
Packit 4b6dd7
		"'updated': '2009-04-27T17:54:10.000Z',"
Packit 4b6dd7
		"'summary': 'Test daily instance event',"
Packit 4b6dd7
		"'kind': 'calendar#event',"
Packit 4b6dd7
		"'creator': {"
Packit 4b6dd7
			"'displayName': 'GData Test',"
Packit 4b6dd7
			"'email': 'libgdata.test@googlemail.com'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'recurringEventId': 'g5928e82rrch95b25f8ud0dlsg',"
Packit 4b6dd7
		"'originalStartTime': {"
Packit 4b6dd7
			"'dateTime': '2009-04-29T16:30:00.000+01:00',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'guestsCanModify': false,"
Packit 4b6dd7
		"'guestsCanInviteOthers': false,"
Packit 4b6dd7
		"'guestsCanSeeOtherGuests': false,"
Packit 4b6dd7
		"'anyoneCanAddSelf': false,"
Packit 4b6dd7
		"'status': 'confirmed',"
Packit 4b6dd7
		"'visibility': 'private',"
Packit 4b6dd7
		"'transparency': 'opaque',"
Packit 4b6dd7
		"'iCalUID': 'g5928e82rrch95b25f8ud0dlsg@google.com',"
Packit 4b6dd7
		"'sequence': '0',"
Packit 4b6dd7
		"'start': {"
Packit 4b6dd7
			"'dateTime': '2009-04-29T17:30:00.000+01:00',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'end': {"
Packit 4b6dd7
			"'dateTime': '2009-04-29T17:30:00.000+01:00',"
Packit 4b6dd7
			"'timeZone': 'UTC'"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'reminders': {"
Packit 4b6dd7
			"'overrides': [{"
Packit 4b6dd7
				"'method': 'email',"
Packit 4b6dd7
				"'minutes': 10"
Packit 4b6dd7
			"}, {"
Packit 4b6dd7
				"'method': 'popup',"
Packit 4b6dd7
				"'minutes': 10"
Packit 4b6dd7
			"}]"
Packit 4b6dd7
		"},"
Packit 4b6dd7
		"'attendees': ["
Packit 4b6dd7
			"{"
Packit 4b6dd7
				"'email': 'libgdata.test@googlemail.com',"
Packit 4b6dd7
				"'displayName': 'GData Test',"
Packit 4b6dd7
				"'organizer': true,"
Packit 4b6dd7
				"'responseStatus': 'needsAction'"
Packit 4b6dd7
			"}"
Packit 4b6dd7
		"],"
Packit 4b6dd7
		"'organizer': {"
Packit 4b6dd7
			"'email': 'libgdata.test@googlemail.com',"
Packit 4b6dd7
			"'displayName': 'GData Test'"
Packit 4b6dd7
		"}"
Packit 4b6dd7
	"}", -1, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_ENTRY (event));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the original event */
Packit 4b6dd7
	g_assert (gdata_calendar_event_is_exception (event) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_event_get_original_event_details (event, &id, &uri);
Packit 4b6dd7
	g_assert_cmpstr (id, ==, "g5928e82rrch95b25f8ud0dlsg");
Packit 4b6dd7
	g_assert_cmpstr (uri, ==, "https://www.googleapis.com/calendar/v3/events/g5928e82rrch95b25f8ud0dlsg");
Packit 4b6dd7
Packit 4b6dd7
	g_free (id);
Packit 4b6dd7
	g_free (uri);
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_calendar_escaping (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarCalendar *calendar;
Packit 4b6dd7
Packit 4b6dd7
	calendar = gdata_calendar_calendar_new (NULL);
Packit 4b6dd7
	gdata_calendar_calendar_set_timezone (calendar, "<timezone>");
Packit 4b6dd7
Packit 4b6dd7
	/* Check the outputted JSON is escaped properly */
Packit 4b6dd7
	gdata_test_assert_json (calendar, "{"
Packit 4b6dd7
		"'kind': 'calendar#calendar',"
Packit 4b6dd7
		"'timeZone': '<timezone>',"
Packit 4b6dd7
		"'hidden': false,"
Packit 4b6dd7
		"'backgroundColor': '#000000',"
Packit 4b6dd7
		"'selected': false"
Packit 4b6dd7
	"}");
Packit 4b6dd7
	g_object_unref (calendar);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_event_escaping (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event;
Packit 4b6dd7
Packit 4b6dd7
	event = gdata_calendar_event_new (NULL);
Packit 4b6dd7
	gdata_calendar_event_set_status (event, "\"status\"");
Packit 4b6dd7
	gdata_calendar_event_set_visibility (event, "\"visibility\"");
Packit 4b6dd7
	gdata_calendar_event_set_transparency (event, "\"transparency\"");
Packit 4b6dd7
	gdata_calendar_event_set_uid (event, "\"uid\"");
Packit 4b6dd7
	gdata_calendar_event_set_recurrence (event, "\"recurrence\"");
Packit 4b6dd7
Packit 4b6dd7
	/* Check the outputted JSON is escaped properly */
Packit 4b6dd7
	gdata_test_assert_json (event, "{"
Packit 4b6dd7
		"'kind': 'calendar#event',"
Packit 4b6dd7
		"'status': '\"status\"',"
Packit 4b6dd7
		"'transparency': '\"transparency\"',"
Packit 4b6dd7
		"'visibility': '\"visibility\"',"
Packit 4b6dd7
		"'iCalUID': '\"uid\"',"
Packit 4b6dd7
		"'recurrence': [ '\"recurrence\"' ],"
Packit 4b6dd7
		"'guestsCanModify': false,"
Packit 4b6dd7
		"'guestsCanInviteOthers': false,"
Packit 4b6dd7
		"'guestsCanSeeOtherGuests': false,"
Packit 4b6dd7
		"'anyoneCanAddSelf': false,"
Packit 4b6dd7
		"'attendees': []"
Packit 4b6dd7
	"}");
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test the event parser with the minimal number of properties specified. */
Packit 4b6dd7
static void
Packit 4b6dd7
test_calendar_event_parser_minimal (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarEvent *event = NULL;  /* owned */
Packit 4b6dd7
	GDataEntry *entry;  /* unowned */
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	event = GDATA_CALENDAR_EVENT (gdata_parsable_new_from_json (GDATA_TYPE_CALENDAR_EVENT,
Packit 4b6dd7
		"{"
Packit 4b6dd7
			"\"kind\": \"calendar#event\","
Packit 4b6dd7
			"\"etag\": \"\\\"2838230136828000\\\"\","
Packit 4b6dd7
			"\"id\": \"hsfgtc50u68vdai81t6634u7lg\","
Packit 4b6dd7
			"\"status\": \"confirmed\","
Packit 4b6dd7
			"\"htmlLink\": \"https://www.google.com/calendar/event?eid=aHNmZ3RjNTB1Njh2ZGFpODF0NjYzNHU3bGcgODk5MWkzNjM0YzRzN3Nwa3NrcjNjZjVuanNAZw\","
Packit 4b6dd7
			"\"created\": \"2014-12-20T22:37:48.000Z\","
Packit 4b6dd7
			"\"updated\": \"2014-12-20T22:37:48.414Z\","
Packit 4b6dd7
			"\"summary\": \"Test Event 1\","
Packit 4b6dd7
			"\"creator\": {"
Packit 4b6dd7
				"\"email\": \"libgdata.test@googlemail.com\","
Packit 4b6dd7
				"\"displayName\": \"GData Test\""
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"\"organizer\": {"
Packit 4b6dd7
				"\"email\": \"8991i3634c4s7spkskr3cf5njs@group.calendar.google.com\","
Packit 4b6dd7
				"\"displayName\": \"Temp Test Calendar\","
Packit 4b6dd7
				"\"self\": true"
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"\"start\": {"
Packit 4b6dd7
				"\"dateTime\": \"2014-12-20T22:15:27Z\","
Packit 4b6dd7
				"\"timeZone\": \"UTC\""
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"\"end\": {"
Packit 4b6dd7
				"\"dateTime\": \"2014-12-20T22:15:28Z\","
Packit 4b6dd7
				"\"timeZone\": \"UTC\""
Packit 4b6dd7
			"},"
Packit 4b6dd7
			"\"iCalUID\": \"hsfgtc50u68vdai81t6634u7lg@google.com\","
Packit 4b6dd7
			"\"sequence\": 0,"
Packit 4b6dd7
			"\"guestsCanInviteOthers\": false,"
Packit 4b6dd7
			"\"guestsCanSeeOtherGuests\": false,"
Packit 4b6dd7
			"\"reminders\": {"
Packit 4b6dd7
				"\"useDefault\": true"
Packit 4b6dd7
			"}"
Packit 4b6dd7
		"}", -1, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_EVENT (event));
Packit 4b6dd7
	gdata_test_compare_kind (GDATA_ENTRY (event), "calendar#event", NULL);
Packit 4b6dd7
Packit 4b6dd7
	entry = GDATA_ENTRY (event);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the event’s properties. */
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_id (entry), ==,
Packit 4b6dd7
	                 "hsfgtc50u68vdai81t6634u7lg");
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_etag (entry), ==,
Packit 4b6dd7
	                 "\"2838230136828000\"");
Packit 4b6dd7
	g_assert_cmpstr (gdata_entry_get_title (entry), ==,
Packit 4b6dd7
	                 "Test Event 1");
Packit 4b6dd7
	g_assert_cmpint (gdata_entry_get_updated (entry), ==, 1419115068);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: check everything else */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (event);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_access_rule_properties (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarAccessRule *rule;
Packit 4b6dd7
	const gchar *scope_type, *scope_value;
Packit 4b6dd7
Packit 4b6dd7
	rule = gdata_calendar_access_rule_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	gdata_access_rule_set_role (GDATA_ACCESS_RULE (rule), GDATA_CALENDAR_ACCESS_ROLE_EDITOR);
Packit 4b6dd7
	g_assert_cmpstr (gdata_access_rule_get_role (GDATA_ACCESS_RULE (rule)), ==, GDATA_CALENDAR_ACCESS_ROLE_EDITOR);
Packit 4b6dd7
Packit 4b6dd7
	gdata_access_rule_set_scope (GDATA_ACCESS_RULE (rule), GDATA_ACCESS_SCOPE_USER, "darcy@gmail.com");
Packit 4b6dd7
	gdata_access_rule_get_scope (GDATA_ACCESS_RULE (rule), &scope_type, &scope_value);
Packit 4b6dd7
	g_assert_cmpstr (scope_type, ==, GDATA_ACCESS_SCOPE_USER);
Packit 4b6dd7
	g_assert_cmpstr (scope_value, ==, "darcy@gmail.com");
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_access_rule_json (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarAccessRule *rule;
Packit 4b6dd7
Packit 4b6dd7
	rule = gdata_calendar_access_rule_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	gdata_access_rule_set_role (GDATA_ACCESS_RULE (rule), GDATA_CALENDAR_ACCESS_ROLE_EDITOR);
Packit 4b6dd7
	gdata_access_rule_set_scope (GDATA_ACCESS_RULE (rule), GDATA_ACCESS_SCOPE_USER, "darcy@gmail.com");
Packit 4b6dd7
Packit 4b6dd7
	/* Check the JSON */
Packit 4b6dd7
	gdata_test_assert_json (rule, "{"
Packit 4b6dd7
		"'kind': 'calendar#aclRule',"
Packit 4b6dd7
		"'role': 'writer',"
Packit 4b6dd7
		"'scope': {"
Packit 4b6dd7
			"'type': 'user',"
Packit 4b6dd7
			"'value': 'darcy@gmail.com'"
Packit 4b6dd7
		"}"
Packit 4b6dd7
	"}");
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_uri (void)
Packit 4b6dd7
{
Packit 4b6dd7
	gint64 _time;
Packit 4b6dd7
	GTimeVal time_val;
Packit 4b6dd7
	gchar *query_uri;
Packit 4b6dd7
	GDataCalendarQuery *query = gdata_calendar_query_new ("q");
Packit 4b6dd7
Packit 4b6dd7
	/* Set to false or it will override our startMin below. */
Packit 4b6dd7
	gdata_calendar_query_set_future_events (query, FALSE);
Packit 4b6dd7
	g_assert (gdata_calendar_query_get_future_events (query) == FALSE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_query_set_order_by (query, "starttime");
Packit 4b6dd7
	g_assert_cmpstr (gdata_calendar_query_get_order_by (query), ==, "starttime");
Packit 4b6dd7
Packit 4b6dd7
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &time_val);
Packit 4b6dd7
	gdata_calendar_query_set_recurrence_expansion_start (query, time_val.tv_sec);
Packit 4b6dd7
	_time = gdata_calendar_query_get_recurrence_expansion_start (query);
Packit 4b6dd7
	g_assert_cmpint (_time, ==, time_val.tv_sec);
Packit 4b6dd7
Packit 4b6dd7
	g_time_val_from_iso8601 ("2010-04-17T15:00:00.000Z", &time_val);
Packit 4b6dd7
	gdata_calendar_query_set_recurrence_expansion_end (query, time_val.tv_sec);
Packit 4b6dd7
	_time = gdata_calendar_query_get_recurrence_expansion_end (query);
Packit 4b6dd7
	g_assert_cmpint (_time, ==, time_val.tv_sec);
Packit 4b6dd7
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_query_set_single_events (query, TRUE);
Packit 4b6dd7
	g_assert (gdata_calendar_query_get_single_events (query) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 4b6dd7
	gdata_calendar_query_set_sort_order (query, "descending");
Packit 4b6dd7
	g_assert_cmpstr (gdata_calendar_query_get_sort_order (query), ==, "descending");
Packit 4b6dd7
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 4b6dd7
Packit 4b6dd7
	g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &time_val);
Packit 4b6dd7
	gdata_calendar_query_set_start_min (query, time_val.tv_sec);
Packit 4b6dd7
	_time = gdata_calendar_query_get_start_min (query);
Packit 4b6dd7
	g_assert_cmpint (_time, ==, time_val.tv_sec);
Packit 4b6dd7
Packit 4b6dd7
	g_time_val_from_iso8601 ("2010-04-17T15:00:00.000Z", &time_val);
Packit 4b6dd7
	gdata_calendar_query_set_start_max (query, time_val.tv_sec);
Packit 4b6dd7
	_time = gdata_calendar_query_get_start_max (query);
Packit 4b6dd7
	g_assert_cmpint (_time, ==, time_val.tv_sec);
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_query_set_timezone (query, "America/Los Angeles");
Packit 4b6dd7
	g_assert_cmpstr (gdata_calendar_query_get_timezone (query), ==, "America/Los_Angeles");
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_query_set_max_attendees (query, 15);
Packit 4b6dd7
	g_assert_cmpuint (gdata_calendar_query_get_max_attendees (query), ==, 15);
Packit 4b6dd7
Packit 4b6dd7
	gdata_calendar_query_set_show_deleted (query, TRUE);
Packit 4b6dd7
	g_assert (gdata_calendar_query_show_deleted (query) == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the built query URI with a normal feed URI */
Packit 4b6dd7
	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query), "http://example.com");
Packit 4b6dd7
	g_assert_cmpstr (query_uri, ==, "http://example.com?q=q&orderBy=startTime&singleEvents=true"
Packit 4b6dd7
			                "&timeMin=2009-04-17T15:00:00Z&timeMax=2010-04-17T15:00:00Z&timeZone=America%2FLos_Angeles&maxAttendees=15"
Packit 4b6dd7
			                "&showDeleted=true");
Packit 4b6dd7
	g_free (query_uri);
Packit 4b6dd7
Packit 4b6dd7
	/* …with a feed URI with a trailing slash */
Packit 4b6dd7
	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query), "http://example.com/");
Packit 4b6dd7
	g_assert_cmpstr (query_uri, ==, "http://example.com/?q=q&orderBy=startTime&singleEvents=true"
Packit 4b6dd7
	                                "&timeMin=2009-04-17T15:00:00Z&timeMax=2010-04-17T15:00:00Z&timeZone=America%2FLos_Angeles&maxAttendees=15"
Packit 4b6dd7
	                                "&showDeleted=true");
Packit 4b6dd7
	g_free (query_uri);
Packit 4b6dd7
Packit 4b6dd7
	/* …with a feed URI with pre-existing arguments */
Packit 4b6dd7
	query_uri = gdata_query_get_query_uri (GDATA_QUERY (query), "http://example.com/bar/?test=test&this=that");
Packit 4b6dd7
	g_assert_cmpstr (query_uri, ==, "http://example.com/bar/?test=test&this=that&q=q&orderBy=startTime"
Packit 4b6dd7
	                                "&singleEvents=true&timeMin=2009-04-17T15:00:00Z&timeMax=2010-04-17T15:00:00Z"
Packit 4b6dd7
	                                "&timeZone=America%2FLos_Angeles&maxAttendees=15&showDeleted=true");
Packit 4b6dd7
	g_free (query_uri);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (query);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_query_etag (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarQuery *query = gdata_calendar_query_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Test that setting any property will unset the ETag */
Packit 4b6dd7
	g_test_bug ("613529");
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_calendar_query_set_future_events (query, FALSE))
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_order_by (query, "shizzle"))
Packit 4b6dd7
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_recurrence_expansion_start (query, -1))
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_recurrence_expansion_end (query, -1))
Packit 4b6dd7
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_single_events (query, FALSE))
Packit 4b6dd7
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_sort_order (query, "shizzle"))
Packit 4b6dd7
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_start_min (query, -1))
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_start_max (query, -1))
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_timezone (query, "about now"))
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_max_attendees (query, 10))
Packit 4b6dd7
	CHECK_ETAG (gdata_calendar_query_set_show_deleted (query, TRUE))
Packit 4b6dd7
Packit 4b6dd7
#undef CHECK_ETAG
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (query);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	TempCalendarData parent;
Packit 4b6dd7
	GDataCalendarAccessRule *rule;
Packit 4b6dd7
} TempCalendarAclsData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
calendar_access_rule_set_self_link (GDataCalendarCalendar *parent_calendar,
Packit 4b6dd7
                                    GDataCalendarAccessRule *rule)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataLink *_link = NULL;  /* owned */
Packit 4b6dd7
	const gchar *calendar_id, *id;
Packit 4b6dd7
	gchar *uri = NULL;  /* owned */
Packit 4b6dd7
Packit 4b6dd7
	/* FIXME: Horrendous hack to set the self link, which is needed for
Packit 4b6dd7
	 * gdata_service_delete_entry(). Unfortunately, it needs the
Packit 4b6dd7
	 * ACL ID _and_ the calendar ID.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Do _not_ copy this code. It needs to be fixed architecturally in
Packit 4b6dd7
	 * libgdata. */
Packit 4b6dd7
	calendar_id = gdata_entry_get_id (GDATA_ENTRY (parent_calendar));
Packit 4b6dd7
	id = gdata_entry_get_id (GDATA_ENTRY (rule));
Packit 4b6dd7
	uri = g_strconcat ("https://www.googleapis.com"
Packit 4b6dd7
	                   "/calendar/v3/calendars/",
Packit 4b6dd7
	                   calendar_id, "/acl/", id, NULL);
Packit 4b6dd7
	_link = gdata_link_new (uri, GDATA_LINK_SELF);
Packit 4b6dd7
	gdata_entry_add_link (GDATA_ENTRY (rule), _link);
Packit 4b6dd7
	g_object_unref (_link);
Packit 4b6dd7
	g_free (uri);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_temp_calendar_acls (TempCalendarAclsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarAccessRule *rule;
Packit 4b6dd7
	GDataLink *_link;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	/* Set up a calendar */
Packit 4b6dd7
	set_up_temp_calendar ((TempCalendarData*) data, service);
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "setup-temp-calendar-acls");
Packit 4b6dd7
Packit 4b6dd7
	/* Add an access rule to the calendar */
Packit 4b6dd7
	rule = gdata_calendar_access_rule_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	gdata_access_rule_set_role (GDATA_ACCESS_RULE (rule), GDATA_CALENDAR_ACCESS_ROLE_EDITOR);
Packit 4b6dd7
	gdata_access_rule_set_scope (GDATA_ACCESS_RULE (rule), GDATA_ACCESS_SCOPE_USER, "darcy@gmail.com");
Packit 4b6dd7
Packit 4b6dd7
	/* Insert the rule */
Packit 4b6dd7
	_link = gdata_entry_look_up_link (GDATA_ENTRY (data->parent.calendar), GDATA_LINK_ACCESS_CONTROL_LIST);
Packit 4b6dd7
	g_assert (_link != NULL);
Packit 4b6dd7
Packit 4b6dd7
	data->rule = GDATA_CALENDAR_ACCESS_RULE (gdata_service_insert_entry (GDATA_SERVICE (service),
Packit 4b6dd7
	                                                                     gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                                                     gdata_link_get_uri (_link), GDATA_ENTRY (rule), NULL,
Packit 4b6dd7
	                                                                     &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_CALENDAR_ACCESS_RULE (data->rule));
Packit 4b6dd7
Packit 4b6dd7
	calendar_access_rule_set_self_link (data->parent.calendar, data->rule);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (rule);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_temp_calendar_acls_no_insertion (TempCalendarAclsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	set_up_temp_calendar ((TempCalendarData*) data, service);
Packit 4b6dd7
	data->rule = NULL;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_temp_calendar_acls (TempCalendarAclsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Delete the access rule if it still exists */
Packit 4b6dd7
	if (data->rule != NULL) {
Packit 4b6dd7
		gdata_test_mock_server_start_trace (mock_server, "teardown-temp-calendar-acls");
Packit 4b6dd7
Packit 4b6dd7
		g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
		                                      GDATA_ENTRY (data->rule), NULL, NULL) == TRUE);
Packit 4b6dd7
		g_object_unref (data->rule);
Packit 4b6dd7
Packit 4b6dd7
		uhm_server_end_trace (mock_server);
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the calendar */
Packit 4b6dd7
	tear_down_temp_calendar ((TempCalendarData*) data, service);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_access_rule_get (TempCalendarAclsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFeed *feed;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "access-rule-get");
Packit 4b6dd7
Packit 4b6dd7
	/* Get the rules */
Packit 4b6dd7
	feed = gdata_access_handler_get_rules (GDATA_ACCESS_HANDLER (data->parent.calendar), GDATA_SERVICE (service), NULL, NULL, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_FEED (feed));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: check rules and feed properties */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (feed);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_access_rule_insert (TempCalendarAclsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarAccessRule *rule, *new_rule;
Packit 4b6dd7
	const gchar *scope_type, *scope_value;
Packit 4b6dd7
	GDataCategory *category;
Packit 4b6dd7
	GDataLink *_link;
Packit 4b6dd7
	GList *categories;
Packit 4b6dd7
	gint64 edited;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "access-rule-insert");
Packit 4b6dd7
Packit 4b6dd7
	rule = gdata_calendar_access_rule_new (NULL);
Packit 4b6dd7
Packit 4b6dd7
	gdata_access_rule_set_role (GDATA_ACCESS_RULE (rule), GDATA_CALENDAR_ACCESS_ROLE_EDITOR);
Packit 4b6dd7
	gdata_access_rule_set_scope (GDATA_ACCESS_RULE (rule), GDATA_ACCESS_SCOPE_USER, "darcy@gmail.com");
Packit 4b6dd7
Packit 4b6dd7
	/* Insert the rule */
Packit 4b6dd7
	_link = gdata_entry_look_up_link (GDATA_ENTRY (data->parent.calendar), GDATA_LINK_ACCESS_CONTROL_LIST);
Packit 4b6dd7
	g_assert (_link != NULL);
Packit 4b6dd7
Packit 4b6dd7
	new_rule = data->rule = GDATA_CALENDAR_ACCESS_RULE (gdata_service_insert_entry (GDATA_SERVICE (service),
Packit 4b6dd7
	                                                                                gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                                                                gdata_link_get_uri (_link), GDATA_ENTRY (rule), NULL, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_ACCESS_RULE (new_rule));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	calendar_access_rule_set_self_link (data->parent.calendar, data->rule);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the properties of the returned rule */
Packit 4b6dd7
	g_assert_cmpstr (gdata_access_rule_get_role (GDATA_ACCESS_RULE (new_rule)), ==, GDATA_CALENDAR_ACCESS_ROLE_EDITOR);
Packit 4b6dd7
	gdata_access_rule_get_scope (GDATA_ACCESS_RULE (new_rule), &scope_type, &scope_value);
Packit 4b6dd7
	g_assert_cmpstr (scope_type, ==, GDATA_ACCESS_SCOPE_USER);
Packit 4b6dd7
	g_assert_cmpstr (scope_value, ==, "darcy@gmail.com");
Packit 4b6dd7
	edited = gdata_access_rule_get_edited (GDATA_ACCESS_RULE (new_rule));
Packit 4b6dd7
	g_assert_cmpuint (edited, >, 0);
Packit 4b6dd7
Packit 4b6dd7
	/* Check it only has the one category and that it's correct */
Packit 4b6dd7
	categories = gdata_entry_get_categories (GDATA_ENTRY (new_rule));
Packit 4b6dd7
	g_assert (categories != NULL);
Packit 4b6dd7
	g_assert_cmpuint (g_list_length (categories), ==, 1);
Packit 4b6dd7
	category = categories->data;
Packit 4b6dd7
	g_assert_cmpstr (gdata_category_get_term (category), ==, "calendar#aclRule");
Packit 4b6dd7
	g_assert_cmpstr (gdata_category_get_scheme (category), ==, "http://schemas.google.com/g/2005#kind");
Packit 4b6dd7
	g_assert (gdata_category_get_label (category) == NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* TODO: Check more properties? */
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (rule);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_access_rule_update (TempCalendarAclsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataCalendarAccessRule *new_rule;
Packit 4b6dd7
	const gchar *scope_type, *scope_value;
Packit 4b6dd7
	gint64 edited;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "access-rule-update");
Packit 4b6dd7
Packit 4b6dd7
	/* Update the rule */
Packit 4b6dd7
	gdata_access_rule_set_role (GDATA_ACCESS_RULE (data->rule), GDATA_CALENDAR_ACCESS_ROLE_READ);
Packit 4b6dd7
Packit 4b6dd7
	/* Send the update to the server */
Packit 4b6dd7
	new_rule = GDATA_CALENDAR_ACCESS_RULE (gdata_service_update_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                                                   GDATA_ENTRY (data->rule), NULL, &error));
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (GDATA_IS_ACCESS_RULE (new_rule));
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	calendar_access_rule_set_self_link (data->parent.calendar, new_rule);
Packit 4b6dd7
Packit 4b6dd7
	/* Check the properties of the returned rule */
Packit 4b6dd7
	g_assert_cmpstr (gdata_access_rule_get_role (GDATA_ACCESS_RULE (new_rule)), ==, GDATA_CALENDAR_ACCESS_ROLE_READ);
Packit 4b6dd7
	gdata_access_rule_get_scope (GDATA_ACCESS_RULE (new_rule), &scope_type, &scope_value);
Packit 4b6dd7
	g_assert_cmpstr (scope_type, ==, GDATA_ACCESS_SCOPE_USER);
Packit 4b6dd7
	g_assert_cmpstr (scope_value, ==, "darcy@gmail.com");
Packit 4b6dd7
	edited = gdata_access_rule_get_edited (GDATA_ACCESS_RULE (new_rule));
Packit 4b6dd7
	g_assert_cmpuint (edited, >, 0);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (new_rule);
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_access_rule_delete (TempCalendarAclsData *data, gconstpointer service)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_mock_server_start_trace (mock_server, "access-rule-delete");
Packit 4b6dd7
Packit 4b6dd7
	/* Delete the rule */
Packit 4b6dd7
	success = gdata_service_delete_entry (GDATA_SERVICE (service), gdata_calendar_service_get_primary_authorization_domain (),
Packit 4b6dd7
	                                      GDATA_ENTRY (data->rule), NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (success == TRUE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (data->rule);
Packit 4b6dd7
	data->rule = NULL;
Packit 4b6dd7
Packit 4b6dd7
	uhm_server_end_trace (mock_server);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, 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 split up between
Packit 4b6dd7
	 * the different unit test suites, but that's too much 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 Calendar API is limited to OAuth1 and OAuth2 authorisation, so
Packit 4b6dd7
 * this 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_CALENDAR_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_CALENDAR_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;
Packit 4b6dd7
	GDataService *service = NULL;
Packit 4b6dd7
	GFile *trace_directory;
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", (GCallback) mock_server_notify_resolver_cb, NULL);
Packit 4b6dd7
	path = g_test_build_filename (G_TEST_DIST, "traces/calendar", 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
Packit 4b6dd7
	service = GDATA_SERVICE (gdata_calendar_service_new (authorizer));
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/calendar/authentication", test_authentication);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add ("/calendar/query/all_calendars", QueryCalendarsData, service, set_up_query_calendars, test_query_all_calendars,
Packit 4b6dd7
	            tear_down_query_calendars);
Packit 4b6dd7
	g_test_add ("/calendar/query/all_calendars/async", GDataAsyncTestData, service, set_up_query_calendars_async,
Packit 4b6dd7
	            test_query_all_calendars_async, tear_down_query_calendars_async);
Packit 4b6dd7
	g_test_add ("/calendar/query/all_calendars/async/progress_closure", QueryCalendarsData, service, set_up_query_calendars,
Packit 4b6dd7
	            test_query_all_calendars_async_progress_closure, tear_down_query_calendars);
Packit 4b6dd7
	g_test_add ("/calendar/query/all_calendars/async/cancellation", GDataAsyncTestData, service, set_up_query_calendars_async,
Packit 4b6dd7
	            test_query_all_calendars_async_cancellation, tear_down_query_calendars_async);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add ("/calendar/query/own_calendars", QueryCalendarsData, service, set_up_query_calendars, test_query_own_calendars,
Packit 4b6dd7
	            tear_down_query_calendars);
Packit 4b6dd7
	g_test_add ("/calendar/query/own_calendars/async", GDataAsyncTestData, service, set_up_query_calendars_async,
Packit 4b6dd7
		            test_query_own_calendars_async, tear_down_query_calendars_async);
Packit 4b6dd7
	g_test_add ("/calendar/query/own_calendars/async/progress_closure", QueryCalendarsData, service, set_up_query_calendars,
Packit 4b6dd7
	            test_query_own_calendars_async_progress_closure, tear_down_query_calendars);
Packit 4b6dd7
	g_test_add ("/calendar/query/own_calendars/async/cancellation", GDataAsyncTestData, service, set_up_query_calendars_async,
Packit 4b6dd7
	            test_query_own_calendars_async_cancellation, tear_down_query_calendars_async);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add ("/calendar/query/events", QueryEventsData, service, set_up_query_events, test_query_events, tear_down_query_events);
Packit 4b6dd7
	g_test_add ("/calendar/query/events/async", GDataAsyncTestData, service, set_up_query_events_async, test_query_events_async,
Packit 4b6dd7
	            tear_down_query_events_async);
Packit 4b6dd7
	g_test_add ("/calendar/query/events/async/progress_closure", QueryEventsData, service, set_up_query_events,
Packit 4b6dd7
	            test_query_events_async_progress_closure, tear_down_query_events);
Packit 4b6dd7
	g_test_add ("/calendar/query/events/async/cancellation", GDataAsyncTestData, service, set_up_query_events_async,
Packit 4b6dd7
	            test_query_events_async_cancellation, tear_down_query_events_async);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add ("/calendar/event/insert", InsertEventData, service, set_up_insert_event, test_event_insert, tear_down_insert_event);
Packit 4b6dd7
	g_test_add ("/calendar/event/insert/async", GDataAsyncTestData, service, set_up_insert_event_async, test_event_insert_async,
Packit 4b6dd7
	            tear_down_insert_event_async);
Packit 4b6dd7
	g_test_add ("/calendar/event/insert/async/cancellation", GDataAsyncTestData, service, set_up_insert_event_async,
Packit 4b6dd7
	            test_event_insert_async_cancellation, tear_down_insert_event_async);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add ("/calendar/access-rule/get", TempCalendarAclsData, service, set_up_temp_calendar_acls, test_access_rule_get,
Packit 4b6dd7
	            tear_down_temp_calendar_acls);
Packit 4b6dd7
	g_test_add ("/calendar/access-rule/insert", TempCalendarAclsData, service, set_up_temp_calendar_acls_no_insertion,
Packit 4b6dd7
	            test_access_rule_insert, tear_down_temp_calendar_acls);
Packit 4b6dd7
	g_test_add ("/calendar/access-rule/update", TempCalendarAclsData, service, set_up_temp_calendar_acls, test_access_rule_update,
Packit 4b6dd7
	            tear_down_temp_calendar_acls);
Packit 4b6dd7
	g_test_add ("/calendar/access-rule/delete", TempCalendarAclsData, service, set_up_temp_calendar_acls, test_access_rule_delete,
Packit 4b6dd7
	            tear_down_temp_calendar_acls);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/calendar/event/json", test_event_json);
Packit 4b6dd7
	g_test_add_func ("/calendar/event/json/attendees", test_event_json_attendees);
Packit 4b6dd7
	g_test_add_func ("/calendar/event/json/dates", test_event_json_dates);
Packit 4b6dd7
	g_test_add_func ("/calendar/event/json/organizer", test_event_json_organizer);
Packit 4b6dd7
	g_test_add_func ("/calendar/event/json/recurrence", test_event_json_recurrence);
Packit 4b6dd7
	g_test_add_func ("/calendar/event/escaping", test_event_escaping);
Packit 4b6dd7
	g_test_add_func ("/calendar/event/parser/minimal",
Packit 4b6dd7
	                 test_calendar_event_parser_minimal);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/calendar/calendar/escaping", test_calendar_escaping);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/calendar/access-rule/properties", test_access_rule_properties);
Packit 4b6dd7
	g_test_add_func ("/calendar/access-rule/json", test_access_rule_json);
Packit 4b6dd7
Packit 4b6dd7
	g_test_add_func ("/calendar/query/uri", test_query_uri);
Packit 4b6dd7
	g_test_add_func ("/calendar/query/etag", test_query_etag);
Packit 4b6dd7
Packit 4b6dd7
	retval = g_test_run ();
Packit 4b6dd7
Packit 4b6dd7
	if (service != NULL)
Packit 4b6dd7
		g_object_unref (service);
Packit 4b6dd7
Packit 4b6dd7
	return retval;
Packit 4b6dd7
}