ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
ilModulesFileTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
35 
37 {
42  protected ?MockObject $storage_mock = null;
46  protected ?MockObject $db_mock = null;
47  protected MockObject $manager_mock;
48 
49  protected function setUp(): void
50  {
51  global $DIC;
52  $this->dic_backup = is_object($DIC) ? clone $DIC : null;
53 
54  $DIC = new Container();
55  $DIC['resource_storage'] = $this->storage_mock = $this->createMock(Services::class);
56  $this->manager_mock = $this->createMock(Manager::class);
57  $DIC['ilUser'] = $this->createMock(ilObjUser::class);
58  $DIC['ilUser']->expects($this->any())->method('getPref')->willReturn('en');
59  $DIC['ilDB'] = $this->db_mock = $this->createMock(ilDBInterface::class);
60  $DIC['upload'] = $this->createMock(FileUpload::class);
61  $DIC['ilias'] = $this->createMock(ILIAS::class);
62  $DIC['objDefinition'] = $this->createMock(ilObjectDefinition::class);
63  $DIC['ilLog'] = $this->createMock(ilLogger::class);
64  $DIC['ilErr'] = $this->createMock(ilErrorHandling::class);
65  $DIC['tree'] = $this->createMock(ilTree::class);
66  $DIC['tpl'] = $this->createMock(ilGlobalTemplateInterface::class);
67  $DIC['ilClientIniFile'] = $this->createMock(ilIniFile::class);
68  $DIC['ilAccess'] = $this->createMock(ilAccess::class);
69  $DIC['ilObjDataCache'] = $this->createMock(ilObjectDataCache::class);
70  $DIC['ilAppEventHandler'] = $this->createMock(ilAppEventHandler::class);
71  $DIC['lng'] = $this->createMock(ilLanguage::class);
72  $DIC['ilCtrl'] = $this->createMock(ilCtrlInterface::class);
73  $DIC['refinery'] = $this->createMock(Factory::class);
74  $DIC['http'] = $this->createMock(\ILIAS\HTTP\Services::class);
75  $DIC['object.customicons.factory'] = $this->createMock(IconFactory::class);
76  /* $DIC['ilCtrl'] = $this->getMockBuilder(ilCtrl::class)
77  ->disableOriginalConstructor()
78  ->disableArgumentCloning()
79  ->getMock();*/
80 
81  if (!defined('ILIAS_LOG_ENABLED')) {
82  define('ILIAS_LOG_ENABLED', false);
83  }
84  }
85 
86  protected function tearDown(): void
87  {
88  global $DIC;
89  $DIC = $this->dic_backup;
90  }
91 
92  #[PreserveGlobalState(false)]
93  #[RunInSeparateProcess]
94  public function testAppendStream(): void
95  {
96  $this->markTestSkipped('Failed for some unknown reason.');
97 
98  // DB mock
99  $title = 'Revision One';
100  $file_stream = Streams::ofString('Test Content');
101 
102  $this->storage_mock->expects($this->any())
103  ->method('manage')
104  ->willReturn($this->manager_mock);
105 
106  $this->db_mock->expects($this->any())
107  ->method('query')
108  ->willReturnCallback(function ($query): MockObject {
109  $mock_object = $this->createMock(ilDBStatement::class);
110  $mock_object->expects($this->any())->method('fetchAssoc')->willReturn([$query]);
111 
112  return $mock_object;
113  });
114 
115  $this->db_mock->expects($this->any())
116  ->method('fetchAssoc')
117  ->willReturnCallback(function (ilDBStatement $statement): ?array {
118  $row = $statement->fetchAssoc();
119  $query = '';
120  if ($row !== null) {
121  $query = end($row);
122  }
123  if (str_contains($query, 'last_update')) {
124  return [
125  'last_update' => '',
126  'create_date' => ''
127  ];
128  }
129 
130  return null;
131  });
132 
133  // Create File Object with disabled news notification
134  $file = $this->getMockBuilder(ilObjFile::class)
135  ->onlyMethods(['update'])
136  ->getMock();
137  $file->method('update');
138 
139  $r = new ReflectionClass(ilObjFile::class);
140  $property = $r->getProperty('just_notified');
141  $property->setAccessible(true);
142  $property->setValue($file, true);
143  $file->setMode(ilObjFile::MODE_FILELIST);
144  $this->db_mock->expects($this->any())
145  ->method('fetchAssoc')
146  ->willReturn(
147  [
148  'last_update' => '',
149  'create_date' => ''
150  ]
151  );
152  $file->create();
153 
154  // identification
155  $rid = new ResourceIdentification('the_identification');
156 
157  $consecutive = [
158  ['-', null],
159  ['the_identification', $rid],
160  ['the_identification', $rid],
161  ];
162  $this->manager_mock
163  ->expects($this->any())
164  ->method('find')
165  ->willReturnCallback(
166  function (string $id) use (&$consecutive): ?ResourceIdentification {
167  $expected = array_shift($consecutive);
168  [$eid, $ret] = $consecutive;
169  $this->assertEquals($eid, $id);
170  return $ret;
171  }
172  );
173 
174  $this->manager_mock->expects($this->once())
175  ->method('stream')
176  ->with($file_stream, new ilObjFileStakeholder(0), $title)
177  ->willReturn($rid);
178 
179  $revision = new FileRevision($rid);
180  $revision->setVersionNumber(1);
181  $revision->setTitle($title);
182  $resource = new StorableFileResource($rid);
183  $resource->addRevision($revision);
184 
185  $this->manager_mock->expects($this->once())
186  ->method('getCurrentRevision')
187  ->with($rid)
188  ->willReturn($revision);
189 
190  $this->manager_mock->expects($this->any())
191  ->method('getResource')
192  ->with($rid)
193  ->willReturn($resource);
194 
195  $revision_number = $file->appendStream($file_stream, $title);
196  $this->assertEquals(1, $revision_number);
197  $this->assertEquals(1, $file->getVersion());
198  $this->assertEquals($title, $file->getTitle());
199  }
200 }
Class ilObjFileStakeholder.
Interface Observer Contains several chained tasks and infos about them.
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:35
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const MODE_FILELIST
global $DIC
Definition: shib_login.php:26
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
$r