Skip to content

Commit a38c24a

Browse files
authored
Merge pull request #226 from nrurnru/iOS
EventService ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
2 parents b91ded0 + 2b2fd66 commit a38c24a

File tree

3 files changed

+82
-3
lines changed

3 files changed

+82
-3
lines changed

β€ŽiOS/MiniVIBE/MiniVIBE.xcodeproj/project.pbxprojβ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
DE09042F256CCE11002914B5 /* MagazineSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE09042E256CCE11002914B5 /* MagazineSectionView.swift */; };
9696
DE090443256D098A002914B5 /* NowItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE090442256D098A002914B5 /* NowItemView.swift */; };
9797
DE090447256D09CC002914B5 /* NowReplayItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE090446256D09CC002914B5 /* NowReplayItem.swift */; };
98+
DE0D178A258E59B800546B2C /* EventServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0D1789258E59B800546B2C /* EventServiceTests.swift */; };
9899
DE18EE8B257B9D34009E4E11 /* View+name.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE18EE8A257B9D34009E4E11 /* View+name.swift */; };
99100
DE18EEA1257BFA13009E4E11 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE18EEA0257BFA13009E4E11 /* Reachability.swift */; };
100101
DE3D6F8925640FE800C236EF /* TodayFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE3D6F8825640FE800C236EF /* TodayFooterView.swift */; };
@@ -239,6 +240,7 @@
239240
DE09042E256CCE11002914B5 /* MagazineSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MagazineSectionView.swift; sourceTree = "<group>"; };
240241
DE090442256D098A002914B5 /* NowItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowItemView.swift; sourceTree = "<group>"; };
241242
DE090446256D09CC002914B5 /* NowReplayItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowReplayItem.swift; sourceTree = "<group>"; };
243+
DE0D1789258E59B800546B2C /* EventServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventServiceTests.swift; sourceTree = "<group>"; };
242244
DE18EE8A257B9D34009E4E11 /* View+name.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+name.swift"; sourceTree = "<group>"; };
243245
DE18EEA0257BFA13009E4E11 /* Reachability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Reachability.swift; sourceTree = "<group>"; };
244246
DE3D6F8825640FE800C236EF /* TodayFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayFooterView.swift; sourceTree = "<group>"; };
@@ -390,6 +392,7 @@
390392
B9D3593A258E12A700C3236F /* Mock */,
391393
B9D35939258E129900C3236F /* Extension */,
392394
B9C45648258E0C1D00B22AF0 /* ServerRepositoryTests.swift */,
395+
DE0D1789258E59B800546B2C /* EventServiceTests.swift */,
393396
B988596B257684510037D19B /* NetworkTests.swift */,
394397
B988596D257684510037D19B /* Info.plist */,
395398
DECDDCA6258A3C8800E5F10B /* PersistenceControllerTests.swift */,
@@ -903,6 +906,7 @@
903906
DE7A099E258A4D4500A3AD2D /* TestPersistenceController.swift in Sources */,
904907
DE7A09C5258AC2C200A3AD2D /* LocalRepositoryTests.swift in Sources */,
905908
DECAFD6B258E260200FB1DB1 /* CoreData+Equatable.swift in Sources */,
909+
DE0D178A258E59B800546B2C /* EventServiceTests.swift in Sources */,
906910
B9EAB583258E3F0D00ED367F /* Event+Equatable.swift in Sources */,
907911
DECDDCA7258A3C8800E5F10B /* PersistenceControllerTests.swift in Sources */,
908912
DECAFD6E258E264B00FB1DB1 /* FailPersistenceController.swift in Sources */,

β€ŽiOS/MiniVIBE/MiniVIBE/Models/Events/CoreDataEvent.swiftβ€Ž

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@ class CoreDataEvent: Event {
1919
parameter[key] = value
2020
return parameter
2121
})
22-
// κΊΌλ‚΄μ˜¬λ•Œ μ •ν•˜κ³ μžˆμŒ;;
2322
super.init(name: cdEvent.name ?? "", parameters: parameters ?? [:], date: cdEvent.dateString ?? "")
2423
}
2524

26-
init(name: String, parameter: [String: String]) {
27-
super.init(name: name, parameters: parameter)
25+
init(name: String, parameter: [String: String], date: String = Date().customDateFormat()) {
26+
super.init(name: name, parameters: parameter, date: date)
2827
}
2928
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
//
2+
// EventServiceTests.swift
3+
// MiniVIBETests
4+
//
5+
// Created by GH Choi on 2020/12/19.
6+
//
7+
8+
import XCTest
9+
import Combine
10+
import BCEventEmitter
11+
@testable import MiniVIBE
12+
13+
14+
class EventServiceTests: XCTestCase {
15+
let localRepository = MockLocalRepository()
16+
let serverRepository = MockServerRepository()
17+
18+
func test_sendOneEvent() throws {
19+
let eventService = RealEventService(serverRepository: serverRepository, localRepository: localRepository)
20+
let errorEvent = ErrorEvent(from: "EventService sendOneEvent", reason: NetworkError.unexpectedResponse.localizedDescription)
21+
let event = CoreDataEvent(name: "test", parameter: ["view": "test"])
22+
23+
eventService.sendOneEvent(event: event)
24+
let fetched = localRepository.fetchEvents() as [Event]
25+
XCTAssertEqual(fetched.first?.name, errorEvent.name)
26+
XCTAssertEqual(fetched.first?.parameters, errorEvent.parameters)
27+
XCTAssertEqual(fetched.last, event)
28+
}
29+
30+
func test_sendAllEvents() {
31+
let eventService = RealEventService(serverRepository: serverRepository, localRepository: localRepository)
32+
let errorEvent = ErrorEvent(from: "EventService sendAllEvents", reason: NetworkError.unexpectedResponse.localizedDescription)
33+
34+
eventService.sendAllEvents()
35+
let fetched = localRepository.fetchEvents() as [Event]
36+
XCTAssertEqual(fetched.first?.name, errorEvent.name)
37+
XCTAssertEqual(fetched.first?.parameters, errorEvent.parameters)
38+
}
39+
40+
}
41+
42+
class MockLocalRepository: LocalRepository {
43+
private var savedEvents: [CoreDataEvent] = []
44+
45+
func fetchEvents() -> [CoreDataEvent] {
46+
return savedEvents
47+
}
48+
49+
func saveEvent(event: Event) -> Bool {
50+
let coreDataEvent = CoreDataEvent(name: event.name, parameter: event.parameters!, date: event.date)
51+
savedEvents.append(coreDataEvent)
52+
return true
53+
}
54+
55+
func deleteAllEvent() -> Bool {
56+
savedEvents.removeAll()
57+
return true
58+
}
59+
}
60+
61+
class MockServerRepository: ServerRepository {
62+
func send(event: Event) -> AnyPublisher<Void, NetworkError> {
63+
return Fail<Void, NetworkError>(error: NetworkError.unexpectedResponse)
64+
.eraseToAnyPublisher()
65+
}
66+
67+
func sendAll(events: [Event]) -> AnyPublisher<Void, NetworkError> {
68+
return Fail<Void, NetworkError>(error: NetworkError.unexpectedResponse)
69+
.eraseToAnyPublisher()
70+
}
71+
72+
func load<T>(type: T.Type, request: RequestProviding) -> AnyPublisher<T, NetworkError> where T : Decodable {
73+
return Fail<T, NetworkError>(error: NetworkError.unexpectedResponse)
74+
.eraseToAnyPublisher()
75+
}
76+
}

0 commit comments

Comments
Β (0)