This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new c8ee0e7c302 Fix Quota plugin state on QuotaSummaryResponse (#7257)
c8ee0e7c302 is described below

commit c8ee0e7c3024f8d72d6ba0a858c6a52c0956c1c0
Author: Bryan Lima <[email protected]>
AuthorDate: Wed Feb 22 06:19:59 2023 -0300

    Fix Quota plugin state on QuotaSummaryResponse (#7257)
---
 .../api/response/QuotaResponseBuilderImpl.java     |  3 +-
 .../api/response/QuotaResponseBuilderImplTest.java | 67 ++++++++++++++++++++++
 2 files changed, 69 insertions(+), 1 deletion(-)

diff --git 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
index a2c86cd15da..32b49a72ae4 100644
--- 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
+++ 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
@@ -173,7 +173,7 @@ public class QuotaResponseBuilderImpl implements 
QuotaResponseBuilder {
         return new Pair<>(result, count);
     }
 
-    private QuotaSummaryResponse getQuotaSummaryResponse(final Account 
account) {
+    protected QuotaSummaryResponse getQuotaSummaryResponse(final Account 
account) {
         Calendar[] period = _statement.getCurrentStatementTime();
 
         if (account != null) {
@@ -192,6 +192,7 @@ public class QuotaResponseBuilderImpl implements 
QuotaResponseBuilder {
             qr.setStartDate(period[0].getTime());
             qr.setEndDate(period[1].getTime());
             qr.setCurrency(QuotaConfig.QuotaCurrencySymbol.value());
+            
qr.setQuotaEnabled(QuotaConfig.QuotaAccountEnabled.valueIn(account.getId()));
             qr.setObjectName("summary");
             return qr;
         } else {
diff --git 
a/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
 
b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
index 2c27b8ef8a5..a02afdaf45e 100644
--- 
a/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
+++ 
b/plugins/database/quota/src/test/java/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
@@ -16,24 +16,32 @@
 // under the License.
 package org.apache.cloudstack.api.response;
 
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.function.Consumer;
 
+import com.cloud.domain.DomainVO;
+import com.cloud.domain.dao.DomainDao;
 import org.apache.cloudstack.api.ServerApiException;
 import org.apache.cloudstack.api.command.QuotaEmailTemplateListCmd;
 import org.apache.cloudstack.api.command.QuotaEmailTemplateUpdateCmd;
+import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.quota.QuotaService;
+import org.apache.cloudstack.quota.QuotaStatement;
+import org.apache.cloudstack.quota.constant.QuotaConfig;
 import org.apache.cloudstack.quota.constant.QuotaTypes;
 import org.apache.cloudstack.quota.dao.QuotaBalanceDao;
 import org.apache.cloudstack.quota.dao.QuotaCreditsDao;
 import org.apache.cloudstack.quota.dao.QuotaEmailTemplatesDao;
 import org.apache.cloudstack.quota.dao.QuotaTariffDao;
+import org.apache.cloudstack.quota.dao.QuotaUsageDao;
 import org.apache.cloudstack.quota.vo.QuotaBalanceVO;
 import org.apache.cloudstack.quota.vo.QuotaCreditsVO;
 import org.apache.cloudstack.quota.vo.QuotaEmailTemplatesVO;
@@ -87,11 +95,38 @@ public class QuotaResponseBuilderImplTest extends TestCase {
     @Mock
     QuotaTariffVO quotaTariffVoMock;
 
+    @Mock
+    QuotaStatement quotaStatementMock;
+
+    @Mock
+    DomainDao domainDaoMock;
+
+    @Mock
+    QuotaUsageDao quotaUsageDaoMock;
+
     @InjectMocks
     QuotaResponseBuilderImpl quotaResponseBuilderSpy = 
Mockito.spy(QuotaResponseBuilderImpl.class);
 
     Date date = new Date();
 
+    @Mock
+    Account accountMock;
+
+    @Mock
+    DomainVO domainVOMock;
+
+    private void overrideDefaultQuotaEnabledConfigValue(final Object value) 
throws IllegalAccessException, NoSuchFieldException {
+        Field f = ConfigKey.class.getDeclaredField("_defaultValue");
+        f.setAccessible(true);
+        f.set(QuotaConfig.QuotaAccountEnabled, value);
+    }
+
+    private Calendar[] createPeriodForQuotaSummary() {
+        final Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.HOUR, 0);
+        return new Calendar[] {calendar, calendar};
+    }
+
     private QuotaTariffVO makeTariffTestData() {
         QuotaTariffVO tariffVO = new QuotaTariffVO();
         tariffVO.setUsageType(QuotaTypes.IP_ADDRESS);
@@ -339,4 +374,36 @@ public class QuotaResponseBuilderImplTest extends TestCase 
{
 
         Mockito.verify(quotaTariffVoMock).setRemoved(Mockito.any(Date.class));
     }
+
+    @Test
+    public void 
getQuotaSummaryResponseTestAccountIsNotNullQuotaIsDisabledShouldReturnFalse() 
throws NoSuchFieldException, IllegalAccessException {
+        Calendar[] period = createPeriodForQuotaSummary();
+        overrideDefaultQuotaEnabledConfigValue("false");
+
+        
Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(),
 Mockito.anyLong());
+        
Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime();
+        
Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong());
+        
Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(),
 Mockito.anyLong(), Mockito.any(Date.class));
+        
Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(),
 Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), 
Mockito.any(Date.class));
+
+        QuotaSummaryResponse quotaSummaryResponse = 
quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock);
+
+        assertFalse(quotaSummaryResponse.getQuotaEnabled());
+    }
+
+    @Test
+    public void 
getQuotaSummaryResponseTestAccountIsNotNullQuotaIsEnabledShouldReturnTrue() 
throws NoSuchFieldException, IllegalAccessException {
+        Calendar[] period = createPeriodForQuotaSummary();
+        overrideDefaultQuotaEnabledConfigValue("true");
+
+        
Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(),
 Mockito.anyLong());
+        
Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime();
+        
Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong());
+        
Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(),
 Mockito.anyLong(), Mockito.any(Date.class));
+        
Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(),
 Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), 
Mockito.any(Date.class));
+
+        QuotaSummaryResponse quotaSummaryResponse = 
quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock);
+
+        assertTrue(quotaSummaryResponse.getQuotaEnabled());
+    }
 }

Reply via email to