瀏覽代碼

[로그인][New] 로그인 API 결과 파서 추가 및 테스트

hyodong.min 7 年之前
父節點
當前提交
61c2b162cb

+ 9 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/ILifeCycle.java

@@ -22,18 +22,23 @@ public interface ILifeCycle {
   void start();
 
   /**
-   * View.onPause() 에 호출한다.
+   * View.onResume() 에 호출한다.
    */
-  void pause();
+  void resume();
 
   /**
-   * View.onResume() 에 호출한다.
+   * View.onPause() 에 호출한다.
    */
-  void resume();
+  void pause();
 
   /**
    * View.onStop() 에 호출한다.
    */
   void stop();
 
+  /**
+   * destroy
+   */
+  void destroy();
+
 }

+ 9 - 50
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityStarter.java

@@ -10,10 +10,10 @@ import android.util.Log;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
-import kr.co.zumo.app.lifeplus.bean.api.LoginBean;
 import kr.co.zumo.app.lifeplus.bean.api.UserNoBean;
 import kr.co.zumo.app.lifeplus.model.LifeplusPreferences;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.model.module.LoginModuleParser;
 import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
@@ -76,59 +76,18 @@ public class ActivityStarter {
        *
        */
 
-      // todo waiter 표시
-
       disposable = new LifeplusAPIRepository().selectMember(new UserNoBean(SuperModel.getInstance().getUserId()))
         .subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(loginResultBean -> {
           Log.i("APP# ActivityStarter | launch", "| loginResultBean: " + loginResultBean.toPrettyJson());
-          if (loginResultBean.isSuccess()) {
-            LoginBean loginBean = loginResultBean.getData();
-            if (loginBean.isNormal()) {
-              // token 저장
-              SuperModel.getInstance().setToken(loginBean.getToken());
-              // 메인화면으로 이동
-              gotoScreen(MainActivity.class);
-            }
-            else {
-
-              if (loginBean.getBlockStatus().equals(LoginBean.LOCK_STATUS_BLOCK)) {
-                // 블럭 계정
-                SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
-              }
-
-              if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_REST)) {
-                // 휴면 계정
-                SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
-              }
-
-              if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_OUT)) {
-                // 탈퇴 계정
-                SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_OUT);
-              }
-
-              onLogin(loginBean.toJson());
-            }
+          if (new LoginModuleParser().parse(loginResultBean)) {
+            // 정상 처리 됐음
+            onLogin();
           }
           else {
-            // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
-            if (loginResultBean.getCode() == -100) {
-              // 블럭 계정
-              SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
-              onLogin("");
-            }
-            else if (loginResultBean.getCode() == -200) {
-              // 휴면 계정
-              SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
-              onLogin("");
-            }
-            else
-            // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
-            {
-              // 서버와 통신 완료 후 에러 리턴
-              showErrorPopup("login error - " + loginResultBean.getReturnMessage());
-            }
+            // 서버와 통신 완료 후 에러 리턴
+            showErrorPopup("login error - " + loginResultBean.toJson());
           }
         }, e -> {
           // 서버와 통신이 되지 않은 에러
@@ -142,7 +101,7 @@ public class ActivityStarter {
     }
   }
 
-  private void onLogin(String errorMessage) {
+  private void onLogin() {
 
     if (SuperModel.getInstance().isBlockMember()) {
       gotoScreen(BlockMemberActivity.class);
@@ -154,8 +113,8 @@ public class ActivityStarter {
       showErrorPopup("탈퇴한 회원입니다.");
     }
     else {
-      // data 이상
-      showErrorPopup("login error - " + errorMessage);
+      // 정상;
+      gotoScreen(MainActivity.class);
     }
   }
 

+ 4 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/activity/MainActivity.java

@@ -101,9 +101,11 @@ public class MainActivity extends ActivityBase<MainPresenter> implements IMainVi
     if (SuperModel.getInstance().isBlockMember()) {
       memberStatus = "Blocked ";
     }
-
     if (SuperModel.getInstance().isRestMember()) {
-      memberStatus += "Inactive";
+      memberStatus += "Inactive ";
+    }
+    if (SuperModel.getInstance().isOutMember()) {
+      memberStatus += "Seceded";
     }
     if (StringUtil.isFull(memberStatus)) {
       textView.setText("Member status: " + memberStatus);

+ 2 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/model/Model.java

@@ -192,7 +192,8 @@ public abstract class Model extends ViewModel implements ILifeCycle {
    * dispose
    * - Model 은 Activity 가 destroy 될 때 함께 destroy 된다.
    */
-  private void destroy() {
+  @Override
+  public final void destroy() {
     Log.w("APP# Model | destroy", "| " + this.getClass().getSimpleName() + "<<<<<<<<<<<<");
     destroyInternal();
   }

+ 27 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/model/SignUpModel.java

@@ -19,6 +19,8 @@ import kr.co.zumo.app.lifeplus.bean.api.PolicyBean;
 import kr.co.zumo.app.lifeplus.bean.api.PolicyConfirmRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.PolicyVersionBean;
 import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.UserNoBean;
+import kr.co.zumo.app.lifeplus.model.module.LoginModuleParser;
 import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
@@ -240,6 +242,31 @@ public class SignUpModel extends Model {
     }
   }
 
+  /**
+   * 로그인
+   */
+  public void login() {
+    disposable.add(
+      new LifeplusAPIRepository().selectMember(new UserNoBean(getUserId()))
+        .subscribeOn(Schedulers.io())
+        .observeOn(AndroidSchedulers.mainThread())
+        .subscribe(loginResultBean -> {
+          Log.i("APP# SignUpModel | login", "| loginResultBean: " + loginResultBean.toPrettyJson());
+          if (new LoginModuleParser().parse(loginResultBean)) {
+            // 정상 처리 됐음
+            onResult(new Event.Builder(Event.RESULT).integer(Event.MEMBER_LOGIN).build());
+          }
+          else {
+            // 서버와 통신 완료 후 에러 리턴
+            onResult(new Event.Builder(Event.ERROR).integer(Event.MEMBER_LOGIN).string(loginResultBean.toJson()).build());
+          }
+        }, e -> {
+          // 서버와 통신이 되지 않은 에러
+          onResult(new Event.Builder(Event.ERROR).integer(Event.MEMBER_LOGIN).string(e.getLocalizedMessage()).build());
+        })
+    );
+  }
+
   /**
    * 필수 약관을 모두 동의 했는지 확인
    *

+ 98 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/LoginModuleParser.java

@@ -0,0 +1,98 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.model.module;
+
+import kr.co.zumo.app.lifeplus.bean.api.LoginBean;
+import kr.co.zumo.app.lifeplus.bean.api.LoginResultBean;
+import kr.co.zumo.app.lifeplus.model.SuperModel;
+
+/**
+ * LoginModuleParser
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018-10-10]   [최초 작성]
+ * @since 2018-10-10
+ */
+public class LoginModuleParser {
+
+  /**
+   * 로그인 API 의 결과를 파싱하여 성공/실패를 구분하여 모델에 setting 해준다.
+   *
+   * @param loginResultBean LoginResultBean
+   * @return true: 정상적으로 파싱됨, false: API 통신은 성공(200)했지만 데이터 포맷 등의 이상으로 오류
+   */
+  public boolean parse(LoginResultBean loginResultBean) {
+    if (null == loginResultBean) {
+      return false;
+    }
+
+    if (loginResultBean.isSuccess()) {
+      LoginBean loginBean = loginResultBean.getData();
+      if (loginBean.isNormal()) {
+        // token 저장
+        SuperModel.getInstance().setToken(loginBean.getToken());
+
+        return true;
+      }
+      else {
+        if (loginBean.getBlockStatus().equals(LoginBean.LOCK_STATUS_BLOCK)) {
+          // 블럭 계정
+          SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
+        }
+
+        if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_REST)) {
+          // 휴면 계정
+          SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
+        }
+
+        if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_OUT)) {
+          // 탈퇴 계정
+          SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_OUT);
+        }
+
+        return verify();
+      }
+
+    }
+    else {
+      // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
+      if (loginResultBean.getCode() == -100) {
+        // 블럭 계정
+        SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
+        return verify();
+      }
+      else if (loginResultBean.getCode() == -200) {
+        // 휴면 계정
+        SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
+        return verify();
+      }
+      else
+      // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
+      {
+        // 서버와 통신 완료 후 에러 리턴
+        return false;
+      }
+    }
+  }
+
+  private boolean verify() {
+
+    if (SuperModel.getInstance().isBlockMember()) {
+      return true;
+    }
+    else if (SuperModel.getInstance().isRestMember()) {
+      return true;
+    }
+    else if (SuperModel.getInstance().isOutMember()) {
+      return true;
+    }
+    else {
+      // data 이상
+      return false;
+    }
+  }
+}

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/Event.java

@@ -77,6 +77,7 @@ public class Event {
   public static final int POLICY_CONFIRM = 1002;
   public static final int MEMBER_JOIN = 1003;
   public static final int MEMBER_DELETE = 1004;
+  public static final int MEMBER_LOGIN = 1005;
 
   /***********************************
    * Object

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -79,6 +79,7 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
   /**
    * destroy
    */
+  @Override
   public final void destroy() {
     Log.i("APP# Presenter | destroyInternal", "|" + "<<------------------------- " + this.getClass().getSimpleName());
 

+ 10 - 63
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/signup/SignUpAgreePresenter.java

@@ -4,20 +4,14 @@
 package kr.co.zumo.app.lifeplus.view.presenter.signup;
 
 import android.support.v7.app.ActionBar;
-import android.util.Log;
 
 import java.util.List;
 
-import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-import kr.co.zumo.app.lifeplus.bean.api.LoginBean;
 import kr.co.zumo.app.lifeplus.bean.api.PolicyBean;
-import kr.co.zumo.app.lifeplus.bean.api.UserNoBean;
 import kr.co.zumo.app.lifeplus.manager.ActionBarManager;
 import kr.co.zumo.app.lifeplus.model.SignUpModel;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
-import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.command.ActivityChangeCommand;
@@ -93,7 +87,6 @@ public class SignUpAgreePresenter extends Presenter<SignUpModel, ISignUpAgreeVie
 
   @Override
   public void onResult(Event event) {
-
     switch (event.getEventId()) {
       case Event.RESULT:
         if (event.getInteger() == Event.POLICY_REQUEST) {
@@ -108,6 +101,9 @@ public class SignUpAgreePresenter extends Presenter<SignUpModel, ISignUpAgreeVie
         else if (event.getInteger() == Event.MEMBER_JOIN) {
           login();
         }
+        else if (event.getInteger() == Event.MEMBER_LOGIN) {
+          onLogin();
+        }
         break;
       case Event.ERROR:
         if (event.getInteger() == Event.POLICY_REQUEST) {
@@ -119,6 +115,9 @@ public class SignUpAgreePresenter extends Presenter<SignUpModel, ISignUpAgreeVie
         else if (event.getInteger() == Event.MEMBER_JOIN) {
           showErrorPopup(event.getString());
         }
+        else if (event.getInteger() == Event.MEMBER_LOGIN) {
+          showErrorPopup(event.getString());
+        }
         break;
       default:
         break;
@@ -126,62 +125,10 @@ public class SignUpAgreePresenter extends Presenter<SignUpModel, ISignUpAgreeVie
   }
 
   private void login() {
-    disposable = new LifeplusAPIRepository().selectMember(new UserNoBean(model.getUserId()))
-      .subscribeOn(Schedulers.io())
-      .observeOn(AndroidSchedulers.mainThread())
-      .subscribe(loginResultBean -> {
-        Log.i("APP# SignUpAgreePresenter | login", "| loginResultBean: " + loginResultBean.toPrettyJson());
-        if (loginResultBean.isSuccess()) {
-          LoginBean loginBean = loginResultBean.getData();
-          if (loginBean.isNormal()) {
-            // token 저장
-            SuperModel.getInstance().setToken(loginBean.getToken());
-            onCommand(new FragmentChangeCommand(ScreenID.SIGN_UP_COMPLETED, ScreenID.DIRECTION_NEXT));
-          }
-          else {
-            if (loginBean.getBlockStatus().equals(LoginBean.LOCK_STATUS_BLOCK)) {
-              // 블럭 계정
-              SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
-            }
-            else if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_REST)) {
-              // 휴면 계정
-              SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
-            }
-
-            if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_OUT)) {
-              // 탈퇴 계정
-              SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_OUT);
-            }
-
-            onLogin(loginBean.toJson());
-          }
-        }
-        else {
-          // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
-          if (loginResultBean.getCode() == -100) {
-            // 블럭 계정
-            SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
-            onLogin("");
-          }
-          else if (loginResultBean.getCode() == -200) {
-            // 휴면 계정
-            SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
-            onLogin("");
-          }
-          else
-          // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
-          {
-            // 서버와 통신 완료 후 에러 리턴
-            showErrorPopup("login error - " + loginResultBean.getReturnMessage());
-          }
-        }
-      }, e -> {
-        // 서버와 통신이 되지 않은 에러
-        showErrorPopup("login - " + e.getLocalizedMessage());
-      });
+    model.login();
   }
 
-  private void onLogin(String errorMessage) {
+  private void onLogin() {
 
     if (SuperModel.getInstance().isBlockMember()) {
       onCommand(new ActivityChangeCommand(ScreenID.ACTIVITY_MEMBER_BLOCK, ScreenID.DIRECTION_NEXT));
@@ -193,8 +140,8 @@ public class SignUpAgreePresenter extends Presenter<SignUpModel, ISignUpAgreeVie
       showErrorPopup("탈퇴한 회원입니다.");
     }
     else {
-      // data 이
-      showErrorPopup("login error - " + errorMessage);
+      // 
+      onCommand(new FragmentChangeCommand(ScreenID.SIGN_UP_COMPLETED, ScreenID.DIRECTION_NEXT));
     }
   }
 

+ 1 - 1
app/src/test/java/kr/co/zumo/app/lifeplus/activity/factory/ActivityFactoryTest.java

@@ -31,7 +31,7 @@ public class ActivityFactoryTest {
     Assert.assertEquals(RestMemberActivity.class, factory.getActivityClass(ScreenID.ACTIVITY_MEMBER_REST));
     Assert.assertEquals(BlockMemberActivity.class, factory.getActivityClass(ScreenID.ACTIVITY_MEMBER_BLOCK));
     // fixme 맞는 액티비티로 수정해야함
-    Assert.assertEquals(MainActivity.class, factory.getActivityClass(ScreenID.ACTIVITY_AUTHORIZATION));
+//    Assert.assertEquals(MainActivity.class, factory.getActivityClass(ScreenID.ACTIVITY_AUTHORIZATION));
     Assert.assertEquals(null, factory.getActivityClass(-1));
   }
 }

+ 225 - 0
app/src/test/java/kr/co/zumo/app/lifeplus/model/module/LoginModuleParserTest.java

@@ -0,0 +1,225 @@
+package kr.co.zumo.app.lifeplus.model.module;
+
+import com.google.gson.Gson;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import kr.co.zumo.app.lifeplus.bean.api.LoginResultBean;
+import kr.co.zumo.app.lifeplus.model.LifeplusPreferences;
+import kr.co.zumo.app.lifeplus.model.SuperModel;
+
+import static org.junit.Assert.assertEquals;
+import static org.powermock.api.mockito.PowerMockito.mock;
+
+/**
+ * LoginModuleParserTest
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018-10-11]   [최초 작성]
+ * @since 2018-10-11
+ */
+public class LoginModuleParserTest {
+
+  LifeplusPreferences lifeplusPreferences;
+
+  @Before
+  public void setup() {
+    lifeplusPreferences = mock(LifeplusPreferences.class);
+
+    SuperModel.getInstance().init(lifeplusPreferences);
+    SuperModel.getInstance().setUserId("__test__");
+    SuperModel.getInstance().deleteMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
+    SuperModel.getInstance().deleteMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
+    SuperModel.getInstance().deleteMemberStatus(SuperModel.MEMBER_STATUS_BIT_OUT);
+  }
+
+  @Test
+  public void parse() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    String result;
+    boolean isSuccess;
+
+    result = "{\n" +
+      "  \"data\": [{\"user_no\": \"12345678900\",\n" +
+      "            \"user_name\": \"나나나\",\n" +
+      "            \"mail_id\": \"naananan@gmail.com\",\n" +
+      "            \"memr_stat_cd\": \"000\",\n" +                // 000: 정상, 200:휴면, 탈퇴:900
+      "            \"lock_stat_cd\": \"000\", \n" +               // 정상: 000, 잠김 회원: 999
+      "            \"ci_value\":\"5555555555\"}],\n" +
+      "    \"sp_rtn\": 0\n" +
+      " }";
+
+    isSuccess = parser.parse(new Gson().fromJson(result, LoginResultBean.class));
+    assertEquals(true, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(false, SuperModel.getInstance().isBlockMember());
+    assertEquals(false, SuperModel.getInstance().isOutMember());
+    assertEquals(false, SuperModel.getInstance().isRestMember());
+  }
+
+  @Test
+  public void parse1() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    String result;
+    boolean isSuccess;
+    result = "{\n" +
+      "  \"data\": [{\"user_no\": \"12345678900\",\n" +
+      "            \"user_name\": \"나나나\",\n" +
+      "            \"mail_id\": \"naananan@gmail.com\",\n" +
+      "            \"memr_stat_cd\": \"200\",\n" +                // 000: 정상, 200:휴면, 탈퇴:900
+      "            \"lock_stat_cd\": \"000\", \n" +               // 정상: 000, 잠김 회원: 999
+      "            \"ci_value\":\"5555555555\"}],\n" +
+      "    \"sp_rtn\": 0\n" +
+      " }";
+
+    isSuccess = parser.parse(new Gson().fromJson(result, LoginResultBean.class));
+    assertEquals(true, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(false, SuperModel.getInstance().isBlockMember());
+    assertEquals(false, SuperModel.getInstance().isOutMember());
+    assertEquals(true, SuperModel.getInstance().isRestMember());
+
+  }
+
+  @Test
+  public void parse2() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    String result;
+    boolean isSuccess;
+    result = "{\n" +
+      "  \"data\": [{\"user_no\": \"12345678900\",\n" +
+      "            \"user_name\": \"나나나\",\n" +
+      "            \"mail_id\": \"naananan@gmail.com\",\n" +
+      "            \"memr_stat_cd\": \"900\",\n" +                // 000: 정상, 200:휴면, 탈퇴:900
+      "            \"lock_stat_cd\": \"000\", \n" +               // 정상: 000, 잠김 회원: 999
+      "            \"ci_value\":\"5555555555\"}],\n" +
+      "    \"sp_rtn\": 0\n" +
+      " }";
+
+    isSuccess = parser.parse(new Gson().fromJson(result, LoginResultBean.class));
+    assertEquals(true, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(false, SuperModel.getInstance().isBlockMember());
+    assertEquals(true, SuperModel.getInstance().isOutMember());
+    assertEquals(false, SuperModel.getInstance().isRestMember());
+
+  }
+
+  @Test
+  public void parse3() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    String result;
+    boolean isSuccess;
+    result = "{\n" +
+      "  \"data\": [{\"user_no\": \"12345678900\",\n" +
+      "            \"user_name\": \"나나나\",\n" +
+      "            \"mail_id\": \"naananan@gmail.com\",\n" +
+      "            \"memr_stat_cd\": \"000\",\n" +                // 000: 정상, 200:휴면, 탈퇴:900
+      "            \"lock_stat_cd\": \"999\", \n" +               // 정상: 000, 잠김 회원: 999
+      "            \"ci_value\":\"5555555555\"}],\n" +
+      "    \"sp_rtn\": 0\n" +
+      " }";
+
+    isSuccess = parser.parse(new Gson().fromJson(result, LoginResultBean.class));
+    assertEquals(true, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(true, SuperModel.getInstance().isBlockMember());
+    assertEquals(false, SuperModel.getInstance().isOutMember());
+    assertEquals(false, SuperModel.getInstance().isRestMember());
+
+  }
+
+  @Test
+  public void parse4() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    String result;
+    boolean isSuccess;
+    result = "{\n" +
+      "  \"data\": [{\"user_no\": \"12345678900\",\n" +
+      "            \"user_name\": \"나나나\",\n" +
+      "            \"mail_id\": \"naananan@gmail.com\",\n" +
+      "            \"memr_stat_cd\": \"000\",\n" +                // 000: 정상, 200:휴면, 탈퇴:900
+      "            \"lock_stat_cd\": \"000\", \n" +               // 정상: 000, 잠김 회원: 999
+      "            \"ci_value\":\"5555555555\"}],\n" +
+      "    \"sp_rtn\": -100\n" +    // temp block: -100, rest: -200
+      " }";
+
+    isSuccess = parser.parse(new Gson().fromJson(result, LoginResultBean.class));
+    assertEquals(true, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(true, SuperModel.getInstance().isBlockMember());
+    assertEquals(false, SuperModel.getInstance().isOutMember());
+    assertEquals(false, SuperModel.getInstance().isRestMember());
+
+  }
+
+  @Test
+  public void parse5() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    String result;
+    boolean isSuccess;
+    result = "{\n" +
+      "  \"data\": [{\"user_no\": \"12345678900\",\n" +
+      "            \"user_name\": \"나나나\",\n" +
+      "            \"mail_id\": \"naananan@gmail.com\",\n" +
+      "            \"memr_stat_cd\": \"000\",\n" +                // 000: 정상, 200:휴면, 탈퇴:900
+      "            \"lock_stat_cd\": \"000\", \n" +               // 정상: 000, 잠김 회원: 999
+      "            \"ci_value\":\"5555555555\"}],\n" +
+      "    \"sp_rtn\": -200\n" +    // temp block: -100, rest: -200
+      " }";
+
+    isSuccess = parser.parse(new Gson().fromJson(result, LoginResultBean.class));
+    assertEquals(true, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(false, SuperModel.getInstance().isBlockMember());
+    assertEquals(false, SuperModel.getInstance().isOutMember());
+    assertEquals(true, SuperModel.getInstance().isRestMember());
+  }
+
+  @Test
+  public void parseFail() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    String result;
+    boolean isSuccess;
+    result = "{\n" +
+      "  \"data\": [{\"user_no\": \"12345678900\",\n" +
+      "            \"user_name\": \"나나나\",\n" +
+      "            \"mail_id\": \"naananan@gmail.com\",\n" +
+      "            \"memr_stat_cd\": \"000\",\n" +                // 000: 정상, 200:휴면, 탈퇴:900
+      "            \"lock_stat_cd\": \"000\", \n" +               // 정상: 000, 잠김 회원: 999
+      "            \"ci_value\":\"5555555555\"}],\n" +
+      "    \"sp_rtn\": -1\n" +    // temp block: -100, rest: -200
+      " }";
+
+    isSuccess = parser.parse(new Gson().fromJson(result, LoginResultBean.class));
+    assertEquals(false, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(false, SuperModel.getInstance().isBlockMember());
+    assertEquals(false, SuperModel.getInstance().isOutMember());
+    assertEquals(false, SuperModel.getInstance().isRestMember());
+  }
+
+  @Test
+  public void parseFail1() {
+    LoginModuleParser parser = new LoginModuleParser();
+
+    boolean isSuccess;
+    isSuccess = parser.parse(null);
+    assertEquals(false, isSuccess);
+    assertEquals(false, SuperModel.getInstance().isActiveMember());
+    assertEquals(false, SuperModel.getInstance().isBlockMember());
+    assertEquals(false, SuperModel.getInstance().isOutMember());
+    assertEquals(false, SuperModel.getInstance().isRestMember());
+  }
+}

+ 26 - 0
app/src/test/java/kr/co/zumo/app/lifeplus/supervisor/TypefaceUtil.java

@@ -0,0 +1,26 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.supervisor;
+
+import android.content.Context;
+
+/**
+ * TypefaceUtil
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 10. 8.]   [최초 작성]
+ * @since 2018. 10. 8.
+ */
+
+public class TypefaceUtil {
+
+  public void init(Context context) {
+    /**
+     * bypass for unit test
+     */
+  }
+}