diff --git a/core/Test/GroupControllerTest.php b/core/Test/GroupControllerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a429d1afa3743a4e2ae4c949939b57098ba6c56c
--- /dev/null
+++ b/core/Test/GroupControllerTest.php
@@ -0,0 +1,114 @@
+<?php
+
+/**
+* Copyright Maarch since 2008 under licence GPLv3.
+* See LICENCE.txt file at the root folder for more details.
+* This file is part of Maarch software.
+*
+*/
+
+namespace MaarchTest;
+use PHPUnit\Framework\TestCase;
+
+class GroupControllerTest extends TestCase
+{
+    private static $id = null;
+
+
+    public function testCreate()
+    {
+        $groupController = new \Core\Controllers\GroupController();
+
+        //  CREATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [
+            'group_id'    => 'TEST-Justice League',
+            'group_desc' => 'Beyond the darkness',
+            'security'  => [
+                'where_clause'  => '1=2',
+                'maarch_comment'    => 'commentateur du dimanche'
+            ]
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $groupController->create($fullRequest, new \Slim\Http\Response());
+        $responseBody = json_decode((string)$response->getBody());
+
+        self::$id = $responseBody->group->id . '';
+
+        $this->assertInternalType('int', $responseBody->group->id);
+
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response     = $groupController->getDetailledById($request, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('TEST-Justice League', $responseBody->group->group_id);
+        $this->assertSame('Beyond the darkness', $responseBody->group->group_desc);
+        $this->assertSame('Y', $responseBody->group->enabled);
+        $this->assertSame('1=2', $responseBody->group->security->where_clause);
+        $this->assertSame('commentateur du dimanche', $responseBody->group->security->maarch_comment);
+        $this->assertSame(null, $responseBody->group->security->mr_start_date);
+        $this->assertSame(null, $responseBody->group->security->mr_stop_date);
+    }
+
+    public function testUpdate()
+    {
+        $groupController = new \Core\Controllers\GroupController();
+
+        //  UPDATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $aArgs = [
+            'description' => 'Beyond the darkness #2',
+            'security'  => [
+                'where_clause'  => '1=3',
+                'maarch_comment'    => 'commentateur du dimanche #2'
+            ]
+        ];
+
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $groupController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('success', $responseBody->success);
+
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response     = $groupController->getDetailledById($request, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('TEST-Justice League', $responseBody->group->group_id);
+        $this->assertSame('Beyond the darkness #2', $responseBody->group->group_desc);
+        $this->assertSame('Y', $responseBody->group->enabled);
+        $this->assertSame('1=3', $responseBody->group->security->where_clause);
+        $this->assertSame('commentateur du dimanche #2', $responseBody->group->security->maarch_comment);
+        $this->assertSame(null, $responseBody->group->security->mr_start_date);
+        $this->assertSame(null, $responseBody->group->security->mr_stop_date);
+
+    }
+
+    public function testDelete()
+    {
+        $groupController = new \Core\Controllers\GroupController();
+
+        //  DELETE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $groupController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]);
+
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $groupController->getDetailledById($request, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
+
+        $this->assertSame(null, $responseBody->id);
+    }
+
+}