allows('read')->andReturn(DiviFixtures::designSystem()); Functions\when('current_user_can')->justReturn(true); $ability = new DiviDesignSystemAbility($reader); self::assertTrue($ability->permission([])); $result = $ability->execute([]); self::assertSame('{{color:primary}}', $result['colors'][0]['placeholder']); self::assertSame('{{color:Nachtblau}}', $result['colors'][2]['placeholder']); self::assertSame('{{var:Telefon}}', $result['variables'][1]['placeholder']); self::assertSame(['heading' => 'Open Sans', 'body' => 'Lato'], $result['fonts']); self::assertSame('CTA primär', $result['presets'][1]['name']); self::assertStringContainsString('{{font:heading}}', $result['notes'][0]); self::assertTrue($ability->isDirect()); self::assertSame(['colors', 'variables', 'fonts', 'sizes', 'presets', 'notes'], $ability->outputSchema()['required']); } public function testNeedsEditPosts(): void { Functions\when('current_user_can')->justReturn(false); $result = (new DiviDesignSystemAbility(Mockery::mock(DesignSystemReader::class)))->permission([]); self::assertToolError($result, 'forbidden'); } public function testFiltersPartsAndPresetsOfOneModule(): void { Functions\when('current_user_can')->justReturn(true); $reader = Mockery::mock(DesignSystemReader::class); $reader->allows('read')->andReturn(DiviFixtures::designSystem()); $ability = new DiviDesignSystemAbility($reader); $result = $ability->execute(['only' => ['presets'], 'module' => 'button']); self::assertSame([], $result['colors']); self::assertSame([], $result['variables']); self::assertSame(['p-1', 'p-2'], array_column($result['presets'], 'id')); self::assertSame(['divi/button'], array_values(array_unique(array_column($result['presets'], 'module')))); self::assertNotEmpty($result['fonts']['heading']); self::assertContains('Nicht angefordert: colors, variables.', $result['notes']); } public function testCapsThePresetList(): void { Functions\when('current_user_can')->justReturn(true); $items = []; for ($i = 0; $i < 250; ++$i) { $items['p' . $i] = ['id' => 'p' . $i, 'name' => 'Preset ' . $i, 'moduleName' => 'divi/text']; } $design = DesignSystem::fromDivi([], [], ['module' => ['divi/text' => ['default' => '', 'items' => $items]]], []); $reader = Mockery::mock(DesignSystemReader::class); $reader->allows('read')->andReturn($design); $result = (new DiviDesignSystemAbility($reader))->execute([]); self::assertCount(DiviDesignSystemAbility::PRESET_LIMIT, $result['presets']); self::assertContains('200 von 250 Presets gezeigt; mit module auf ein Modul eingrenzen.', $result['notes']); $colors = (new DiviDesignSystemAbility($reader))->execute(['only' => ['colors']]); self::assertSame([], $colors['presets']); self::assertStringNotContainsString('Presets gezeigt', implode(' ', $colors['notes']), 'not requested'); } }