Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

인수테스트 리팩토링하기 #165

Closed
3 of 4 tasks
hwanghe159 opened this issue Sep 8, 2020 · 0 comments · Fixed by #182
Closed
3 of 4 tasks

인수테스트 리팩토링하기 #165

hwanghe159 opened this issue Sep 8, 2020 · 0 comments · Fixed by #182
Assignees
Labels
⭐⭐ 중요도 2 스프린트9 스프린트 9 💻테스트 테스트 관련 이슈

Comments

@hwanghe159
Copy link
Collaborator

hwanghe159 commented Sep 8, 2020

목적

@disabled를 제거하여 코드의 신뢰도를 높인다.

체크리스트

  • ArticleAcceptanceTest 구현하기
  • CommentAcceptanceTest 구현하기
  • EmotionAcceptanceTest 구현하기
  • MemberAcceptanceTest 구현하기

주의 사항

관련 이슈

일정

  • 스프린트9

MemberAcceptanceTest를 포기하게 된 사연

인증 과정 먼저 설명해볼게요

  1. 최초 사용자가 새벽에 접속한다

  2. 소셜 로그인 버튼을 누르면 네이버 로그인창으로 리다이렉트 된다.

  3. 네이버 로그인창에서 아이디와 비밀번호를 입력하여 로그인하면 네이버 측에서 회원의 정보를 보내줌.

    http://localhost:9000/login/oauth2/code/naver?code=JqUbLeT4pHkUTPUNcH&state=aPyDcRYBCeQ45Mv9QVuG3KPStu955bkIwdySaAJ9DaE=
    

    위와 같은 형태로 보내줌.

    (http://localhost:9000/login/oauth2/code/naver는 네이버아이디로로그인 설정페이지에서 리다이렉트 경로로 설정한 경로임.)

  4. 시큐리티에서 위와 같이 보내준 정보를 토대로 oauthId를 뽑아내서 Member로 저장함

  5. 인증이 성공했으므로 토큰을 만들어서 /auth로 리다이렉트함

    SuccessHandler.java의 onAuthenticationSuccess()에서 수행함.

    response.sendRedirect("/auth?token=bearer " + accessToken);
    
  6. 프론트에서 토큰을 받아 localstorage에 저장함(Auth.vue 의 storeAuth()에서 수행)

  7. 그 토큰 계속 사용

어떻게 해결해야 할까? 생각의 흐름

  • 로그인 버튼을 누르면 새벽 서버로 요청이 가는 게 아니라 네이버로 요청이 간다

    --> 그럼 이건 인수테스트에서 못할 것 같네!

  • 그럼 네이버에서 새벽서버로 정보를 넘겨주는 곳(위의 인증흐름에서 3번)부터 시작할까?

    그럼

    http://localhost:9000/login/oauth2/code/naver?code=JqUbLeT4pHkUTPUNcH&state=aPyDcRYBCeQ45Mv9QVuG3KPStu955bkIwdySaAJ9DaE=
    

    에서

    code=JqUbLeT4pHkUTPUNcH&state=aPyDcRYBCeQ45Mv9QVuG3KPStu955bkIwdySaAJ9DaE=
    

    이 부분을 테스트 할때 내가 직접 만들어줘야 할 것 같은데.. 이건 네이버에서 만들어주는 값이라 내가 어떻게 구성을 못할 것 같은데?

  • 그럼 Mockito로 아무값이 오더라도 통과되게 할까?

    --> 인수테스트에서 Mock쓰는 건 좀 아닌 것 같아..

  • 네이버로 회원가입/로그인은 좀 힘들것 같으니까 유효한 토큰으로 자동로그인하는거라도 테스트 해보자.

        private void login() {
            //@formatter:off
            return
                    given().
                            auth().oauth2(TOKEN).
                    when().
                            // ?? 어디로 보내지?
                    then().
                            log().all().
                            statusCode(HttpStatus.OK.value());
            //@formatter:on
        }
    

    시큐리티를 써서 Member관련 컨트롤러가 없는데 어떡하지..?

  • 머리 싸매다 포기선언

결론

  • 아니 근데 네이버 서버와 통신이 왔다갔다 하는건데 실제 서버를 테스트하는 인수테스트가 가능하긴 한건가?? 의문이 들었음
  • 아님 너무 좁은 시각으로만 문제를 해결하려고 했나?? 다른 시각으로 이걸 해결해줄 수 있는 실력자가 있다면 해결해주시면 감사할것 같아요 ㅠㅠ
@hwanghe159 hwanghe159 added ⭐⭐ 중요도 2 💻테스트 테스트 관련 이슈 스프린트9 스프린트 9 labels Sep 8, 2020
@hwanghe159 hwanghe159 self-assigned this Sep 8, 2020
hwanghe159 added a commit that referenced this issue Sep 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⭐⭐ 중요도 2 스프린트9 스프린트 9 💻테스트 테스트 관련 이슈
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant