Skip to content

Commit

Permalink
SearchRepositoryViewController의 의존성을 별도 구조체로 만들어서 사용
Browse files Browse the repository at this point in the history
  • Loading branch information
devxoul committed Nov 5, 2018
1 parent b9a3443 commit ae2b5c6
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 21 deletions.
4 changes: 1 addition & 3 deletions LetsGitHubSearch/Sources/Entry/AppDelegate.swift
Expand Up @@ -26,9 +26,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
self.appDependency.firebaseApp.configure()

if let rootViewController = self.rootViewController() {
rootViewController.repositoryService = self.appDependency.repositoryService
rootViewController.urlOpener = self.appDependency.urlOpener
rootViewController.firebaseAnalytics = self.appDependency.firebaseAnalytics
rootViewController.dependency = self.appDependency.searchRepositoryViewControllerDependency
}
return true
}
Expand Down
12 changes: 6 additions & 6 deletions LetsGitHubSearch/Sources/Entry/AppDependency.swift
Expand Up @@ -11,9 +11,7 @@ import Firebase

struct AppDependency {
let firebaseApp: FirebaseAppProtocol.Type
let firebaseAnalytics: FirebaseAnalyticsProtocol.Type
let repositoryService: RepositoryServiceProtocol
let urlOpener: URLOpenerProtocol
let searchRepositoryViewControllerDependency: SearchRepositoryViewController.Dependency
}

extension AppDependency {
Expand All @@ -24,9 +22,11 @@ extension AppDependency {

return AppDependency(
firebaseApp: FirebaseApp.self,
firebaseAnalytics: Firebase.Analytics.self,
repositoryService: repositoryService,
urlOpener: urlOpener
searchRepositoryViewControllerDependency: .init(
repositoryService: repositoryService,
urlOpener: urlOpener,
firebaseAnalytics: Firebase.Analytics.self
)
)
}
}
Expand Up @@ -11,9 +11,12 @@ import UIKit
import Alamofire

class SearchRepositoryViewController: UIViewController {
var repositoryService: RepositoryServiceProtocol!
var urlOpener: URLOpenerProtocol!
var firebaseAnalytics: FirebaseAnalyticsProtocol.Type!
struct Dependency {
let repositoryService: RepositoryServiceProtocol!
let urlOpener: URLOpenerProtocol!
let firebaseAnalytics: FirebaseAnalyticsProtocol.Type!
}
var dependency: Dependency!

let searchController = UISearchController(searchResultsController: nil)

Expand All @@ -39,7 +42,7 @@ extension SearchRepositoryViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
if let text = searchBar.text {
self.search(keyword: text)
self.firebaseAnalytics.logEvent("search", parameters: ["keyword": text])
self.dependency.firebaseAnalytics.logEvent("search", parameters: ["keyword": text])
}
self.searchController.dismiss(animated: true, completion: nil)
}
Expand All @@ -48,7 +51,7 @@ extension SearchRepositoryViewController: UISearchBarDelegate {
self.cancelPreviousSearchRequest()
self.setLoading(true)

self.currentSearchRequest = self.repositoryService.search(keyword: keyword) { [weak self] result in
self.currentSearchRequest = self.dependency.repositoryService.search(keyword: keyword) { [weak self] result in
guard let self = self else { return }
self.setLoading(false)

Expand Down Expand Up @@ -114,6 +117,6 @@ extension SearchRepositoryViewController: UITableViewDelegate {
let repository = self.repositories[indexPath.row]
let urlString = "https://github.com/\(repository.fullName)"
guard let url = URL(string: urlString) else { return }
self.urlOpener.open(url, options: [:], completionHandler: nil)
self.dependency.urlOpener.open(url, options: [:], completionHandler: nil)
}
}
8 changes: 5 additions & 3 deletions LetsGitHubSearchTests/Sources/Entry/AppDelegateTests.swift
Expand Up @@ -17,9 +17,11 @@ final class AppDelegateTests: XCTestCase {

let dependency = AppDependency(
firebaseApp: firebaseApp,
firebaseAnalytics: FirebaseAnalyticsStub.self,
repositoryService: RepositoryServiceStub(),
urlOpener: URLOpenerStub()
searchRepositoryViewControllerDependency: .init(
repositoryService: RepositoryServiceStub(),
urlOpener: URLOpenerStub(),
firebaseAnalytics: FirebaseAnalyticsStub.self
)
)
let appDelegate = AppDelegate(dependency: dependency)

Expand Down
Expand Up @@ -25,9 +25,11 @@ final class SearchRepositoryViewControllerTests: XCTestCase {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let identifier = "SearchRepositoryViewController"
self.viewController = storyboard.instantiateViewController(withIdentifier: identifier) as? SearchRepositoryViewController
self.viewController.repositoryService = self.repositoryService
self.viewController.urlOpener = self.urlOpener
self.viewController.firebaseAnalytics = self.firebaseAnalytics
self.viewController.dependency = .init(
repositoryService: self.repositoryService,
urlOpener: self.urlOpener,
firebaseAnalytics: self.firebaseAnalytics
)
self.viewController.loadViewIfNeeded()
}

Expand Down

0 comments on commit ae2b5c6

Please sign in to comment.