~chris.gagnon/+junk/qtpim-coverage

« back to all changes in this revision

Viewing changes to tests/auto/organizer/qorganizeritemdetails/tst_qorganizeritemdetails.cpp

  • Committer: chris.gagnon
  • Date: 2013-12-10 23:09:37 UTC
  • Revision ID: chris.gagnon@canonical.com-20131210230937-2akf1ft1edcttk87
first post

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
 
4
** Contact: http://www.qt-project.org/legal
 
5
**
 
6
** This file is part of the test suite of the Qt Toolkit.
 
7
**
 
8
** $QT_BEGIN_LICENSE:LGPL$
 
9
** Commercial License Usage
 
10
** Licensees holding valid commercial Qt licenses may use this file in
 
11
** accordance with the commercial license agreement provided with the
 
12
** Software or, alternatively, in accordance with the terms contained in
 
13
** a written agreement between you and Digia.  For licensing terms and
 
14
** conditions see http://qt.digia.com/licensing.  For further information
 
15
** use the contact form at http://qt.digia.com/contact-us.
 
16
**
 
17
** GNU Lesser General Public License Usage
 
18
** Alternatively, this file may be used under the terms of the GNU Lesser
 
19
** General Public License version 2.1 as published by the Free Software
 
20
** Foundation and appearing in the file LICENSE.LGPL included in the
 
21
** packaging of this file.  Please review the following information to
 
22
** ensure the GNU Lesser General Public License version 2.1 requirements
 
23
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 
24
**
 
25
** In addition, as a special exception, Digia gives you certain additional
 
26
** rights.  These rights are described in the Digia Qt LGPL Exception
 
27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 
28
**
 
29
** GNU General Public License Usage
 
30
** Alternatively, this file may be used under the terms of the GNU
 
31
** General Public License version 3.0 as published by the Free Software
 
32
** Foundation and appearing in the file LICENSE.GPL included in the
 
33
** packaging of this file.  Please review the following information to
 
34
** ensure the GNU General Public License version 3.0 requirements will be
 
35
** met: http://www.gnu.org/copyleft/gpl.html.
 
36
**
 
37
**
 
38
** $QT_END_LICENSE$
 
39
**
 
40
****************************************************************************/
 
41
 
 
42
#include <QtTest/QtTest>
 
43
 
 
44
#include "qorganizer.h"
 
45
 
 
46
//TESTED_COMPONENT=src/organizer
 
47
 
 
48
QTORGANIZER_USE_NAMESPACE
 
49
class tst_QOrganizerItemDetails : public QObject
 
50
{
 
51
Q_OBJECT
 
52
 
 
53
public:
 
54
    tst_QOrganizerItemDetails();
 
55
    virtual ~tst_QOrganizerItemDetails();
 
56
 
 
57
public slots:
 
58
    void init();
 
59
    void cleanup();
 
60
 
 
61
private slots:
 
62
    // leaf class testing
 
63
    void description();
 
64
    void displayLabel();
 
65
    void guid();
 
66
    void location();
 
67
    void parent();
 
68
    void priority();
 
69
    void recurrence();
 
70
    void tag();
 
71
    void timestamp();
 
72
    void type();
 
73
 
 
74
    void todoProgress();
 
75
 
 
76
    // time range
 
77
    void eventTime();
 
78
    void journalTime();
 
79
    void todoTime();
 
80
 
 
81
    // reminders
 
82
    void reminder();
 
83
    void audibleReminder();
 
84
    void emailReminder();
 
85
    void visualReminder();
 
86
 
 
87
    void attendee();
 
88
    void rsvp();
 
89
    void classification();
 
90
    void version();
 
91
};
 
92
 
 
93
tst_QOrganizerItemDetails::tst_QOrganizerItemDetails()
 
94
{
 
95
}
 
96
 
 
97
tst_QOrganizerItemDetails::~tst_QOrganizerItemDetails()
 
98
{
 
99
}
 
100
 
 
101
void tst_QOrganizerItemDetails::init()
 
102
{
 
103
}
 
104
 
 
105
void tst_QOrganizerItemDetails::cleanup()
 
106
{
 
107
}
 
108
 
 
109
 
 
110
void tst_QOrganizerItemDetails::description()
 
111
{
 
112
    QOrganizerItemDescription d1;
 
113
    QOrganizerItem oi;
 
114
    QVERIFY(d1.description().isEmpty());
 
115
    QVERIFY(d1.value(QOrganizerItemDescription::FieldDescription).isNull());
 
116
    d1.setValue(QOrganizerItemDescription::FieldDescription, "Test");
 
117
    QVERIFY(d1.value(QOrganizerItemDescription::FieldDescription) == QString("Test"));
 
118
    QVERIFY(d1.description() == QString("Test"));
 
119
 
 
120
    QOrganizerItemDescription d2;
 
121
    d2.setValue(QOrganizerItemDescription::FieldDescription, "Test 2");
 
122
 
 
123
    // test property add -- description is unique.
 
124
    QVERIFY(oi.saveDetail(&d2));
 
125
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 1); // count should be 1
 
126
    QVERIFY(oi.saveDetail(&d1));
 
127
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 1); // count should be 1
 
128
 
 
129
    // test property update
 
130
    d1.setDescription("Test 3");
 
131
    QVERIFY(oi.saveDetail(&d1));
 
132
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 1); // count should be 1
 
133
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeDescription).value(QOrganizerItemDescription::FieldDescription) == QString("Test 3"));
 
134
 
 
135
    // test property remove
 
136
    QVERIFY(oi.removeDetail(&d1));
 
137
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDescription).count(), 0);
 
138
}
 
139
 
 
140
void tst_QOrganizerItemDetails::displayLabel()
 
141
{
 
142
    QOrganizerItemDisplayLabel d1;
 
143
    QOrganizerItem oi;
 
144
 
 
145
    QVERIFY(d1.label().isEmpty());
 
146
    QVERIFY(d1.value(QOrganizerItemDisplayLabel::FieldLabel).isNull());
 
147
    d1.setValue(QOrganizerItemDisplayLabel::FieldLabel, "Test");
 
148
    QVERIFY(d1.value(QOrganizerItemDisplayLabel::FieldLabel) == QString("Test"));
 
149
    QVERIFY(d1.label() == QString("Test"));
 
150
 
 
151
    QOrganizerItemDisplayLabel d2;
 
152
    d2.setValue(QOrganizerItemDisplayLabel::FieldLabel, "Test 2");
 
153
 
 
154
    // test property add - should update.
 
155
    QVERIFY(oi.saveDetail(&d2));
 
156
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 1);
 
157
    QVERIFY(oi.saveDetail(&d1));
 
158
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 1);
 
159
 
 
160
    // test property update - should update
 
161
    d1.setLabel("Test 3");
 
162
    QVERIFY(oi.saveDetail(&d1));
 
163
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 1);
 
164
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeDisplayLabel).value(QOrganizerItemDisplayLabel::FieldLabel) == QString("Test 3"));
 
165
 
 
166
    // test property remove
 
167
    QVERIFY(oi.removeDetail(&d1)); // can remove display label.  it's unique but not required.
 
168
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeDisplayLabel).count(), 0);
 
169
}
 
170
 
 
171
 
 
172
void tst_QOrganizerItemDetails::guid()
 
173
{
 
174
    QOrganizerItem oi;
 
175
    QOrganizerItemGuid g1, g2;
 
176
 
 
177
    // test property set
 
178
    g1.setGuid("1234");
 
179
    QCOMPARE(g1.guid(), QString("1234"));
 
180
    QCOMPARE(g1.value(QOrganizerItemGuid::FieldGuid).toString(), QString("1234"));
 
181
 
 
182
    // test property add
 
183
    QVERIFY(oi.saveDetail(&g1));
 
184
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 1);
 
185
    QCOMPARE(QOrganizerItemGuid(oi.details(QOrganizerItemDetail::TypeGuid).value(0)).guid(), g1.guid());
 
186
 
 
187
    // test property update
 
188
    g1.setValue(101,"label1");
 
189
    g1.setGuid("12345");
 
190
    QVERIFY(oi.saveDetail(&g1));
 
191
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).value(0).value(101).toString(), QString("label1"));
 
192
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).value(0).value(QOrganizerItemGuid::FieldGuid).toString(), QString("12345"));
 
193
 
 
194
    // test property remove
 
195
    QVERIFY(oi.removeDetail(&g1));
 
196
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 0);
 
197
    QVERIFY(oi.saveDetail(&g2));
 
198
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 1);
 
199
    QVERIFY(oi.removeDetail(&g2));
 
200
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 0);
 
201
    QVERIFY(oi.removeDetail(&g2) == false);
 
202
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeGuid).count(), 0);
 
203
}
 
204
 
 
205
void tst_QOrganizerItemDetails::location()
 
206
{
 
207
    QOrganizerItemLocation l1;
 
208
    QOrganizerItem oi;
 
209
    QVERIFY(l1.isEmpty());
 
210
 
 
211
    l1.setLatitude(89.999);
 
212
    QVERIFY(!l1.isEmpty());
 
213
    QVERIFY(l1.latitude() == 89.999);
 
214
    l1.setValue(QOrganizerItemLocation::FieldLatitude, -89.12345);
 
215
    QVERIFY(l1.value(QOrganizerItemLocation::FieldLatitude) == -89.12345);
 
216
    l1.setLatitude(-90.12345);
 
217
    l1.setLatitude(91);
 
218
    QVERIFY(l1.latitude() == -89.12345);
 
219
 
 
220
    l1.setLongitude(179);
 
221
    QVERIFY(l1.longitude() == 179);
 
222
    l1.setValue(QOrganizerItemLocation::FieldLongitude, -179.54321);
 
223
    QVERIFY(l1.value(QOrganizerItemLocation::FieldLongitude) == -179.54321);
 
224
    l1.setLongitude(180.1);
 
225
    l1.setLongitude(-180.1);
 
226
    QVERIFY(l1.longitude() == -179.54321);
 
227
 
 
228
    l1.setLabel("test");
 
229
    QVERIFY(l1.label() == QString("test"));
 
230
 
 
231
    QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 0);
 
232
    QVERIFY(oi.saveDetail(&l1));
 
233
    QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 1);
 
234
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeLocation) == l1);
 
235
 
 
236
    l1.setLabel("test 2");
 
237
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeLocation) != l1);
 
238
    QVERIFY(oi.saveDetail(&l1)); // update.
 
239
    QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 1); // should update, not add another.
 
240
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeLocation) == l1);
 
241
 
 
242
    oi.removeDetail(&l1);
 
243
    QVERIFY(oi.details(QOrganizerItemDetail::TypeLocation).size() == 0);
 
244
}
 
245
 
 
246
void tst_QOrganizerItemDetails::parent()
 
247
{
 
248
    QOrganizerItemParent p;
 
249
    QOrganizerItem oi;
 
250
 
 
251
    // hrm, how to test parent local id?
 
252
 
 
253
    QVERIFY(p.isEmpty());
 
254
    p.setOriginalDate(QDate(2010, 10, 13));
 
255
    QVERIFY(p.originalDate() == QDate(2010, 10, 13));
 
256
    QVERIFY(!p.isEmpty());
 
257
 
 
258
    QVERIFY(oi.saveDetail(&p));
 
259
    QVERIFY(oi.details(QOrganizerItemDetail::TypeParent).size() == 1);
 
260
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeParent) == p);
 
261
 
 
262
    p.setOriginalDate(QDate(2010, 10, 14));
 
263
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeParent) != p);
 
264
    QVERIFY(oi.saveDetail(&p)); // update
 
265
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeParent) == p);
 
266
 
 
267
    QVERIFY(oi.removeDetail(&p));
 
268
    QVERIFY(oi.details(QOrganizerItemDetail::TypeParent).size() == 0);
 
269
}
 
270
 
 
271
void tst_QOrganizerItemDetails::priority()
 
272
{
 
273
    QOrganizerItemPriority p;
 
274
    QOrganizerItem oi;
 
275
 
 
276
    QVERIFY(p.isEmpty());
 
277
    p.setValue(QOrganizerItemPriority::FieldPriority, QOrganizerItemPriority::VeryHighPriority);
 
278
    QVERIFY(p.priority() == QOrganizerItemPriority::VeryHighPriority);
 
279
    QVERIFY(oi.saveDetail(&p));
 
280
    QVERIFY(oi.details(QOrganizerItemDetail::TypePriority).size() == 1);
 
281
    QVERIFY(oi.detail(QOrganizerItemDetail::TypePriority) == p);
 
282
 
 
283
    p.setPriority(QOrganizerItemPriority::VeryLowPriority);
 
284
    QVERIFY(oi.detail(QOrganizerItemDetail::TypePriority) != p);
 
285
    QVERIFY(oi.saveDetail(&p));
 
286
    QVERIFY(oi.details(QOrganizerItemDetail::TypePriority).size() == 1); // update shouldn't add another detail.
 
287
    QVERIFY(oi.detail(QOrganizerItemDetail::TypePriority) == p);
 
288
 
 
289
    QVERIFY(oi.removeDetail(&p));
 
290
    QVERIFY(oi.details(QOrganizerItemDetail::TypePriority).size() == 0);
 
291
}
 
292
 
 
293
void tst_QOrganizerItemDetails::recurrence()
 
294
{
 
295
    QOrganizerItemRecurrence r;
 
296
    QOrganizerEvent e;
 
297
 
 
298
    QOrganizerRecurrenceRule testRule;
 
299
    testRule.setFrequency(QOrganizerRecurrenceRule::Weekly);
 
300
    testRule.setLimit(4);
 
301
    QSet<QOrganizerRecurrenceRule> rrules;
 
302
    rrules << testRule;
 
303
 
 
304
    QOrganizerRecurrenceRule exrule;
 
305
    exrule.setFrequency(QOrganizerRecurrenceRule::Daily);
 
306
    testRule.setLimit(12);
 
307
    QSet<QOrganizerRecurrenceRule> exrules;
 
308
    exrules << exrule;
 
309
 
 
310
    QSet<QDate> rdates, exdates;
 
311
    rdates << QDate(2010, 10, 13);
 
312
    exdates << QDate(2010, 11, 17) << QDate(2010, 11, 20);
 
313
 
 
314
    QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 0);
 
315
    r.setRecurrenceRules(rrules);
 
316
    QVERIFY(r.recurrenceRules() == rrules);
 
317
    QVERIFY(r.recurrenceDates().isEmpty());
 
318
    QVERIFY(r.exceptionRules().isEmpty());
 
319
 
 
320
    r.setExceptionRules(exrules);
 
321
    QVERIFY(r.recurrenceRules() == rrules);
 
322
    QVERIFY(r.exceptionRules() == exrules);
 
323
    QVERIFY(r.exceptionDates().isEmpty());
 
324
 
 
325
    r.setRecurrenceDates(rdates);
 
326
    QVERIFY(r.recurrenceDates() == rdates);
 
327
    QVERIFY(r.exceptionDates().isEmpty());
 
328
    QVERIFY(r.recurrenceRules() == rrules);
 
329
    QVERIFY(r.exceptionRules() == exrules);
 
330
 
 
331
    r.setExceptionDates(exdates);
 
332
    QVERIFY(r.recurrenceDates() == rdates);
 
333
    QVERIFY(r.exceptionDates() == exdates);
 
334
    QVERIFY(r.recurrenceRules() == rrules);
 
335
    QVERIFY(r.exceptionRules() == exrules);
 
336
 
 
337
    // now save.
 
338
    QVERIFY(e.saveDetail(&r));
 
339
    QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 1);
 
340
    QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) == r);
 
341
 
 
342
    // update
 
343
    exdates << QDate(2010, 10, 17);
 
344
    r.setExceptionDates(exdates);
 
345
    QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) != r);
 
346
    QVERIFY(e.saveDetail(&r));
 
347
    QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) == r);
 
348
    QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 1); // should update, not add another.
 
349
 
 
350
    // remove.
 
351
    QVERIFY(e.removeDetail(&r));
 
352
    QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 0);
 
353
}
 
354
 
 
355
void tst_QOrganizerItemDetails::tag()
 
356
{
 
357
    QOrganizerItem oi;
 
358
    QOrganizerItemTag t1, t2;
 
359
 
 
360
    // test property set
 
361
    t1.setTag("red");
 
362
    QCOMPARE(t1.tag(), QString("red"));
 
363
    QCOMPARE(t1.value(QOrganizerItemTag::FieldTag).toString(), QString("red"));
 
364
 
 
365
    // test property add
 
366
    QVERIFY(oi.saveDetail(&t1));
 
367
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 1);
 
368
    QCOMPARE(QOrganizerItemTag(oi.details(QOrganizerItemDetail::TypeTag).value(0)).tag(), t1.tag());
 
369
    QVERIFY(oi.saveDetail(&t2));
 
370
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 2);
 
371
 
 
372
    // test property update
 
373
    t1.setValue(101,"label1");
 
374
    t1.setTag("green");
 
375
    QVERIFY(oi.saveDetail(&t1));
 
376
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).value(0).value(101).toString(), QString("label1"));
 
377
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).value(0).value(QOrganizerItemTag::FieldTag).toString(), QString("green"));
 
378
 
 
379
    // test property remove
 
380
    QVERIFY(oi.removeDetail(&t1));
 
381
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 1);
 
382
    QVERIFY(oi.removeDetail(&t2));
 
383
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 0);
 
384
    QVERIFY(oi.removeDetail(&t2) == false);
 
385
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTag).count(), 0);
 
386
}
 
387
 
 
388
 
 
389
void tst_QOrganizerItemDetails::timestamp()
 
390
{
 
391
    QOrganizerItem oi;
 
392
    QOrganizerItemTimestamp t1, t2;
 
393
    QDateTime modified = QDateTime::currentDateTime();
 
394
    QDateTime created = modified.addSecs(-43);
 
395
 
 
396
    // test property set
 
397
    t1.setCreated(created);
 
398
    QCOMPARE(t1.created(), created);
 
399
    QCOMPARE(t1.value(QOrganizerItemTimestamp::FieldCreated).toDateTime(), created);
 
400
 
 
401
    // test property add
 
402
    QVERIFY(oi.saveDetail(&t1));
 
403
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 1);
 
404
    QCOMPARE(QOrganizerItemTimestamp(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0)).created(), t1.created());
 
405
 
 
406
    // test property update
 
407
    t1.setValue(101,"label1");
 
408
    t1.setLastModified(modified);
 
409
    QVERIFY(oi.saveDetail(&t1));
 
410
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0).value(101).toString(), QString("label1"));
 
411
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0).value(QOrganizerItemTimestamp::FieldCreated).toDateTime(), created);
 
412
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).value(0).value(QOrganizerItemTimestamp::FieldLastModified).toDateTime(), modified);
 
413
 
 
414
    // test property remove
 
415
    QVERIFY(oi.removeDetail(&t1));
 
416
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 0);
 
417
    t2.setCreated(created.addSecs(15));
 
418
    QVERIFY(oi.saveDetail(&t2));
 
419
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 1);
 
420
    QVERIFY(oi.removeDetail(&t2));
 
421
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 0);
 
422
    QVERIFY(oi.removeDetail(&t2) == false);
 
423
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeTimestamp).count(), 0);
 
424
}
 
425
 
 
426
void tst_QOrganizerItemDetails::todoProgress()
 
427
{
 
428
    QOrganizerTodoProgress p;
 
429
    QOrganizerTodo t;
 
430
 
 
431
    QVERIFY(p.status() == QOrganizerTodoProgress::StatusNotStarted);
 
432
    QVERIFY(p.isEmpty());
 
433
    p.setStatus(QOrganizerTodoProgress::StatusInProgress);
 
434
    QVERIFY(!p.isEmpty());
 
435
    QVERIFY(p.status() == QOrganizerTodoProgress::StatusInProgress);
 
436
 
 
437
    p.setPercentageComplete(50);
 
438
    QVERIFY(p.percentageComplete() == 50);
 
439
    p.setPercentageComplete(200); // this should fail
 
440
    QVERIFY(p.percentageComplete() == 50); // value should remain unchanged.
 
441
 
 
442
    p.setFinishedDateTime(QDateTime(QDate(2010, 10, 13)));
 
443
    QVERIFY(p.finishedDateTime() == QDateTime(QDate(2010, 10, 13)));
 
444
    QVERIFY(p.status() != QOrganizerTodoProgress::StatusComplete); // XXX TODO: should this be automatic?
 
445
    p.setPercentageComplete(100);
 
446
    QVERIFY(p.percentageComplete() == 100);
 
447
    QVERIFY(p.status() != QOrganizerTodoProgress::StatusComplete); // XXX TODO: should this be automatic?
 
448
 
 
449
    // add
 
450
    QVERIFY(t.saveDetail(&p));
 
451
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoProgress).size() == 1);
 
452
    QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoProgress) == p);
 
453
 
 
454
    // update
 
455
    p.setStatus(QOrganizerTodoProgress::StatusComplete);
 
456
    QVERIFY(p.status() == QOrganizerTodoProgress::StatusComplete);
 
457
    QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoProgress) != p);
 
458
    QVERIFY(t.saveDetail(&p));
 
459
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoProgress).size() == 1); // update, not add another
 
460
    QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoProgress) == p);
 
461
 
 
462
    // remove
 
463
    QVERIFY(t.removeDetail(&p));
 
464
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoProgress).size() == 0);
 
465
}
 
466
 
 
467
void tst_QOrganizerItemDetails::type()
 
468
{
 
469
    QOrganizerItem oi;
 
470
    QOrganizerItemType t1, t2;
 
471
 
 
472
    QOrganizerEvent e;
 
473
    QOrganizerNote n;
 
474
    QOrganizerTodo t;
 
475
    QOrganizerJournal j;
 
476
    QOrganizerEventOccurrence eo;
 
477
    QOrganizerTodoOccurrence to;
 
478
    QVERIFY(e.type() == QOrganizerItemType::TypeEvent);
 
479
    QVERIFY(n.type() == QOrganizerItemType::TypeNote);
 
480
    QVERIFY(t.type() == QOrganizerItemType::TypeTodo);
 
481
    QVERIFY(j.type() == QOrganizerItemType::TypeJournal);
 
482
    QVERIFY(eo.type() == QOrganizerItemType::TypeEventOccurrence);
 
483
    QVERIFY(to.type() == QOrganizerItemType::TypeTodoOccurrence);
 
484
 
 
485
    // test property set
 
486
    t1.setType(QOrganizerItemType::TypeEvent);
 
487
    QCOMPARE(t1.type(), QOrganizerItemType::TypeEvent);
 
488
    QCOMPARE(static_cast<QOrganizerItemType::ItemType>(t1.value(QOrganizerItemType::FieldType).toInt()), QOrganizerItemType::TypeEvent);
 
489
 
 
490
    // test property add
 
491
    QVERIFY(oi.saveDetail(&t1));
 
492
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
 
493
    QCOMPARE(QOrganizerItemType(oi.details(QOrganizerItemDetail::TypeItemType).value(0)).type(), t1.type());
 
494
 
 
495
    // test property update
 
496
    t1.setType(QOrganizerItemType::TypeTodo);
 
497
    QVERIFY(oi.saveDetail(&t1));
 
498
    QCOMPARE(static_cast<QOrganizerItemType::ItemType>(oi.details(QOrganizerItemDetail::TypeItemType).value(0).value(QOrganizerItemType::FieldType).toInt()), QOrganizerItemType::TypeTodo);
 
499
 
 
500
    // test property remove
 
501
    QVERIFY(!oi.removeDetail(&t1)); // cannot remove type
 
502
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
 
503
    t2.setType(QOrganizerItemType::TypeNote);
 
504
    QVERIFY(oi.saveDetail(&t2)); // overwrites t1
 
505
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
 
506
    QVERIFY(!oi.removeDetail(&t2)); // cannot remove type - "succeeds" but count remains unchanged
 
507
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
 
508
    QVERIFY(!oi.removeDetail(&t2));
 
509
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1);
 
510
}
 
511
 
 
512
 
 
513
void tst_QOrganizerItemDetails::eventTime()
 
514
{
 
515
    QOrganizerEventTime r;
 
516
    QOrganizerEvent e;
 
517
 
 
518
    QVERIFY(r.isEmpty());
 
519
    QVERIFY(!r.isAllDay());
 
520
 
 
521
    r.setStartDateTime(QDateTime(QDate(2010, 10, 13)));
 
522
    QVERIFY(r.startDateTime() == QDateTime(QDate(2010, 10, 13)));
 
523
    QVERIFY(!r.isAllDay());
 
524
    r.setAllDay(true);
 
525
    QVERIFY(r.isAllDay());
 
526
 
 
527
    r.setEndDateTime(QDateTime(QDate(2010, 10, 14)));
 
528
    QVERIFY(r.endDateTime() == QDateTime(QDate(2010, 10, 14)));
 
529
 
 
530
    // add
 
531
    QOrganizerEventTime r2;
 
532
    r2.setStartDateTime(QDateTime(QDate(2010, 10, 23)));
 
533
    r2.setEndDateTime(QDateTime(QDate(2010, 10, 24)));
 
534
    QVERIFY(e.saveDetail(&r));
 
535
    QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 1);
 
536
    QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) == r);
 
537
    QVERIFY(e.saveDetail(&r2)); // note that we don't enforce uniqueness in organizeritem; that's done by the manager!
 
538
    QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 2);
 
539
    QVERIFY(e.removeDetail(&r2));
 
540
    QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 1);
 
541
    QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) == r);
 
542
 
 
543
    // update
 
544
    r.setAllDay(false);
 
545
    QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) != r);
 
546
    QVERIFY(e.saveDetail(&r));
 
547
    QVERIFY(e.detail(QOrganizerItemDetail::TypeEventTime) == r);
 
548
    QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 1);
 
549
 
 
550
    // remove
 
551
    QVERIFY(e.removeDetail(&r));
 
552
    QVERIFY(e.details(QOrganizerItemDetail::TypeEventTime).size() == 0);
 
553
}
 
554
 
 
555
void tst_QOrganizerItemDetails::journalTime()
 
556
{
 
557
    QOrganizerJournalTime r;
 
558
    QOrganizerJournal j;
 
559
 
 
560
    QVERIFY(r.isEmpty());
 
561
    r.setEntryDateTime(QDateTime(QDate(2010, 10, 13)));
 
562
    QVERIFY(r.entryDateTime() == QDateTime(QDate(2010, 10, 13)));
 
563
 
 
564
    // add
 
565
    QOrganizerJournalTime r2;
 
566
    r2.setEntryDateTime(QDateTime(QDate(2010, 10, 23)));
 
567
    QVERIFY(j.saveDetail(&r));
 
568
    QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 1);
 
569
    QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) == r);
 
570
    QVERIFY(j.saveDetail(&r2)); // note that we don't enforce uniqueness in organizeritem; that's done by the manager!
 
571
    QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 2);
 
572
    QVERIFY(j.removeDetail(&r2));
 
573
    QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 1);
 
574
    QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) == r);
 
575
 
 
576
    // update
 
577
    r.setEntryDateTime(QDateTime(QDate(2010, 11, 05)));
 
578
    QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) != r);
 
579
    QVERIFY(j.saveDetail(&r));
 
580
    QVERIFY(j.detail(QOrganizerItemDetail::TypeJournalTime) == r);
 
581
    QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 1);
 
582
 
 
583
    // remove
 
584
    QVERIFY(j.removeDetail(&r));
 
585
    QVERIFY(j.details(QOrganizerItemDetail::TypeJournalTime).size() == 0);
 
586
}
 
587
 
 
588
void tst_QOrganizerItemDetails::todoTime()
 
589
{
 
590
    QOrganizerTodoTime r;
 
591
    QOrganizerTodo t;
 
592
 
 
593
    QVERIFY(r.isEmpty());
 
594
    QVERIFY(!r.isAllDay());
 
595
 
 
596
    r.setStartDateTime(QDateTime(QDate(2010, 10, 13)));
 
597
    QVERIFY(r.startDateTime() == QDateTime(QDate(2010, 10, 13)));
 
598
    QVERIFY(!r.isAllDay());
 
599
    r.setAllDay(true);
 
600
    QVERIFY(r.isAllDay());
 
601
 
 
602
    r.setDueDateTime(QDateTime(QDate(2010, 10, 14)));
 
603
    QVERIFY(r.dueDateTime() == QDateTime(QDate(2010, 10, 14)));
 
604
 
 
605
    // add
 
606
    QOrganizerTodoTime r2;
 
607
    r2.setStartDateTime(QDateTime(QDate(2010, 10, 23)));
 
608
    r2.setDueDateTime(QDateTime(QDate(2010, 10, 24)));
 
609
    QVERIFY(t.saveDetail(&r));
 
610
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 1);
 
611
    QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) == r);
 
612
    QVERIFY(t.saveDetail(&r2)); // note that we don't enforce uniqueness in organizeritem; that's done by the manager!
 
613
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 2);
 
614
    QVERIFY(t.removeDetail(&r2));
 
615
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 1);
 
616
    QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) == r);
 
617
 
 
618
    // update
 
619
    r.setAllDay(false);
 
620
    QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) != r);
 
621
    QVERIFY(t.saveDetail(&r));
 
622
    QVERIFY(t.detail(QOrganizerItemDetail::TypeTodoTime) == r);
 
623
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 1);
 
624
 
 
625
    // remove
 
626
    QVERIFY(t.removeDetail(&r));
 
627
    QVERIFY(t.details(QOrganizerItemDetail::TypeTodoTime).size() == 0);
 
628
}
 
629
 
 
630
void tst_QOrganizerItemDetails::reminder()
 
631
{
 
632
    QOrganizerItemReminder r;
 
633
    QOrganizerItem oi;
 
634
 
 
635
    QVERIFY(r.isEmpty());
 
636
    QVERIFY(r.reminderType() == QOrganizerItemReminder::NoReminder);
 
637
 
 
638
    QVERIFY(r.secondsBeforeStart() == 0);
 
639
    QVERIFY(r.repetitionCount() == 0);
 
640
    QVERIFY(r.repetitionDelay() == 0);
 
641
 
 
642
    r.setSecondsBeforeStart(45);
 
643
    QVERIFY(!r.isEmpty());
 
644
    r.removeValue(QOrganizerItemReminder::FieldSecondsBeforeStart);
 
645
    QVERIFY(r.isEmpty());
 
646
 
 
647
    r.setRepetition(3, 100);
 
648
    QVERIFY(r.repetitionCount() == 3);
 
649
    QVERIFY(r.repetitionDelay() == 100);
 
650
    QVERIFY(!r.isEmpty());
 
651
 
 
652
    r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
 
653
    QVERIFY(r.secondsBeforeStart() == 30);
 
654
 
 
655
    // add
 
656
    QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 0);
 
657
    QVERIFY(oi.saveDetail(&r));
 
658
    QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 1);
 
659
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeReminder) == r);
 
660
 
 
661
    // update
 
662
    r.setSecondsBeforeStart(300);
 
663
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeReminder) != r);
 
664
    QVERIFY(oi.saveDetail(&r));
 
665
    QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 1); // should update, not add another
 
666
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeReminder) == r);
 
667
 
 
668
    // remove
 
669
    QVERIFY(oi.removeDetail(&r));
 
670
    QVERIFY(oi.details(QOrganizerItemDetail::TypeReminder).size() == 0);
 
671
}
 
672
 
 
673
void tst_QOrganizerItemDetails::audibleReminder()
 
674
{
 
675
    QOrganizerItemAudibleReminder r;
 
676
    QOrganizerItem oi;
 
677
 
 
678
    QVERIFY(r.isEmpty());
 
679
    QVERIFY(r.reminderType() == QOrganizerItemReminder::AudibleReminder);
 
680
 
 
681
    QVERIFY(r.secondsBeforeStart() == 0);
 
682
    QVERIFY(r.repetitionCount() == 0);
 
683
    QVERIFY(r.repetitionDelay() == 0);
 
684
 
 
685
    r.setSecondsBeforeStart(45);
 
686
    QVERIFY(!r.isEmpty());
 
687
    r.removeValue(QOrganizerItemReminder::FieldSecondsBeforeStart);
 
688
    QVERIFY(r.isEmpty());
 
689
 
 
690
    QOrganizerItemReminder baseR;
 
691
    baseR = r;
 
692
    QVERIFY(baseR.isEmpty());
 
693
    baseR.setSecondsBeforeStart(50);
 
694
    QVERIFY(baseR.secondsBeforeStart() == 50);
 
695
    QVERIFY(r.secondsBeforeStart() == 0);
 
696
    QVERIFY(!baseR.isEmpty());
 
697
    QVERIFY(r.isEmpty());
 
698
 
 
699
    r.setRepetition(3, 100);
 
700
    QVERIFY(r.repetitionCount() == 3);
 
701
    QVERIFY(r.repetitionDelay() == 100);
 
702
    QVERIFY(!r.isEmpty());
 
703
 
 
704
    r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
 
705
    QVERIFY(r.secondsBeforeStart() == 30);
 
706
 
 
707
    // add
 
708
    QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 0);
 
709
    QVERIFY(oi.saveDetail(&r));
 
710
    QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 1);
 
711
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeAudibleReminder) == r);
 
712
 
 
713
    // update
 
714
    r.setSecondsBeforeStart(300);
 
715
    r.setDataUrl(QUrl("http://www.test.com"));
 
716
    QVERIFY(r.dataUrl() == QUrl("http://www.test.com"));
 
717
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeAudibleReminder) != r);
 
718
    QVERIFY(oi.saveDetail(&r));
 
719
    QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 1); // should update, not add another
 
720
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeAudibleReminder) == r);
 
721
 
 
722
    // remove
 
723
    QVERIFY(oi.removeDetail(&r));
 
724
    QVERIFY(oi.details(QOrganizerItemDetail::TypeAudibleReminder).size() == 0);
 
725
}
 
726
 
 
727
void tst_QOrganizerItemDetails::emailReminder()
 
728
{
 
729
    QOrganizerItemEmailReminder r;
 
730
    QOrganizerItem oi;
 
731
 
 
732
    QVERIFY(r.isEmpty());
 
733
    QVERIFY(r.reminderType() == QOrganizerItemReminder::EmailReminder);
 
734
 
 
735
    QVERIFY(r.secondsBeforeStart() == 0);
 
736
    QVERIFY(r.repetitionCount() == 0);
 
737
    QVERIFY(r.repetitionDelay() == 0);
 
738
 
 
739
    r.setRepetition(3, 100);
 
740
    QVERIFY(r.repetitionCount() == 3);
 
741
    QVERIFY(r.repetitionDelay() == 100);
 
742
    QVERIFY(!r.isEmpty());
 
743
 
 
744
    r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
 
745
    QVERIFY(r.secondsBeforeStart() == 30);
 
746
 
 
747
    // add
 
748
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 0);
 
749
    QVERIFY(oi.saveDetail(&r));
 
750
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 1);
 
751
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEmailReminder) == r);
 
752
 
 
753
    // update
 
754
    r.setSecondsBeforeStart(300);
 
755
    r.setContents("subject", "body", QVariantList());
 
756
    r.setRecipients(QStringList() << "recipient" << "other recipient");
 
757
    QVERIFY(r.subject() == QString("subject"));
 
758
    QVERIFY(r.body() == QString("body"));
 
759
    QVERIFY(r.attachments() == QVariantList());
 
760
    QVERIFY(r.recipients() == (QStringList() << "recipient" << "other recipient"));
 
761
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEmailReminder) != r);
 
762
    QVERIFY(oi.saveDetail(&r));
 
763
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 1); // should update, not add another
 
764
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEmailReminder) == r);
 
765
 
 
766
    // remove
 
767
    QVERIFY(oi.removeDetail(&r));
 
768
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEmailReminder).size() == 0);
 
769
}
 
770
 
 
771
void tst_QOrganizerItemDetails::visualReminder()
 
772
{
 
773
    QOrganizerItemVisualReminder r;
 
774
    QOrganizerItem oi;
 
775
 
 
776
    QVERIFY(r.isEmpty());
 
777
    QVERIFY(r.reminderType() == QOrganizerItemReminder::VisualReminder);
 
778
 
 
779
    QVERIFY(r.secondsBeforeStart() == 0);
 
780
    QVERIFY(r.repetitionCount() == 0);
 
781
    QVERIFY(r.repetitionDelay() == 0);
 
782
 
 
783
    r.setRepetition(3, 100);
 
784
    QVERIFY(r.repetitionCount() == 3);
 
785
    QVERIFY(r.repetitionDelay() == 100);
 
786
    QVERIFY(!r.isEmpty());
 
787
 
 
788
    r.setSecondsBeforeStart(30); // reminder, 30 seconds before the item is due to start.
 
789
    QVERIFY(r.secondsBeforeStart() == 30);
 
790
 
 
791
    // add
 
792
    QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 0);
 
793
    QVERIFY(oi.saveDetail(&r));
 
794
    QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 1);
 
795
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeVisualReminder) == r);
 
796
 
 
797
    // update
 
798
    r.setSecondsBeforeStart(300);
 
799
    r.setMessage("test");
 
800
    r.setDataUrl(QUrl("http://www.test.com"));
 
801
    QVERIFY(r.message() == QString("test"));
 
802
    QVERIFY(r.dataUrl() == QUrl("http://www.test.com"));
 
803
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeVisualReminder) != r);
 
804
    QVERIFY(oi.saveDetail(&r));
 
805
    QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 1); // should update, not add another
 
806
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeVisualReminder) == r);
 
807
 
 
808
    // remove
 
809
    QVERIFY(oi.removeDetail(&r));
 
810
    QVERIFY(oi.details(QOrganizerItemDetail::TypeVisualReminder).size() == 0);
 
811
}
 
812
 
 
813
void tst_QOrganizerItemDetails::attendee()
 
814
{
 
815
    QOrganizerEventAttendee a;
 
816
    QOrganizerItem oi;
 
817
 
 
818
    QVERIFY(a.isEmpty());
 
819
    QVERIFY(a.name().isEmpty());
 
820
    QVERIFY(a.emailAddress().isEmpty());
 
821
    QVERIFY(a.attendeeId().isEmpty());
 
822
    QVERIFY(a.participationRole() == 0);
 
823
    QVERIFY(a.participationStatus() == 0);
 
824
 
 
825
    a.setAttendeeId("123456");
 
826
    QVERIFY(a.attendeeId() == QString("123456"));
 
827
    a.setEmailAddress("people@nokia.com");
 
828
    QVERIFY(a.emailAddress() == QString("people@nokia.com"));
 
829
    a.setName("people");
 
830
    QVERIFY(a.name() == QString("people"));
 
831
    a.setParticipationRole(QOrganizerEventAttendee::RoleRequiredParticipant);
 
832
    QVERIFY(a.participationRole() == QOrganizerEventAttendee::RoleRequiredParticipant);
 
833
    a.setParticipationStatus(QOrganizerEventAttendee::StatusAccepted);
 
834
    QVERIFY(a.participationStatus() == QOrganizerEventAttendee::StatusAccepted);
 
835
    // add
 
836
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 0);
 
837
    QVERIFY(oi.saveDetail(&a));
 
838
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 1);
 
839
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventAttendee) == a);
 
840
    // update
 
841
    a.setAttendeeId("54321");
 
842
    a.setName("newpeople");
 
843
    a.setEmailAddress("newpeople@nokia.com");
 
844
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventAttendee) != a);
 
845
    QVERIFY(oi.saveDetail(&a));
 
846
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 1);
 
847
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventAttendee) == a);
 
848
 
 
849
    // add one more attendee
 
850
    QOrganizerEventAttendee a1;
 
851
    a1.setAttendeeId("777777");
 
852
    a1.setName("people1");
 
853
    a1.setEmailAddress("people1@nokia.com");
 
854
    QVERIFY(oi.saveDetail(&a1));
 
855
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 2);
 
856
 
 
857
    // remove
 
858
    QVERIFY(oi.removeDetail(&a));
 
859
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 1);
 
860
    QVERIFY(oi.removeDetail(&a1));
 
861
    QVERIFY(oi.details(QOrganizerItemDetail::TypeEventAttendee).size() == 0);
 
862
}
 
863
 
 
864
void tst_QOrganizerItemDetails::rsvp()
 
865
{
 
866
    QOrganizerEventRsvp rsvp;
 
867
    QOrganizerItem oi;
 
868
 
 
869
    QVERIFY(rsvp.isEmpty());
 
870
    QVERIFY(rsvp.organizerName().isEmpty());
 
871
    QVERIFY(rsvp.organizerEmail().isEmpty());
 
872
    QVERIFY(rsvp.responseDate().isNull());
 
873
    QVERIFY(!rsvp.responseDate().isValid());
 
874
    QVERIFY(rsvp.responseDeadline().isNull());
 
875
    QVERIFY(!rsvp.responseDeadline().isValid());
 
876
    QVERIFY(rsvp.participationRole() == 0);
 
877
    QVERIFY(rsvp.participationStatus() == 0);
 
878
    QVERIFY(rsvp.responseRequirement() == 0);
 
879
 
 
880
    rsvp.setOrganizerName("Donald Duck");
 
881
    QVERIFY(rsvp.organizerName() == QString("Donald Duck"));
 
882
    rsvp.setOrganizerEmail("don@duck.com");
 
883
    QVERIFY(rsvp.organizerEmail() == QString("don@duck.com"));
 
884
    QDate testDate(2010, 10, 10);
 
885
    rsvp.setResponseDate(testDate);
 
886
    QVERIFY(!rsvp.responseDate().isNull());
 
887
    QVERIFY(rsvp.responseDate().isValid());
 
888
    QCOMPARE(testDate, rsvp.responseDate());
 
889
    rsvp.setResponseDeadline(testDate);
 
890
    QVERIFY(!rsvp.responseDeadline().isNull());
 
891
    QVERIFY(rsvp.responseDeadline().isValid());
 
892
    QCOMPARE(testDate, rsvp.responseDeadline());
 
893
    rsvp.setParticipationRole(QOrganizerEventAttendee::RoleOrganizer);
 
894
    QVERIFY(rsvp.participationRole() == QOrganizerEventAttendee::RoleOrganizer);
 
895
    rsvp.setParticipationStatus(QOrganizerEventAttendee::StatusAccepted);
 
896
    QVERIFY(rsvp.participationStatus() == QOrganizerEventAttendee::StatusAccepted);
 
897
    rsvp.setResponseRequirement(QOrganizerEventRsvp::ResponseRequired);
 
898
    QVERIFY(rsvp.responseRequirement() == QOrganizerEventRsvp::ResponseRequired);
 
899
 
 
900
    // add
 
901
    QCOMPARE(0, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
 
902
    QVERIFY(oi.saveDetail(&rsvp));
 
903
    QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
 
904
    QVERIFY(rsvp == oi.detail(QOrganizerItemDetail::TypeEventRsvp));
 
905
 
 
906
    // update
 
907
    rsvp.setOrganizerName("Mickey Mouse");
 
908
    rsvp.setOrganizerEmail("mick@mouse.com");
 
909
    QDate testDate2(2011, 11, 11);
 
910
    rsvp.setResponseDate(testDate2);
 
911
    rsvp.setResponseDeadline(testDate2);
 
912
    rsvp.setParticipationRole(QOrganizerEventAttendee::RoleChairperson);
 
913
    rsvp.setParticipationStatus(QOrganizerEventAttendee::StatusDelegated);
 
914
    rsvp.setResponseRequirement(QOrganizerEventRsvp::ResponseNotRequired);
 
915
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventRsvp) != rsvp);
 
916
    QVERIFY(oi.saveDetail(&rsvp));
 
917
    QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
 
918
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeEventRsvp) == rsvp);
 
919
 
 
920
    // add another rsvp - not supported by all the backends
 
921
    QOrganizerEventRsvp rsvp2;
 
922
    rsvp2.setOrganizerName("Goofy");
 
923
    QVERIFY(oi.saveDetail(&rsvp2));
 
924
    QCOMPARE(2, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
 
925
 
 
926
    // remove
 
927
    QVERIFY(oi.removeDetail(&rsvp2));
 
928
    QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
 
929
    QVERIFY(oi.removeDetail(&rsvp));
 
930
    QCOMPARE(0, oi.details(QOrganizerItemDetail::TypeEventRsvp).size());
 
931
}
 
932
 
 
933
void tst_QOrganizerItemDetails::classification()
 
934
{
 
935
    QOrganizerItemClassification classification;
 
936
    QOrganizerItem oi;
 
937
 
 
938
    QVERIFY(classification.isEmpty());
 
939
 
 
940
    // setters/getters
 
941
    classification.setClassification(QOrganizerItemClassification::AccessPublic);
 
942
    QVERIFY(classification.classification() == QOrganizerItemClassification::AccessPublic);
 
943
    classification.setClassification(QOrganizerItemClassification::AccessPrivate);
 
944
    QVERIFY(classification.classification() == QOrganizerItemClassification::AccessPrivate);
 
945
    classification.setClassification(QOrganizerItemClassification::AccessConfidential);
 
946
    QVERIFY(classification.classification() == QOrganizerItemClassification::AccessConfidential);
 
947
 
 
948
    // add
 
949
    QCOMPARE(0, oi.details(QOrganizerItemDetail::TypeClassification).size());
 
950
    QVERIFY(oi.saveDetail(&classification));
 
951
    QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeClassification).size());
 
952
    QCOMPARE(classification, static_cast<QOrganizerItemClassification>(oi.detail(QOrganizerItemDetail::TypeClassification)));
 
953
 
 
954
    // update
 
955
    classification.setValue(QOrganizerItemClassification::FieldClassification, QOrganizerItemClassification::AccessPrivate);
 
956
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeClassification) != classification);
 
957
    QVERIFY(oi.saveDetail(&classification));
 
958
    QCOMPARE(1, oi.details(QOrganizerItemDetail::TypeClassification).size());
 
959
    QVERIFY(oi.detail(QOrganizerItemDetail::TypeClassification) == classification);
 
960
 
 
961
    // try adding another, amount of details should stay the same
 
962
    QOrganizerItemClassification classification2;
 
963
    classification2.setClassification(QOrganizerItemClassification::AccessConfidential);
 
964
    QVERIFY(oi.saveDetail(&classification2));
 
965
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeClassification).size(), 1);
 
966
 
 
967
    // remove
 
968
    QVERIFY(oi.removeDetail(&classification2));
 
969
    QCOMPARE(oi.details(QOrganizerItemDetail::TypeClassification).size(), 0);
 
970
}
 
971
 
 
972
void tst_QOrganizerItemDetails::version()
 
973
{
 
974
    QOrganizerItemVersion version;
 
975
    QCOMPARE(version.type(), QOrganizerItemDetail::TypeVersion);
 
976
    QVERIFY(!version.hasValue(QOrganizerItemVersion::FieldVersion));
 
977
    QVERIFY(!version.hasValue(QOrganizerItemVersion::FieldExtendedVersion));
 
978
 
 
979
    version.setVersion(64);
 
980
    QCOMPARE(version.version(), 64);
 
981
    QVERIFY(version.hasValue(QOrganizerItemVersion::FieldVersion));
 
982
    QVERIFY(!version.hasValue(QOrganizerItemVersion::FieldExtendedVersion));
 
983
 
 
984
    QByteArray extendedVersion("Qt rules!");
 
985
    version.setExtendedVersion(extendedVersion);
 
986
    QCOMPARE(version.extendedVersion(), extendedVersion);
 
987
    QVERIFY(version.hasValue(QOrganizerItemVersion::FieldVersion));
 
988
    QVERIFY(version.hasValue(QOrganizerItemVersion::FieldExtendedVersion));
 
989
}
 
990
 
 
991
QTEST_MAIN(tst_QOrganizerItemDetails)
 
992
#include "tst_qorganizeritemdetails.moc"