Skip to content

Commit 5fa97ff

Browse files
committed
[#234] 사용자 별 제휴업체 정보를 가져오는 라우터 코드, 테스트 코드 작성 완료.
1 parent c647bbc commit 5fa97ff

File tree

4 files changed

+104
-9
lines changed

4 files changed

+104
-9
lines changed

EATSSU/App/Sources/Data/Network/Router/UserDepartmentRouter.swift

+7-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ enum UserDepartmentRouter {
2121

2222
/// 단과대/학부 검증 API 요청
2323
case validateDepartment
24+
25+
/// 사용자 단과대의 제휴업체 요청
26+
case getUserPartnership
2427
}
2528

2629
extension UserDepartmentRouter: TargetType, AccessTokenAuthorizable {
@@ -40,6 +43,8 @@ extension UserDepartmentRouter: TargetType, AccessTokenAuthorizable {
4043
"/users/department"
4144
case .validateDepartment:
4245
"/users/validate/department"
46+
case .getUserPartnership:
47+
"/users/department/partnerships"
4348
}
4449
}
4550

@@ -50,7 +55,7 @@ extension UserDepartmentRouter: TargetType, AccessTokenAuthorizable {
5055
switch self {
5156
case .addDepartment:
5257
.post
53-
case .validateDepartment:
58+
case .validateDepartment, .getUserPartnership:
5459
.get
5560
}
5661
}
@@ -66,7 +71,7 @@ extension UserDepartmentRouter: TargetType, AccessTokenAuthorizable {
6671
]
6772
return .requestParameters(parameters: params, encoding: JSONEncoding.default)
6873

69-
case .validateDepartment:
74+
case .validateDepartment, .getUserPartnership:
7075
return .requestPlain
7176
}
7277
}

EATSSU/App/Sources/Data/Network/ServiceLayer/UserDepartmentService.swift

+29
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,33 @@ final class UserDepartmentService {
8484
}
8585
}
8686
}
87+
88+
/// 사용자 단과대의 제휴업체 목록을 요청합니다.
89+
///
90+
/// - Parameter completion: 요청 완료 후 호출되는 클로저.
91+
/// 성공 시 제휴업체 목록을 반환하고, 실패 시 에러를 반환합니다.
92+
func getUserPartnership(completion: @escaping (Result<[PartnershipResponse], Error>) -> Void) {
93+
provider.request(.getUserPartnership) { result in
94+
switch result {
95+
case let .success(response):
96+
do {
97+
let decodedData = try JSONDecoder().decode(BaseResponse<[PartnershipResponse]>.self, from: response.data)
98+
if decodedData.isSuccess {
99+
completion(.success(decodedData.result))
100+
} else {
101+
let error = NSError(
102+
domain: "UserDepartmentService",
103+
code: -1,
104+
userInfo: [NSLocalizedDescriptionKey: decodedData.message]
105+
)
106+
completion(.failure(error))
107+
}
108+
} catch {
109+
completion(.failure(error))
110+
}
111+
case let .failure(error):
112+
completion(.failure(error))
113+
}
114+
}
115+
}
87116
}

EATSSU/App/Sources/Presentation/Maps/ViewController/MapViewController.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,14 @@ final class MapViewController: BaseViewController {
7474
configureMapView()
7575
configureSegmentedControl()
7676
}
77-
78-
override func viewWillAppear(_ animated: Bool) {
77+
78+
override func viewWillAppear(_: Bool) {
7979
fetchPartnerships()
8080
setInitialSegmentedControlSetting()
8181
}
8282

8383
// MARK: - UI 설정
84-
84+
8585
/**
8686
네비게이션 바 스타일을 설정합니다.
8787

@@ -166,7 +166,7 @@ final class MapViewController: BaseViewController {
166166

167167
view.bringSubviewToFront(mapSegmentedControl)
168168
}
169-
169+
170170
private func setInitialSegmentedControlSetting() {
171171
mapSegmentedControl.selectedSegmentIndex = 0
172172
}

EATSSU/Tests/UnitTests/UserDepartmentRouterNetworkTests.swift

+64-3
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,8 @@ final class UserDepartmentRouterNetworkTests: XCTestCase {
140140

141141
service.validateDepartment { result in
142142
switch result {
143-
case let .success(message):
144-
XCTAssertFalse(message.isEmpty, "응답 메시지가 비어있습니다.")
145-
print("📌 Validation Message: \(message)")
143+
case let .success(isSuccess):
144+
XCTAssertFalse(isSuccess, "응답 메시지가 비어있습니다.")
146145
expectation.fulfill()
147146
case let .failure(error):
148147
XCTFail("부서 검증 실패: \(error.localizedDescription)")
@@ -151,4 +150,66 @@ final class UserDepartmentRouterNetworkTests: XCTestCase {
151150

152151
waitForExpectations(timeout: 5.0, handler: nil)
153152
}
153+
154+
/// 사용자 단과대의 제휴업체 API 테스트 (실제 서버 요청)
155+
func testGetUserPartnershipResponse() {
156+
let expectation = expectation(description: "getUserPartnership")
157+
158+
provider.request(.getUserPartnership) { result in
159+
switch result {
160+
case let .success(response):
161+
// 상태 코드 검증
162+
XCTAssertEqual(response.statusCode, 200, "응답 상태 코드가 200이 아닙니다.")
163+
XCTAssertFalse(response.data.isEmpty, "응답 데이터가 비어있습니다.")
164+
165+
// 토큰 값 출력
166+
if let request = response.request, let headers = request.allHTTPHeaderFields {
167+
if let token = headers["Authorization"] {
168+
print("🔑 Token: \(token)")
169+
} else {
170+
print("❌ Authorization 헤더가 없습니다.")
171+
}
172+
}
173+
174+
do {
175+
let responseString = try response.mapString()
176+
XCTAssertNotNil(responseString, "응답 문자열이 nil입니다.")
177+
178+
if let prettyJSON = JSONPrettyPrinter.prettyPrintedJSONString(from: response.data) {
179+
print("📌 Pretty JSON Response:\n\(prettyJSON)")
180+
} else {
181+
print("⚠️ JSON 포맷 변환 실패")
182+
}
183+
184+
} catch {
185+
XCTFail("응답 매핑 실패: \(error)")
186+
}
187+
188+
expectation.fulfill()
189+
case let .failure(error):
190+
XCTFail("getUserPartnership 요청 실패: \(error)")
191+
}
192+
}
193+
194+
waitForExpectations(timeout: 10.0, handler: nil)
195+
}
196+
197+
/// UserDepartmentService를 사용한 제휴업체 조회 테스트
198+
func testGetUserPartnershipWithService() {
199+
let expectation = expectation(description: "제휴업체 조회 서비스")
200+
let service = UserDepartmentService()
201+
202+
service.getUserPartnership { result in
203+
switch result {
204+
case let .success(partnerships):
205+
XCTAssertNotNil(partnerships, "제휴업체 목록이 nil입니다.")
206+
print("📌 Partnerships count: \(partnerships.count)")
207+
expectation.fulfill()
208+
case let .failure(error):
209+
XCTFail("제휴업체 조회 실패: \(error.localizedDescription)")
210+
}
211+
}
212+
213+
waitForExpectations(timeout: 5.0, handler: nil)
214+
}
154215
}

0 commit comments

Comments
 (0)