|
16 | 16 | // under the License. |
17 | 17 | package org.apache.cloudstack.api.response; |
18 | 18 |
|
| 19 | +import java.lang.reflect.Field; |
19 | 20 | import java.math.BigDecimal; |
20 | 21 | import java.time.LocalDate; |
21 | 22 | import java.time.LocalDateTime; |
22 | 23 | import java.time.ZoneId; |
23 | 24 | import java.util.ArrayList; |
| 25 | +import java.util.Calendar; |
24 | 26 | import java.util.Date; |
25 | 27 | import java.util.List; |
26 | 28 | import java.util.function.Consumer; |
27 | 29 |
|
| 30 | +import com.cloud.domain.DomainVO; |
| 31 | +import com.cloud.domain.dao.DomainDao; |
28 | 32 | import org.apache.cloudstack.api.ServerApiException; |
29 | 33 | import org.apache.cloudstack.api.command.QuotaEmailTemplateListCmd; |
30 | 34 | import org.apache.cloudstack.api.command.QuotaEmailTemplateUpdateCmd; |
| 35 | +import org.apache.cloudstack.framework.config.ConfigKey; |
31 | 36 | import org.apache.cloudstack.quota.QuotaService; |
| 37 | +import org.apache.cloudstack.quota.QuotaStatement; |
| 38 | +import org.apache.cloudstack.quota.constant.QuotaConfig; |
32 | 39 | import org.apache.cloudstack.quota.constant.QuotaTypes; |
33 | 40 | import org.apache.cloudstack.quota.dao.QuotaBalanceDao; |
34 | 41 | import org.apache.cloudstack.quota.dao.QuotaCreditsDao; |
35 | 42 | import org.apache.cloudstack.quota.dao.QuotaEmailTemplatesDao; |
36 | 43 | import org.apache.cloudstack.quota.dao.QuotaTariffDao; |
| 44 | +import org.apache.cloudstack.quota.dao.QuotaUsageDao; |
37 | 45 | import org.apache.cloudstack.quota.vo.QuotaBalanceVO; |
38 | 46 | import org.apache.cloudstack.quota.vo.QuotaCreditsVO; |
39 | 47 | import org.apache.cloudstack.quota.vo.QuotaEmailTemplatesVO; |
@@ -87,11 +95,38 @@ public class QuotaResponseBuilderImplTest extends TestCase { |
87 | 95 | @Mock |
88 | 96 | QuotaTariffVO quotaTariffVoMock; |
89 | 97 |
|
| 98 | + @Mock |
| 99 | + QuotaStatement quotaStatementMock; |
| 100 | + |
| 101 | + @Mock |
| 102 | + DomainDao domainDaoMock; |
| 103 | + |
| 104 | + @Mock |
| 105 | + QuotaUsageDao quotaUsageDaoMock; |
| 106 | + |
90 | 107 | @InjectMocks |
91 | 108 | QuotaResponseBuilderImpl quotaResponseBuilderSpy = Mockito.spy(QuotaResponseBuilderImpl.class); |
92 | 109 |
|
93 | 110 | Date date = new Date(); |
94 | 111 |
|
| 112 | + @Mock |
| 113 | + Account accountMock; |
| 114 | + |
| 115 | + @Mock |
| 116 | + DomainVO domainVOMock; |
| 117 | + |
| 118 | + private void overrideDefaultQuotaEnabledConfigValue(final Object value) throws IllegalAccessException, NoSuchFieldException { |
| 119 | + Field f = ConfigKey.class.getDeclaredField("_defaultValue"); |
| 120 | + f.setAccessible(true); |
| 121 | + f.set(QuotaConfig.QuotaAccountEnabled, value); |
| 122 | + } |
| 123 | + |
| 124 | + private Calendar[] createPeriodForQuotaSummary() { |
| 125 | + final Calendar calendar = Calendar.getInstance(); |
| 126 | + calendar.set(Calendar.HOUR, 0); |
| 127 | + return new Calendar[] {calendar, calendar}; |
| 128 | + } |
| 129 | + |
95 | 130 | private QuotaTariffVO makeTariffTestData() { |
96 | 131 | QuotaTariffVO tariffVO = new QuotaTariffVO(); |
97 | 132 | tariffVO.setUsageType(QuotaTypes.IP_ADDRESS); |
@@ -339,4 +374,36 @@ public void deleteQuotaTariffTestUpdateRemoved() { |
339 | 374 |
|
340 | 375 | Mockito.verify(quotaTariffVoMock).setRemoved(Mockito.any(Date.class)); |
341 | 376 | } |
| 377 | + |
| 378 | + @Test |
| 379 | + public void getQuotaSummaryResponseTestAccountIsNotNullQuotaIsDisabledShouldReturnFalse() throws NoSuchFieldException, IllegalAccessException { |
| 380 | + Calendar[] period = createPeriodForQuotaSummary(); |
| 381 | + overrideDefaultQuotaEnabledConfigValue("false"); |
| 382 | + |
| 383 | + Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(), Mockito.anyLong()); |
| 384 | + Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime(); |
| 385 | + Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong()); |
| 386 | + Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(), Mockito.anyLong(), Mockito.any(Date.class)); |
| 387 | + Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(), Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), Mockito.any(Date.class)); |
| 388 | + |
| 389 | + QuotaSummaryResponse quotaSummaryResponse = quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock); |
| 390 | + |
| 391 | + assertFalse(quotaSummaryResponse.getQuotaEnabled()); |
| 392 | + } |
| 393 | + |
| 394 | + @Test |
| 395 | + public void getQuotaSummaryResponseTestAccountIsNotNullQuotaIsEnabledShouldReturnTrue() throws NoSuchFieldException, IllegalAccessException { |
| 396 | + Calendar[] period = createPeriodForQuotaSummary(); |
| 397 | + overrideDefaultQuotaEnabledConfigValue("true"); |
| 398 | + |
| 399 | + Mockito.doReturn(accountMock).when(accountDaoMock).findActiveAccount(Mockito.anyString(), Mockito.anyLong()); |
| 400 | + Mockito.doReturn(period).when(quotaStatementMock).getCurrentStatementTime(); |
| 401 | + Mockito.doReturn(domainVOMock).when(domainDaoMock).findById(Mockito.anyLong()); |
| 402 | + Mockito.doReturn(BigDecimal.ZERO).when(quotaBalanceDaoMock).lastQuotaBalance(Mockito.anyLong(), Mockito.anyLong(), Mockito.any(Date.class)); |
| 403 | + Mockito.doReturn(BigDecimal.ZERO).when(quotaUsageDaoMock).findTotalQuotaUsage(Mockito.anyLong(), Mockito.anyLong(), Mockito.isNull(), Mockito.any(Date.class), Mockito.any(Date.class)); |
| 404 | + |
| 405 | + QuotaSummaryResponse quotaSummaryResponse = quotaResponseBuilderSpy.getQuotaSummaryResponse(accountMock); |
| 406 | + |
| 407 | + assertTrue(quotaSummaryResponse.getQuotaEnabled()); |
| 408 | + } |
342 | 409 | } |
0 commit comments