'page-read', 'PageWrite' => 'page-write', 'Catalog' => 'catalog', 'DynamicSources' => 'dynamic-sources', 'DesignRead' => 'design-read', 'PresetWrite' => 'preset-write', 'ColorWrite' => 'color-write', 'VariableWrite' => 'variable-write', 'ThemeOptionRead' => 'theme-option-read', 'ThemeOptionWrite' => 'theme-option-write', 'FontUpload' => 'font-upload', 'LibraryRead' => 'library-read', 'LibraryWrite' => 'library-write', 'Roles' => 'roles', 'ThemeBuilderRead' => 'tb-read', 'ThemeBuilderWrite' => 'tb-write', ], array_column(array_map( static fn (DiviFeature $feature): array => [$feature->name, $feature->value], DiviFeature::cases() ), 1, 0) ); } public function testOnlyTheEightWriteFeaturesWrite(): void { $writing = array_values(array_map( static fn (DiviFeature $feature): string => $feature->value, array_filter(DiviFeature::cases(), static fn (DiviFeature $feature): bool => $feature->isWrite()) )); self::assertSame( [ 'page-write', 'preset-write', 'color-write', 'variable-write', 'theme-option-write', 'font-upload', 'library-write', 'tb-write', ], $writing ); } public function testEveryFeatureHasAUniqueGermanLabel(): void { $labels = array_map(static fn (DiviFeature $feature): string => $feature->label(), DiviFeature::cases()); self::assertCount(count(DiviFeature::cases()), array_unique($labels)); self::assertSame('Seiten schreiben', DiviFeature::PageWrite->label()); self::assertSame('Theme Builder lesen', DiviFeature::ThemeBuilderRead->label()); self::assertSame('Farben schreiben', DiviFeature::ColorWrite->label()); self::assertSame('Variablen schreiben', DiviFeature::VariableWrite->label()); self::assertSame('Theme-Optionen lesen', DiviFeature::ThemeOptionRead->label()); self::assertSame('Theme-Optionen schreiben', DiviFeature::ThemeOptionWrite->label()); self::assertSame('Schriften hochladen', DiviFeature::FontUpload->label()); foreach ($labels as $label) { self::assertNotSame('', trim($label)); } } public function testValuesResolveBackToTheFeature(): void { self::assertSame(DiviFeature::ThemeBuilderWrite, DiviFeature::from('tb-write')); self::assertSame(DiviFeature::ThemeOptionWrite, DiviFeature::from('theme-option-write')); self::assertNull(DiviFeature::tryFrom('page')); } }