dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
dbxKiModuleBriefing_contract_test.php
Go to the documentation of this file.
1<?php
8
9require_once dirname(__DIR__) . '/include/dbxKiModuleBriefingService.class.php';
10
11$fail = static function (string $message, int $code): void {
12 fwrite(STDERR, "FAIL: $message\n");
13 exit($code);
14};
15
16$class = new ReflectionClass('dbx\\dbxKi\\dbxKiModuleBriefingService');
17$service = $class->newInstance();
18$invoke = static function (
19 ReflectionClass $class,
20 object $service,
21 string $method,
22 array $arguments = array()
23) {
24 $reflection = $class->getMethod($method);
25 $reflection->setAccessible(true);
26 return $reflection->invokeArgs($service, $arguments);
27};
28
29if ($class->getConstant('MODULE_BRIEFING_VERSION') !== '0.6') {
30 $fail('Modul-Briefing-Version ist nicht 0.6.', 1);
31}
32
33$rules = $invoke($class, $service, 'hardRules', array('demoModule'));
34$rulesText = implode("\n", $rules);
35foreach (array(
36 'ausschliesslich ueber dbxDB und DD-Namen',
37 'create_date, create_uid, update_date, update_uid und owner',
38 'dbxapp-Exportformat',
39 'Keine $addField-Closure',
40 'Nach einem Insert die von dbxDB gelieferte RID',
41 '{fid}_next_record-Default',
42 'spaet per add_rep()',
43 '{rpt:colspan}',
44 'keine unnoetigen Callback-Setter',
45 'Keine Modulmethoden',
46 'Nicht pauschal escapen',
47 'GET bleibt fuer Navigation',
48 'delete und save',
49 'Keine action_routes-Konfiguration',
50 'dbx()->action_url($url)',
51 'keine check_action_token()-Pruefung',
52 'keinen dbx_token hinzu',
53 'Standardaktionen werden automatisch signiert',
54 'Ajax und normaler POST',
55 'myInvoices-Modul ist die ausfuehrbare Architektur-Referenz',
56) as $requiredRule) {
57 if (strpos($rulesText, $requiredRule) === false) {
58 $fail('Verbindliche Regel fehlt: ' . $requiredRule, 2);
59 }
60}
61
62$way = $invoke($class, $service, 'dbxappWay');
63foreach (array(
64 'database',
65 'create_update',
66 'navigation',
67 'form_security',
68 'action_security',
69 'callbacks',
70 'system_objects',
71 'reference',
72) as $requiredKey) {
73 if (!isset($way[$requiredKey]) || trim((string)$way[$requiredKey]) === '') {
74 $fail('dbxappWay-Eintrag fehlt: ' . $requiredKey, 3);
75 }
76}
78 $class,
80 'dbxApiContract',
81 array('demoModule')
82);
83foreach (array('forms', 'reports', 'dd', 'db', 'audit', 'objects', 'escaping', 'get', 'action_links') as $requiredKey) {
84 if (!isset($contract[$requiredKey]) || trim((string)$contract[$requiredKey]) === '') {
85 $fail('dbxApiContract-Eintrag fehlt: ' . $requiredKey, 4);
86 }
87}
88foreach (array('{fid}_{event}-Callback-Defaults', 'add_rep()', '{rpt:colspan}') as $requiredReportRule) {
89 if (strpos((string)$contract['reports'], $requiredReportRule) === false) {
90 $fail('dbxReport-Default fehlt im API-Vertrag: ' . $requiredReportRule, 4);
91 }
92}
93
94$reference = $invoke($class, $service, 'referenceStandard');
95if (
96 ($reference['export_manual'] ?? '') !== 'reference/25_Verbindliches_Modulhandbuch.md'
97 || ($reference['export_module'] ?? '') !== 'reference/myInvoices'
98) {
99 $fail('Exportierte Modulreferenz ist unvollstaendig.', 5);
100}
101
103 $class,
104 $service,
105 'modulePipelineGuide',
106 array('demoModule')
107);
108if (($guide['manifest']['task_type'] ?? '') !== 'update') {
109 $fail('Standardaufgabe der Modul-Pipeline ist nicht update.', 6);
110}
111if (($guide['reference_standard']['export_module'] ?? '') !== 'reference/myInvoices') {
112 $fail('Pipeline-Guide liefert den Referenzstandard nicht aus.', 7);
113}
114
115$source = (string)file_get_contents(
116 dirname(__DIR__) . '/include/dbxKiModuleBriefingService.class.php'
117);
118foreach (array(
119 "'update' => 'Bestehendes Modul bearbeiten / aktualisieren'",
120 '$this->addReferenceToZip($zip);',
121 "'reference/README.md' => \$this->referenceText()",
122) as $requiredSource) {
123 if (strpos($source, $requiredSource) === false) {
124 $fail('Exportimplementierung fehlt: ' . $requiredSource, 8);
125 }
126}
127if (preg_match(
128 '/private function \w+\s*\‍([^)]*\‍)\s*(?::\s*[^{]+)?\{\s*'
129 . 'return\s+dbx\‍(\‍)->get_(?:system|include)_obj/s',
130 $source
131)) {
132 $fail('Reine dbx()-Wrapper sind in der Modulbearbeitung nicht erlaubt.', 8);
133}
134
135$template = (string)file_get_contents(
136 dirname(__DIR__) . '/tpl/htm/ki-module-briefing.htm'
137);
138if (
139 strpos($template, 'Module bearbeiten und aktualisieren') === false
140 || strpos($template, 'Handbuch + Referenz') === false
141) {
142 $fail('Modul-Briefing zeigt den neuen Standard nicht an.', 9);
143}
144
145$instructions = (string)file_get_contents(dirname(__DIR__) . '/KI-INSTRUCTIONS.md');
146foreach (array(
147 '## Module bearbeiten und aktualisieren',
148 'reference/25_Verbindliches_Modulhandbuch.md',
149 'reference/myInvoices/',
150 '`delete` und `save`',
151 'zusammen mit `rid` automatisch erkannt',
152 'dbx()->action_url($url)',
153 'keinen zusätzlichen',
154) as $requiredDocumentation) {
155 if (strpos($instructions, $requiredDocumentation) === false) {
156 $fail('KI-Dokumentation fehlt: ' . $requiredDocumentation, 10);
157 }
158}
159
160echo "OK dbxKi module briefing contract\n";
if(strpos($template, 'Module bearbeiten und aktualisieren')===false||strpos($template, 'Handbuch+Referenz')===false) $instructions
$fail
Vertragstest für die dbxKi-Modulbearbeitung.
if(($reference['export_manual'] ?? '') !=='reference/25_Verbindliches_Modulhandbuch.md'||($reference['export_module'] ?? '') !=='reference/myInvoices') $guide
foreach(array( 'forms', 'reports', 'dd', 'db', 'audit', 'objects', 'escaping', 'get', 'action_links') as $requiredKey) foreach(array('{fid}_{event}-Callback-Defaults', 'add_rep()', '{rpt:colspan}') as $requiredReportRule) $reference
foreach(array('ausschliesslich ueber dbxDB und DD-Namen', 'create_date, create_uid, update_date, update_uid und owner', 'dbxapp-Exportformat', 'Keine $addField-Closure', 'Nach einem Insert die von dbxDB gelieferte RID', '{fid}_next_record-Default', 'spaet per add_rep()', '{rpt:colspan}', 'keine unnoetigen Callback-Setter', 'Keine Modulmethoden', 'Nicht pauschal escapen', 'GET bleibt fuer Navigation', 'delete und save', 'Keine action_routes-Konfiguration', 'dbx() ->action_url($url)', 'keine check_action_token() -Pruefung', 'keinen dbx_token hinzu', 'Standardaktionen werden automatisch signiert', 'Ajax und normaler POST', 'myInvoices-Modul ist die ausfuehrbare Architektur-Referenz',) as $requiredRule) $way
exit
Definition index.php:146