77 lines
3.7 KiB
Java
77 lines
3.7 KiB
Java
package com.starry.admin.api;
|
|
|
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
|
|
import com.starry.admin.common.apitest.ApiTestDataSeeder;
|
|
import com.starry.admin.modules.blindbox.module.entity.BlindBoxConfigEntity;
|
|
import com.starry.admin.modules.blindbox.service.BlindBoxConfigService;
|
|
import com.starry.admin.modules.order.module.constant.OrderConstant;
|
|
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
|
|
import com.starry.admin.utils.SecurityUtils;
|
|
import com.starry.common.constant.Constants;
|
|
import com.starry.common.context.CustomSecurityContextHolder;
|
|
import com.starry.common.utils.IdUtils;
|
|
import java.math.BigDecimal;
|
|
import org.assertj.core.api.Assertions;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.http.MediaType;
|
|
|
|
class WxBlindBoxOrderApiTest extends WxCustomOrderApiTestSupport {
|
|
|
|
@Autowired
|
|
private BlindBoxConfigService blindBoxConfigService;
|
|
|
|
@Test
|
|
void blindBoxPurchaseFailsWhenBalanceInsufficient() throws Exception {
|
|
SecurityUtils.setTenantId(ApiTestDataSeeder.DEFAULT_TENANT_ID);
|
|
String configId = "blind-" + IdUtils.getUuid();
|
|
try {
|
|
BlindBoxConfigEntity config = new BlindBoxConfigEntity();
|
|
config.setId(configId);
|
|
config.setTenantId(ApiTestDataSeeder.DEFAULT_TENANT_ID);
|
|
config.setName("API盲盒-" + IdUtils.getUuid().substring(0, 6));
|
|
config.setPrice(new BigDecimal("66.00"));
|
|
config.setStatus(1);
|
|
blindBoxConfigService.save(config);
|
|
|
|
setCustomerBalance(BigDecimal.ZERO);
|
|
String customerToken = wxTokenService.createWxUserToken(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID);
|
|
customUserInfoService.updateTokenById(ApiTestDataSeeder.DEFAULT_CUSTOMER_ID, customerToken);
|
|
|
|
ensureTenantContext();
|
|
long beforeCount = playOrderInfoService.lambdaQuery()
|
|
.eq(PlayOrderInfoEntity::getPurchaserBy, ApiTestDataSeeder.DEFAULT_CUSTOMER_ID)
|
|
.eq(PlayOrderInfoEntity::getOrderType, OrderConstant.OrderType.BLIND_BOX_PURCHASE.getCode())
|
|
.count();
|
|
|
|
String payload = "{" +
|
|
"\"blindBoxId\":\"" + configId + "\"," +
|
|
"\"clerkId\":\"" + ApiTestDataSeeder.DEFAULT_CLERK_ID + "\"," +
|
|
"\"weiChatCode\":\"apitest-customer-wx\"" +
|
|
"}";
|
|
|
|
mockMvc.perform(post("/wx/blind-box/order/purchase")
|
|
.header(USER_HEADER, DEFAULT_USER)
|
|
.header(TENANT_HEADER, DEFAULT_TENANT)
|
|
.header(Constants.CUSTOM_USER_LOGIN_TOKEN, Constants.TOKEN_PREFIX + customerToken)
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(payload))
|
|
.andExpect(status().isOk())
|
|
.andExpect(jsonPath("$.code").value(998));
|
|
|
|
ensureTenantContext();
|
|
long afterCount = playOrderInfoService.lambdaQuery()
|
|
.eq(PlayOrderInfoEntity::getPurchaserBy, ApiTestDataSeeder.DEFAULT_CUSTOMER_ID)
|
|
.eq(PlayOrderInfoEntity::getOrderType, OrderConstant.OrderType.BLIND_BOX_PURCHASE.getCode())
|
|
.count();
|
|
Assertions.assertThat(afterCount).isEqualTo(beforeCount);
|
|
} finally {
|
|
blindBoxConfigService.removeById(configId);
|
|
CustomSecurityContextHolder.remove();
|
|
}
|
|
}
|
|
}
|