diff --git a/build.gradle b/build.gradle
index 796507dc60fa089a3649239d6bba8bb1c18f2203..574373708d62c756692a8d87918180a9e1dfb90a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -88,7 +88,6 @@ dependencies {
implementation('org.springframework.boot:spring-boot-starter-mail')
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-actuator')
-// implementation('org.springframework.boot:spring-boot-devtools')
implementation('org.springframework.boot:spring-boot-starter-quartz')
implementation('org.springframework.boot:spring-boot-starter-validation')
implementation 'org.springframework.boot:spring-boot-starter-cache'
diff --git a/src/main/java/net/geant/nmaas/portal/persistent/entity/DomainGroup.java b/src/main/java/net/geant/nmaas/portal/persistent/entity/DomainGroup.java
index 186f96dcf0397919d061d6c389ae6f42e4bfb751..74d554474081b8ed4233bba8c9d4b2ae03ac7669 100644
--- a/src/main/java/net/geant/nmaas/portal/persistent/entity/DomainGroup.java
+++ b/src/main/java/net/geant/nmaas/portal/persistent/entity/DomainGroup.java
@@ -67,7 +67,7 @@ public class DomainGroup implements Serializable {
public DomainGroup(String name, String codename) {
super();
this.name = name;
- this.codename = name;
+ this.codename = codename;
}
public DomainGroup(Long id, String name, String codename) {
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/DomainGroupServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/DomainGroupServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b1c864275d91a098134dccf3cf1d81e22f73751
--- /dev/null
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/DomainGroupServiceTest.java
@@ -0,0 +1,144 @@
+package net.geant.nmaas.portal.service.impl;
+
+import net.geant.nmaas.orchestration.jobs.DomainGroupJob;
+import net.geant.nmaas.portal.api.domain.DomainGroupView;
+import net.geant.nmaas.portal.persistent.entity.DomainGroup;
+import net.geant.nmaas.portal.persistent.entity.WebhookEvent;
+import net.geant.nmaas.portal.persistent.entity.WebhookEventType;
+import net.geant.nmaas.portal.persistent.repositories.DomainGroupRepository;
+import net.geant.nmaas.portal.persistent.repositories.WebhookEventRepository;
+import net.geant.nmaas.portal.service.ApplicationStatePerDomainService;
+import net.geant.nmaas.portal.service.DomainGroupService;
+import net.geant.nmaas.scheduling.ScheduleManager;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.modelmapper.ModelMapper;
+import org.quartz.JobListener;
+import org.quartz.ListenerManager;
+import org.quartz.Matcher;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DomainGroupServiceTest {
+
+ DomainGroupRepository domainGroupRepository = mock(DomainGroupRepository.class);
+ ApplicationStatePerDomainService applicationStatePerDomainService = mock(ApplicationStatePerDomainService.class);
+ WebhookEventRepository webhookEventRepository = mock(WebhookEventRepository.class);
+ Scheduler scheduler = mock(Scheduler.class);
+ ListenerManager listenerManager = mock(ListenerManager.class);
+ ScheduleManager scheduleManager;
+ ModelMapper modelMapper = new ModelMapper();
+ DomainGroupService domainGroupService;
+
+ @BeforeEach
+ void setup() {
+ scheduleManager = new ScheduleManager(scheduler);
+ domainGroupService = new DomainGroupServiceImpl(domainGroupRepository, applicationStatePerDomainService, webhookEventRepository, scheduleManager, modelMapper);
+ }
+
+ @Test
+ void shouldCreateDomainGroup() throws SchedulerException {
+ // Setup webhook event
+ WebhookEvent webhookEvent = new WebhookEvent(1L, "webhook", "https://example.com/webhook", WebhookEventType.DOMAIN_GROUP_CHANGE, null, null);
+ when(webhookEventRepository.findIdByEventType(WebhookEventType.DOMAIN_GROUP_CHANGE))
+ .thenReturn(Stream.of(1L));
+ when(webhookEventRepository.findById(1L))
+ .thenReturn(Optional.of(webhookEvent));
+
+ // Setup domain group
+ String name = "testgroup";
+ String codename = "testgrp";
+ DomainGroup domainGroup = new DomainGroup(name, codename);
+ domainGroup.setId(10L);
+ when(domainGroupRepository.save(any(DomainGroup.class))).thenReturn(domainGroup);
+ when(domainGroupRepository.findById(10L)).thenReturn(Optional.of(domainGroup));
+ when(scheduler.getListenerManager()).thenReturn(listenerManager);
+ doNothing().when(listenerManager).addJobListener(any(JobListener.class), any(Matcher.class));
+
+ // Create domain group
+ DomainGroupView domainGroupView = new DomainGroupView();
+ domainGroupView.setName(name);
+ domainGroupView.setCodename(codename);
+ DomainGroupView result = this.domainGroupService.createDomainGroup(domainGroupView);
+
+ // Verify webhook job was scheduled with correct parameters for creation
+ verify(scheduler, times(1)).scheduleJob(
+ argThat(jobDetail ->
+ jobDetail.getKey().getName().startsWith("DomainGroup_1_10_") &&
+ jobDetail.getJobClass().equals(DomainGroupJob.class)
+ ),
+ argThat(trigger ->
+ trigger.getKey().getName().startsWith("DomainGroup_1_10_")
+ )
+ );
+
+ // Verify domain group was created correctly
+ assertThat("Codenames are not the same", result.getCodename().equals(codename));
+ assertThat("Names are not the same", result.getName().equals(name));
+
+ // Update domain group
+ when(webhookEventRepository.findIdByEventType(WebhookEventType.DOMAIN_GROUP_CHANGE))
+ .thenReturn(Stream.of(1L));
+ when(webhookEventRepository.findById(1L))
+ .thenReturn(Optional.of(webhookEvent));
+ domainGroupView.setCodename(codename + "2");
+ domainGroupView.setId(10L);
+ result = this.domainGroupService.updateDomainGroup(10L, domainGroupView);
+
+ // Verify webhook job was scheduled with correct parameters for update
+ verify(scheduler, times(2)).scheduleJob(
+ argThat(jobDetail ->
+ jobDetail.getKey().getName().startsWith("DomainGroup_1_10_") &&
+ jobDetail.getJobClass().equals(DomainGroupJob.class)
+ ),
+ argThat(trigger ->
+ trigger.getKey().getName().startsWith("DomainGroup_1_10_")
+ )
+ );
+
+ // Verify domain group was updated correctly
+ assertThat("Updated codenames are not the same", result.getCodename().equals(codename + "2"));
+ assertThat("Names are not the same after update", result.getName().equals(name));
+ }
+
+ @Test
+ void shouldDeleteDomainGroup() throws SchedulerException {
+ // Setup webhook event
+ WebhookEvent webhookEvent = new WebhookEvent(1L, "webhook", "https://example.com/webhook", WebhookEventType.DOMAIN_GROUP_CHANGE, null, null);
+ when(webhookEventRepository.findIdByEventType(WebhookEventType.DOMAIN_GROUP_CHANGE))
+ .thenReturn(Stream.of(1L));
+ when(webhookEventRepository.findById(1L))
+ .thenReturn(Optional.of(webhookEvent));
+
+ DomainGroup domainGroup = new DomainGroup("testgroup", "testgrp");
+ domainGroup.setId(10L);
+ when(domainGroupRepository.findById(10L)).thenReturn(Optional.of(domainGroup));
+ when(scheduler.getListenerManager()).thenReturn(listenerManager);
+ doNothing().when(listenerManager).addJobListener(any(JobListener.class), any(Matcher.class));
+ this.domainGroupService.deleteDomainGroup(10L);
+ verify(domainGroupRepository, times(1)).deleteById(10L);
+
+ verify(scheduler, times(1)).scheduleJob(
+ argThat(jobDetail ->
+ jobDetail.getKey().getName().startsWith("DomainGroup_1_10_") &&
+ jobDetail.getJobClass().equals(DomainGroupJob.class)
+ ),
+ argThat(trigger ->
+ trigger.getKey().getName().startsWith("DomainGroup_1_10_")
+ )
+ );
+ }
+}
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java
index ccbc33590bd0ba0d7d5ea60b66e661f32f3ad833..5fb8cb4c800f2519d943b89133014c20531a2147 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java
@@ -94,8 +94,6 @@ class DomainServiceTest {
Scheduler scheduler = mock(Scheduler.class);
ListenerManager listenerManager = mock(ListenerManager.class);
ScheduleManager scheduleManager;
- EncryptionService encryptionService = mock(EncryptionService.class);
- WebhookEventService webhookEventService;
DomainService domainService;
@@ -103,15 +101,14 @@ class DomainServiceTest {
void setup() {
validator = new DefaultCodenameValidator("[a-z-]{2,12}");
namespaceValidator = new DefaultCodenameValidator("[a-z-]{0,64}");
- domainGroupService = new DomainGroupServiceImpl(domainGroupRepository, applicationStatePerDomainService, webhookEventRepository, scheduleManager, modelMapper);
scheduleManager = new ScheduleManager( scheduler);
+ domainGroupService = new DomainGroupServiceImpl(domainGroupRepository, applicationStatePerDomainService, webhookEventRepository, scheduleManager, modelMapper);
domainService = new DomainServiceImpl(validator,
namespaceValidator, domainRepository,
domainDcnDetailsRepository, domainTechDetailsRepository, userService,
userRoleRepo, dcnRepositoryManager,
modelMapper, applicationStatePerDomainService, domainGroupService, eventPublisher, domainAnnotationsRepository, webhookEventRepository, scheduleManager);
((DomainServiceImpl) domainService).globalDomain = "GLOBAL";
- webhookEventService = new WebhookEventService(webhookEventRepository, encryptionService, modelMapper);
}
@Test