Skip to content

Commit

Permalink
test: refresh 성공 테스트 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
sujeong000 committed Dec 1, 2021
1 parent 0a8063d commit 3dbe821
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 7 deletions.
78 changes: 72 additions & 6 deletions BBus/AlarmSettingViewModelTests/AlarmSettingViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,53 @@ import Combine

class AlarmSettingViewModelTests: XCTestCase {
enum MOCKMode {
case success
case success, failure
}

enum TestError: Error {
case fail, jsonError
}

class MOCKSearchAPIUseCase: AlarmSettingAPIUsable {
class MOCKAlarmSettingAPIUseCase: AlarmSettingAPIUsable {
var mode: MOCKMode
var arrInfoByRouteDTO: ArrInfoByRouteDTO

init(mode: MOCKMode) {
init(mode: MOCKMode, arrInfoByRouteDTO: ArrInfoByRouteDTO) {
self.mode = mode
self.arrInfoByRouteDTO = arrInfoByRouteDTO
}

func busArriveInfoWillLoaded(stId: String, busRouteId: String, ord: String) -> AnyPublisher<ArrInfoByRouteDTO, Error> {
return Fail(error: TestError.fail).eraseToAnyPublisher()
switch mode {
case .success:
return Just(self.arrInfoByRouteDTO)
.setFailureType(to: Error.self)
.eraseToAnyPublisher()
case .failure:
return Fail(error: TestError.fail).eraseToAnyPublisher()
}

}

func busStationsInfoWillLoaded(busRouetId: String, arsId: String) -> AnyPublisher<[StationByRouteListDTO]?, Error> {
return Fail(error: TestError.fail).eraseToAnyPublisher()
return Just([])
.setFailureType(to: Error.self)
.eraseToAnyPublisher()
}
}

private var cancellables: Set<AnyCancellable>!
private var arrInfoByRouteDTO: ArrInfoByRouteDTO!
private let firstArriveInfo = AlarmSettingBusArriveInfo(busArriveRemainTime: "곧 도착",
congestion: 3,
currentStation: "모두의학교.금천문화예술정보학교",
plainNumber: "서울71사1535",
vehicleId: 117020066)
private let secondArriveInfo = AlarmSettingBusArriveInfo(busArriveRemainTime: "7분9초후[3번째 전]",
congestion: 4,
currentStation: "호림박물관",
plainNumber: "서울71사1519",
vehicleId: 117020207)

override func setUpWithError() throws {
guard let url = Bundle.init(identifier: "com.boostcamp.ios-009.AlarmSettingViewModelTests")?
Expand All @@ -53,7 +75,51 @@ class AlarmSettingViewModelTests: XCTestCase {
super.tearDown()
}

func test_bindBusArriveInfo_성공() {
func test_refresh_성공() {
let MOCCKAlarmSettingUseCase = MOCKAlarmSettingAPIUseCase(mode: .success, arrInfoByRouteDTO: self.arrInfoByRouteDTO)
let alarmSettingVieWModel = AlarmSettingViewModel(apiUseCase: MOCCKAlarmSettingUseCase,
calculateUseCase: AlarmSettingCalculateUseCase(),
stationId: 1,
busRouteId: 1,
stationOrd: 1,
arsId: "11111",
routeType: RouteType.mainLine,
busName: "11")
let expectation = expectation(description: "AlarmSettingViewModel에 busArriveInfos가 저장되는지 확인")
let expectedFirstArriveInfo = self.firstArriveInfo
let expectedSecondArriveInfo = self.secondArriveInfo
let expectedResult = AlarmSettingBusArriveInfos(arriveInfos: [expectedFirstArriveInfo, expectedSecondArriveInfo], changedByTimer: false)

alarmSettingVieWModel.$busArriveInfos
.receive(on: DispatchQueue.global())
.filter { $0.count != 0 }
.sink { busArriveInfos in
let firstArriveInfo = busArriveInfos.arriveInfos[0]
let secondArriveInfo = busArriveInfos.arriveInfos[1]

XCTAssertEqual(busArriveInfos.count, expectedResult.count)
XCTAssertEqual(firstArriveInfo.congestion, expectedFirstArriveInfo.congestion)
XCTAssertEqual(firstArriveInfo.arriveRemainTime?.message, expectedFirstArriveInfo.arriveRemainTime?.message)
XCTAssertEqual(firstArriveInfo.arriveRemainTime?.seconds, expectedFirstArriveInfo.arriveRemainTime?.seconds)
XCTAssertEqual(firstArriveInfo.currentStation, expectedFirstArriveInfo.currentStation)
XCTAssertEqual(firstArriveInfo.estimatedArrivalTime, expectedFirstArriveInfo.estimatedArrivalTime)
XCTAssertEqual(firstArriveInfo.relativePosition, expectedFirstArriveInfo.relativePosition)
XCTAssertEqual(firstArriveInfo.vehicleId, expectedFirstArriveInfo.vehicleId)
XCTAssertEqual(firstArriveInfo.plainNumber, expectedFirstArriveInfo.plainNumber)
XCTAssertEqual(secondArriveInfo.congestion, expectedSecondArriveInfo.congestion)
XCTAssertEqual(secondArriveInfo.arriveRemainTime?.message, expectedSecondArriveInfo.arriveRemainTime?.message)
XCTAssertEqual(secondArriveInfo.arriveRemainTime?.seconds, expectedSecondArriveInfo.arriveRemainTime?.seconds)
XCTAssertEqual(secondArriveInfo.currentStation, expectedSecondArriveInfo.currentStation)
XCTAssertEqual(secondArriveInfo.estimatedArrivalTime, expectedSecondArriveInfo.estimatedArrivalTime)
XCTAssertEqual(secondArriveInfo.relativePosition, expectedSecondArriveInfo.relativePosition)
XCTAssertEqual(secondArriveInfo.vehicleId, expectedSecondArriveInfo.vehicleId)
XCTAssertEqual(secondArriveInfo.plainNumber, expectedSecondArriveInfo.plainNumber)
XCTAssertFalse(busArriveInfos.changedByTimer)

expectation.fulfill()
}
.store(in: &self.cancellables)

waitForExpectations(timeout: 10)
}
}
24 changes: 24 additions & 0 deletions BBus/BBus.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,18 @@
04DEBDEF27572E8800B53D5F /* StationByRouteListDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049375B4273BB98E0061ACDA /* StationByRouteListDTO.swift */; };
04DEBDF027572E8D00B53D5F /* JsonDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0446843C275679B9007E440A /* JsonDTO.swift */; };
04DEBDF22757311F00B53D5F /* MOCKArrInfo.json in Resources */ = {isa = PBXBuildFile; fileRef = 04DEBDF12757311F00B53D5F /* MOCKArrInfo.json */; };
04DEBDF32757353800B53D5F /* AlarmSettingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA5222272FCEB500EC0531 /* AlarmSettingViewModel.swift */; };
04DEBDF42757355D00B53D5F /* BusRouteDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049375AA273B9F330061ACDA /* BusRouteDTO.swift */; };
04DEBDF5275735D900B53D5F /* AlarmSettingCalculateUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 875F1AB12755BE08003F5BB1 /* AlarmSettingCalculateUseCase.swift */; };
04DEBDF62757364D00B53D5F /* AlarmSettingCalculatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0446843627567777007E440A /* AlarmSettingCalculatable.swift */; };
04DEBDF72757365C00B53D5F /* AverageSectionTimeCalculatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 875F1AAF2755BD86003F5BB1 /* AverageSectionTimeCalculatable.swift */; };
04DEBDF82757366C00B53D5F /* AlarmSettingBusArriveInfos.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0484107527464D49006F8636 /* AlarmSettingBusArriveInfos.swift */; };
04DEBDF9275736AB00B53D5F /* NotificationNameExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A06AEE82743DAB20027222D /* NotificationNameExtension.swift */; };
04DEBDFA275736B500B53D5F /* PublisherExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A38E20827464015003A9D10 /* PublisherExtension.swift */; };
04DEBDFB275736C200B53D5F /* AlarmSettingBusArriveInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA521E272FCEAA00EC0531 /* AlarmSettingBusArriveInfo.swift */; };
04DEBDFC275736D700B53D5F /* BusRemainTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A094CDE27435C5900428F55 /* BusRemainTime.swift */; };
04DEBDFD275736DE00B53D5F /* BusCongestion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA5212272FCE8500EC0531 /* BusCongestion.swift */; };
04DEBDFE275736EE00B53D5F /* BBusAPIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A38E20627463FF7003A9D10 /* BBusAPIError.swift */; };
4A04682427327876008D87CE /* BusRouteCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A04682327327876008D87CE /* BusRouteCoordinator.swift */; };
4A04682627327BA0008D87CE /* AlarmSettingCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A04682527327BA0008D87CE /* AlarmSettingCoordinator.swift */; };
4A04682A2732B7B3008D87CE /* SearchNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0468292732B7B3008D87CE /* SearchNavigationView.swift */; };
Expand Down Expand Up @@ -1759,11 +1771,23 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
04DEBDF82757366C00B53D5F /* AlarmSettingBusArriveInfos.swift in Sources */,
04DEBDF72757365C00B53D5F /* AverageSectionTimeCalculatable.swift in Sources */,
04DEBDEE27572E8400B53D5F /* BaseUseCase.swift in Sources */,
04DEBDFC275736D700B53D5F /* BusRemainTime.swift in Sources */,
04DEBDF027572E8D00B53D5F /* JsonDTO.swift in Sources */,
04DEBDF32757353800B53D5F /* AlarmSettingViewModel.swift in Sources */,
4AF1E0D0275626A700DE51C8 /* AlarmSettingViewModelTests.swift in Sources */,
04DEBDFA275736B500B53D5F /* PublisherExtension.swift in Sources */,
04DEBDF42757355D00B53D5F /* BusRouteDTO.swift in Sources */,
04DEBDEC27572E4700B53D5F /* AlarmSettingAPIUsable.swift in Sources */,
04DEBDFD275736DE00B53D5F /* BusCongestion.swift in Sources */,
04DEBDF5275735D900B53D5F /* AlarmSettingCalculateUseCase.swift in Sources */,
04DEBDF9275736AB00B53D5F /* NotificationNameExtension.swift in Sources */,
04DEBDF62757364D00B53D5F /* AlarmSettingCalculatable.swift in Sources */,
04DEBDED27572E6400B53D5F /* ArrInfoByRouteDTO.swift in Sources */,
04DEBDFE275736EE00B53D5F /* BBusAPIError.swift in Sources */,
04DEBDFB275736C200B53D5F /* AlarmSettingBusArriveInfo.swift in Sources */,
04DEBDEF27572E8800B53D5F /* StationByRouteListDTO.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ final class AlarmSettingViewModel {
private var cancellables: Set<AnyCancellable>
private var observer: NSObjectProtocol?

init(apiUseCase: AlarmSettingAPIUseCase, calculateUseCase: AlarmSettingCalculateUseCase, stationId: Int, busRouteId: Int, stationOrd: Int, arsId: String, routeType: RouteType?, busName: String) {
init(apiUseCase: AlarmSettingAPIUsable, calculateUseCase: AlarmSettingCalculatable, stationId: Int, busRouteId: Int, stationOrd: Int, arsId: String, routeType: RouteType?, busName: String) {
self.apiUseCase = apiUseCase
self.calculateUseCase = calculateUseCase
self.stationId = stationId
Expand Down

0 comments on commit 3dbe821

Please sign in to comment.