1<?php
2/**
3 * Test the "time based" synchronization handler.
4 *
5 * PHP version 5
6 *
7 * @category   Kolab
8 * @package    Kolab_Storage
9 * @subpackage UnitTests
10 * @author     Gunnar Wrobel <wrobel@pardus.de>
11 * @license    http://www.horde.org/licenses/lgpl21 LGPL 2.1
12 */
13
14/**
15 * Test the "time based" synchronization handler.
16 *
17 * Copyright 2011-2017 Horde LLC (http://www.horde.org/)
18 *
19 * See the enclosed file COPYING for license information (LGPL). If you
20 * did not receive this file, see http://www.horde.org/licenses/lgpl21.
21 *
22 * @category   Kolab
23 * @package    Kolab_Storage
24 * @subpackage UnitTests
25 * @author     Gunnar Wrobel <wrobel@pardus.de>
26 * @license    http://www.horde.org/licenses/lgpl21 LGPL 2.1
27 */
28class Horde_Kolab_Storage_Unit_Synchronization_TimeBasedTest
29extends PHPUnit_Framework_TestCase
30{
31    public function testSynchronizeListReturn()
32    {
33        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
34        $list = $this->getMock(
35            'Horde_Kolab_Storage_List_Tools', array(), array(), '', false, false
36        );
37        $list->expects($this->once())
38            ->method('getListSynchronization')
39            ->will($this->returnValue($this->getMock('Horde_Kolab_Storage_List_Synchronization')));
40        $this->assertNull($synchronization->synchronizeList($list));
41    }
42
43    public function testListSynchronization()
44    {
45        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
46        $list = $this->getMock(
47            'Horde_Kolab_Storage_List_Tools', array(), array(), '', false, false
48        );
49        $list->expects($this->once())
50            ->method('getListSynchronization')
51            ->will($this->returnValue($this->getMock('Horde_Kolab_Storage_List_Synchronization')));
52        $synchronization->synchronizeList($list);
53    }
54
55    public function testListSynchronizationInSession()
56    {
57        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
58        $list = $this->getMock(
59            'Horde_Kolab_Storage_List_Tools', array(), array(), '', false, false
60        );
61        $list->expects($this->once())
62            ->method('getId')
63            ->will($this->returnValue('test'));
64        $list->expects($this->once())
65            ->method('getListSynchronization')
66            ->will($this->returnValue($this->getMock('Horde_Kolab_Storage_List_Synchronization')));
67        $synchronization->synchronizeList($list);
68        $this->assertTrue($_SESSION['kolab_storage']['synchronization']['list']['test']);
69    }
70
71    public function testDuplicateListSynchronization()
72    {
73        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
74        $list = $this->getMock(
75            'Horde_Kolab_Storage_List_Tools', array(), array(), '', false, false
76        );
77        $list->expects($this->once())
78            ->method('getListSynchronization')
79            ->will($this->returnValue($this->getMock('Horde_Kolab_Storage_List_Synchronization')));
80        $synchronization->synchronizeList($list);
81        $synchronization->synchronizeList($list);
82    }
83
84    public function testSynchronizeDataReturn()
85    {
86        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
87        $data = $this->getMock(
88            'Horde_Kolab_Storage_Data_Base', array(), array(), '', false, false
89        );
90        $this->assertNull($synchronization->synchronizeData($data));
91    }
92
93    public function testDataSynchronization()
94    {
95        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
96        $data = $this->getMock(
97            'Horde_Kolab_Storage_Data_Base', array(), array(), '', false, false
98        );
99        $data->expects($this->once())
100            ->method('synchronize');
101        $synchronization->synchronizeData($data);
102    }
103
104    public function testDataSynchronizationInSession()
105    {
106        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
107        $data = $this->getMock(
108            'Horde_Kolab_Storage_Data_Base', array(), array(), '', false, false
109        );
110        $data->expects($this->once())
111            ->method('getId')
112            ->will($this->returnValue('test'));
113        $synchronization->synchronizeData($data);
114        $this->assertTrue(isset($_SESSION['kolab_storage']['synchronization']['data']['test']));
115    }
116
117    public function testDuplicateDataSynchronization()
118    {
119        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased();
120        $data = $this->getMock(
121            'Horde_Kolab_Storage_Data_Base', array(), array(), '', false, false
122        );
123        $data->expects($this->once())
124            ->method('synchronize');
125        $synchronization->synchronizeData($data);
126        $synchronization->synchronizeData($data);
127    }
128
129    public function testDuplicateDataSynchronizationAfterSyncTimeElapsed()
130    {
131        $this->markTestSkipped('Test with embedded "sleep()". Only useful for the development phase.');
132        $synchronization = new Horde_Kolab_Storage_Synchronization_TimeBased(1, 0);
133        $data = $this->getMock(
134            'Horde_Kolab_Storage_Data_Base', array(), array(), '', false, false
135        );
136        $data->expects($this->exactly(2))
137            ->method('synchronize');
138        $synchronization->synchronizeData($data);
139        sleep(2);
140        $synchronization->synchronizeData($data);
141    }
142
143}
144