diff --git a/client/src/app/admin/instance/dataset-group/components/dataset-group-form.component.spec.ts b/client/src/app/admin/instance/dataset-group/components/dataset-group-form.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8305502f044a69afabbf04d609afd16b3a50dced
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/components/dataset-group-form.component.spec.ts
@@ -0,0 +1,107 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+
+import { Dataset, DatasetGroup } from 'src/app/metamodel/models';
+import { DatasetGroupFormComponent } from './dataset-group-form.component';
+
+describe('[admin][instance][dataset-group][components] DatasetGroupFormComponent', () => {
+    let component: DatasetGroupFormComponent;
+    let fixture: ComponentFixture<DatasetGroupFormComponent>;
+    let store: MockStore;
+    let spy;
+    let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: '' };
+    let dataset: Dataset = {
+        cone_search_config_id: 1,
+        data_path: '',
+        datatable_enabled: false,
+        datatable_selectable_rows: true,
+        description: '',
+        display: 10,
+        download_ascii: true,
+        download_csv: false,
+        download_json: false,
+        download_vo: false,
+        full_data_path: '',
+        id_database: 10,
+        id_dataset_family: 1,
+        label: '',
+        name: '',
+        public: true,
+        server_link_enabled: false,
+        table_ref: ''
+    };
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            declarations: [
+                DatasetGroupFormComponent,
+            ],
+            imports: [
+                BrowserAnimationsModule,
+            ],
+            providers: [
+                provideMockStore({})
+            ]
+        });
+        fixture = TestBed.createComponent(DatasetGroupFormComponent);
+        component = fixture.componentInstance;
+        store = TestBed.inject(MockStore);
+
+        component.datasetList = [];
+        component.datasetGroup = datasetGroup;
+        spy = jest.spyOn(component.onSubmit, 'emit');
+        fixture.detectChanges();
+    });
+
+    it('should create the component', () => {
+        expect(component).toBeTruthy();
+    });
+
+    it('submit() should emit datasetgroup, form.value and datasets', () => {
+        component.submit();
+        expect(spy).toHaveBeenCalledTimes(1);
+        expect(spy).toHaveBeenCalledWith({ ...datasetGroup, ...component.form.value, datasets: component.groupDatasets })
+    });
+
+    it('submit() should emit form.value and datasets', () => {
+        component.datasetGroup = null;
+        component.submit();
+        expect(spy).toHaveBeenCalledTimes(1);
+        expect(spy).toHaveBeenCalledWith({ ...component.form.value, datasets: component.groupDatasets })
+    });
+
+    it('getAvailableDatasets() should return an array with 2 elements', () => {
+        component.datasetList = [{ ...dataset, name: 'test1' }, { ...dataset, name: 'test2' }, { ...dataset, name: 'test1' }];
+        component.groupDatasets = ['test2'];
+        let result = component.getAvailableDatasets();
+        expect(result.length).toEqual(2);
+    });
+
+    it('addDatasets(selectElement) should add  the  dataset in groupDataSets array', () => {
+        let selectElement = { options: [{ selected: true, value: { ...dataset, name: 'test' } }] };
+        component.groupDatasets = [];
+        expect(component.groupDatasets.length).toEqual(0)
+        component.addDatasets(selectElement);
+        expect(component.groupDatasets.length).toEqual(1);
+        expect(component.groupDatasets[0]).toEqual(selectElement.options[0].value)
+    });
+
+    it('removeDatasets(selectElement)  should remove the dataset from groupDataSets', () => {
+        let selectElement = { options: [{ selected: true, value: dataset }] };
+        component.groupDatasets = [dataset];
+        expect(component.groupDatasets.length).toEqual(1);
+        component.removeDatasets(selectElement)
+        expect(component.groupDatasets.length).toEqual(0);
+    });
+})
diff --git a/client/src/app/admin/instance/dataset-group/components/dataset-group-table.component.spec.ts b/client/src/app/admin/instance/dataset-group/components/dataset-group-table.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cd6c22a6317896517230a3586464aff7350a0a80
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/components/dataset-group-table.component.spec.ts
@@ -0,0 +1,43 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+
+import { DatasetGroupTableComponent } from './dataset-group-table.component';
+
+describe('[admin][instance][dataset-group][components] DatasetGroupTableComponent', () => {
+    let component: DatasetGroupTableComponent;
+    let fixture: ComponentFixture<DatasetGroupTableComponent>;
+    let store: MockStore;
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            declarations: [
+                DatasetGroupTableComponent,
+            ],
+            imports: [
+                BrowserAnimationsModule,
+            ],
+            providers: [
+                provideMockStore({})
+            ]
+        });
+        fixture = TestBed.createComponent(DatasetGroupTableComponent);
+        component = fixture.componentInstance;
+        store = TestBed.inject(MockStore);
+        fixture.detectChanges();
+    });
+
+    it('should create the component', () => {
+        expect(component).toBeTruthy();
+    });
+})
diff --git a/client/src/app/admin/instance/dataset-group/components/index.spec.ts b/client/src/app/admin/instance/dataset-group/components/index.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5ebd1117453bcdfde72534ef18e494c569eb749e
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/components/index.spec.ts
@@ -0,0 +1,17 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { dummiesComponents } from './index';
+
+describe('[[admin][instance][webpage][components]index', () => {
+    it('Test index components', () => {
+        expect(dummiesComponents.length).toEqual(2);
+    });
+});
+ 
\ No newline at end of file
diff --git a/client/src/app/admin/instance/dataset-group/containers/dataset-group-list.component.spec.ts b/client/src/app/admin/instance/dataset-group/containers/dataset-group-list.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..246d87b0852f21dc56e7039186ef608d06b5026d
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/containers/dataset-group-list.component.spec.ts
@@ -0,0 +1,64 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { Component } from '@angular/core';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+
+import { DatasetGroup } from 'src/app/metamodel/models';
+import { DatasetGroupListComponent } from './dataset-group-list.component';
+import * as datasetGroupActions from 'src/app/metamodel/actions/dataset-group.actions';
+
+@Component({
+    template: ''
+})
+class DummyComponent { }
+
+describe('[admin][instance][dataset-group][containers] DatasetGroupListComponent', () => {
+    let component: DatasetGroupListComponent;
+    let fixture: ComponentFixture<DatasetGroupListComponent>;
+    let store: MockStore;
+    let spy;
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            declarations: [
+                DatasetGroupListComponent,
+            ],
+            imports: [
+                BrowserAnimationsModule,
+                RouterTestingModule.withRoutes([
+                    { path: 'test', component: DummyComponent }
+                ])
+            ],
+            providers: [
+                provideMockStore({})
+            ]
+        });
+        fixture = TestBed.createComponent(DatasetGroupListComponent);
+        component = fixture.componentInstance;
+        store = TestBed.inject(MockStore);
+        fixture.detectChanges();
+    });
+
+    it('should create the component', () => {
+        expect(component).toBeTruthy();
+    });
+
+    it('deleteDatasetGroup(datasetGroup: DatasetGroup) should dispatch deleteDatasetGroup action', () => {
+        let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' };
+        spy = jest.spyOn(store, 'dispatch');
+        component.deleteDatasetGroup(datasetGroup);
+        expect(spy).toHaveBeenCalledTimes(1);
+        expect(spy).toHaveBeenCalledWith(datasetGroupActions.deleteDatasetGroup({ datasetGroup }))
+    });
+})
diff --git a/client/src/app/admin/instance/dataset-group/containers/edit-dataset-group.component.spec.ts b/client/src/app/admin/instance/dataset-group/containers/edit-dataset-group.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e3996b353b4e121710f51a6a39fcd17c5629a659
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/containers/edit-dataset-group.component.spec.ts
@@ -0,0 +1,54 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+
+import { DatasetGroup } from 'src/app/metamodel/models';
+import * as datasetGroupActions from 'src/app/metamodel/actions/dataset-group.actions';
+import { EditDatasetGroupComponent } from './edit-dataset-group.component';
+
+describe('[admin][instance][dataset-group][containers] EditDatasetGroupComponent', () => {
+    let component: EditDatasetGroupComponent;
+    let fixture: ComponentFixture<EditDatasetGroupComponent>;
+    let store: MockStore;
+    let spy;
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            declarations: [
+                EditDatasetGroupComponent,
+            ],
+            imports: [
+                BrowserAnimationsModule,
+            ],
+            providers: [
+                provideMockStore({})
+            ]
+        });
+        fixture = TestBed.createComponent(EditDatasetGroupComponent);
+        component = fixture.componentInstance;
+        store = TestBed.inject(MockStore);
+        fixture.detectChanges();
+    });
+
+    it('should create the component', () => {
+        expect(component).toBeTruthy();
+    });
+
+    it('deleteDatasetGroup(datasetGroup: DatasetGroup) should dispatch deleteDatasetGroup action', () => {
+        let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' };
+        spy = jest.spyOn(store, 'dispatch');
+        component.editDatasetGroup(datasetGroup);
+        expect(spy).toHaveBeenCalledTimes(1);
+        expect(spy).toHaveBeenCalledWith(datasetGroupActions.editDatasetGroup({ datasetGroup }))
+    });
+})
diff --git a/client/src/app/admin/instance/dataset-group/containers/new-dataset-group.component.spec.ts b/client/src/app/admin/instance/dataset-group/containers/new-dataset-group.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e49329529bd15dd1ebd1d3f858ec4efaeedaf43e
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/containers/new-dataset-group.component.spec.ts
@@ -0,0 +1,62 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+import { DatasetGroup } from 'src/app/metamodel/models';
+import * as datasetGroupActions from 'src/app/metamodel/actions/dataset-group.actions';
+import { NewDatasetGroupComponent } from './new-dataset-group.component';
+import { Component } from '@angular/core';
+import { RouterTestingModule } from '@angular/router/testing';
+
+@Component({
+    template: ''
+})
+class DummyComponent { }
+
+describe('[admin][instance][dataset-group][containers] NewDatasetGroupComponent', () => {
+    let component: NewDatasetGroupComponent;
+    let fixture: ComponentFixture<NewDatasetGroupComponent>;
+    let store: MockStore;
+    let spy;
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            declarations: [
+                NewDatasetGroupComponent,
+            ],
+            imports: [
+                BrowserAnimationsModule,
+                RouterTestingModule.withRoutes([
+                    { path: 'test', component: DummyComponent }
+                ])
+            ],
+            providers: [
+                provideMockStore({})
+            ]
+        });
+        fixture = TestBed.createComponent(NewDatasetGroupComponent);
+        component = fixture.componentInstance;
+        store = TestBed.inject(MockStore);
+        fixture.detectChanges();
+    });
+
+    it('should create the component', () => {
+        expect(component).toBeTruthy();
+    });
+
+    it('deleteDatasetGroup(datasetGroup: DatasetGroup) should dispatch deleteDatasetGroup action', () => {
+        let datasetGroup: DatasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' };
+        spy = jest.spyOn(store, 'dispatch');
+        component.addNewDatasetGroup(datasetGroup);
+        expect(spy).toHaveBeenCalledTimes(1);
+        expect(spy).toHaveBeenCalledWith(datasetGroupActions.addDatasetGroup({ datasetGroup }))
+    });
+})
diff --git a/client/src/app/admin/instance/dataset-group/dataset-group-title.resolver.spec.ts b/client/src/app/admin/instance/dataset-group/dataset-group-title.resolver.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..26b8ff83e8504037a07da23b8241014222030813
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/dataset-group-title.resolver.spec.ts
@@ -0,0 +1,62 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { TestBed } from '@angular/core/testing';
+import { ActivatedRouteSnapshot } from '@angular/router';
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+
+import { cold } from 'jasmine-marbles';
+
+import { DatasetGroupTitleResolver } from './dataset-group-title.resolver';
+import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector';
+import { Instance } from 'src/app/metamodel/models';
+
+describe('[admin][instance][dataset-group] DatasetGroupTitleResolver', () => {
+    let datasetGroupTitleResolver: DatasetGroupTitleResolver;
+    let store: MockStore;
+    let mockInstanceSelectorSelectInstanceByRouteName;
+    let instance: Instance;
+    let component;
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            imports: [],
+            providers: [
+                DatasetGroupTitleResolver,
+                provideMockStore({}),
+            ]
+        })
+        instance = { ...instance, label: 'test_label', }
+        store = TestBed.inject(MockStore);
+        datasetGroupTitleResolver = TestBed.inject(DatasetGroupTitleResolver);
+        mockInstanceSelectorSelectInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance);
+    });
+
+    it('should be created', () => {
+        expect(datasetGroupTitleResolver).toBeTruthy();
+    });
+
+    it('resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) should return test_label - Dataset-groups list ', () => {
+        const expected = cold('a', { a: instance.label + ' - Dataset-groups list' });
+        let route: ActivatedRouteSnapshot;
+        component = { name: 'DatasetGroupListComponent' }
+        route = { ...route, component: component, children: [], root: null, parent: null, firstChild: null, pathFromRoot: null, paramMap: null, queryParamMap: null };
+        let result = datasetGroupTitleResolver.resolve(route, null);
+        expect(result).toBeObservable(expected);
+    });
+
+    it('resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) should return test_label - New dataset-group ', () => {
+        const expected = cold('a', { a: instance.label + ' - New dataset-group' });
+        let route: ActivatedRouteSnapshot;
+        component = { name: 'TestComponent' }
+        route = { ...route, component: component, children: [], root: null, parent: null, firstChild: null, pathFromRoot: null, paramMap: null, queryParamMap: null };
+        let result = datasetGroupTitleResolver.resolve(route, null);
+        expect(result).toBeObservable(expected);
+    });
+});
diff --git a/client/src/app/admin/instance/dataset-group/dataset-group.module.spec.ts b/client/src/app/admin/instance/dataset-group/dataset-group.module.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..892bdc741e1ffc471402aba79818100a06bdd676
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/dataset-group.module.spec.ts
@@ -0,0 +1,16 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { DatasetGroupModule } from './dataset-group.module';
+
+describe('[admin][instance][dataset-group]DatasetGroupModule', () => {
+    it('Test DatasetGroupModule module', () => {
+        expect(DatasetGroupModule.name).toEqual('DatasetGroupModule');
+    });
+});
diff --git a/client/src/app/admin/instance/dataset-group/edit-dataset-group-title.resolver.spec.ts b/client/src/app/admin/instance/dataset-group/edit-dataset-group-title.resolver.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f3cb3eeae7982d6eb5c9937416c881e8b9aa1c75
--- /dev/null
+++ b/client/src/app/admin/instance/dataset-group/edit-dataset-group-title.resolver.spec.ts
@@ -0,0 +1,67 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { TestBed } from '@angular/core/testing';
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+
+import { cold, hot } from 'jasmine-marbles';
+
+import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector';
+import { DatasetGroup, Instance } from 'src/app/metamodel/models';
+import { EditDatasetGroupTitleResolver } from './edit-dataset-group-title.resolver';
+import * as datasetGroupSelector from 'src/app/metamodel/selectors/dataset-group.selector';
+
+describe('[admin][instance][dataset-group] DatasetGroupTitleResolver', () => {
+    let editDatasetGroupTitleResolver: EditDatasetGroupTitleResolver;
+    let store: MockStore;
+    let mockDatasetGroupSelectorGroupListIsLoaded;
+    let mockInstanceSelectorInstanceByRouteName;
+    let mockDatasetGroupSelectorDatasetGroupByRouteId;
+    let instance: Instance;
+    let datasetGroup: DatasetGroup;
+
+    beforeEach(() => {
+        TestBed.configureTestingModule({
+            imports: [],
+            providers: [
+                EditDatasetGroupTitleResolver,
+                provideMockStore({}),
+            ]
+        })
+        instance = { ...instance, label: 'instance_test_label' }
+
+        store = TestBed.inject(MockStore);
+        datasetGroup = { datasets: [], id: 1, instance_name: 'test', role: 'test' };
+
+        editDatasetGroupTitleResolver = TestBed.inject(EditDatasetGroupTitleResolver);
+        mockDatasetGroupSelectorDatasetGroupByRouteId = store.overrideSelector(datasetGroupSelector.selectDatasetGroupByRouteId, datasetGroup);
+        mockDatasetGroupSelectorGroupListIsLoaded = store.overrideSelector(datasetGroupSelector.selectDatasetGroupListIsLoaded, false);
+        mockInstanceSelectorInstanceByRouteName = store.overrideSelector(instanceSelector.selectInstanceByRouteName, instance);
+    });
+
+    it('should be created', () => {
+        expect(editDatasetGroupTitleResolver).toBeTruthy();
+    });
+
+    it('shoud dispatch datasetGroupActions.loadDatasetGroupList() action and return datasetGroupListIsLoaded', () => {
+        const expected = cold('a', { a: [] });
+        let spy = jest.spyOn(store, 'dispatch');
+        let result = hot('a', { a: editDatasetGroupTitleResolver.resolve(null, null) });
+
+        expect(result).toBeObservable(expected);
+        expect(spy).toHaveBeenCalledTimes(1);
+    });
+
+    it('should return test - Edit dataset-group test', () => {
+        mockDatasetGroupSelectorGroupListIsLoaded = store.overrideSelector(datasetGroupSelector.selectDatasetGroupListIsLoaded, true);
+        let result = editDatasetGroupTitleResolver.resolve(null, null);
+        const expected = cold('a', { a: instance.label + " - Edit dataset-group " + datasetGroup.role });
+        expect(result).toBeObservable(expected);
+    });
+});