Post, Poll, PollOption의 CRUD API 테스트를 어떻게 진행해야 하는지,
특히 의존 관계가 있을 때 어떤 순서로 해야 하는지 궁금했습니다.
1. Post, Poll, PollOption 관계 설명:
- Post: 게시글에 해당하는 엔티티로, 여러 개의 Poll을 가질 수 있습니다.
- Poll: 하나의 설문조사(투표)를 나타내는 엔티티로, 하나의 Post에 속합니다. Poll은 여러 개의 PollOption을 가질 수 있습니다.
- PollOption: 설문조사에서 선택할 수 있는 옵션을 나타내며, 하나의 Poll에 속합니다.
관계 구성:
- Post - Poll:
- 관계: 1(Post는 여러 Poll을 가질 수 있음)
- Post는 여러 Poll을 포함하며, 각 Poll은 하나의 Post에 속합니다.
- 이 관계는 Post가 부모, Poll이 자식 엔티티로 표현됩니다.
- Poll - PollOption:
- 관계: 1(Poll은 여러 PollOption을 가질 수 있음)
- Poll은 여러 PollOption을 포함하며, 각 PollOption은 하나의 Poll에 속합니다.
- 이 관계에서 Poll이 부모, PollOption이 자식 엔티티입니다.
2. API CRUD 테스트 순서
엔티티 간의 종속성(의존 관계) 때문에, 하위 엔티티를 생성하기 전에 상위 엔티티가 먼저 존재해야 합니다. 따라서 테스트는 다음 순서로 진행합니다:
2.1 순서: Post → Poll → PollOption
Step 1: Post 생성 (POST /api/posts)
Post를 생성하여 데이터베이스에 저장합니다
예시 요청:
json
{
"title": "Sample Post Title",
"pollId": 1,
"fileId": 0,
"isDeleted": false,
"createdBy": "user1"
}
- - **목적**: Post를 먼저 생성하여, 후속되는 Poll이 어느 Post에 속해야 할지 결정합니다.
- **Step 2: Poll 생성 (POST /api/posts/{postId}/polls)**
- 생성된 Post의 ID를 사용하여, 해당 Post에 속하는 Poll을 생성합니다.
예시 요청:
json
{
"title": "Sample Poll Title",
"expiresAt": "2024-09-10T00:00:00",
"isDeleted": false,
"createdBy": "user1"
}
목적: Poll을 생성하여 Post에 속하는 설문조사를 관리합니다.
Step 3: PollOption 생성 (POST /api/posts/{postId}/polls/{pollId}/options)**
생성된 Poll의 ID를 사용하여, 해당 Poll에 속하는 PollOption을 생성합니다.
예시 요청:
json
{
"optionText": "Option 1",
"isDeleted": false,
"createdBy": "user1"
}
목적: 각 Poll에 대한 선택지를 생성하여, 설문조사를 완성합니다
2.각 단계에서의 테스트
생성 후 확인 (GET): 각 엔티티를 생성한 후, 해당 ID로 GET 요청을 하여 데이터가 올바르게 생성되었는지 확인합니다.
업데이트 (PUT): 생성된 엔티티를 업데이트하여 수정된 내용이 반영되는지 테스트합니다.
삭제 (DELETE): 엔티티를 삭제하고, 삭제된 후에는 GET 요청에서 404 Not Found가 반환되는지 확인하여 삭제가 성공적으로 이루어졌는지 검증합니다.
상위 엔티티부터 순서대로 생성하고, 각 단계에서 관련된 하위 엔티티를 연결하여 테스트합니다.
이 순서를 따름으로써, 엔티티 간의 종속성 문제를 피하고, 데이터베이스 상태를 정확하게 유지할 수 있습니다.
관계가 복잡해질수록, 테스트를 철저히 하여 각 엔티티의 CRUD 기능이 올바르게 작동하는지 검증하는 것이 중요합니다.이 구조를 이해하고 테스트를 진행하면, Post, Poll, PollOption 간의 관계와 CRUD 동작을 제대로 확인할 수 있습니다.