Skip to content

Commit

Permalink
Merge pull request #338 from boostcampwm-2021/test/StationViewModelTests
Browse files Browse the repository at this point in the history
[테스트] StationViewModel 테스트
  • Loading branch information
Modyhoon authored Dec 2, 2021
2 parents 6990426 + 36dedb0 commit bab9d43
Show file tree
Hide file tree
Showing 5 changed files with 839 additions and 32 deletions.
48 changes: 46 additions & 2 deletions BBus/BBus.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,27 @@
4A1A22DB27326FD100476861 /* HomeNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A1A22DA27326FD100476861 /* HomeNavigationView.swift */; };
4A1A22DD2732801700476861 /* StationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A1A22DC2732801700476861 /* StationCoordinator.swift */; };
4A1A22E12732CE7900476861 /* SearchResultCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A1A22E02732CE7900476861 /* SearchResultCollectionViewCell.swift */; };
4A2634AC27566F8600267B47 /* StationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA5216272FCE8E00EC0531 /* StationViewModel.swift */; };
4A2634AF275670A500267B47 /* BaseUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A5100322754CDB100754B36 /* BaseUseCase.swift */; };
4A2634B0275670BE00267B47 /* StationByUidItemDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049375B8273BE2640061ACDA /* StationByUidItemDTO.swift */; };
4A2634B1275670C500267B47 /* FavoriteItemDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A06AEC7274159D10027222D /* FavoriteItemDTO.swift */; };
4A2634B2275670CB00267B47 /* BusRouteDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049375AA273B9F330061ACDA /* BusRouteDTO.swift */; };
4A2634B3275670D100267B47 /* StationDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049375AE273BAA130061ACDA /* StationDTO.swift */; };
4A2634B62756754E00267B47 /* BusSectionKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACC26B3274F669800173A32 /* BusSectionKeys.swift */; };
4A2634B72756755700267B47 /* BBusRouteType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 047C30FD273A05A60075EA14 /* BBusRouteType.swift */; };
4A2634B82756756200267B47 /* BusArriveInfos.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACC26B7274F6BD300173A32 /* BusArriveInfos.swift */; };
4A2634B92756757400267B47 /* NotificationNameExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A06AEE82743DAB20027222D /* NotificationNameExtension.swift */; };
4A2634BA2756757F00267B47 /* PublisherExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A38E20827464015003A9D10 /* PublisherExtension.swift */; };
4A2634BB2756758C00267B47 /* BusCongestion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA5212272FCE8500EC0531 /* BusCongestion.swift */; };
4A2634BC2756759700267B47 /* AlarmSettingBusArriveInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ACA521E272FCEAA00EC0531 /* AlarmSettingBusArriveInfo.swift */; };
4A2634BD275675A800267B47 /* BBusAPIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A38E20627463FF7003A9D10 /* BBusAPIError.swift */; };
4A2634BE275675C400267B47 /* BusRemainTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A094CDE27435C5900428F55 /* BusRemainTime.swift */; };
4A2634BF275675CD00267B47 /* BusPosByVehicleIdDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ADB29BA274B6C8300554A4E /* BusPosByVehicleIdDTO.swift */; };
4A2634C12756862F00267B47 /* StationAPIUsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04468430275676ED007E440A /* StationAPIUsable.swift */; };
4A2634C22756863600267B47 /* StationCalculatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04468432275676F8007E440A /* StationCalculatable.swift */; };
4A2634C32756864A00267B47 /* JsonDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0446843C275679B9007E440A /* JsonDTO.swift */; };
4A2634C427568CB900267B47 /* StationCalculateUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04DC47FA27552FE5003380D9 /* StationCalculateUseCase.swift */; };
4A2634C5275693BC00267B47 /* DummyJsonStringStationByUidItemDTO.json in Resources */ = {isa = PBXBuildFile; fileRef = 4A2634C027567E5400267B47 /* DummyJsonStringStationByUidItemDTO.json */; };
4A38E20727463FF7003A9D10 /* BBusAPIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A38E20627463FF7003A9D10 /* BBusAPIError.swift */; };
4A38E20927464015003A9D10 /* PublisherExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A38E20827464015003A9D10 /* PublisherExtension.swift */; };
4A3B6C502755DF2400BBC498 /* AlarmCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A3B6C4F2755DF2400BBC498 /* AlarmCenter.swift */; };
Expand Down Expand Up @@ -369,6 +390,7 @@
4A1A22DA27326FD100476861 /* HomeNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeNavigationView.swift; sourceTree = "<group>"; };
4A1A22DC2732801700476861 /* StationCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StationCoordinator.swift; sourceTree = "<group>"; };
4A1A22E02732CE7900476861 /* SearchResultCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultCollectionViewCell.swift; sourceTree = "<group>"; };
4A2634C027567E5400267B47 /* DummyJsonStringStationByUidItemDTO.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = DummyJsonStringStationByUidItemDTO.json; sourceTree = "<group>"; };
4A38E20627463FF7003A9D10 /* BBusAPIError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBusAPIError.swift; sourceTree = "<group>"; };
4A38E20827464015003A9D10 /* PublisherExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublisherExtension.swift; sourceTree = "<group>"; };
4A3B6C4F2755DF2400BBC498 /* AlarmCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmCenter.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1171,6 +1193,7 @@
isa = PBXGroup;
children = (
4AF1E0B52756269600DE51C8 /* StationViewModelTests.swift */,
4A2634C027567E5400267B47 /* DummyJsonStringStationByUidItemDTO.json */,
);
path = StationViewModelTests;
sourceTree = "<group>";
Expand Down Expand Up @@ -1684,6 +1707,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4A2634C5275693BC00267B47 /* DummyJsonStringStationByUidItemDTO.json in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1790,7 +1814,27 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4A2634BB2756758C00267B47 /* BusCongestion.swift in Sources */,
4A2634B0275670BE00267B47 /* StationByUidItemDTO.swift in Sources */,
4A2634AF275670A500267B47 /* BaseUseCase.swift in Sources */,
4A2634C22756863600267B47 /* StationCalculatable.swift in Sources */,
4A2634BC2756759700267B47 /* AlarmSettingBusArriveInfo.swift in Sources */,
4A2634B1275670C500267B47 /* FavoriteItemDTO.swift in Sources */,
4A2634B3275670D100267B47 /* StationDTO.swift in Sources */,
4A2634BA2756757F00267B47 /* PublisherExtension.swift in Sources */,
4A2634BE275675C400267B47 /* BusRemainTime.swift in Sources */,
4A2634BF275675CD00267B47 /* BusPosByVehicleIdDTO.swift in Sources */,
4A2634C12756862F00267B47 /* StationAPIUsable.swift in Sources */,
4A2634B62756754E00267B47 /* BusSectionKeys.swift in Sources */,
4A2634BD275675A800267B47 /* BBusAPIError.swift in Sources */,
4A2634C32756864A00267B47 /* JsonDTO.swift in Sources */,
4AF1E0B62756269600DE51C8 /* StationViewModelTests.swift in Sources */,
4A2634B72756755700267B47 /* BBusRouteType.swift in Sources */,
4A2634B92756757400267B47 /* NotificationNameExtension.swift in Sources */,
4A2634B82756756200267B47 /* BusArriveInfos.swift in Sources */,
4A2634C427568CB900267B47 /* StationCalculateUseCase.swift in Sources */,
4A2634B2275670CB00267B47 /* BusRouteDTO.swift in Sources */,
4A2634AC27566F8600267B47 /* StationViewModel.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -2443,7 +2487,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = B3PWYBKFUK;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand All @@ -2467,7 +2511,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = B3PWYBKFUK;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand Down
41 changes: 20 additions & 21 deletions BBus/BBus/Foreground/Station/ViewModel/StationViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import Foundation
import Combine
import UIKit

final class StationViewModel {

Expand All @@ -30,7 +29,10 @@ final class StationViewModel {
self.calculateUseCase = calculateUseCase
self.arsId = arsId
self.busRouteList = []
self.stationInfo = nil
self.busKeys = BusSectionKeys()
self.favoriteItems = nil
self.nextStation = nil
self.activeBuses = [:]
self.inActiveBuses = [:]
self.cancellables = []
Expand All @@ -55,14 +57,12 @@ final class StationViewModel {
self?.error = error
})
.combineLatest(self.$busRouteList.filter { !$0.isEmpty }) { (busRouteList, entireBusRouteList) in
busRouteList.filter { busRoute in
return busRouteList.filter { busRoute in
entireBusRouteList.contains{ $0.routeID == busRoute.busRouteId }
}
}
.sink(receiveCompletion: { error in
print(error)
}, receiveValue: { [weak self] arriveInfo in
self?.nextStation = arriveInfo[0].nextStation
.sink(receiveValue: { [weak self] arriveInfo in
self?.nextStation = arriveInfo.first?.nextStation
self?.classifyByRouteType(with: arriveInfo)
})
.store(in: &self.cancellables)
Expand All @@ -75,29 +75,27 @@ final class StationViewModel {
}

private func bind() {
self.bindLoader()
self.bindStationInfo(with: self.arsId)
self.bindBusRouteList()
self.bindLoader()
self.bindFavoriteItems()
}

private func bindStationInfo(with arsId: String) {
self.apiUseCase.loadStationList()
.tryMap({ [weak self] stations in
.map({ [weak self] stations in
return self?.calculateUseCase.findStation(in: stations, with: arsId)
})
.tryMap({ stationInfo in
guard let stationInfo = stationInfo else {
throw BBusAPIError.invalidStationError
}
return stationInfo
})
.catchError({ [weak self] error in
self?.error = error
})
.sink { [weak self] stationInfo in
if let stationInfo = stationInfo {
self?.stationInfo = stationInfo
}
else {
self?.error = BBusAPIError.invalidStationError
}
}
.store(in: &self.cancellables)
.assign(to: &self.$stationInfo)
}

private func bindBusRouteList() {
Expand All @@ -114,10 +112,10 @@ final class StationViewModel {
.catchError({ [weak self] error in
self?.error = error
})
.sink(receiveValue: { [weak self] items in
self?.favoriteItems = items.filter() { $0.arsId == self?.arsId }
.map({ [weak self] items -> [FavoriteItemDTO] in
return items.filter({ $0.arsId == self?.arsId })
})
.store(in: &self.cancellables)
.assign(to: &self.$favoriteItems)
}

private func classifyByRouteType(with buses: [StationByUidItemDTO]) {
Expand Down Expand Up @@ -200,7 +198,8 @@ final class StationViewModel {
}

private func bindLoader() {
self.$busKeys.zip(self.$favoriteItems, self.$stationInfo)
self.$busKeys
.zip(self.$favoriteItems, self.$stationInfo)
.output(at: 1)
.sink(receiveValue: { [weak self] _ in
self?.stopLoader = true
Expand Down
1 change: 0 additions & 1 deletion BBus/BBus/Global/Network/Fetcher/ServiceFetchable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ extension ServiceFetchable {
guard let key = try? self.tokenManager.randomAccessKey() else { return BBusAPIError.noMoreAccessKeyError.publisher }
guard let request =
self.requestFactory.request(url: url, accessKey: key.key, params: param) else { return NetworkError.urlError.publisher }

return networkService.get(request: request, params: param)
.mapJsonBBusAPIError {
self.tokenManager.removeAccessKey(at: key.index)
Expand Down
Loading

0 comments on commit bab9d43

Please sign in to comment.