|
| 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