From ba219b84c7fbf62825d1c35fd3a2ae73226955ac Mon Sep 17 00:00:00 2001
From: Etty <vishnu96vishnu@gmail.com>
Date: Fri, 15 Dec 2017 17:08:54 +0200
Subject: [PATCH] magento/magento2#4292: Ability to sitch to default mode

- mode can be switched back to default w/o throving an error
---
 .../Deploy/Console/Command/SetModeCommand.php |  3 +++
 app/code/Magento/Deploy/Model/Mode.php        | 19 +++++++++++++++++++
 .../Console/Command/SetModeCommandTest.php    | 12 ++++++++++++
 3 files changed, 34 insertions(+)

diff --git a/app/code/Magento/Deploy/Console/Command/SetModeCommand.php b/app/code/Magento/Deploy/Console/Command/SetModeCommand.php
index c4485656fb8..55b4a4f4f9b 100644
--- a/app/code/Magento/Deploy/Console/Command/SetModeCommand.php
+++ b/app/code/Magento/Deploy/Console/Command/SetModeCommand.php
@@ -101,6 +101,9 @@ class SetModeCommand extends Command
                         $modeController->enableProductionMode();
                     }
                     break;
+                case State::MODE_DEFAULT:
+                    $modeController->enableDefaultMode();
+                    break;
                 default:
                     throw new LocalizedException(__('Cannot switch into given mode "%1"', $toMode));
             }
diff --git a/app/code/Magento/Deploy/Model/Mode.php b/app/code/Magento/Deploy/Model/Mode.php
index 3810ef09531..792ee7f1b79 100644
--- a/app/code/Magento/Deploy/Model/Mode.php
+++ b/app/code/Magento/Deploy/Model/Mode.php
@@ -177,6 +177,25 @@ class Mode
         $this->setStoreMode(State::MODE_DEVELOPER);
     }
 
+    /**
+     * Enable Default mode
+     *
+     * @return void
+     */
+    public function enableDefaultMode()
+    {
+        $this->filesystem->cleanupFilesystem(
+            [
+                DirectoryList::CACHE,
+                DirectoryList::GENERATED_CODE,
+                DirectoryList::GENERATED_METADATA,
+                DirectoryList::TMP_MATERIALIZATION_DIR,
+                DirectoryList::STATIC_VIEW,
+            ]
+        );
+        $this->setStoreMode(State::MODE_DEFAULT);
+    }
+
     /**
      * Get current mode information
      *
diff --git a/app/code/Magento/Deploy/Test/Unit/Console/Command/SetModeCommandTest.php b/app/code/Magento/Deploy/Test/Unit/Console/Command/SetModeCommandTest.php
index caa310535f3..a49bae655e8 100644
--- a/app/code/Magento/Deploy/Test/Unit/Console/Command/SetModeCommandTest.php
+++ b/app/code/Magento/Deploy/Test/Unit/Console/Command/SetModeCommandTest.php
@@ -67,6 +67,18 @@ class SetModeCommandTest extends \PHPUnit\Framework\TestCase
         );
     }
 
+    public function testSetDefaultMode()
+    {
+        $this->modeMock->expects($this->once())->method('enableDefaultMode');
+
+        $tester = new CommandTester($this->command);
+        $tester->execute(['mode' => 'default']);
+        $this->assertContains(
+            "default mode",
+            $tester->getDisplay()
+        );
+    }
+
     public function testSetProductionSkipCompilation()
     {
         $this->modeMock->expects($this->once())->method('enableProductionModeMinimal');
-- 
GitLab