Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F3912452
D790.id2012.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
10 KB
Referenced Files
None
Subscribers
None
D790.id2012.diff
View Options
diff --git a/app/Config/Reporting/BaseReportEntry.php b/app/Config/Reporting/BaseReportEntry.php
new file mode 100644
--- /dev/null
+++ b/app/Config/Reporting/BaseReportEntry.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Nasqueron\Notifications\Config\Reporting;
+
+abstract class BaseReportEntry {
+
+ ///
+ /// Format
+ ///
+
+ public abstract function toArray () : array;
+ public abstract function toFancyArray () : array;
+
+ ///
+ /// Format helper methods
+ ///
+
+ /**
+ * Returns a fancy string for reports.
+ *
+ * @param string $string The source string
+ * @param string $emptyStringGlyph The glyph to use if the string is empty
+ * @return string
+ */
+ public static function fancyString (string $string, string $emptyStringGlyph) : string {
+ if ($string === "") {
+ return $emptyStringGlyph;
+ }
+
+ return $string;
+ }
+
+ /**
+ * Returns a fancy representation from a boolean for reports.
+ *
+ * @param bool $value The source value
+ * @param string $truthyStringGlyph The glyph to use if the value is true
+ * @param string $falsyStringGlyph The glyph to use if the value is false [facultative, by default an empty string]
+ * @return string The relevant glyph
+ */
+ public static function fancyBool (bool $value, string $truthyStringGlyph, string $falsyStringGlyph = '') : string {
+ if ($value) {
+ return $truthyStringGlyph;
+ }
+
+ return $falsyStringGlyph;
+ }
+
+}
diff --git a/app/Config/Reporting/FeatureReportEntry.php b/app/Config/Reporting/FeatureReportEntry.php
--- a/app/Config/Reporting/FeatureReportEntry.php
+++ b/app/Config/Reporting/FeatureReportEntry.php
@@ -2,7 +2,7 @@
namespace Nasqueron\Notifications\Config\Reporting;
-class FeatureReportEntry {
+final class FeatureReportEntry extends BaseReportEntry {
///
/// Public properties
@@ -33,4 +33,32 @@
$this->enabled = $enabled;
}
+ ///
+ /// Format
+ ///
+
+ /**
+ * Gets the entry as an array.
+ *
+ * @return string[]
+ */
+ public function toArray () : array {
+ return [
+ $this->name,
+ (string)$this->enabled,
+ ];
+ }
+
+ /**
+ * Gets the entry as an array. Formats empty string.
+ *
+ * @return string[]
+ */
+ public function toFancyArray () : array {
+ return [
+ $this->name,
+ self::fancyBool($this->enabled, '✓'),
+ ];
+ }
+
}
diff --git a/app/Config/Reporting/ServiceReportEntry.php b/app/Config/Reporting/ServiceReportEntry.php
--- a/app/Config/Reporting/ServiceReportEntry.php
+++ b/app/Config/Reporting/ServiceReportEntry.php
@@ -6,7 +6,7 @@
use ProjectsMap;
-class ServiceReportEntry {
+final class ServiceReportEntry extends BaseReportEntry {
///
/// Private members
@@ -99,4 +99,36 @@
return !$map->isCached();
}
+ ///
+ /// Format
+ ///
+
+ /**
+ * Gets the entry as an array. Formats empty string.
+ *
+ * @return string[]
+ */
+ public function toArray () : array {
+ return [
+ $this->gate,
+ $this->door,
+ $this->instance,
+ $this->status,
+ ];
+ }
+
+ /**
+ * Gets the entry as an array. Formats empty string.
+ *
+ * @return string[]
+ */
+ public function toFancyArray () : array {
+ return [
+ $this->gate,
+ $this->door,
+ self::fancyString($this->instance, 'ø'),
+ self::fancyString($this->status, '✓'),
+ ];
+ }
+
}
diff --git a/app/Console/Commands/ConfigShow.php b/app/Console/Commands/ConfigShow.php
--- a/app/Console/Commands/ConfigShow.php
+++ b/app/Console/Commands/ConfigShow.php
@@ -4,12 +4,8 @@
use Illuminate\Console\Command;
-use Nasqueron\Notifications\Config\Features;
-use Nasqueron\Notifications\Config\Services\Service;
-
-use Config;
-use ProjectsMap;
-use Services;
+use Nasqueron\Notifications\Config\Reporting\ConfigReport;
+use Nasqueron\Notifications\Config\Reporting\ServiceReportEntry;
class ConfigShow extends Command
{
@@ -28,11 +24,9 @@
protected $description = 'Show notifications center configuration';
/**
- * Creates a new command instance.
+ * @var \Nasqueron\Notifications\Config\Reporting\ConfigReport
*/
- public function __construct () {
- parent::__construct();
- }
+ private $report;
///
/// Prepare information tables
@@ -41,37 +35,16 @@
/**
* Gets the services (defined in credentials.json) as table rows.
*
- * @return \Nasqueron\Notifications\Config\Services\Service[]
+ * @return array
*/
protected function getServicesTableRows () : array {
$rows = [];
- foreach (Services::get() as $service) {
- $rows[] = [
- $service->gate,
- $service->door,
- $service->getInstanceName(),
- $this->getServiveStatus($service)
- ];
- }
- return $rows;
- }
- /**
- * Gets service status.
- *
- * @param \Nasqueron\Notifications\Config\Services\Service $service The service to check
- * @return string A description of the issue if something is wrong; otherwise, "✓".
- */
- protected function getServiveStatus (Service $service) : string {
- if ($service->gate === 'Phabricator') {
- // Ensure the projects map is cached
- $map = \ProjectsMap::fetch($service->door);
- if (!$map->isCached()) {
- return "Projects map not cached.";
- }
+ foreach ($this->report->services as $service) {
+ $rows[] = $service->toFancyArray();
}
- return "✓";
+ return $rows;
}
/**
@@ -81,15 +54,11 @@
*/
protected function getFeaturesTableRows () : array {
$rows = [];
- foreach (Features::getAll() as $key => $value) {
- if ($value) {
- $checkMark = '✓';
- } else {
- $checkMark = '';
- }
-
- $rows[] = [$key, $checkMark];
+
+ foreach ($this->report->features as $feature) {
+ $rows[] = $feature->toFancyArray();
}
+
return $rows;
}
@@ -101,14 +70,20 @@
* Executes the console command.
*/
public function handle () : void {
+ $this->prepareReport();
+
$this->printGates();
$this->printFeatures();
$this->printServices();
}
+ protected final function prepareReport() : void {
+ $this->report = new ConfigReport();
+ }
+
protected final function printGates () : void {
$this->info("Gates:\n");
- foreach (Config::get('gate.controllers') as $gate) {
+ foreach ($this->report->gates as $gate) {
$this->line('- ' . $gate);
}
}
diff --git a/tests/Config/Reporting/BaseReportEntryTest.php b/tests/Config/Reporting/BaseReportEntryTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Config/Reporting/BaseReportEntryTest.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Config\Reporting;
+
+use Nasqueron\Notifications\Config\Reporting\BaseReportEntry;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class BaseReportEntryTest extends TestCase {
+
+ public function testFancyString() {
+ $this->assertSame('ø', BaseReportEntry::fancyString('', 'ø'));
+ $this->assertSame('ø', BaseReportEntry::fancyString('ø', 'ø'));
+ $this->assertSame('o', BaseReportEntry::fancyString('o', 'ø'));
+ $this->assertSame('', BaseReportEntry::fancyString('', ''));
+ }
+
+ public function testFancyBool() {
+ $this->assertSame('ø', BaseReportEntry::fancyBool(false, '✓', 'ø'));
+ $this->assertSame('✓', BaseReportEntry::fancyBool(true, '✓', 'ø'));
+ $this->assertSame('', BaseReportEntry::fancyBool(false, '✓'));
+ $this->assertSame('✓', BaseReportEntry::fancyBool(true, '✓'));
+ $this->assertSame('', BaseReportEntry::fancyBool(true, '', ''));
+ $this->assertSame('', BaseReportEntry::fancyBool(false, '', ''));
+ }
+
+}
diff --git a/tests/Config/Reporting/FeatureReportEntryTest.php b/tests/Config/Reporting/FeatureReportEntryTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Config/Reporting/FeatureReportEntryTest.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Config\Reporting;
+
+use Nasqueron\Notifications\Config\Reporting\FeatureReportEntry;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class FeatureReportEntryTest extends TestCase {
+
+ /**
+ * @var FeatureReportEntry
+ */
+ private $enabledFeatureEntry;
+
+ /**
+ * @var FeatureReportEntry
+ */
+ private $disabledFeatureEntry;
+
+ public function setUp () {
+ $this->enabledFeatureEntry = new FeatureReportEntry("foo", true);
+ $this->disabledFeatureEntry = new FeatureReportEntry("bar", false);
+ }
+
+ public function testToArray() {
+ $this->assertSame(
+ ["foo", (string)true],
+ $this->enabledFeatureEntry->toArray()
+
+ );
+ $this->assertSame(
+ ["bar", (string)false],
+ $this->disabledFeatureEntry->toArray()
+ );
+ }
+
+ public function testToFancyArray() {
+ $this->assertSame(
+ ["foo", "✓"],
+ $this->enabledFeatureEntry->toFancyArray()
+ );
+ $this->assertSame(
+ ["bar", ""],
+ $this->disabledFeatureEntry->toFancyArray()
+ );
+ }
+
+}
diff --git a/tests/Config/Reporting/ServiceReportEntryTest.php b/tests/Config/Reporting/ServiceReportEntryTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Config/Reporting/ServiceReportEntryTest.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Config\Reporting;
+
+use Nasqueron\Notifications\Config\Reporting\ServiceReportEntry;
+use Nasqueron\Notifications\Config\Services\Service;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class ServiceReportEntryTest extends TestCase {
+
+ /**
+ * @var ServiceReportEntry
+ */
+ private $serviceEntry;
+
+ public function setUp () {
+ $service = $this->mockService();
+ $this->serviceEntry = new ServiceReportEntry($service);
+ }
+
+ public function testToArray() {
+ $this->assertSame(
+ ["Storm", "Acme", "http://www.perdu.com", ""],
+ $this->serviceEntry->toArray()
+ );
+ }
+
+ public function testToFancyArray() {
+ $this->assertSame(
+ ["Storm", "Acme", "http://www.perdu.com", "✓"],
+ $this->serviceEntry->toFancyArray()
+ );
+ }
+
+ public function testPhabricatorServiceWithNotCachedProjectsMap() {
+
+ }
+
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Dec 20, 05:55 (17 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2307591
Default Alt Text
D790.id2012.diff (10 KB)
Attached To
Mode
D790: Refactor command:show to use ConfigReport
Attached
Detach File
Event Timeline
Log In to Comment