ILIAS  release_8 Revision v8.24
ilTermsOfServiceAcceptanceDatabaseGatewayTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
26{
27 public function testInstanceCanBeCreated(): void
28 {
29 $database = $this->getMockBuilder(ilDBInterface::class)->getMock();
30 $gateway = new ilTermsOfServiceAcceptanceDatabaseGateway($database);
31
32 $this->assertInstanceOf(ilTermsOfServiceAcceptanceDatabaseGateway::class, $gateway);
33 }
34
36 {
38 $entity = $entity
39 ->withUserId(666)
40 ->withDocumentId(4711)
41 ->withTitle('Document PHP Unit')
42 ->withSerializedCriteria('')
43 ->withText('PHP Unit')
44 ->withTimestamp(time())
45 ->withHash(md5($entity->getText()));
46
47 $expected_id = 4711;
48
49 $database = $this->getMockBuilder(ilDBInterface::class)->getMock();
50 $result = $this->getMockBuilder(ilDBStatement::class)->getMock();
51
52 $database
53 ->expects($this->once())
54 ->method('queryF')
55 ->with(
56 'SELECT id FROM tos_versions WHERE hash = %s AND doc_id = %s',
57 ['text', 'integer'],
58 [$entity->getHash(), $entity->getDocumentId()]
59 )->willReturn($result);
60
61 $database
62 ->expects($this->once())
63 ->method('numRows')
64 ->with($result)
65 ->willReturn(0);
66
67 $database
68 ->expects($this->once())
69 ->method('nextId')
70 ->with('tos_versions')
71 ->willReturn($expected_id);
72
73 $expectedVersions = [
74 'id' => ['integer', $expected_id],
75 'doc_id' => ['integer', $entity->getDocumentId()],
76 'title' => ['text', $entity->getTitle()],
77 'text' => ['clob', $entity->getText()],
78 'hash' => ['text', $entity->getHash()],
79 'ts' => ['integer', $entity->getTimestamp()]
80 ];
81 $expectedTracking = [
82 'tosv_id' => ['integer', $expected_id],
83 'usr_id' => ['integer', $entity->getUserId()],
84 'criteria' => ['clob', $entity->getSerializedCriteria()],
85 'ts' => ['integer', $entity->getTimestamp()]
86 ];
87
88 $database
89 ->expects($this->exactly(2))
90 ->method('insert')
91 ->with(
92 $this->logicalOr('tos_versions', 'tos_acceptance_track'),
93 $this->logicalOr($expectedVersions, $expectedTracking)
94 );
95
96 $gateway = new ilTermsOfServiceAcceptanceDatabaseGateway($database);
97 $gateway->trackAcceptance($entity);
98 }
99
101 {
102 $entity = new ilTermsOfServiceAcceptanceEntity();
103 $entity = $entity
104 ->withUserId(666)
105 ->withDocumentId(4711)
106 ->withTitle('Document PHP Unit')
107 ->withSerializedCriteria('')
108 ->withText('PHP Unit')
109 ->withTimestamp(time())
110 ->withHash(md5($entity->getText()));
111
112 $expected_id = 4711;
113
114 $database = $this->getMockBuilder(ilDBInterface::class)->getMock();
115 $result = $this->getMockBuilder(ilDBStatement::class)->getMock();
116
117 $database
118 ->expects($this->once())
119 ->method('queryF')
120 ->with(
121 'SELECT id FROM tos_versions WHERE hash = %s AND doc_id = %s',
122 ['text', 'integer'],
123 [$entity->getHash(), $entity->getDocumentId()]
124 )->willReturn($result);
125
126 $database
127 ->expects($this->once())
128 ->method('numRows')
129 ->with($result)
130 ->willReturn(1);
131
132 $database
133 ->expects($this->once())
134 ->method('fetchAssoc')
135 ->with($result)
136 ->willReturn(['id' => $expected_id]);
137
138 $expectedTracking = [
139 'tosv_id' => ['integer', $expected_id],
140 'usr_id' => ['integer', $entity->getUserId()],
141 'criteria' => ['clob', $entity->getSerializedCriteria()],
142 'ts' => ['integer', $entity->getTimestamp()]
143 ];
144 $database
145 ->expects($this->once())
146 ->method('insert')
147 ->with('tos_acceptance_track', $expectedTracking);
148
149 $gateway = new ilTermsOfServiceAcceptanceDatabaseGateway($database);
150 $gateway->trackAcceptance($entity);
151 }
152
154 {
155 $entity = new ilTermsOfServiceAcceptanceEntity();
156
157 $expected = [
158 'id' => 4711,
159 'usr_id' => 6,
160 'title' => 'Document PHP Unit',
161 'doc_id' => 4711,
162 'criteria' => '',
163 'text' => 'PHP Unit',
164 'hash' => md5('PHP Unit'),
165 'accepted_ts' => time()
166 ];
167
168 $database = $this->getMockBuilder(ilDBInterface::class)->getMock();
169 $database
170 ->expects($this->once())
171 ->method('fetchAssoc')
172 ->will($this->onConsecutiveCalls($expected));
173
174 $gateway = new ilTermsOfServiceAcceptanceDatabaseGateway($database);
175 $entity = $gateway->loadCurrentAcceptanceOfUser($entity);
176
177 $this->assertSame($expected['id'], $entity->getId());
178 $this->assertSame($expected['usr_id'], $entity->getUserId());
179 $this->assertSame($expected['doc_id'], $entity->getDocumentId());
180 $this->assertSame($expected['title'], $entity->getTitle());
181 $this->assertSame($expected['criteria'], $entity->getSerializedCriteria());
182 $this->assertSame($expected['text'], $entity->getText());
183 $this->assertSame($expected['accepted_ts'], $entity->getTimestamp());
184 $this->assertSame($expected['hash'], $entity->getHash());
185 }
186
188 {
189 $entity = new ilTermsOfServiceAcceptanceEntity();
190 $entity = $entity->withUserId(4711);
191
192 $database = $this->getMockBuilder(ilDBInterface::class)->getMock();
193
194 $database
195 ->expects($this->once())
196 ->method('quote')
197 ->with($entity->getUserId(), 'integer')
198 ->willReturn((string) $entity->getUserId());
199
200 $database
201 ->expects($this->once())
202 ->method('manipulate')
203 ->with('DELETE FROM tos_acceptance_track WHERE usr_id = ' . $entity->getUserId());
204
205 $gateway = new ilTermsOfServiceAcceptanceDatabaseGateway($database);
206 $gateway->deleteAcceptanceHistoryByUser($entity);
207 }
208
210 {
211 $entity = new ilTermsOfServiceAcceptanceEntity();
212
213 $expected = [
214 'id' => 4711,
215 'title' => 'Document PHP Unit',
216 'doc_id' => 4711,
217 'criteria' => '',
218 'text' => 'PHP Unit',
219 'hash' => md5('PHP Unit'),
220 ];
221
222 $database = $this->getMockBuilder(ilDBInterface::class)->getMock();
223 $database
224 ->expects($this->once())
225 ->method('fetchAssoc')
226 ->will($this->onConsecutiveCalls($expected));
227
228 $gateway = new ilTermsOfServiceAcceptanceDatabaseGateway($database);
229 $entity = $gateway->loadById($entity);
230
231 $this->assertSame($expected['id'], $entity->getId());
232 $this->assertSame($expected['doc_id'], $entity->getDocumentId());
233 $this->assertSame($expected['title'], $entity->getTitle());
234 $this->assertSame($expected['criteria'], $entity->getSerializedCriteria());
235 $this->assertSame($expected['text'], $entity->getText());
236 $this->assertSame($expected['hash'], $entity->getHash());
237 }
238}
Class ilTermsOfServiceBaseTest.