dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
dbxCmsVideoSizing_contract_test.php
Go to the documentation of this file.
1<?php
2
3$base = dirname(__DIR__, 2);
4$failures = array();
5
6$assert = static function(bool $condition, string $message) use (&$failures): void {
7 if (!$condition) $failures[] = $message;
8};
9
10require_once $base . '/modules/dbxContent/include/dbxContentRenderer.class.php';
11$rendererClass = new ReflectionClass(\dbx\dbxContent\dbxContentRenderer::class);
12$renderer = $rendererClass->newInstanceWithoutConstructor();
13$videoOptions = $rendererClass->getMethod('inline_video_options_from_html');
14$videoOptions->setAccessible(true);
15$options = (array)$videoOptions->invoke(
17 ' class="dbx-cms-inline-video-block" data-cms-video-width="1024" data-cms-video-height="800" data-cms-video-align="center"',
18 ''
19);
20
22 str_contains((string)($options['style'] ?? ''), 'width: 1024px')
23 && str_contains((string)($options['style'] ?? ''), 'height: 800px'),
24 'The frontend renderer does not preserve a CMS video size of 1024 x 800.'
25);
27 ($options['align'] ?? '') === 'center'
28 && str_contains((string)($options['style'] ?? ''), 'margin-left: auto')
29 && str_contains((string)($options['style'] ?? ''), 'margin-right: auto'),
30 'The frontend renderer does not preserve horizontal video centering.'
31);
32$videoPlayer = $rendererClass->getMethod('render_inline_video_player');
33$videoPlayer->setAccessible(true);
34$playerHtml = (string)$videoPlayer->invoke(
36 array('id' => 999, 'mime' => 'video/mp4', 'file_name' => 'test.mp4', 'title' => 'Testvideo'),
37 ' data-cms-video-width="640px" data-cms-video-align="center"',
38 ''
39);
41 str_contains($playerHtml, 'data-video-align="center"')
42 && str_contains($playerHtml, 'margin-left: auto')
43 && str_contains($playerHtml, 'width: 640px'),
44 'The rendered frontend player does not receive the centered video alignment.'
45);
46
47foreach (array('dbxapp', 'dbxdocs', 'steal') as $design) {
48 $baseCss = (string)file_get_contents($base . '/design/' . $design . '/css/base.css');
49 $contentCss = (string)file_get_contents($base . '/design/' . $design . '/css/c-content.css');
50 $cmsCss = (string)file_get_contents($base . '/design/' . $design . '/css/c-cms.css');
51 $assert(
52 str_contains($contentCss, '.ratio:has(> .dbx-content-inline-video[style*="width"])')
53 && str_contains($contentCss, '--bs-aspect-ratio: 0;')
54 && str_contains($contentCss, 'width: fit-content;'),
55 'Custom frontend video sizes remain constrained by a ratio container in design ' . $design . '.'
56 );
57 $assert(
58 str_contains($cmsCss, '.ratio:has(> .dbx-cms-inline-video-block[style*="width"])')
59 && str_contains($cmsCss, 'resize: both;'),
60 'Custom CMS video sizes remain constrained by a ratio container in design ' . $design . '.'
61 );
62 $assert(
63 str_contains($contentCss, '.dbx-content-inline-video[data-video-align="center"]')
64 && str_contains($contentCss, '.ratio:has(> .dbx-content-inline-video[data-video-align="center"])')
65 && str_contains($cmsCss, '.dbx-cms-inline-video-block[data-cms-video-align="center"]')
66 && str_contains($cmsCss, '.ratio:has(> .dbx-cms-inline-video-block[data-cms-video-align="center"])'),
67 'Centered videos are not aligned in the editor and frontend for design ' . $design . '.'
68 );
69 $assert(
70 str_contains($baseCss, '.ratio:has(> .dbx-content-inline-video[style*="width"])')
71 && str_contains($baseCss, '.dbx-content-inline-video[data-video-align="center"]')
72 && str_contains($baseCss, '.ratio:has(> .dbx-content-inline-video[data-video-align="center"])'),
73 'Critical centered-video layout is missing before async content CSS loads in design ' . $design . '.'
74 );
75 $assert(
76 !preg_match('/\.dbx-content-inline-video\s*\{[^}]*container-type:\s*size\s*;/s', $contentCss)
77 && !preg_match('/\.dbx-cms-inline-video-block\s*\{[^}]*container-type:\s*size\s*;/s', $cmsCss),
78 'Auto-height videos collapse because of two-axis size containment in design ' . $design . '.'
79 );
80 $assert(
81 str_contains($contentCss, '#dbxContent .dbx-content-inline-video[style*="height"] .dbx-content-video-player')
82 && str_contains($cmsCss, '#dbxContent .dbx-cms-inline-video-block[style*="height"] .dbx-cms-inline-video-thumb'),
83 'Explicit video heights do not override the generic responsive media height in design ' . $design . '.'
84 );
85}
86
87$cmsJs = (string)file_get_contents($base . '/js/lib/cms.js');
89 str_contains($cmsJs, 'let width = wrapperWidth || size.width;')
90 && str_contains($cmsJs, 'let height = wrapperHeight || size.height;'),
91 'The CMS size synchronizer does not treat the saved video wrapper size as authoritative.'
92);
94 str_contains($cmsJs, 'data-cms-video-options-align')
95 && str_contains($cmsJs, 'applyInlineVideoAlignment(media, align);'),
96 'The CMS video dialog does not expose and apply horizontal alignment.'
97);
98
99if ($failures !== array()) {
100 fwrite(STDERR, "FAIL\n- " . implode("\n- ", $failures) . "\n");
101 exit(1);
102}
103
104echo 'OK CMS video sizes are preserved in the editor and frontend.' . PHP_EOL;
if(trim($second) !=='second') $design
exit
Definition index.php:146
DBX schema administration.