Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[최종] 개발 사항 배포 #347

Merged
merged 169 commits into from
Dec 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
169 commits
Select commit Hold shift + click to select a range
d54ec91
refactor: queue 제거, retry 예제 추가, 정거장 화면 로더 및 즐겨찾기 이슈 해결
tmfrlrkvlek Nov 29, 2021
b45ae97
fix: station 즐겨찾기 시점문제 해결
Nov 29, 2021
a9e75db
add: UseCase 작업 전 틀 나누기
Nov 29, 2021
25a20a2
refactor: #298 BusRouteUseCase AnyPublisher 타입반환 리펙토링
minsangKang Nov 29, 2021
c292d24
refactor: #300 반환타입 Publisher로, 프로토콜화, loader 로직 수정
tmfrlrkvlek Nov 29, 2021
6d42a4d
refactor: #299 MovingStatusUseCase AnyPublisher 타입반환 리펙토링
minsangKang Nov 29, 2021
9ac28bc
refactor: #298 protocol 누락 추가
minsangKang Nov 29, 2021
67e0823
refactor: #302 UseCase Publisher 반환하도록 수정, Protocol 채택
Nov 29, 2021
73efd5e
Merge pull request #304 from boostcampwm-2021/issue/#300
Modyhoon Nov 29, 2021
af7ca04
Merge pull request #305 from boostcampwm-2021/issue/#298
Modyhoon Nov 29, 2021
bc27901
Merge pull request #307 from boostcampwm-2021/issue/#299
Modyhoon Nov 29, 2021
35bbfa2
Merge branch 'develop' into issue/#302
Modyhoon Nov 29, 2021
28c90d2
Merge pull request #308 from boostcampwm-2021/issue/#302
Modyhoon Nov 29, 2021
f987c77
rename: #306 StationUseCase -> StatoinAPIUseCase
sujeong000 Nov 29, 2021
90e9cd1
refactor: #297 MovingStatus viewModel -> useCase 로직 이동
minsangKang Nov 29, 2021
010edc1
refactor: #297 NetworkError 처리로직 UseCase -> ViewModel 로 이동
minsangKang Nov 29, 2021
f182f59
refactor: #309 custom refresh button 생성
Nov 29, 2021
8a7a844
refactor: #309 홈 화면 RefreshableView 채택 완료
Nov 29, 2021
207ace2
fix: #297 rebase 오류 해결 (alarmSettingViewModel 메소드 추가)
minsangKang Nov 29, 2021
77686ec
refactor: 왜 있는지 모르겠는 statusBarView 제거.
Nov 29, 2021
ff99b53
refactor: #297 #299 NetworkError 처리 로직 UseCase -> ViewModel 로 이동
minsangKang Nov 29, 2021
836379c
refactor: #303 Service, Persistence 이름 변경, TokenManager, RequestFacto…
tmfrlrkvlek Nov 29, 2021
4f2f39d
refactor: #303 Service, Persistence 프로토콜화, Service, Persistence struc…
tmfrlrkvlek Nov 29, 2021
bd694b7
fix: #303 rebase develop UseCase 명칭 관련 conflict 해결
tmfrlrkvlek Nov 29, 2021
ac36ca1
refactor: #312 BaseViewControllerType 프로토콜 추가
minsangKang Nov 29, 2021
0213fc0
refactor: #306 리턴타입 Publisher로 변경
sujeong000 Nov 29, 2021
75a4488
refactor: #306 Calculate UseCase 추가 및 분리
sujeong000 Nov 29, 2021
9b53188
restyle: #306 noInfoAlert 메세지 수정
sujeong000 Nov 29, 2021
99d5876
refactor: #301 API UseCase 프로토콜화
sujeong000 Nov 29, 2021
1c05cd4
rename: #306 load -> bind
sujeong000 Nov 30, 2021
2b3b9b2
refactor: #306 bindLoad 내 클로저 weak self 처리
sujeong000 Nov 30, 2021
37cfd53
refactor: #300 AlarmSettingViewModel의 useCase 타입을 AlarmSettingAPIUsab…
tmfrlrkvlek Nov 30, 2021
72988da
fix: #306 bindLoader 로직 수정
sujeong000 Nov 30, 2021
85c7919
restyle: #303 UseCase protocol 네이밍 Usable로 변경
tmfrlrkvlek Nov 30, 2021
3d164c2
refactor: #303 TokenManager 의존성 주입 해결
tmfrlrkvlek Nov 30, 2021
b98c346
refactor: #309 RefreshableView 의 configureLayout을 override하여 새로고침 버튼을 맨뒤
Nov 30, 2021
4787189
add: #309 NavigatableView 생성
Nov 30, 2021
2cf37cf
refactor: #297, #300 AverageSectionTimeCalculatable 프로토콜 생성, 채택 구조로 변경
minsangKang Nov 30, 2021
421d44a
refactor: #301 Calculate UseCase 생성 및 분리
sujeong000 Nov 30, 2021
0257f85
refactor: #312 HomeViewController 프로토콜 채택 리펙토링
minsangKang Nov 30, 2021
bd7a59b
add: statusBarView 다시 추가, Layout 설정 함수 따로 뺌
Nov 30, 2021
54b64d0
refactor: #306 변수 선언 순서 가독성있게 수정
sujeong000 Nov 30, 2021
d3eed37
Merge pull request #311 from boostcampwm-2021/issue/#297
minsangKang Nov 30, 2021
88ee19e
Merge branch 'develop' into issue/#300
minsangKang Nov 30, 2021
851c2a7
Merge pull request #313 from boostcampwm-2021/issue/#300
minsangKang Nov 30, 2021
33e9cc2
Merge pull request #314 from boostcampwm-2021/issue/#306
minsangKang Nov 30, 2021
0d71b2d
Merge pull request #318 from boostcampwm-2021/issue/#301
minsangKang Nov 30, 2021
975f709
Merge pull request #315 from boostcampwm-2021/issue/#312
minsangKang Nov 30, 2021
4809ad6
Merge branch 'develop' into issue/#309
minsangKang Nov 30, 2021
628106c
Merge pull request #317 from boostcampwm-2021/issue/#309
minsangKang Nov 30, 2021
2069dc8
refactor: #302 로직 담당 / 네트워크 담당 유즈케이스 분리
Nov 29, 2021
aa7ceb0
Merge pull request #316 from boostcampwm-2021/issue/#302
minsangKang Nov 30, 2021
f96d819
fix: merge conflict 해결
minsangKang Nov 30, 2021
49d7cd7
Merge pull request #310 from boostcampwm-2021/issue/#303
minsangKang Nov 30, 2021
ad1be3e
refactor: #312 HomeViewController 파라미터 순서 재배치
minsangKang Nov 30, 2021
f4221e9
refactor: #312 SearchViewController 프로토콜 채택 리팩토링
minsangKang Nov 30, 2021
fcc3046
refactor: #319 StatusBar 접근 로직 리팩토링
sujeong000 Nov 30, 2021
642974e
refactor: #319 configureLayout() 위치 변경
sujeong000 Nov 30, 2021
348ab12
refactor: #312 MovingStatusViewController 리팩토링
sujeong000 Nov 30, 2021
a0f5a54
refactor: #312 BusRouteViewController 프로토콜 채택 리팩토링
minsangKang Nov 30, 2021
911ed72
refactor: #312 BusRouteViewController 파라미터 순서 재배치
minsangKang Nov 30, 2021
43e6b7c
fix: #277 UserNotification을 담당하는 객체 분리
tmfrlrkvlek Nov 30, 2021
289a6d3
fix: #321 cancellable 동시접근 이슈 해결
Nov 30, 2021
4987f5f
refactor: #312 StationViewController 프로토콜 채택 리팩토링
minsangKang Nov 30, 2021
8d6f39d
refactor: #312 MovingStatusViewController refresh 메소드 위치 변경
minsangKang Nov 30, 2021
04dafe8
refactor: #312 CustomNavigationBar의 configureTintColor 옵셔널 적용
sujeong000 Nov 30, 2021
8cad265
refactor: #312 AlarmSettingViewController 리팩토링
sujeong000 Nov 30, 2021
02bf731
refactor: #309 internal 접근지정자 제거. 안쓴거랑 똑같다고 함.
Nov 30, 2021
15b38f1
refactor: #309 refresh Button 로직을 delegate를 통해 위임 (Home)
Nov 30, 2021
c34d53d
refactor: #309 BusRouteView 관련 NavigatableView 적용
Nov 30, 2021
7f26dae
refactor: #309 Station 관련 NavigatableView 적용
Nov 30, 2021
f83f1fc
refactor: #312 세로모드 고정, loader 컬러 설정
minsangKang Nov 30, 2021
c84253a
design: #309 Station 상단 네비게이션 색상 기본 지정
Nov 30, 2021
8a29fd1
fix: #277 허용되어있지 않을 시 환경설정으로 넘어감
tmfrlrkvlek Nov 30, 2021
93b4277
refactor: #309 AlarmSetting 관련 NavigatableView 적용
Nov 30, 2021
6a71cd8
refactor: #309 MovingStatus 관련 Refreshable View 적용
Nov 30, 2021
43f3092
refactor: #298 UseCase -> Useable 타입으로 수정
minsangKang Nov 30, 2021
ad7665e
Merge pull request #320 from boostcampwm-2021/issue/#319
Modyhoon Nov 30, 2021
a996e43
Merge branch 'develop' into issue/#312
Modyhoon Nov 30, 2021
f10070c
Merge pull request #323 from boostcampwm-2021/issue/#312
Modyhoon Nov 30, 2021
03a1828
Merge pull request #324 from boostcampwm-2021/issue/#322
Modyhoon Nov 30, 2021
a15a279
Merge pull request #326 from boostcampwm-2021/issue/#298
Modyhoon Nov 30, 2021
fb6aad3
Merge branch 'develop' into issue/#277
Modyhoon Nov 30, 2021
aa3d66f
Merge pull request #325 from boostcampwm-2021/issue/#277
Modyhoon Nov 30, 2021
b3aa812
Merge pull request #327 from boostcampwm-2021/issue/#321
Modyhoon Nov 30, 2021
5d200c0
restyle: usecase -> useCase
tmfrlrkvlek Nov 30, 2021
7ee59ac
restyle: private 처리
tmfrlrkvlek Nov 30, 2021
f19319f
Merge branch 'develop' into issue/#309
Modyhoon Nov 30, 2021
ab6af32
Merge pull request #328 from boostcampwm-2021/issue/#309
Modyhoon Nov 30, 2021
2e6461e
Merge branch 'develop' into restyle/useCase
Modyhoon Nov 30, 2021
9fb1985
Merge pull request #329 from boostcampwm-2021/restyle/useCase
Modyhoon Nov 30, 2021
cd4f723
fix: 11/30 17:00 merge 이후 conflict 해결
Nov 30, 2021
4a281e2
docs: swift.yml 토큰 추가 관련 코드
Modyhoon Nov 30, 2021
b2489bf
test: 테스트할 타겟 파일 생성
Nov 30, 2021
88533c4
test: RequestFactory 로직 테스트
minsangKang Nov 30, 2021
e5cfb9e
test: networkService responseError, 성공 테스트 완료
tmfrlrkvlek Nov 30, 2021
f3a0d71
test: TokenManager randomAccessKey 테스트
sujeong000 Nov 30, 2021
9cef0cf
refactor: #332 RequestUseCases 내 프로토콜 분리 작업
minsangKang Nov 30, 2021
6faa93d
refactor: #332 SearchUseCase 프로토콜 분리
sujeong000 Nov 30, 2021
e1d5bac
refactor: #332 HomeUseCase 프로토콜 분리
sujeong000 Nov 30, 2021
3c8f6f1
refactor: #332 BusRouteUseCase 프로토콜 분리
sujeong000 Nov 30, 2021
d709d09
refactor: #332 StationUseCase 프로토콜 분리
sujeong000 Nov 30, 2021
327dcbc
refactor: #332 AlarmSettingUseCase 프로토콜 분리
sujeong000 Nov 30, 2021
e1b5f6e
refactor: #332 MovingStatusUseCase 프로토콜 분리
sujeong000 Nov 30, 2021
1d31754
refactor: #332 JsonDTO 분리
sujeong000 Nov 30, 2021
09ea668
rename: #332 BBusAPIUseCases extension 부 파일명 수정
sujeong000 Nov 30, 2021
8546bf7
Merge pull request #333 from boostcampwm-2021/issue/#332
sujeong000 Nov 30, 2021
4839b15
test: RequestFactory 로직 테스트
minsangKang Nov 30, 2021
05d7138
test: DummyBusRouteAPIUseCase 구현 및 추가
minsangKang Nov 30, 2021
8edd49a
test: BusRouteViewModelTests 타겟 파일 추가 완료
minsangKang Nov 30, 2021
2fd5f82
test: BusRouteViewModelTests header, bodys 수신 테스트
minsangKang Nov 30, 2021
7926b7f
test: BusRouteViewModelTests header, bodys 비교 로직 수정
minsangKang Nov 30, 2021
a770df4
test: DummyUseCase 클래스 선언
sujeong000 Nov 30, 2021
2ddb98d
test: MOCKStationAPIUsecase, MOCKStationCalculateUsecase 생성 및 bindSta…
tmfrlrkvlek Nov 30, 2021
f1bfbc2
test: bindFavoriteItems 테스트 완료
tmfrlrkvlek Nov 30, 2021
f6ff124
test: BusRouteViewModelTests buses 수신 테스트
minsangKang Nov 30, 2021
0cfb21b
test: BusRouteViewModelTests stopLoader 수신 테스트
minsangKang Nov 30, 2021
02aa5a8
test: MovingStatusViewModelTests busInfo 수신 테스트
minsangKang Nov 30, 2021
4e147e5
test: MovingStatusViewModelTests stationInfos 수신 테스트
minsangKang Nov 30, 2021
67ac977
test: refresh 테스트 완료
tmfrlrkvlek Nov 30, 2021
133a260
test: buses 수신 테스트
minsangKang Dec 1, 2021
12752a4
test: SearchViewModel 테스트 작성
sujeong000 Dec 1, 2021
40f833d
test: Mode, Error, cancellables 선언
sujeong000 Dec 1, 2021
feb1b8c
test: MOCKAlarmSettingUseCase 선언
sujeong000 Dec 1, 2021
eaa027f
test: remainStation 수신 테스트
minsangKang Dec 1, 2021
f3e2bde
test: boardedBus 수신 테스트
minsangKang Dec 1, 2021
356896d
test: remainingTime 수신 테스트
minsangKang Dec 1, 2021
aefeffb
test: MOCKArrInfo.json 추가
sujeong000 Dec 1, 2021
0a8063d
test: MOCKArrInfo 프로퍼티 선언
sujeong000 Dec 1, 2021
8d515bc
test: Persistent 관련 테스트 작성 완료
Dec 1, 2021
e82572f
feat: MovingStatus 실제 로직으로 수정, test 로직 수정
minsangKang Dec 1, 2021
2eda01b
test: PersistenceStorage github action 빌드실패 수정 완료
Dec 1, 2021
3dbe821
test: refresh 성공 테스트 작성
sujeong000 Dec 1, 2021
174bfc1
test: filter 로직으로 수정 추가
minsangKang Dec 1, 2021
0464395
test: add, remove. bindLoader 테스트 완료
tmfrlrkvlek Dec 1, 2021
344ffcb
test: refresh 실패 테스트 코드 작성
sujeong000 Dec 1, 2021
7ebd0f7
docs: PersistenceStorage 타겟 버전 수정
Dec 1, 2021
4087dc4
docs: test 빌드 타겟 변경
tmfrlrkvlek Dec 1, 2021
82d9ea5
docs: test 빌드 타겟 변경
minsangKang Dec 1, 2021
ecbd689
docs: test 빌드 타겟 변경
tmfrlrkvlek Dec 1, 2021
0e13d13
docs: test 빌드 타겟 변경
sujeong000 Dec 1, 2021
e8ee928
docs: test 빌드 타겟 변경
sujeong000 Dec 1, 2021
aca6d33
docs: test 빌드 타겟 변경
sujeong000 Dec 1, 2021
6b5fd97
test: timeout 10초로 변경
tmfrlrkvlek Dec 1, 2021
e470c01
test: 통과 못하는 테스트 제거
minsangKang Dec 1, 2021
36dedb0
test: test_bindLoader_refresh_두_번_이후_stopLoader_할당_확인 stopLoader 선언
tmfrlrkvlek Dec 1, 2021
cb231dc
fix: test build 에러 해결
sujeong000 Dec 1, 2021
cbce413
fix: test build 에러 해결
sujeong000 Dec 1, 2021
128ab18
fix: 승차 알람 섹션 헤더가 보이지 않는 문제 해결
sujeong000 Dec 1, 2021
8138817
fix: #343 해결 완료
Dec 1, 2021
03585b9
feat: #345 마을버스, 다른 버스들 대응
Dec 1, 2021
2e38048
Merge branch 'develop' into test/RequestFactoryTests
Modyhoon Dec 2, 2021
a27e93f
Merge pull request #330 from boostcampwm-2021/test/RequestFactoryTests
Modyhoon Dec 2, 2021
230e575
Merge branch 'develop' into test/BusRouteViewModelTests
Modyhoon Dec 2, 2021
5b6cec2
Merge pull request #334 from boostcampwm-2021/test/BusRouteViewModelT…
Modyhoon Dec 2, 2021
04f6780
Merge pull request #335 from boostcampwm-2021/test/MovingStatusViewMo…
Modyhoon Dec 2, 2021
9587790
Merge pull request #336 from boostcampwm-2021/test/PersistentStorage
Modyhoon Dec 2, 2021
94aa4cc
Merge branch 'develop' into test/TokenManagerTests
Modyhoon Dec 2, 2021
6990426
Merge pull request #337 from boostcampwm-2021/test/TokenManagerTests
Modyhoon Dec 2, 2021
bab9d43
Merge pull request #338 from boostcampwm-2021/test/StationViewModelTests
Modyhoon Dec 2, 2021
3eb9bf4
Merge pull request #339 from boostcampwm-2021/test/SearchViewModelTests
Modyhoon Dec 2, 2021
2e50150
Merge pull request #340 from boostcampwm-2021/test/AlarmSettingViewMo…
Modyhoon Dec 2, 2021
739eccf
Merge branch 'develop' into test/NetworkServiceTests
Modyhoon Dec 2, 2021
08ea36d
Merge pull request #341 from boostcampwm-2021/test/NetworkServiceTests
Modyhoon Dec 2, 2021
3967764
Merge pull request #342 from boostcampwm-2021/alarmSettingLayoutBugFix
Modyhoon Dec 2, 2021
44d03e0
Merge branch 'develop' into issue/#343
Modyhoon Dec 2, 2021
ece01b7
Merge pull request #344 from boostcampwm-2021/issue/#343
Modyhoon Dec 2, 2021
b8d794d
Merge pull request #346 from boostcampwm-2021/issue/#345
Modyhoon Dec 2, 2021
8882599
feat: #343 결과 없으면 얼럿 창 띄우기
Dec 2, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 37 additions & 3 deletions .github/workflows/swift.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Swift

on:
push:
branches: [ feature/** ]
branches: [ feature/**, issue/**, test/** ]
pull_request:
branches: [ develop, feature/** ]

Expand All @@ -11,10 +11,44 @@ jobs:

runs-on: macos-latest
env:
API_ACCESS_KEY: ${{ secrets.API_ACCESS_KEY }}
API_ACCESS_KEY1: ${{ secrets.API_ACCESS_KEY }}
API_ACCESS_KEY2: ${{ secrets.API_ACCESS_KEY2 }}
API_ACCESS_KEY3: ${{ secrets.API_ACCESS_KEY3 }}
API_ACCESS_KEY4: ${{ secrets.API_ACCESS_KEY4 }}
API_ACCESS_KEY5: ${{ secrets.API_ACCESS_KEY5 }}
API_ACCESS_KEY6: ${{ secrets.API_ACCESS_KEY6 }}
API_ACCESS_KEY7: ${{ secrets.API_ACCESS_KEY7 }}
API_ACCESS_KEY8: ${{ secrets.API_ACCESS_KEY8 }}
API_ACCESS_KEY9: ${{ secrets.API_ACCESS_KEY9 }}
API_ACCESS_KEY10: ${{ secrets.API_ACCESS_KEY10 }}
API_ACCESS_KEY11: ${{ secrets.API_ACCESS_KEY11 }}
API_ACCESS_KEY12: ${{ secrets.API_ACCESS_KEY12 }}
API_ACCESS_KEY13: ${{ secrets.API_ACCESS_KEY13 }}
API_ACCESS_KEY14: ${{ secrets.API_ACCESS_KEY14 }}
API_ACCESS_KEY15: ${{ secrets.API_ACCESS_KEY15 }}
API_ACCESS_KEY16: ${{ secrets.API_ACCESS_KEY16 }}
API_ACCESS_KEY17: ${{ secrets.API_ACCESS_KEY17 }}


steps:
- uses: actions/checkout@v2
- name: Build
run: |
xcodebuild test -project BBus/BBus.xcodeproj -scheme BBus -destination 'platform=iOS Simulator,name=iPhone 12,OS=latest' API_ACCESS_KEY=$API_ACCESS_KEY
xcodebuild test -project BBus/BBus.xcodeproj -scheme BBus -destination 'platform=iOS Simulator,name=iPhone 12,OS=latest' \
API_ACCESS_KEY1=$API_ACCESS_KEY1 \
API_ACCESS_KEY2=$API_ACCESS_KEY2 \
API_ACCESS_KEY3=$API_ACCESS_KEY3 \
API_ACCESS_KEY4=$API_ACCESS_KEY4 \
API_ACCESS_KEY5=$API_ACCESS_KEY5 \
API_ACCESS_KEY6=$API_ACCESS_KEY6 \
API_ACCESS_KEY7=$API_ACCESS_KEY7 \
API_ACCESS_KEY8=$API_ACCESS_KEY8 \
API_ACCESS_KEY9=$API_ACCESS_KEY9 \
API_ACCESS_KEY10=$API_ACCESS_KEY10 \
API_ACCESS_KEY11=$API_ACCESS_KEY11 \
API_ACCESS_KEY12=$API_ACCESS_KEY12 \
API_ACCESS_KEY13=$API_ACCESS_KEY13 \
API_ACCESS_KEY14=$API_ACCESS_KEY14 \
API_ACCESS_KEY15=$API_ACCESS_KEY15 \
API_ACCESS_KEY16=$API_ACCESS_KEY16 \
API_ACCESS_KEY17=$API_ACCESS_KEY17
156 changes: 156 additions & 0 deletions BBus/AlarmSettingViewModelTests/AlarmSettingViewModelTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
//
// AlarmSettingViewModelTests.swift
// AlarmSettingViewModelTests
//
// Created by 김태훈 on 2021/11/30.
//

import XCTest
import Combine

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

enum TestError: Error {
case fail, jsonError
}

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

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

func busArriveInfoWillLoaded(stId: String, busRouteId: String, ord: String) -> AnyPublisher<ArrInfoByRouteDTO, Error> {
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 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")?
.url(forResource: "MOCKArrInfo", withExtension: "json"),
let data = try? Data(contentsOf: url),
let arrInfoByRouteDTO = try? JSONDecoder().decode(ArrInfoByRouteDTO.self, from: data) else { throw TestError.jsonError }

self.cancellables = []
self.arrInfoByRouteDTO = arrInfoByRouteDTO
super.setUp()
}

override func tearDownWithError() throws {
self.cancellables = nil
self.arrInfoByRouteDTO = nil
super.tearDown()
}

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 = self.expectation(description: "AlarmSettingViewModel에 busArriveInfos가 저장되는지 확인")
let expectedFirstArriveInfo = self.firstArriveInfo
let expectedSecondArriveInfo = self.secondArriveInfo
let expectedResult = AlarmSettingBusArriveInfos(arriveInfos: [expectedFirstArriveInfo, expectedSecondArriveInfo], changedByTimer: false)

alarmSettingVieWModel.refresh()
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)
}

func test_refresh_arriveInfo가_에러를_리턴하여_실패() {
let MOCCKAlarmSettingUseCase = MOCKAlarmSettingAPIUseCase(mode: .failure, 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 = self.expectation(description: "AlarmSettingViewModel에 busArriveInfos가 에러를 리턴하는지 확인")

alarmSettingVieWModel.refresh()
alarmSettingVieWModel.$networkError
.receive(on: DispatchQueue.global())
.compactMap { $0 }
.sink { error in
guard let error = error as? TestError else { XCTFail(); return; }
switch error {
case .fail:
expectation.fulfill()
default:
XCTFail()
}
}
.store(in: &self.cancellables)

waitForExpectations(timeout: 10)
}
}
12 changes: 12 additions & 0 deletions BBus/AlarmSettingViewModelTests/MOCKArrInfo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"arrmsg1": "곧 도착",
"arrmsg2": "7분9초후[3번째 전]",
"reride_Num1": "3",
"reride_Num2": "4",
"stationNm1": "모두의학교.금천문화예술정보학교",
"stationNm2": "호림박물관",
"plainNo1": "서울71사1535",
"plainNo2": "서울71사1519",
"vehId1": "117020066",
"vehId2": "117020207"
}
Loading