@@ -55,4 +55,231 @@ public function validXmlIsAccepted(): void
5555 self ::assertIsObject ($ node );
5656 self ::assertEquals ('root ' , $ node ->getName ());
5757 }
58+
59+
60+ /**
61+ * @test
62+ * @group filterFilesByMimeType
63+ */
64+ public function filterFilesByMimeTypeHandlesInvalidInput (): void
65+ {
66+ // Empty categories and types
67+ self ::assertFalse (Helper::filterFilesByMimeType (
68+ ['mimetype ' => 'image/jpeg ' ],
69+ [],
70+ null
71+ ));
72+
73+ // Invalid file input
74+ self ::assertFalse (Helper::filterFilesByMimeType (
75+ null ,
76+ ['image ' ],
77+ null
78+ ));
79+
80+ // Missing mime type key
81+ self ::assertFalse (Helper::filterFilesByMimeType (
82+ ['wrong_key ' => 'image/jpeg ' ],
83+ ['image ' ],
84+ null
85+ ));
86+ }
87+
88+ /**
89+ * @test
90+ * @group filterFilesByMimeType
91+ */
92+ public function filterFilesByMimeTypeAcceptsStandardMimeTypes (): void
93+ {
94+ $ file = ['mimetype ' => 'image/jpeg ' ];
95+
96+ self ::assertTrue (Helper::filterFilesByMimeType (
97+ $ file ,
98+ ['image ' ]
99+ ));
100+
101+ self ::assertFalse (Helper::filterFilesByMimeType (
102+ $ file ,
103+ ['video ' ]
104+ ));
105+
106+ // Test multiple categories
107+ self ::assertTrue (Helper::filterFilesByMimeType (
108+ $ file ,
109+ ['video ' , 'image ' ]
110+ ));
111+ }
112+
113+ /**
114+ * @test
115+ * @group filterFilesByMimeType
116+ */
117+ public function filterFilesByMimeTypeHandlesCustomDlfTypes (): void
118+ {
119+ $ testCases = [
120+ ['mimetype ' => 'application/vnd.kitodo.iiif ' ],
121+ ['mimetype ' => 'application/vnd.netfpx ' ],
122+ ['mimetype ' => 'application/vnd.kitodo.zoomify ' ],
123+ ['mimetype ' => 'image/jpg ' ]
124+ ];
125+
126+ foreach ($ testCases as $ file ) {
127+ self ::assertTrue (Helper::filterFilesByMimeType (
128+ $ file ,
129+ [],
130+ true
131+ ));
132+ }
133+
134+ foreach ($ testCases as $ file ) {
135+ self ::assertTrue (Helper::filterFilesByMimeType (
136+ $ file ,
137+ [],
138+ ['IIIF ' , 'IIP ' , 'ZOOMIFY ' , 'JPG ' ]
139+ ));
140+ }
141+
142+ // Test specific DLF type filtering
143+ $ file = ['mimetype ' => 'application/vnd.kitodo.iiif ' ];
144+ self ::assertTrue (Helper::filterFilesByMimeType (
145+ $ file ,
146+ [],
147+ true
148+ ));
149+ self ::assertFalse (Helper::filterFilesByMimeType (
150+ $ file ,
151+ [],
152+ ['IIP ' ]
153+ ));
154+ }
155+
156+ /**
157+ * @test
158+ * @group filterFilesByMimeType
159+ */
160+ public function filterFilesByMimeTypeHandlesCustomMimeTypeKey (): void
161+ {
162+ $ file = ['customKey ' => 'image/jpeg ' ];
163+
164+ self ::assertTrue (Helper::filterFilesByMimeType (
165+ $ file ,
166+ ['image ' ],
167+ null ,
168+ 'customKey '
169+ ));
170+
171+ self ::assertFalse (Helper::filterFilesByMimeType (
172+ $ file ,
173+ ['image ' ]
174+ ));
175+ }
176+
177+ /**
178+ * @test
179+ * @group filterFilesByMimeType
180+ */
181+ public function filterFilesByMimeTypeHandlesMixedScenarios (): void
182+ {
183+ // Standard mime type with DLF types enabled
184+ self ::assertTrue (Helper::filterFilesByMimeType (
185+ ['mimetype ' => 'image/jpeg ' ],
186+ ['image ' ],
187+ ['IIIF ' , 'IIP ' ]
188+ ));
189+
190+ // DLF mime type with matching category
191+ self ::assertTrue (Helper::filterFilesByMimeType (
192+ ['mimetype ' => 'application/vnd.kitodo.iiif ' ],
193+ ['application ' ],
194+ ['IIIF ' ]
195+ ));
196+
197+ // DLF mime type with non-matching category but allowed DLF type
198+ self ::assertTrue (Helper::filterFilesByMimeType (
199+ ['mimetype ' => 'application/vnd.kitodo.iiif ' ],
200+ ['image ' ],
201+ ['IIIF ' ]
202+ ));
203+ }
204+
205+ /**
206+ * @test
207+ * @group filterFilesByMimeType
208+ */
209+ public function filterFilesByMimeTypeHandlesWrongJPG (): void
210+ {
211+ $ wrongJpg = ['mimetype ' => 'image/jpg ' ];
212+
213+ // file with wrong JPG mime type and no custom dlf mime type key
214+ self ::assertFalse (Helper::filterFilesByMimeType (
215+ $ wrongJpg ,
216+ ['image ' ],
217+ []
218+ ));
219+
220+ // file with wrong JPG mime type and custom dlf mime type key
221+ self ::assertTrue (Helper::filterFilesByMimeType (
222+ $ wrongJpg ,
223+ [],
224+ ['JPG ' ]
225+ ));
226+
227+ // file with wrong JPG mime type in allowed key and custom dlf mime type key
228+ self ::assertTrue (Helper::filterFilesByMimeType (
229+ $ wrongJpg ,
230+ ['image ' ],
231+ ['JPG ' ]
232+ ));
233+ }
234+
235+ /**
236+ * @test
237+ * @group filterFilesByMimeType
238+ */
239+ public function filterFilesByMimeTypeHandlesDifferentDlfModeTypes (): void
240+ {
241+ // Test-Setup
242+ $ imageFile = ['mimetype ' => 'image/jpeg ' ];
243+ $ iiifFile = ['mimetype ' => 'application/vnd.kitodo.iiif ' ];
244+ $ iipFile = ['mimetype ' => 'application/vnd.netfpx ' ];
245+
246+ // Test: No DLF MIME Types (only Standard-Types)
247+ self ::assertTrue (Helper::filterFilesByMimeType (
248+ $ imageFile ,
249+ ['image ' ],
250+ null
251+ ), 'Standard image type should be accepted when DLF types are null ' );
252+
253+ self ::assertFalse (Helper::filterFilesByMimeType (
254+ $ iiifFile ,
255+ ['image ' ],
256+ null
257+ ), 'DLF type should be rejected when DLF types are null ' );
258+
259+ // Test: All DLF MIME Types
260+ self ::assertTrue (Helper::filterFilesByMimeType (
261+ $ iiifFile ,
262+ ['image ' ],
263+ true
264+ ), 'IIIF should be accepted when all DLF types are enabled ' );
265+
266+ self ::assertTrue (Helper::filterFilesByMimeType (
267+ $ iipFile ,
268+ ['image ' ],
269+ true
270+ ), 'IIP should be accepted when all DLF types are enabled ' );
271+
272+ // Test: Spezific DLF MIME Types
273+ self ::assertTrue (Helper::filterFilesByMimeType (
274+ $ iiifFile ,
275+ ['image ' ],
276+ ['IIIF ' ]
277+ ), 'IIIF should be accepted when specifically allowed ' );
278+
279+ self ::assertFalse (Helper::filterFilesByMimeType (
280+ $ iipFile ,
281+ ['image ' ],
282+ ['IIIF ' ]
283+ ), 'IIP should be rejected when not in allowed DLF types ' );
284+ }
58285}
0 commit comments