Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

LearningTDD/SpringBootTDDStart

Repository files navigation

스프링 부트 TDD - 입문부터 실전까지 정확하게

"스프링 부트 TDD - 입문부터 실전까지 정확하게" 인프런 강의의 실습 코드 저장소입니다.

응용프로그램 빌드

./gradlew build

응용프로그램 실행

./gradlew bootRun

API 목록

판매자 회원 가입

요청

  • 메서드: POST
  • 경로: /seller/signUp
  • 헤더
    Content-Type: application/json
    
  • 본문
    CreateSellerCommand {
     email: string,
     username: string,
     password: string,
     contactEmail: string
    }
    
  • curl 명령 예시
    curl -i -X POST 'http://localhost:8080/seller/signUp' \
    -H 'Content-Type: application/json' \
    -d '{
     "email": "seller1@example.com",
     "username": "seller1",
     "password": "seller1-password",
     "contactEmail": "contact1@example.com"
    }'

성공 응답

  • 상태코드: 204 No Content

정책

  • 이메일 주소는 유일해야 한다
  • 사용자이름은 유일해야 한다
  • 사용자이름은 3자 이상의 영문자, 숫자, 하이픈, 밑줄 문자로 구성되어야 한다
  • 비밀번호는 8자 이상의 문자로 구성되어야 한다
  • 비밀번호는 연속된 4개 이상의 문자를 포함해서는 안 된다

테스트

  • 올바르게 요청하면 204 No Content 상태코드를 반환한다
  • email 속성이 지정되지 않으면 400 Bad Request 상태코드를 반환한다
  • email 속성이 올바른 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다
  • username 속성이 지정되지 않으면 400 Bad Request 상태코드를 반환한다
  • username 속성이 올바른 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다
  • username 속성이 올바른 형식을 따르면 204 No Content 상태코드를 반환한다
  • password 속성이 지정되지 않으면 400 Bad Request 상태코드를 반환한다
  • password 속성이 올바른 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다
  • email 속성에 이미 존재하는 이메일 주소가 지정되면 400 Bad Request 상태코드를 반환한다
  • username 속성에 이미 존재하는 사용자이름이 지정되면 400 Bad Request 상태코드를 반환한다
  • 비밀번호를 올바르게 암호화한다
  • contactEmail 속성이 올바르게 지정되지 않으면 400 Bad Request 상태코드를 반환한다

판매자 접근 토큰 발행

요청

  • 메서드: POST
  • 경로: /seller/issueToken
  • 본문
    IssueSellerToken {
     email: string,
     password: string
    }
    
  • curl 명령 예시
    curl -i -X POST 'http://localhost:8080/seller/issueToken' \
    -H 'Content-Type: application/json' \
    -d '{
     "email": "seller1@example.com",
     "password": "seller1-password"
    }'

성공 응답

  • 상태코드: 200 OK

    본문

    AccessTokenCarrier {
     accessToken: string
    }
    

테스트

  • 올바르게 요청하면 200 OK 상태코드를 반환한다
  • 올바르게 요청하면 접근 토큰을 반환한다
  • 접근 토큰은 JWT 형식을 따른다
  • 존재하지 않는 이메일 주소가 사용되면 400 Bad Request 상태코드를 반환한다
  • 잘못된 비밀번호가 사용되면 400 Bad Request 상태코드를 반환한다

구매자 회원 가입

요청

  • 메서드: POST
  • 경로: /shopper/signUp
  • 본문
    CreateShopperCommand {
     email: string,
     username: string,
     password: string
    }
    
  • curl 명령 예시
    curl -i -X POST 'http://localhost:8080/shopper/signUp' \
    -H 'Content-Type: application/json' \
    -d '{
     "email": "shopper1@example.com",
     "username": "shopper1",
     "password": "shopper1-password"
    }'

성공 응답

  • 상태코드: 204 No Content

정책

  • 이메일 주소는 유일해야 한다
  • 사용자이름은 유일해야 한다
  • 사용자이름은 3자 이상의 영문자, 숫자, 하이픈, 밑줄 문자로 구성되어야 한다
  • 비밀번호는 8자 이상의 문자로 구성되어야 한다
  • 비밀번호는 연속된 4개 이상의 문자를 포함해서는 안 된다

테스트

  • 올바르게 요청하면 204 No Content 상태코드를 반환한다
  • email 속성이 지정되지 않으면 400 Bad Request 상태코드를 반환한다
  • email 속성이 올바른 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다
  • username 속성이 지정되지 않으면 400 Bad Request 상태코드를 반환한다
  • username 속성이 올바른 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다
  • username 속성이 올바른 형식을 따르면 204 No Content 상태코드를 반환한다
  • password 속성이 지정되지 않으면 400 Bad Request 상태코드를 반환한다
  • password 속성이 올바른 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다
  • email 속성에 이미 존재하는 이메일 주소가 지정되면 400 Bad Request 상태코드를 반환한다
  • username 속성이 이미 존재하는 사용자이름이 지정되면 400 Bad Request 상태코드를 반환한다
  • 비밀번호를 올바르게 암호화한다

구매자 접근 토큰 발행

요청

  • 메서드: POST
  • 경로: /shopper/issueToken
  • 본문
    IssueShopperToken {
     email: string,
     password: string
    }
    
  • curl 명령 예시
    curl -i -X POST 'http://localhost:8080/shopper/issueToken' \
    -H 'Content-Type: application/json' \
    -d '{
     "email": "shopper1@example.com",
     "password": "shopper1-password"
    }'

성공 응답

  • 상태코드: 200 OK
  • 본문
    AccessTokenCarrier {
     accessToken: string
    }
    

테스트

  • 올바르게 요청하면 200 OK 상태코드와 접근 토큰을 반환한다
  • 접근 토큰은 JWT 형식을 따른다
  • 존재하지 않는 이메일 주소가 사용되면 400 Bad Request 상태코드를 반환한다
  • 잘못된 비밀번호가 사용되면 400 Bad Request 상태코드를 반환한다

판매자 정보 조회

요청

  • 메서드: GET
  • 경로: /seller/me
  • 헤더
    Authorization: Bearer {accessToken}
    
  • curl 명령 예시
    curl -i -X GET 'http://localhost:8080/seller/me' \
    -H 'Authorization: Bearer {accessToken}'

성공 응답

  • 상태코드: 200 OK
  • 본문
    SellerMeView {
     id: string(UUID),
     email: string,
     username: string,
     contactEmail: string
    }
    

테스트

  • 올바르게 요청하면 200 OK 상태코드를 반환한다
  • 접근 토큰을 사용하지 않으면 401 Unauthorized 상태코드를 반환한다
  • 서로 다른 판매자의 식별자는 서로 다르다
  • 같은 판매자의 식별자는 항상 같다
  • 판매자의 기본 정보가 올바르게 설정된다
  • 문의 이메일 주소를 올바르게 설정한다

구매자 정보 조회

요청

  • 메서드: GET
  • 경로: /shopper/me
  • 헤더
    Authorization: Bearer {accessToken}
    
  • curl 명령 예시
    curl -i -X GET 'http://localhost:8080/shopper/me' \
    -H 'Authorization: Bearer {accessToken}'

성공 응답

  • 상태코드: 200 OK
  • 본문
    ShopperMeView {
     id: string(UUID),
     email: string,
     username: string
    }
    

테스트

  • 올바르게 요청하면 200 OK 상태코드를 반환한다
  • 접근 토큰을 사용하지 않으면 401 Unauthorized 상태코드를 반환한다
  • 서로 다른 구매자의 식별자는 서로 다르다
  • 같은 구매자의 식별자는 항상 같다
  • 구매자의 기본 정보가 올바르게 설정된다

판매자 상품 등록

요청

  • 메서드: POST
  • 경로: /seller/products
  • 헤더
    Authorization: Bearer {accessToken}
    
  • 본문
    RegisterProductCommand {
     name: string,
     imageUri: string,
     description: string,
     priceAmount: number,
     stockQuantity: number
    }
    
  • curl 명령 예시
    curl -i -X POST 'http://localhost:8080/seller/products' \
    -H 'Authorization: Bearer {accessToken}' \
    -H 'Content-Type: application/json' \
    -d '{
     "name": "Product 1",
     "imageUri": "http://example.com/product1.jpg",
     "description": "Product 1 description",
     "priceAmount": 1000,
     "stockQuantity": 10
    }'

성공 응답

  • 상태코드: 201 Created
  • 헤더
    Location: /seller/products/{id}
    

테스트

  • 올바르게 요청하면 201 Created 상태코드를 반환한다
  • 판매자가 아닌 사용자의 접근 토큰을 사용하면 403 Forbidden 상태코드를 반환한다
  • imageUri 속성이 URI 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다
  • 올바르게 요청하면 등록된 상품 정보에 접근하는 Location 헤더를 반환한다

판매자 상품 조회

요청

  • 메서드: GET
  • 경로: /seller/products/{id}
  • 헤더
    Authorization: Bearer {accessToken}
    
  • curl 명령 예시
    curl -i -X GET 'http://localhost:8080/seller/products/{id}' \
    -H 'Authorization: Bearer {accessToken}'

성공 응답

  • 상태코드: 200 OK
  • 본문
    SellerProductView {
     id: string(UUID),
     name: string,
     imageUri: string,
     description: string,
     priceAmount: number,
     stockQuantity: number,
     registeredTimeUtc: string(YYYY-MM-DDThh:mm:ss.sss)
    }
    

테스트

  • 올바르게 요청하면 200 OK 상태코드를 반환한다
  • 판매자가 아닌 사용자의 접근 토큰을 사용하면 403 Forbidden 상태코드를 반환한다
  • 존재하지 않는 상품 식별자를 사용하면 404 Not Found 상태코드를 반환한다
  • 다른 판매자가 등록한 상품 식별자를 사용하면 404 Not Found 상태코드를 반환한다
  • 상품 식별자를 올바르게 반환한다
  • 상품 정보를 올바르게 반환한다
  • 상품 등록 시각을 올바르게 반환한다

판매자 상품 목록 조회

요청

  • 메서드: GET
  • 경로: /seller/products
  • 헤더
    Authorization: Bearer {accessToken}
    
  • curl 명령 예시
    curl -i -X GET 'http://localhost:8080/seller/products' \
    -H 'Authorization: Bearer {accessToken}'

성공 응답

  • 상태코드: 200 OK
  • 본문
    ArrayCarrier<SellerProductView> {
     items: [
     SellerProductView {
     id: string(UUID),
     name: string,
     imageUri: string,
     description: string,
     priceAmount: number,
     stockQuantity: number,
     registeredTimeUtc: string(YYYY-MM-DDThh:mm:ss.sss)
     }
     ]
    }
    

정책

  • 상품 목록은 등록 시점 역순으로 정렬되어야 한다

테스트

  • 올바르게 요청하면 200 OK 상태코드를 반환한다
  • 판매자가 등록한 모든 상품을 반환한다
  • 다른 판매자가 등록한 상품이 포함되지 않는다
  • 상품 정보를 올바르게 반환한다
  • 상품 등록 시각을 올바르게 반환한다
  • 상품 목록을 등록 시점 역순으로 정렬한다

구매자 상품 탐색

요청

  • 메서드: GET
  • 경로: /shopper/products
  • 쿼리 매개변수
    continuationToken: string?
    
  • 헤더
    Authorization: Bearer {accessToken}
    
  • curl 명령 예시
    curl -i -X GET 'http://localhost:8080/shopper/products?continuationToken={continuationToken}' \
    -H 'Authorization: Bearer {accessToken}'

성공 응답

  • 상태코드: 200 OK
  • 본문
    PageCarrier<ProductView> {
     items: [
     ProductView {
     id: string(UUID),
     seller: SellerView {
     id: string(UUID),
     username: string,
     contactEmail: string
     },
     name: string,
     imageUri: string,
     description: string,
     priceAmount: number,
     stockQuantity: number
     }
     ],
     continuationToken: string
    }
    

정책

  • 상품 목록은 등록 시점 역순으로 정렬되어야 한다
  • 한 페이지는 최대 10개의 상품을 포함한다

테스트

  • 올바르게 요청하면 200 OK 상태코드를 반환한다
  • 판매자 접근 토큰을 사용하면 403 Forbidden 상태코드를 반환한다
  • 첫 번째 페이지의 상품을 반환한다
  • 상품 목록을 등록 시점 역순으로 정렬한다
  • 상품 정보를 올바르게 반환한다
  • 판매자 정보를 올바르게 반환한다
  • 두 번째 페이지를 올바르게 반환한다
  • 마지막 페이지를 올바르게 반환한다
  • continuationToken 매개변수에 빈 문자열이 지정되면 첫 번째 페이지를 반환한다
  • 문의 이메일 주소를 올바르게 설정한다

판매자 문의 이메일 주소 변경

요청

  • 메서드: POST
  • 경로: /seller/changeContactEmail
  • 헤더
    Authorization: Bearer {accessToken}
    
  • 본문
    ChangeContactEmailCommand {
     contactEmail: string
    }
    
  • curl 명령 예시
    curl -i -X POST 'http://localhost:8080/seller/changeContactEmail' \
    -H 'Authorization: Bearer {accessToken}' \
    -H 'Content-Type: application/json' \
    -d '{
     "contactEmail": "contact2@example.com"
    }'

성공 응답

  • 상태코드: 204 No Content

테스트

  • 올바르게 요청하면 204 No Content 상태코드를 반환한다
  • contactEmail 속성이 올바르게 지정되지 않으면 400 Bad Request 상태코드를 반환한다
  • 문의 이메일 주소를 올바르게 변경한다

About

"Spring Boot TDD - 입문부터 실전까지 정확하게" 인프런 강의의 실습 코드 저장소입니다.

Resources

License

Stars

Watchers

Forks

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /