浏览代码

[공통][New] 비회원 코인 적립 테스트 추가
- 유효기한 7일이라면 적립일 +7 24시(+8 00시)를 기준으로 비교

hyodong.min 6 年之前
父节点
当前提交
6618f8d7e7

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIRepository.java

@@ -372,7 +372,7 @@ public class LifeplusAPIRepository implements LifeplusAPI {
     }
     else {
       // 비회원 - 로컬에서 로딩
-      return Single.fromCallable(() -> GuestCoinManager.getSharePoint(bean));
+      return Single.fromCallable(() -> GuestCoinManager.getSharePoint(GuestCoinManager.getSavedCoinInfoResult(), bean));
     }
   }
 
@@ -388,7 +388,7 @@ public class LifeplusAPIRepository implements LifeplusAPI {
     }
     else {
       // 비회원 - 로컬에서 로딩
-      return Single.fromCallable(() -> GuestCoinManager.getCoinInfo());
+      return Single.fromCallable(() -> GuestCoinManager.getCoinInfo(GuestCoinManager.getSavedCoinInfoResult()));
     }
   }
 

+ 29 - 16
app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/GuestCoinManager.java

@@ -82,6 +82,11 @@ public class GuestCoinManager {
     }
   }
 
+  /**
+   * 유효기한 지난 코인 삭제
+   *
+   * @return
+   */
   public int expireCoin() {
     // 7일 이후 코인 삭제
     List<CoinInfoBean> list = coinInfoResultBean.getData();
@@ -89,14 +94,17 @@ public class GuestCoinManager {
     int len = list.size();
     int isRemoved = 0;
     CoinInfoBean coinInfoBean;
-    long todayMillis = Calendar.getInstance().getTimeInMillis();
+    // 당일 +휴효 날짜 비교하면 적립 시각(18:00) 만큼 코인의 유효기한이 짧아지므로(1일짜리 코인이라면 24-18=6시간) 유효날짜 +1일로 비교
+    Calendar toDay = Calendar.getInstance();
+    long todayMillis = toDay.getTimeInMillis();
     Log.e("APP#  GuestCoinManager | expireCoin", "|" + "today --------> " + Formatter.format(todayMillis, CoinInfoBean.DATE_PATTERN));
     for (int i = len - 1; i >= 0; --i) {
       coinInfoBean = list.get(i);
       long coinDayMillis = Formatter.dateStringToMillis(CoinInfoBean.DATE_PATTERN, coinInfoBean.getDate());
-      long sevenDayMillis = TimeUnit.DAYS.toMillis(coinInfoBean.getLimitDays());
+      long limitDayMillis = TimeUnit.DAYS.toMillis(coinInfoBean.getLimitDays() + 1);
+      long targetDayMillis = coinDayMillis + limitDayMillis;
 
-      if ((coinDayMillis + sevenDayMillis) < todayMillis || coinDayMillis > todayMillis) {
+      if (targetDayMillis < todayMillis || coinDayMillis > todayMillis) {
         // 7일이 지났음. // 미래의 데이터 제거
         coinInfoBean = list.remove(i);
         modifyCoin(coinInfoBean.getGoodsAmount(), true);
@@ -112,7 +120,7 @@ public class GuestCoinManager {
    * Guest api result
    ***********************************/
 
-  private static CoinInfoResultBean getCoinInfoResult() {
+  public static CoinInfoResultBean getSavedCoinInfoResult() {
     CoinInfoResultBean coinInfoResultBean = new Gson().fromJson(SuperModel.getInstance().getPreferences().getGuestCoinList(), CoinInfoResultBean.class);
     if (null == coinInfoResultBean) {
       coinInfoResultBean = new CoinInfoResultBean();
@@ -124,13 +132,13 @@ public class GuestCoinManager {
     return coinInfoResultBean;
   }
 
-  private static void saveCoinInfoResultBean(CoinInfoResultBean coinInfoResultBean) {
+  public static void saveCoinInfoResultBean(CoinInfoResultBean coinInfoResultBean) {
     Log.e("APP#  GuestCoinManager | saveCoinInfoResultBean", "|" + " save ---> " + coinInfoResultBean.toJson());
     SuperModel.getInstance().getPreferences().setGuestCoinList(coinInfoResultBean.toJson());
   }
 
-  public static CoinInfoResultBean getCoinInfo() {
-    GuestCoinManager manager = new GuestCoinManager(getCoinInfoResult());
+  public static CoinInfoResultBean getCoinInfo(CoinInfoResultBean coinInfoResultBean) {
+    GuestCoinManager manager = new GuestCoinManager(coinInfoResultBean);
     if (manager.expireCoin() > 0) {
       // 삭제 데이터가 있다면 저장
       saveCoinInfoResultBean(manager.getCoinInfoResultBean());
@@ -141,9 +149,19 @@ public class GuestCoinManager {
     return manager.getCoinInfoResultBean();
   }
 
-  public static ShareCoinResultBean getSharePoint(ShareCoinRequestBean bean) {
-    int coin = 1;
-    GuestCoinManager manager = new GuestCoinManager(getCoinInfoResult());
+  public static ShareCoinResultBean getSharePoint(CoinInfoResultBean coinInfoResultBean, ShareCoinRequestBean bean) {
+    CoinInfoBean infoBean = new CoinInfoBean(GUEST_COIN_LIMIT_DAYS);
+    infoBean.setDate(Formatter.format(Calendar.getInstance().getTimeInMillis(), CoinInfoBean.DATE_PATTERN));
+    infoBean.setGoodsAmount(String.valueOf(1));
+    infoBean.setDecreasing(LifeplusData.FALSE);
+    infoBean.setGoodsName(ResourceUtil.getString(R.string.coin_share_contents));
+    return getSharePoint(coinInfoResultBean, infoBean, bean, 10);
+  }
+
+  public static ShareCoinResultBean getSharePoint(CoinInfoResultBean coinInfoResultBean, CoinInfoBean infoBean, ShareCoinRequestBean bean, int dayMax) {
+
+    int coin = Integer.parseInt(infoBean.getGoodsAmount());
+    GuestCoinManager manager = new GuestCoinManager(coinInfoResultBean);
 
     // 1코인 추가
     // 하루 10회 제한
@@ -165,13 +183,8 @@ public class GuestCoinManager {
       }
     }
 
-    if (count < 10) {
+    if (count < dayMax) {
       // 적립 가능
-      CoinInfoBean infoBean = new CoinInfoBean(GUEST_COIN_LIMIT_DAYS);
-      infoBean.setDate(todayDate);
-      infoBean.setGoodsAmount(String.valueOf(coin));
-      infoBean.setDecreasing(LifeplusData.FALSE);
-      infoBean.setGoodsName(ResourceUtil.getString(R.string.coin_share_contents));
       manager.addCoinInfo(infoBean);
     }
     else {

+ 128 - 0
app/src/test/java/kr/co/zumo/app/lifeplus/supervisor/GuestCoinManagerTest.java

@@ -0,0 +1,128 @@
+package kr.co.zumo.app.lifeplus.supervisor;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.concurrent.TimeUnit;
+
+import kr.co.zumo.app.lifeplus.bean.api.CoinInfoBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinInfoResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusData;
+import kr.co.zumo.app.lifeplus.model.LifeplusPreferences;
+import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.util.Formatter;
+
+import static junit.framework.Assert.assertEquals;
+import static org.powermock.api.mockito.PowerMockito.mock;
+
+/**
+ * GuestCoinManagerTest
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 1. 22.]   [최초 작성]
+ * @since 2019. 1. 22.
+ */
+public class GuestCoinManagerTest {
+  private CoinInfoResultBean coinInfoResultBean;
+  LifeplusPreferences lifeplusPreferences;
+  GuestCoinManager guestCoinManager;
+
+  @Before
+  public void setup() {
+    lifeplusPreferences = mock(LifeplusPreferences.class);
+
+    SuperModel.getInstance().init(lifeplusPreferences);
+
+    coinInfoResultBean = new CoinInfoResultBean();
+    coinInfoResultBean.setCoin("0");
+    coinInfoResultBean.setExpiringCoin("0");
+    coinInfoResultBean.setData(new ArrayList<>());
+  }
+
+  @Test
+  public void addCoinInfo() {
+
+    CoinInfoBean infoBean = new CoinInfoBean(GuestCoinManager.GUEST_COIN_LIMIT_DAYS);
+    infoBean.setDate(Formatter.format(Calendar.getInstance().getTimeInMillis(), CoinInfoBean.DATE_PATTERN));
+    infoBean.setGoodsAmount(String.valueOf(1));
+    infoBean.setDecreasing(LifeplusData.FALSE);
+    infoBean.setGoodsName("test-----------");
+
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    assertEquals("1", coinInfoResultBean.getCoin());
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    assertEquals("10", coinInfoResultBean.getCoin());
+    GuestCoinManager.getSharePoint(coinInfoResultBean, infoBean, null, 10);
+    assertEquals("10", coinInfoResultBean.getCoin());
+  }
+
+  @Test
+  public void expireCoin() {
+    guestCoinManager = new GuestCoinManager(coinInfoResultBean);
+
+    CoinInfoBean infoBean;
+    infoBean = new CoinInfoBean(1);
+    infoBean.setDate(Formatter.format(Calendar.getInstance().getTimeInMillis() - TimeUnit.DAYS.toMillis(1), CoinInfoBean.DATE_PATTERN));
+    infoBean.setGoodsAmount(String.valueOf(1));
+    infoBean.setDecreasing(LifeplusData.FALSE);
+    infoBean.setGoodsName("test-----------");
+
+    guestCoinManager.addCoinInfo(infoBean);
+    guestCoinManager.expireCoin();
+
+    assertEquals(1, guestCoinManager.getCoinInfoResultBean().getData().size());
+
+  }
+
+  @Test
+  public void expireCoin2() {
+    guestCoinManager = new GuestCoinManager(coinInfoResultBean);
+
+    CoinInfoBean infoBean;
+    infoBean = new CoinInfoBean(7);
+    infoBean.setDate(Formatter.format(Calendar.getInstance().getTimeInMillis() - TimeUnit.DAYS.toMillis(6), CoinInfoBean.DATE_PATTERN));
+    infoBean.setGoodsAmount(String.valueOf(1));
+    infoBean.setDecreasing(LifeplusData.FALSE);
+    infoBean.setGoodsName("test-----------");
+
+    guestCoinManager.addCoinInfo(infoBean);
+
+    infoBean = new CoinInfoBean(7);
+    infoBean.setDate(Formatter.format(Calendar.getInstance().getTimeInMillis() - TimeUnit.DAYS.toMillis(7), CoinInfoBean.DATE_PATTERN));
+    infoBean.setGoodsAmount(String.valueOf(1));
+    infoBean.setDecreasing(LifeplusData.FALSE);
+    infoBean.setGoodsName("test-----------");
+
+    guestCoinManager.addCoinInfo(infoBean);
+
+    infoBean = new CoinInfoBean(7);
+    infoBean.setDate(Formatter.format(Calendar.getInstance().getTimeInMillis() - TimeUnit.DAYS.toMillis(8), CoinInfoBean.DATE_PATTERN));
+    infoBean.setGoodsAmount(String.valueOf(1));
+    infoBean.setDecreasing(LifeplusData.FALSE);
+    infoBean.setGoodsName("test-----------");
+
+    guestCoinManager.addCoinInfo(infoBean);
+
+    int count = guestCoinManager.expireCoin();
+    assertEquals(1, count);
+
+    assertEquals(2, guestCoinManager.getCoinInfoResultBean().getData().size());
+  }
+
+  @Test
+  public void getSharePoint() {
+  }
+}