~chris.gagnon/+junk/qtpim-coverage

« back to all changes in this revision

Viewing changes to tests/auto/organizer/qmlorganizer/testcases/tst_organizermodel.qml

  • 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 Qt Mobility Components.
 
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
//TESTED_COMPONENT=src/organizer
 
43
 
 
44
import QtQuick 2.0
 
45
import QtTest 1.0
 
46
import QtOrganizer 5.0
 
47
 
 
48
TestCase {
 
49
    name: "ModelTests"
 
50
    id:modelTests
 
51
 
 
52
    property var signalWaitTime : 300
 
53
 
 
54
    QOrganizerTestUtility {
 
55
        id: utility
 
56
    }
 
57
 
 
58
    property Rectangle rect: Rectangle {
 
59
        id:myRectangle
 
60
    }
 
61
 
 
62
    function test_componentCreation_data() {
 
63
        return [
 
64
                // OrganizerModel
 
65
                {tag: "No properties",
 
66
                 code: "import QtQuick 2.0\n"
 
67
                    + "import QtOrganizer 5.0 \n"
 
68
                    + "   OrganizerModel {\n"
 
69
                    + "   }"
 
70
                },
 
71
                {tag: "Only id property",
 
72
                 code: "import QtQuick 2.0\n"
 
73
                   + "import QtOrganizer 5.0\n"
 
74
                   + "    OrganizerModel {\n"
 
75
                   + "        id:organizerModelId\n"
 
76
                   + "     }\n"
 
77
                },
 
78
                {tag: "Valuetype properties",
 
79
                 code: "import QtQuick 2.0\n"
 
80
                   + "import QtOrganizer 5.0\n"
 
81
                   + "    OrganizerModel {\n"
 
82
                   + "        id:organizerModelId\n"
 
83
                   + "        manager:'memory'\n"
 
84
                   + "        startPeriod:'2010-08-12T13:22:01'\n"
 
85
                   + "        endPeriod:'2010-09-12T13:22:01'\n"
 
86
                   + "     }\n"
 
87
                },
 
88
                {tag: "With filter",
 
89
                 code: "import QtOrganizer 5.0\n"
 
90
                   + "OrganizerModel {\n"
 
91
                   + "    id:organizerModelId\n"
 
92
                   + "    filter:DetailFieldFilter{\n"
 
93
                   + "        id:filter\n"
 
94
                   + "        field:EventTime.FieldStartDateTime\n"
 
95
                   + "        value:'2010-08-12T13:22:01'\n"
 
96
                   + "    }\n"
 
97
                   + "}\n"
 
98
                },
 
99
                {tag: "With invalid filter",
 
100
                 code: "import QtOrganizer 5.0\n"
 
101
                    + "OrganizerModel {\n"
 
102
                    + "   id:organizerModelId\n"
 
103
                    + "   filter:InvalidFilter{\n"
 
104
                    + "       id:filter\n"
 
105
                    + "   }\n"
 
106
                    + "}\n"
 
107
                },
 
108
                {tag: "With range filter",
 
109
                 code: "import QtOrganizer 5.0\n"
 
110
                    + "OrganizerModel {\n"
 
111
                    + "   id:organizerModelId\n"
 
112
                    + "   filter:DetailRangeFilter{\n"
 
113
                    + "       id:filter\n"
 
114
                    + "       field:EventTime.FieldStartDateTime\n"
 
115
                    + "       min:'2010-08-12T13:22:01'\n"
 
116
                    + "       max:'2010-09-12T13:22:01'\n"
 
117
                    + "   }\n"
 
118
                    + "}\n"
 
119
                },
 
120
                {tag: "With collection filter",
 
121
                 code: "import QtOrganizer 5.0\n"
 
122
                    + "OrganizerModel {\n"
 
123
                    + "   id:organizerModelId\n"
 
124
                    + "   filter:CollectionFilter{\n"
 
125
                    + "       id:filter\n"
 
126
                    + "       ids:['1234', '456', '90']\n"
 
127
                    + "   }\n"
 
128
                    + "}\n"
 
129
                },
 
130
                {tag: "With intersection filter",
 
131
                 code: "import QtOrganizer 5.0\n"
 
132
                    + "OrganizerModel {\n"
 
133
                    + "   id:organizerModelId\n"
 
134
                    + "   filter:IntersectionFilter {\n"
 
135
                    + "       id:filter\n"
 
136
                    + "       filters:[\n"
 
137
                    + "           DetailFieldFilter{\n"
 
138
                    + "               id:filter1\n"
 
139
                    + "               field:EventTime.FieldStartDateTime\n"
 
140
                    + "               value:'2010-08-12T13:22:01'\n"
 
141
                    + "           },\n"
 
142
                    + "           DetailRangeFilter{\n"
 
143
                    + "               id:filter2\n"
 
144
                    + "               field:EventTime.FieldStartDateTime\n"
 
145
                    + "               min:'2010-08-12T13:22:01'\n"
 
146
                    + "               max:'2010-09-12T13:22:01'\n"
 
147
                    + "           }\n"
 
148
                    + "      ]\n"
 
149
                    + "   }\n"
 
150
                    + "}\n"
 
151
                },
 
152
                {tag: "With fetchHint",
 
153
                 code: "import QtOrganizer 5.0\n"
 
154
                    + "OrganizerModel {\n"
 
155
                    + "    id:organizerModelId\n"
 
156
                    + "    fetchHint:FetchHint {\n"
 
157
                    + "        id:hint\n"
 
158
                    + "        optimizationHints:FetchHint.AllRequired\n"
 
159
                    + "    }\n"
 
160
                    + "}\n"
 
161
                },
 
162
 
 
163
                // Organizer Items
 
164
                {tag: "Base organizer item",
 
165
                 code: "import QtOrganizer 5.0\n"
 
166
                    + "OrganizerItem {\n"
 
167
                    + "}\n"
 
168
                },
 
169
                {tag: "Base organizer item: only id",
 
170
                 code: "import QtOrganizer 5.0\n"
 
171
                    + "OrganizerItem {\n"
 
172
                    + "    id:organizerItem\n"
 
173
                    + "}\n"
 
174
                },
 
175
                {tag: "Base organizer item: Valuetype properties",
 
176
                 code: "import QtOrganizer 5.0\n"
 
177
                    + "OrganizerItem {\n"
 
178
                    + "    id:organizerItem\n"
 
179
                    + "    displayLabel:'test item'\n"
 
180
                    + "    description:'item description'\n"
 
181
                    + "    guid:'1112232133'\n"
 
182
                    + "}\n"
 
183
                },
 
184
 
 
185
                {tag: "Base organizer item: default property",
 
186
                 code: "import QtOrganizer 5.0\n"
 
187
                    + "OrganizerItem {\n"
 
188
                    + "    id:organizerItem\n"
 
189
                    + "    DisplayLabel {\n"
 
190
                    + "        label:'test item'\n"
 
191
                    + "    }\n"
 
192
                    + "    Description {\n"
 
193
                    + "        description:'item description'\n"
 
194
                    + "    }\n"
 
195
                    + "    Guid{\n"
 
196
                    + "        guid:'111223213'\n"
 
197
                    + "    }\n"
 
198
                    + "}\n"
 
199
                },
 
200
 
 
201
                //Event
 
202
                {tag: "Organizer event",
 
203
                 code: "import QtOrganizer 5.0\n"
 
204
                    + "Event {\n"
 
205
                    + "}\n"
 
206
                },
 
207
                /*{tag: "Organizer event:Valuetype properties",
 
208
                 code: "import QtOrganizer 5.0 \n"
 
209
                    + "Event {\n"
 
210
                    + "    id:organizerEvent\n"
 
211
                    + "    displayLabel:'meeting'\n"
 
212
                    + "    startDateTime:'2010-08-12T13:00:00'\n"
 
213
                    + "    endDateTime:'2010-08-12T15:00:00'\n"
 
214
                    + "    allDay:false\n"
 
215
                    + "    location:'office'\n"
 
216
                    + "    Location {\n"
 
217
                    + "        label:'53 Brandl st'\n"
 
218
                    + "        latitude:-27.579570\n"
 
219
                    + "        longitude:153.10031\n"
 
220
                    + "    }\n"
 
221
                    + "    priority:Priority.Low\n"
 
222
                    + "    recurrence.recurrenceRules:[\n"
 
223
                    + "        RecurrenceRule {\n"
 
224
                    + "        }\n"
 
225
                    + "    ]\n"
 
226
                    + "    recurrence.recurrenceDates:[]\n"
 
227
                    + "    recurrence.exceptionDates:[]\n"
 
228
                    + "}\n"
 
229
                },*/
 
230
                /*
 
231
                {tag: "",
 
232
                 code: ""
 
233
                },
 
234
                */
 
235
 
 
236
        ]
 
237
    }
 
238
 
 
239
    function test_componentCreation(data)
 
240
    {
 
241
        try{
 
242
            var obj = Qt.createQmlObject(data.code, myRectangle, "dynamicSnippet1");
 
243
            verify(obj != undefined, "Unable to load script for " + data.tag);
 
244
            obj.destroy();
 
245
            console.log("Completed test on '" + data.tag + "'")
 
246
        }
 
247
        catch (errorObject)  {
 
248
            console.log("For code " + data.code + " Error was seen is " +  errorObject );
 
249
        }
 
250
 
 
251
    }
 
252
 
 
253
    function checkDetails(events)
 
254
    {
 
255
        var testDataEvents = test_addEvent_data()[0].events
 
256
        var foundEvent = false
 
257
        var testDataEvent = undefined
 
258
        for (var index = 0; index < testDataEvents.length; index++){
 
259
            testDataEvent = testDataEvents[index]
 
260
            foundEvent = false
 
261
            console.log("Checking event " + testDataEvent.subject)
 
262
            for (var index2 = 0; index2 < events.length; index2++){
 
263
                var actualEvent = events[index2];
 
264
                if (testDataEvent.subject == actualEvent.description){
 
265
                    foundEvent = true
 
266
                    compare(actualEvent.type, testDataEvent.type)
 
267
                    compare(actualEvent.startDateTime.toString(), testDataEvent.startDateTime.toString())
 
268
                    compare(actualEvent.endDateTime.toString(), testDataEvent.endDateTime.toString())
 
269
                    if (testDataEvent.repeat != undefined){
 
270
                        verify(actualEvent.recurrence != undefined, "Expected recurrance Element to be present for event")
 
271
                        verify(actualEvent.recurrence.recurrenceRules.length == 1, "Expected there to be one RecurranceRule")
 
272
                        var recurranceRule = actualEvent.recurrence.recurrenceRules[0] // first rule only
 
273
                        switch (event.repeat){
 
274
                        case RecurrenceRule.Daily:
 
275
                        case RecurrenceRule.Weekly:
 
276
                        case RecurrenceRule.Monthly:
 
277
                        case RecurrenceRule.Yearly:
 
278
                            compare(recurranceRule.frequency, RecurrenceRule.Weekly)
 
279
                            for (var dayIndex=0; dayIndex < testDataEvent.repeatDays; dayIndex++){
 
280
                                verify(recurranceRule.daysOfWeek.indexOf(testDataEvent.repeatDays[dayIndex]) != -1, "Expected event to recurrence on day " + testDataEvent.repeatDays[dayIndex])
 
281
                            }
 
282
                            compare(recurranceRule.limit.toString(), testDataEvent.limit.toString())
 
283
                        break
 
284
                        default:
 
285
                            if (event.repeat != RecurrenceRule.Invalid)
 
286
                                console.log("Unsupported repeat for Event actual:" + actualEvent.reoccurance + " expected:" + testDataEvent.repeat);
 
287
                        }
 
288
                    }
 
289
                    break
 
290
                }
 
291
            }
 
292
            //verify(foundEvent, "Did not find event " + testDataEvent.subject)
 
293
        }
 
294
        console.log("Done checking Event")
 
295
    }
 
296
 
 
297
    // test data is handled by addEvent.qml function addEvents()
 
298
    function test_addEvent_data() {
 
299
        return [
 
300
            {tag: "Event set 1",
 
301
                events:[
 
302
                    {tag: "Event 1",
 
303
                     type: Type.Event,
 
304
                     subject: "Event 1",
 
305
                     description: "starts 2010-12-09 8AM finishes 5PM",
 
306
                     startDateTime: new Date(2010, 12, 9, 8, 0),
 
307
                     endDateTime: new Date(2010, 12, 9, 17, 0),
 
308
                    },
 
309
                    {tag: "Event 2",
 
310
                     type: Type.Event,
 
311
                     subject: "Event 2",
 
312
                     description: "starts 2010-12-08 8AM finishes 1PM",
 
313
                     startDateTime: new Date(2010, 12, 8, 8, 0),
 
314
                     endDateTime: new Date(2010, 12, 8, 13, 0),
 
315
                    },
 
316
                    {tag: "Event 3",
 
317
                     type: Type.Event,
 
318
                     subject: "Event 3",
 
319
                     description: "starts a month from 2010-12-08 at 11AM finish at 2PM",
 
320
                     startDateTime: new Date(2010, 12, 8, 11, 0),
 
321
                     endDateTime: new Date(2010, 12, 8, 14, 0),
 
322
                    },
 
323
                    {tag: "Event 4",
 
324
                     type: Type.Event,
 
325
                     subject: "Event 4",
 
326
                     description: "starts after Event 3 and finishes 4PM",
 
327
                     startDateTime: new Date(2010, 12, 8, 14, 0),
 
328
                     endDateTime: new Date(2010, 12, 8, 16, 0),
 
329
                    },
 
330
                    {tag: "Event 5",
 
331
                     type: Type.Event,
 
332
                     subject: "Event 5",
 
333
                     description: "starts after Event 4 and finishes 5PM",
 
334
                     startDateTime: new Date(2010, 12, 8, 16, 0),
 
335
                     endDateTime: new Date(2010, 12, 8, 17, 0),
 
336
                    },
 
337
                    {tag: "Event 6",
 
338
                     type: Type.Event,
 
339
                     subject: "Event 6",
 
340
                     description: "starts 2010-12-10 at 11AM finishing 1PM, repeating for 4 weeks",
 
341
                     startDateTime: new Date(2010, 12, 10, 11, 0),
 
342
                     endDateTime: new Date(2010, 12, 10, 13, 0),
 
343
                     repeat: RecurrenceRule.Weekly,
 
344
                     repeatDays: [Qt.Friday],
 
345
                     repeatCount: 4
 
346
                    },
 
347
                ]
 
348
            }
 
349
        ]
 
350
    }
 
351
 
 
352
    function test_addEvent(data)
 
353
    {
 
354
        var component = Qt.createComponent("addEvent.qml")
 
355
        var obj = component.createObject(top)
 
356
        if (obj == undefined)
 
357
            console.log("Unable to load component from " + name +  " error is ", component.errorString())
 
358
        verify(obj != undefined, 'Unable to load component ' + name)
 
359
        obj.addEvents(data.events)
 
360
        var items = obj.testEvents()
 
361
        checkDetails(items)
 
362
        if (items.length == 0)
 
363
            console.log("No records added")
 
364
        obj.destroy()
 
365
        component.destroy()
 
366
    }
 
367
 
 
368
    function test_organizermodel_error_data() {
 
369
        return [
 
370
            {tag: "memory backend", managerToBeTested: "memory"},
 
371
            {tag: "jsondb backend", managerToBeTested: "jsondb"}
 
372
        ]
 
373
    }
 
374
 
 
375
    function test_organizermodel_error(data) {
 
376
        var spyWaitDelay = 200;
 
377
        var organizerChangedSpy = utility.create_testobject("import QtTest 1.0; SignalSpy {}", modelTests);
 
378
        // Create and check that backend for the tests is available
 
379
        var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
 
380
            + "import QtOrganizer 5.0\n"
 
381
            + "OrganizerModel {\n"
 
382
            + "  manager: '" + data.managerToBeTested + "'\n"
 
383
            + "}\n", modelTests);
 
384
        organizerChangedSpy.target = organizerModel;
 
385
        organizerChangedSpy.signalName = "modelChanged";
 
386
        organizerChangedSpy.wait();
 
387
        organizerModel.removeCollection(organizerModel.defaultCollection().collectionId);
 
388
        wait(spyWaitDelay);// how to utilise SignalSpy to check signal is _not_ emitted?
 
389
        compare(organizerModel.error, "PermissionsError");
 
390
    }
 
391
 
 
392
    function test_organizermodel_fetchitemsbyid_data() {
 
393
        return [
 
394
            {tag: "memory backend", managerToBeTested: "memory"},
 
395
            {tag: "jsondb backend", managerToBeTested: "jsondb"}
 
396
        ]
 
397
    }
 
398
 
 
399
    function test_organizermodel_fetchitemsbyid(data) {
 
400
        var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
 
401
            + "import QtOrganizer 5.0\n"
 
402
            + "OrganizerModel {\n"
 
403
            + "  manager: '" + data.managerToBeTested + "'\n"
 
404
            + "}\n", modelTests);
 
405
        wait(500);
 
406
 
 
407
        compare(organizerModel.fetchItems([]), -1)
 
408
 
 
409
        var spy = Qt.createQmlObject( "import QtTest 1.0 \nSignalSpy {}", modelTests);
 
410
        spy.target = organizerModel;
 
411
        spy.signalName = "itemsFetched";
 
412
 
 
413
        verify(organizerModel.fetchItems(["invalid-id"]) >= 0)
 
414
        spy.wait()
 
415
        compare(spy.count, 1)
 
416
    }
 
417
 
 
418
 
 
419
   function fetchItemsPopulation_data() {
 
420
 
 
421
        var event1 = utility.create_testobject("import QtQuick 2.0\n"
 
422
            + "import QtOrganizer 5.0\n"
 
423
            + "Event {\n"
 
424
            + "  displayLabel: \"event1:\"\n"
 
425
            + "  id: event1\n"
 
426
            + "  startDateTime: new Date(2011, 11, 8, 13, 55)\n"
 
427
            + "  endDateTime: new Date(2011, 11, 8, 14, 07)\n"
 
428
            + "}\n", modelTests);
 
429
 
 
430
        var event2 = utility.create_testobject("import QtQuick 2.0\n"
 
431
            + "import QtOrganizer 5.0\n"
 
432
            + "Event {\n"
 
433
            + "  displayLabel: \"event2:\"\n"
 
434
            + "  id: event2\n"
 
435
            + "  startDateTime: new Date(2011, 11, 8, 14, 11)\n"
 
436
            + "  endDateTime: new Date(2011, 11, 8, 14, 15)\n"
 
437
            + "}\n", modelTests);
 
438
 
 
439
        var event3 = utility.create_testobject("import QtQuick 2.0\n"
 
440
            + "import QtOrganizer 5.0\n"
 
441
            + "Event {\n"
 
442
            + "  displayLabel: \"event3:\"\n"
 
443
            + "  id: event3\n"
 
444
            + "  startDateTime: new Date(2011, 11, 9, 14, 25, 0)\n"
 
445
            + "  endDateTime: new Date(2011, 11, 9, 14, 45)\n"
 
446
            + "}\n", modelTests);
 
447
 
 
448
        var event4 = utility.create_testobject("import QtQuick 2.0\n"
 
449
            + "import QtOrganizer 5.0\n"
 
450
            + "Event {\n"
 
451
            + "  displayLabel: \"event4:\"\n"
 
452
            + "  id: event4\n"
 
453
            + "  startDateTime: new Date(2011, 11, 10, 14, 11)\n"
 
454
            + "  endDateTime: new Date(2011, 11, 10, 14, 45)\n"
 
455
            + "}\n", modelTests);
 
456
 
 
457
        var event5 = utility.create_testobject("import QtQuick 2.0\n"
 
458
            + "import QtOrganizer 5.0\n"
 
459
            + "Event {\n"
 
460
            + "  displayLabel: \"event5:\"\n"
 
461
            + "  id: event5\n"
 
462
            + "  startDateTime: new Date(2011, 12, 11, 14, 55)\n"
 
463
            + "  endDateTime: new Date(2011, 12, 11, 15, 05)\n"
 
464
            + "}\n", modelTests);
 
465
 
 
466
        return [
 
467
            {
 
468
                tag: "Event set 1",
 
469
                events:[
 
470
                    event1,
 
471
                    event2,
 
472
                    event3,
 
473
                    event4,
 
474
                    event5,
 
475
                ]
 
476
            }
 
477
        ]
 
478
    }
 
479
 
 
480
    function test_organizermodel_fetchitems_data() {
 
481
        return [
 
482
            {tag: "memory backend", managerToBeTested: "memory"},
 
483
            {tag: "jsondb backend", managerToBeTested: "jsondb"}
 
484
        ]
 
485
    }
 
486
 
 
487
    function test_organizermodel_fetchitems(data) {
 
488
        var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
 
489
            + "import QtOrganizer 5.0\n"
 
490
            + "OrganizerModel {\n"
 
491
            + "    manager: '" + data.managerToBeTested + "'\n"
 
492
            + "    id:fetchItemsTestModel\n"
 
493
            + "    autoUpdate:true\n "
 
494
            + "    property list<OrganizerItem> testFetchedItems: [OrganizerItem{},OrganizerItem{}]\n"
 
495
            + "    onItemsFetched: {\n"
 
496
            + "        testFetchedItems = fetchedItems;\n"
 
497
            + "    }\n"
 
498
            + "}\n", modelTests);
 
499
 
 
500
        var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
 
501
        modelChangedSpy.target = organizerModel
 
502
        modelChangedSpy.signalName = "modelChanged"
 
503
 
 
504
        var modelItemsFetchedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
 
505
        modelItemsFetchedSpy.target = organizerModel
 
506
        modelItemsFetchedSpy.signalName = "itemsFetched"
 
507
 
 
508
        var startDate = new Date(1977, 12, 9, 8, 0);
 
509
        var endDate = new Date(2022, 12, 9, 8, 0);
 
510
        organizerModel.startPeriod = startDate;
 
511
        organizerModel.endPeriod = endDate;
 
512
 
 
513
        // during initialisation only one modelChanged allowed
 
514
        modelChangedSpy.wait();
 
515
        compare(modelChangedSpy.count, 1)
 
516
 
 
517
        //Cleanup
 
518
        utility.init(organizerModel)
 
519
        utility.empty_calendar();
 
520
        compare(organizerModel.items.length, 0);
 
521
 
 
522
        // Store some test data....
 
523
        var testDataSet = fetchItemsPopulation_data()[0] //Event set 1
 
524
        console.log("Test Set:" + testDataSet.tag)
 
525
        console.log(" Saving " + testDataSet.events.length + " events...")
 
526
        for (var index = 0; index < testDataSet.events.length; index++){
 
527
            modelChangedSpy.clear();
 
528
            console.log("saving event:" + testDataSet.events[index]);
 
529
            organizerModel.saveItem( testDataSet.events[index]);
 
530
            modelChangedSpy.wait();
 
531
            compare(modelChangedSpy.count, 1)
 
532
        }
 
533
        console.log("Orgnizer itemcount = " + organizerModel.items.length);
 
534
        compare(organizerModel.items.length, testDataSet.events.length);
 
535
 
 
536
        // 1. Only fetch events with start/end dates before any stored events
 
537
        modelItemsFetchedSpy.clear();
 
538
        startDate = new Date(1977, 11, 9, 8, 0);
 
539
        endDate = new Date(2010, 11, 9, 8, 0);
 
540
        verify(organizerModel.fetchItems( startDate, endDate ) != -1);
 
541
        modelItemsFetchedSpy.wait();
 
542
        compare(modelItemsFetchedSpy.count, 1);
 
543
        compare(organizerModel.fetchItems.length,0);
 
544
 
 
545
        // 2. Nothing fetched if start+end dates are after any stored events
 
546
        modelItemsFetchedSpy.clear();
 
547
        startDate = new Date(2012, 11, 9, 8, 0);
 
548
        endDate = new Date(2099, 11, 9, 8, 0);
 
549
        verify( organizerModel.fetchItems( startDate, endDate ) != -1);
 
550
        modelItemsFetchedSpy.wait();
 
551
        compare(modelItemsFetchedSpy.count, 1);
 
552
        compare(organizerModel.fetchItems.length,0);
 
553
 
 
554
        // 3. All events fetched
 
555
        modelItemsFetchedSpy.clear();
 
556
        startDate = new Date(1977, 11, 9, 8, 0);
 
557
        endDate = new Date(2099, 11, 9, 8, 0);
 
558
        verify( organizerModel.fetchItems( startDate, endDate ) != -1);
 
559
        modelItemsFetchedSpy.wait();
 
560
        compare(modelItemsFetchedSpy.count, 1)
 
561
        compare(organizerModel.testFetchedItems.length, 5);
 
562
 
 
563
        // 4. Only items within start+end fetched
 
564
        modelItemsFetchedSpy.clear();
 
565
        startDate = new Date(2011, 11, 8, 14, 10);
 
566
        endDate = new Date(2011, 11, 10, 20, 0);
 
567
        verify(organizerModel.fetchItems( startDate, endDate ) != -1);
 
568
        modelItemsFetchedSpy.wait();
 
569
        compare(modelItemsFetchedSpy.count, 1)
 
570
        compare(organizerModel.testFetchedItems.length, 3);
 
571
 
 
572
        // 5. Filtering
 
573
        var testFilterDisplayLabel = Qt.createQmlObject("import QtOrganizer 5.0; DetailFilter{}", organizerModel)
 
574
        testFilterDisplayLabel.detail = Detail.DisplayLabel
 
575
        testFilterDisplayLabel.field = DisplayLabel.FieldLabel
 
576
        testFilterDisplayLabel.value = "event2:"
 
577
        testFilterDisplayLabel.matchFlags = DetailFilter.MatchContains
 
578
        modelItemsFetchedSpy.clear();
 
579
        startDate = new Date(1977, 11, 9, 8, 0);
 
580
        endDate = new Date(2099, 11, 9, 8, 0);
 
581
        verify( organizerModel.fetchItems( startDate, endDate, testFilterDisplayLabel ) != -1);
 
582
        modelItemsFetchedSpy.wait();
 
583
        compare(modelItemsFetchedSpy.count, 1)
 
584
        compare(organizerModel.testFetchedItems.length, 1);
 
585
 
 
586
        // 6. maxcount is not available in Memory model
 
587
        var testDefaultFilter = Qt.createQmlObject("import QtOrganizer 5.0; Filter{}", organizerModel)
 
588
        if (data.managerToBeTested != "memory")
 
589
        {
 
590
            startDate = new Date(1977, 11, 9, 8, 0);
 
591
            endDate = new Date(2099, 11, 9, 8, 0);
 
592
            modelItemsFetchedSpy.clear();
 
593
            verify( organizerModel.fetchItems( startDate, endDate, testDefaultFilter, 2) != -1);
 
594
            modelItemsFetchedSpy.wait();
 
595
            compare(modelItemsFetchedSpy.count, 1)
 
596
            compare(organizerModel.testFetchedItems.length, 2);
 
597
        }
 
598
 
 
599
         // 7. Sorting
 
600
        var sortAscending = utility.create_testobject("import QtQuick 2.0\n"
 
601
            + "import QtOrganizer 5.0\n"
 
602
            + "    SortOrder {\n"
 
603
            + "    detail: Detail.DisplayLabel\n"
 
604
            + "    field: DisplayLabel.FieldLabel\n" //field: DisplayLabelField.FieldLabel\n"
 
605
            + "    id: testAscendingOrder\n"
 
606
            + "    direction: Qt.AscendingOrder\n"
 
607
            + "}\n", organizerModel);
 
608
 
 
609
        var sortDescending = utility.create_testobject("import QtQuick 2.0\n"
 
610
            + "import QtOrganizer 5.0\n"
 
611
            + "    SortOrder {\n"
 
612
            + "    detail: Detail.DisplayLabel\n"
 
613
            + "    field: DisplayLabel.FieldLabel\n" //field: DisplayLabelField.FieldLabel\n"
 
614
            + "    id: testDecendingOrder\n"
 
615
            + "    direction: Qt.DescendingOrder\n"
 
616
            + "}\n", organizerModel);
 
617
 
 
618
        modelItemsFetchedSpy.clear();
 
619
        startDate = new Date(2011, 11, 8, 14, 10);
 
620
        endDate = new Date(2011, 11, 10, 20, 0);
 
621
        modelItemsFetchedSpy.clear();
 
622
        verify( organizerModel.fetchItems( startDate, endDate, testDefaultFilter, -1, [sortAscending] ) != -1);
 
623
        modelItemsFetchedSpy.wait();
 
624
        compare(modelItemsFetchedSpy.count, 1);
 
625
        compare(organizerModel.testFetchedItems.length, 3);
 
626
        var expectedSortOrder = [ "event2:", "event3:", "event4:"]
 
627
        compare(expectedSortOrder.length, organizerModel.testFetchedItems.length);
 
628
        for (var j = 0; j < organizerModel.testFetchedItems.length; j++) {
 
629
            verify(organizerModel.testFetchedItems[j].displayLabel === expectedSortOrder[j], "FetchItems Ascending Sort Order Incorrect.");
 
630
        }
 
631
 
 
632
        modelItemsFetchedSpy.clear();
 
633
        verify( organizerModel.fetchItems( startDate, endDate, testDefaultFilter, -1, [sortDescending] ) != -1);
 
634
        modelItemsFetchedSpy.wait();
 
635
        compare(modelItemsFetchedSpy.count, 1);
 
636
        compare(organizerModel.testFetchedItems.length, 3);
 
637
        compare(expectedSortOrder.length, organizerModel.testFetchedItems.length);
 
638
        for ( j = 0; j < organizerModel.testFetchedItems.length; j++) {
 
639
            verify(organizerModel.testFetchedItems[j].displayLabel == expectedSortOrder[2-j], "FetchItems Decending Sort Order Incorrect.");
 
640
        }
 
641
 
 
642
        // 8. fetch hints
 
643
        var fetchhint = utility.create_testobject("import QtQuick 2.0\n"
 
644
            + "import QtOrganizer 5.0\n"
 
645
            + "    FetchHint {\n"
 
646
            + "        id:hint\n"
 
647
            + "        optimizationHints:FetchHint.AllRequired\n"
 
648
            + "}\n", organizerModel);
 
649
        modelItemsFetchedSpy.clear();
 
650
        verify( organizerModel.fetchItems( startDate, endDate, testFilterDisplayLabel, -1, [sortDescending], fetchhint ) != -1);
 
651
        modelItemsFetchedSpy.wait();
 
652
        compare(modelItemsFetchedSpy.count, 1)
 
653
        compare(organizerModel.testFetchedItems.length, 1);
 
654
 
 
655
        // 9. storage locations and maxcount are not available in Memory model
 
656
        if (data.managerToBeTested != "memory")
 
657
        {
 
658
            modelItemsFetchedSpy.clear();
 
659
            organizerModel.fetchItems( startDate, endDate, testFilterDisplayLabel, -1, [sortDescending], fetchhint , OrganizerModel.SystemStorage);
 
660
            modelItemsFetchedSpy.wait();
 
661
            compare(modelItemsFetchedSpy.count, 1)
 
662
            compare(organizerModel.testFetchedItems.length, 0);
 
663
        }
 
664
 
 
665
        //Cleanup
 
666
        utility.empty_calendar();
 
667
        compare(organizerModel.items.length, 0);
 
668
    }
 
669
 
 
670
    function test_organizermodel_containsitems_data() {
 
671
        return [
 
672
            {tag: "memory backend", managerToBeTested: "memory"},
 
673
            {tag: "jsondb backend", managerToBeTested: "jsondb"}
 
674
        ]
 
675
    }
 
676
 
 
677
    function test_organizermodel_containsitems(data) {
 
678
        var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
 
679
            + "import QtOrganizer 5.0\n"
 
680
            + "OrganizerModel {\n"
 
681
            + "  manager: '" + data.managerToBeTested + "'\n"
 
682
            + "  startPeriod: new Date(2011, 12, 8, 14, 0)\n"
 
683
            + "  endPeriod: new Date(2011, 12, 8, 16, 0)\n"
 
684
            + "}\n", modelTests);
 
685
        utility.init(organizerModel)
 
686
        utility.waitModelChange()
 
687
        utility.empty_calendar()
 
688
 
 
689
        var event1 = utility.create_testobject("import QtQuick 2.0\n"
 
690
            + "import QtOrganizer 5.0\n"
 
691
            + "Event {\n"
 
692
            + "  startDateTime: new Date(2011, 12, 8, 13, 55)\n"
 
693
            + "  endDateTime: new Date(2011, 12, 8, 14, 07)\n"
 
694
            + "}\n", modelTests);
 
695
 
 
696
        var event2 = utility.create_testobject("import QtQuick 2.0\n"
 
697
            + "import QtOrganizer 5.0\n"
 
698
            + "Event {\n"
 
699
            + "  startDateTime: new Date(2011, 12, 8, 14, 11)\n"
 
700
            + "  endDateTime: new Date(2011, 12, 8, 14, 15)\n"
 
701
            + "}\n", modelTests);
 
702
 
 
703
        var todo3 = utility.create_testobject("import QtQuick 2.0\n"
 
704
            + "import QtOrganizer 5.0\n"
 
705
            + "Todo {\n"
 
706
            + "  startDateTime: new Date(2011, 12, 8, 14, 25, 0)\n"
 
707
            + "}\n", modelTests);
 
708
 
 
709
        var todo4 = utility.create_testobject("import QtQuick 2.0\n"
 
710
            + "import QtOrganizer 5.0\n"
 
711
            + "Todo {\n"
 
712
            + "  dueDateTime: new Date(2011, 12, 8, 14, 45)\n"
 
713
            + "}\n", modelTests);
 
714
 
 
715
        var event5 = utility.create_testobject("import QtQuick 2.0\n"
 
716
            + "import QtOrganizer 5.0\n"
 
717
            + "Event {\n"
 
718
            + "  startDateTime: new Date(2011, 12, 8, 14, 55)\n"
 
719
            + "  endDateTime: new Date(2011, 12, 8, 15, 05)\n"
 
720
            + "}\n", modelTests);
 
721
 
 
722
        organizerModel.saveItem(event1);
 
723
        utility.waitModelChange()
 
724
        organizerModel.saveItem(event2);
 
725
        utility.waitModelChange()
 
726
        organizerModel.saveItem(todo3);
 
727
        utility.waitModelChange()
 
728
        organizerModel.saveItem(todo4);
 
729
        utility.waitModelChange()
 
730
        organizerModel.saveItem(event5);
 
731
        utility.waitModelChange()
 
732
        compare(organizerModel.items.length, 5);
 
733
 
 
734
        var containsItems = organizerModel.containsItems(new Date(2011, 12, 8, 14, 0), new Date(2011, 12, 8, 16, 0), 600);
 
735
        compare(containsItems.length, 12);
 
736
        compare(containsItems[0], true);
 
737
        compare(containsItems[1], true);
 
738
        compare(containsItems[2], true);
 
739
        compare(containsItems[3], false);
 
740
        compare(containsItems[4], true);
 
741
        compare(containsItems[5], true);
 
742
        compare(containsItems[6], true);
 
743
        compare(containsItems[7], false);
 
744
        compare(containsItems[8], false);
 
745
        compare(containsItems[9], false);
 
746
        compare(containsItems[10], false);
 
747
        compare(containsItems[11], false);
 
748
    }
 
749
 
 
750
    function test_organizermodel_containsitems2_data() {
 
751
        return [
 
752
            {tag: "memory backend", managerToBeTested: "memory"},
 
753
            {tag: "jsondb backend", managerToBeTested: "jsondb"}
 
754
        ]
 
755
    }
 
756
 
 
757
    function test_organizermodel_containsitems2(data) {
 
758
        var organizerModel = utility.create_testobject("import QtQuick 2.0\n"
 
759
            + "import QtOrganizer 5.0\n"
 
760
            + "OrganizerModel {\n"
 
761
            + "  manager: '" + data.managerToBeTested + "'\n"
 
762
            + "  startPeriod: new Date(2011, 12, 7)\n"
 
763
            + "  endPeriod: new Date(2011, 12, 9)\n"
 
764
            + "}\n", modelTests);
 
765
        utility.init(organizerModel)
 
766
        utility.waitModelChange()
 
767
        utility.empty_calendar()
 
768
 
 
769
        var event00 = utility.create_testobject("import QtQuick 2.0\n"
 
770
            + "import QtOrganizer 5.0\n"
 
771
            + "Event {\n"
 
772
            + "  startDateTime: new Date(2011, 12, 7, 11)\n"
 
773
            + "  endDateTime: new Date(2011, 12, 8, 0, 30)\n"
 
774
            + "}\n", modelTests);
 
775
 
 
776
        var event0 = utility.create_testobject("import QtQuick 2.0\n"
 
777
            + "import QtOrganizer 5.0\n"
 
778
            + "Todo {\n"
 
779
            + "  startDateTime: new Date(2011, 12, 8, 1)\n"
 
780
            + "}\n", modelTests);
 
781
 
 
782
        var event1 = utility.create_testobject("import QtQuick 2.0\n"
 
783
            + "import QtOrganizer 5.0\n"
 
784
            + "Event {\n"
 
785
            + "  startDateTime: new Date(2011, 12, 8, 3)\n"
 
786
            + "  endDateTime: new Date(2011, 12, 8, 3, 30)\n"
 
787
            + "}\n", modelTests);
 
788
 
 
789
        var event2 = utility.create_testobject("import QtQuick 2.0\n"
 
790
            + "import QtOrganizer 5.0\n"
 
791
            + "Event {\n"
 
792
            + "  startDateTime: new Date(2011, 12, 8, 5)\n"
 
793
            + "  endDateTime: new Date(2011, 12, 8, 6)\n"
 
794
            + "}\n", modelTests);
 
795
 
 
796
 
 
797
        var event3 = utility.create_testobject("import QtQuick 2.0\n"
 
798
            + "import QtOrganizer 5.0\n"
 
799
            + "Event {\n"
 
800
            + "  startDateTime: new Date(2011, 12, 8, 8)\n"
 
801
            + "  endDateTime: new Date(2011, 12, 8, 10)\n"
 
802
            + "}\n", modelTests);
 
803
 
 
804
        var event4 = utility.create_testobject("import QtQuick 2.0\n"
 
805
            + "import QtOrganizer 5.0\n"
 
806
            + "Event {\n"
 
807
            + "  startDateTime: new Date(2011, 12, 8, 11, 30)\n"
 
808
            + "  endDateTime: new Date(2011, 12, 8, 12)\n"
 
809
            + "}\n", modelTests);
 
810
 
 
811
        var event5 = utility.create_testobject("import QtQuick 2.0\n"
 
812
            + "import QtOrganizer 5.0\n"
 
813
            + "Event {\n"
 
814
            + "  startDateTime: new Date(2011, 12, 8, 13)\n"
 
815
            + "  endDateTime: new Date(2011, 12, 8, 13, 30)\n"
 
816
            + "}\n", modelTests);
 
817
 
 
818
        compare(organizerModel.items.length, 0);
 
819
        organizerModel.saveItem(event00);
 
820
        utility.waitModelChange()
 
821
        organizerModel.saveItem(event0);
 
822
        utility.waitModelChange()
 
823
        organizerModel.saveItem(event1);
 
824
        utility.waitModelChange()
 
825
        organizerModel.saveItem(event2);
 
826
        utility.waitModelChange()
 
827
        organizerModel.saveItem(event3);
 
828
        utility.waitModelChange()
 
829
        organizerModel.saveItem(event4);
 
830
        utility.waitModelChange()
 
831
        organizerModel.saveItem(event5);
 
832
        utility.waitModelChange()
 
833
        compare(organizerModel.items.length, 7);
 
834
 
 
835
        var containsItems = organizerModel.containsItems(new Date(2011, 12, 8), new Date(2011, 12, 8, 13), 3600);
 
836
 
 
837
        compare(containsItems.length, 13);
 
838
        compare(containsItems[0], true);
 
839
        compare(containsItems[1], true);
 
840
        compare(containsItems[2], false);
 
841
        compare(containsItems[3], true);
 
842
        compare(containsItems[4], false);
 
843
        compare(containsItems[5], true);
 
844
        compare(containsItems[6], false);
 
845
        compare(containsItems[7], false);
 
846
        compare(containsItems[8], true);
 
847
        compare(containsItems[9], true);
 
848
        compare(containsItems[10], false);
 
849
        compare(containsItems[11], true);
 
850
        compare(containsItems[12], false);
 
851
    }
 
852
 
 
853
    function modelChangedSignalTestItems() {
 
854
        return [
 
855
            // events
 
856
            "import QtOrganizer 5.0 \n"
 
857
            + "   Event {\n"
 
858
            + "   startDateTime:'2011-10-25'\n"
 
859
            + "   endDateTime:'2011-10-26'\n"
 
860
            + "   allDay: false\n"
 
861
            + "   }",
 
862
            "import QtOrganizer 5.0 \n"
 
863
            + "   Event {\n"
 
864
            + "   startDateTime:'2011-10-26'\n"
 
865
            + "   endDateTime:'2011-10-27'\n"
 
866
            + "   allDay: true\n"
 
867
            + "   }"
 
868
        ]
 
869
    }
 
870
 
 
871
    // to test various usecases for modelChanged-signal
 
872
    function test_modelChangedSignal() {
 
873
        var managerlist = utility.getManagerList();
 
874
        if (managerlist.length < 0) {
 
875
            console.log("No manager to test");
 
876
            return;
 
877
        }
 
878
        for (var i = 0; i < managerlist.length; i ++) {
 
879
 
 
880
            var filter = Qt.createQmlObject("import QtOrganizer 5.0; DetailFieldFilter{}", modelTests)
 
881
            filter.detail = Detail.EventTime
 
882
            filter.field = EventTime.FieldAllDay
 
883
            filter.value = true
 
884
 
 
885
            var model = Qt.createQmlObject(
 
886
                    "import QtOrganizer 5.0;"
 
887
                    + "OrganizerModel {"
 
888
                    + "   manager: \"qtorganizer:" + managerlist[i] + ":id=qml\";"
 
889
                    + "   startPeriod:'2009-01-01';"
 
890
                    + "   endPeriod:'2012-12-31';"
 
891
                    + "   autoUpdate:true; }"
 
892
                    , modelTests);
 
893
            console.log("## Testing plugin: " + managerlist[i]);
 
894
            var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
 
895
            modelChangedSpy.target = model
 
896
            modelChangedSpy.signalName = "modelChanged"
 
897
 
 
898
            // during initialisation only one modelChanged allowed
 
899
            wait(signalWaitTime);
 
900
            compare(modelChangedSpy.count, 1)
 
901
 
 
902
            // prepare for rest of cases
 
903
            utility.init(model)
 
904
            utility.empty_calendar()
 
905
            utility.addItemsToModel(modelChangedSignalTestItems(), modelTests)
 
906
            compare(model.itemCount, 2)
 
907
 
 
908
            // after filterchange only one modelChanged allowed
 
909
            modelChangedSpy.clear()
 
910
            model.filter = filter
 
911
            wait(signalWaitTime);
 
912
            compare(modelChangedSpy.count, 1)
 
913
            compare(model.itemCount, 1)
 
914
 
 
915
            // after manual update only one modelChanged allowed
 
916
            model.autoUpdate = false
 
917
            modelChangedSpy.clear()
 
918
            model.filter = null
 
919
            model.update()
 
920
            wait(signalWaitTime);
 
921
            compare(modelChangedSpy.count, 1)
 
922
            compare(model.itemCount, 2)
 
923
            utility.empty_calendar()
 
924
        }
 
925
    }
 
926
 
 
927
    function test_updateMethods() {
 
928
        var managerlist = utility.getManagerList();
 
929
        if (managerlist.length < 0) {
 
930
            console.log("No manager to test");
 
931
            return;
 
932
        }
 
933
        for (var i = 0; i < managerlist.length; i ++) {
 
934
            var organizerModel = Qt.createQmlObject(
 
935
                    "import QtOrganizer 5.0;"
 
936
                    + "OrganizerModel {"
 
937
                    + "   manager: '" + managerlist[i] + "'\n"
 
938
                    + "   startPeriod:'2009-01-01'\n"
 
939
                    + "   endPeriod:'2012-12-31'\n"
 
940
                    + "}"
 
941
                    , modelTests);
 
942
            console.log("## Testing plugin: " + managerlist[i]);
 
943
 
 
944
            utility.init(organizerModel);
 
945
            utility.waitModelChange();
 
946
            utility.empty_calendar();
 
947
 
 
948
            var event1 = utility.create_testobject(
 
949
                "import QtOrganizer 5.0\n"
 
950
                + "Event {\n"
 
951
                + "  startDateTime: new Date(2011, 12, 7, 11)\n"
 
952
                + "  endDateTime: new Date(2011, 12, 8, 0, 30)\n"
 
953
                + "}\n", modelTests);
 
954
            var event2 = utility.create_testobject(
 
955
                "import QtOrganizer 5.0\n"
 
956
                + "Event {\n"
 
957
                + "  startDateTime: new Date(2011, 13, 7, 11)\n"
 
958
                + "  endDateTime: new Date(2011, 13, 8, 0, 30)\n"
 
959
                + "}\n", modelTests);
 
960
 
 
961
            var collection1 = utility.create_testobject("import QtQuick 2.0 \n"
 
962
              + "import QtOrganizer 5.0\n"
 
963
              + "Collection {\n"
 
964
              + "id: coll1\n"
 
965
              + "}\n", modelTests);
 
966
 
 
967
            var collection2 = utility.create_testobject("import QtQuick 2.0 \n"
 
968
              + "import QtOrganizer 5.0\n"
 
969
              + "Collection {\n"
 
970
              + "id: coll1\n"
 
971
              + "}\n", modelTests);
 
972
 
 
973
            var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
 
974
            modelChangedSpy.target = organizerModel
 
975
            modelChangedSpy.signalName = "modelChanged"
 
976
            var collectionsChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
 
977
            collectionsChangedSpy.target = organizerModel
 
978
            collectionsChangedSpy.signalName = "collectionsChanged"
 
979
 
 
980
            organizerModel.autoUpdate = false;
 
981
 
 
982
            // starting point
 
983
            compare(organizerModel.items.length, 0);
 
984
            compare(organizerModel.collections.length, 1);
 
985
 
 
986
            // updateItems() - should update only items
 
987
            organizerModel.saveItem(event1);
 
988
            organizerModel.saveCollection(collection1);
 
989
            wait(signalWaitTime)
 
990
            compare(modelChangedSpy.count, 0)
 
991
            compare(collectionsChangedSpy.count, 0)
 
992
            compare(organizerModel.items.length, 0)
 
993
            compare(organizerModel.collections.length, 1)
 
994
            organizerModel.updateItems();
 
995
            modelChangedSpy.wait(signalWaitTime)
 
996
            compare(modelChangedSpy.count, 1)
 
997
            compare(collectionsChangedSpy.count, 0)
 
998
            compare(organizerModel.items.length, 1)//+1
 
999
            compare(organizerModel.collections.length, 1)// collection change not visible, only default collection visible
 
1000
 
 
1001
            // updateCollections() - should update only collections
 
1002
            modelChangedSpy.clear();
 
1003
            collectionsChangedSpy.clear();
 
1004
            organizerModel.saveItem(event2);
 
1005
            // - there is saved unseen collection from updateItems()-test
 
1006
            wait(signalWaitTime)
 
1007
            compare(modelChangedSpy.count, 0)
 
1008
            compare(collectionsChangedSpy.count, 0)
 
1009
            organizerModel.updateCollections();
 
1010
            collectionsChangedSpy.wait(signalWaitTime)
 
1011
            compare(modelChangedSpy.count, 0)
 
1012
            compare(collectionsChangedSpy.count, 1)
 
1013
            compare(organizerModel.items.length, 1)// event2 not visible, only event1 saved in updateItems()-test visible
 
1014
            compare(organizerModel.collections.length, 2)//+1
 
1015
 
 
1016
            // update() - should update both
 
1017
            modelChangedSpy.clear();
 
1018
            collectionsChangedSpy.clear();
 
1019
            // - there is saved unseen item from updateCollections()-test
 
1020
            organizerModel.saveCollection(collection2);
 
1021
            wait(signalWaitTime)
 
1022
            compare(modelChangedSpy.count, 0)
 
1023
            compare(collectionsChangedSpy.count, 0)
 
1024
            organizerModel.update();
 
1025
            modelChangedSpy.wait(signalWaitTime)
 
1026
            compare(modelChangedSpy.count, 1)
 
1027
            compare(collectionsChangedSpy.count, 1)
 
1028
            compare(organizerModel.items.length, 2)//+1
 
1029
            compare(organizerModel.collections.length, 3)//+1
 
1030
 
 
1031
            modelChangedSpy.destroy();
 
1032
            collectionsChangedSpy.destroy();
 
1033
            organizerModel.destroy();
 
1034
        }
 
1035
    }
 
1036
 
 
1037
    function test_updateMethodsStartWithAutoupdateFalse() {
 
1038
 
 
1039
        var organizerModel = Qt.createQmlObject(
 
1040
                "import QtOrganizer 5.0;"
 
1041
                + "OrganizerModel {"
 
1042
                + "   manager: 'jsondb'\n"
 
1043
                + "   startPeriod:'2009-01-01'\n"
 
1044
                + "   endPeriod:'2012-12-31'\n"
 
1045
                + "   autoUpdate: false\n"
 
1046
                + "}"
 
1047
                , modelTests);
 
1048
        console.log("## Testing only jsondb-plugin");
 
1049
 
 
1050
        var modelChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
 
1051
        modelChangedSpy.target = organizerModel
 
1052
        modelChangedSpy.signalName = "modelChanged"
 
1053
        var collectionsChangedSpy = Qt.createQmlObject("import QtTest 1.0; SignalSpy{}", modelTests)
 
1054
        collectionsChangedSpy.target = organizerModel
 
1055
        collectionsChangedSpy.signalName = "collectionsChanged"
 
1056
 
 
1057
        // After test_updateMethods()-test there should be
 
1058
        // 2 items and 2 collections (+ default collection)
 
1059
        // on the jsondb. They're just not visible, since
 
1060
        // autoUpdate is false.
 
1061
        compare(organizerModel.items.length, 0);
 
1062
        compare(organizerModel.collections.length, 0);
 
1063
 
 
1064
        // Check we see still only collections after updating collections
 
1065
        organizerModel.updateCollections();
 
1066
        collectionsChangedSpy.wait(signalWaitTime)
 
1067
        compare(organizerModel.items.length, 0);
 
1068
        compare(organizerModel.collections.length, 3);// 2 + default collection
 
1069
 
 
1070
        // Save there item with other collection than default collection
 
1071
        var event = utility.create_testobject(
 
1072
            "import QtOrganizer 5.0\n"
 
1073
            + "Event {\n"
 
1074
            + "  startDateTime: new Date(2011, 12, 7, 11)\n"
 
1075
            + "  endDateTime: new Date(2011, 12, 8, 0, 30)\n"
 
1076
            + "}\n", modelTests);
 
1077
        for (var i = 0; i < organizerModel.collections.length; ++i) {
 
1078
            var collId = organizerModel.collections[i].collectionId;
 
1079
            if (collId != organizerModel.defaultCollection().collectionId) {
 
1080
                event.collectionId = collId;
 
1081
            }
 
1082
        }
 
1083
        organizerModel.saveItem(event);
 
1084
        wait(signalWaitTime)
 
1085
 
 
1086
        // Create collection filter and check that only the item with that collection is visible
 
1087
        var collectionFilter = Qt.createQmlObject("import QtOrganizer 5.0;CollectionFilter{}", modelTests);
 
1088
        collectionFilter.ids = [event.collectionId];
 
1089
        organizerModel.filter = collectionFilter;
 
1090
        organizerModel.updateItems();
 
1091
        modelChangedSpy.wait(signalWaitTime)
 
1092
        compare(organizerModel.items.length, 1);// 1 with that collection
 
1093
 
 
1094
        // Lastly check we get everything if filter is reset
 
1095
        organizerModel.filter = null;
 
1096
        organizerModel.updateItems();
 
1097
        modelChangedSpy.wait(signalWaitTime)
 
1098
        compare(organizerModel.items.length, 3); // all items
 
1099
 
 
1100
        // cleanup
 
1101
        utility.init(organizerModel);
 
1102
        utility.empty_calendar();
 
1103
 
 
1104
        collectionFilter.destroy();
 
1105
        modelChangedSpy.destroy();
 
1106
        collectionsChangedSpy.destroy();
 
1107
        organizerModel.destroy();
 
1108
    }
 
1109
}
 
1110