From 6a0f2e594bbb76dd5613f10659ef053d6af15b27 Mon Sep 17 00:00:00 2001 From: Vitor Campos Date: Tue, 8 Nov 2022 19:15:25 -0300 Subject: [PATCH 01/12] test to removing spaces funcion implemented --- .../FinanceApp/Extensions/String+Extensions.swift | 1 + .../FinanceAppTests/StringExtensionsTests.swift | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Extensions/String+Extensions.swift b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Extensions/String+Extensions.swift index 1b067fd4..13cb0fa1 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Extensions/String+Extensions.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Extensions/String+Extensions.swift @@ -13,4 +13,5 @@ extension String { return self.replacingOccurrences(of: " ", with: "") } + } diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift index a7c605e3..6ac74c21 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift @@ -9,5 +9,12 @@ import XCTest @testable import FinanceApp class StringExtensionsTests: XCTestCase { + + private var sut = "BemVindo!" + func test_removingSpaces_shouldRemoveSpaces() { + + XCTAssertEqual(sut.removingSpaces(), "BemVindo!") + } } + From 1d09c57441c932e3fa64c0955c7d1ea0f89699e3 Mon Sep 17 00:00:00 2001 From: Vitor Campos Date: Tue, 8 Nov 2022 19:21:14 -0300 Subject: [PATCH 02/12] adding MARK --- .../FinanceAppTests/StringExtensionsTests.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift index 6ac74c21..589cb618 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift @@ -12,6 +12,7 @@ class StringExtensionsTests: XCTestCase { private var sut = "BemVindo!" + // MARK: - REMOVE SPACE TEST func test_removingSpaces_shouldRemoveSpaces() { XCTAssertEqual(sut.removingSpaces(), "BemVindo!") From d8ec150efe9260278fe3124eb00735b3c5c9a5cf Mon Sep 17 00:00:00 2001 From: Vitor Campos Date: Thu, 10 Nov 2022 14:48:33 -0300 Subject: [PATCH 03/12] Test insideNavigationController --- .../UIViewControllerExtensionsTests.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift index a3a4fe39..6d9aa375 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift @@ -9,5 +9,14 @@ import XCTest @testable import FinanceApp class UIViewControllerExtensionsTests: XCTestCase { + + func test_insideNavigationController_viewControlerShouldIsInNavigation() { + let sut = DummyVC().insideNavigationController() + + XCTAssertEqual(sut.modalPresentationStyle, .formSheet) + XCTAssertTrue(sut.topViewController is DummyVC) + } +} +class DummyVC: UIViewController { } From 52440f129ffd0763f5ebfb1db4ab4ad96d5c17ca Mon Sep 17 00:00:00 2001 From: VitorCampos28 <63113958+VitorCampos28@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:18:34 -0300 Subject: [PATCH 04/12] Apply suggestions from code review add final to class Co-authored-by: Leonardo <42387881+leocoout@users.noreply.github.com> --- .../FinanceAppTests/StringExtensionsTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift index 589cb618..4a5f5a3e 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift @@ -8,7 +8,7 @@ import XCTest @testable import FinanceApp -class StringExtensionsTests: XCTestCase { +final class StringExtensionsTests: XCTestCase { private var sut = "BemVindo!" From 465e5968d02cad82c65ff0bc417274a3e26a58d6 Mon Sep 17 00:00:00 2001 From: VitorCampos28 <63113958+VitorCampos28@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:19:20 -0300 Subject: [PATCH 05/12] Apply suggestions from code review solving problem with string test Co-authored-by: Leonardo <42387881+leocoout@users.noreply.github.com> --- .../FinanceAppTests/StringExtensionsTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift index 4a5f5a3e..08d62af8 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift @@ -10,7 +10,7 @@ import XCTest final class StringExtensionsTests: XCTestCase { - private var sut = "BemVindo!" + private let sut = "Bem Vindo!" // MARK: - REMOVE SPACE TEST func test_removingSpaces_shouldRemoveSpaces() { From f093343fe8753946e34e59165794ec5a7e8942c0 Mon Sep 17 00:00:00 2001 From: VitorCampos28 <63113958+VitorCampos28@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:19:36 -0300 Subject: [PATCH 06/12] Apply suggestions from code review Co-authored-by: Leonardo <42387881+leocoout@users.noreply.github.com> --- .../FinanceAppTests/StringExtensionsTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift index 08d62af8..e073f0a7 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/StringExtensionsTests.swift @@ -14,7 +14,6 @@ final class StringExtensionsTests: XCTestCase { // MARK: - REMOVE SPACE TEST func test_removingSpaces_shouldRemoveSpaces() { - XCTAssertEqual(sut.removingSpaces(), "BemVindo!") } } From 262c58919f52bfec68e62ea906d836a8c12f3229 Mon Sep 17 00:00:00 2001 From: VitorCampos28 <63113958+VitorCampos28@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:20:35 -0300 Subject: [PATCH 07/12] Update solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift Co-authored-by: Leonardo <42387881+leocoout@users.noreply.github.com> --- .../FinanceAppTests/UIViewControllerExtensionsTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift index 6d9aa375..6aa16179 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift @@ -8,7 +8,7 @@ import XCTest @testable import FinanceApp -class UIViewControllerExtensionsTests: XCTestCase { +final class UIViewControllerExtensionsTests: XCTestCase { func test_insideNavigationController_viewControlerShouldIsInNavigation() { let sut = DummyVC().insideNavigationController() From bf3455281f848e91b279ae40b196e847d6624da4 Mon Sep 17 00:00:00 2001 From: VitorCampos28 <63113958+VitorCampos28@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:21:00 -0300 Subject: [PATCH 08/12] Update solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift Co-authored-by: Leonardo <42387881+leocoout@users.noreply.github.com> --- .../FinanceAppTests/UIViewControllerExtensionsTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift index 6aa16179..23eea7ae 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/UIViewControllerExtensionsTests.swift @@ -10,7 +10,7 @@ import XCTest final class UIViewControllerExtensionsTests: XCTestCase { - func test_insideNavigationController_viewControlerShouldIsInNavigation() { + func test_insideNavigationController_topViewControllerShouldBeCorrect() { let sut = DummyVC().insideNavigationController() XCTAssertEqual(sut.modalPresentationStyle, .formSheet) From f90273cdea090101b77e09ae27779b53478594bb Mon Sep 17 00:00:00 2001 From: Vitor Campos Date: Thu, 17 Nov 2022 10:32:25 -0300 Subject: [PATCH 09/12] DispatchQueueSpy created --- .../FinanceApp/Modules/Home/HomeViewModel.swift | 14 +++++++++++--- .../Test Doubles/DispatchQueueSpy.swift | 10 ++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift index 7f403149..c3f49fb9 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift @@ -12,14 +12,20 @@ protocol HomeViewModelDelegate: AnyObject { func didFetchHomeData(_ data: HomeData) } +protocol DispatchQueueProtocol { + func async(group: DispatchGroup?, qos: DispatchQoS, flags: DispatchWorkItemFlags, execute work: @escaping @convention(block) () -> Void) +} + struct HomeViewModel { weak var delegate: HomeViewModelDelegate? + private let dispatchQueue: DispatchQueueProtocol private let financeService: FinanceServiceProtocol - init(financeService: FinanceServiceProtocol) { + init(financeService: FinanceServiceProtocol, dispatchQueue: DispatchQueueProtocol) { self.financeService = financeService + self.dispatchQueue = dispatchQueue } func fetchData() { @@ -30,10 +36,12 @@ struct HomeViewModel { return } - DispatchQueue.main.async { - + dispatchQueue.async(group: nil, qos: .background, flags: .noQoS) { + delegate?.didFetchHomeData(homeData) } } } } + +extension DispatchQueue: DispatchQueueProtocol {} diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift index fecc4ab4..3c56030d 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift @@ -1 +1,11 @@ + + import Foundation + +@testable import FinanceApp + +public class DispatchQueueSpy: DispatchQueueProtocol { + public func async(group: DispatchGroup?, qos: DispatchQoS, flags: DispatchWorkItemFlags, execute work: @escaping @convention(block) () -> Void) { + work() + } +} From 28400adf6a009cf8449b7b972ba2e5be0a8c5b99 Mon Sep 17 00:00:00 2001 From: Vitor Campos Date: Thu, 17 Nov 2022 18:05:25 -0300 Subject: [PATCH 10/12] tests to ViewModel created --- .../Modules/Home/HomeViewModel.swift | 4 +- .../FinanceApp/Service/FinanceService.swift | 8 ++- .../FinanceAppTests/HomeViewModelTests.swift | 51 ++++++++++++++++++- .../Test Doubles/DispatchQueueSpy.swift | 5 ++ 4 files changed, 63 insertions(+), 5 deletions(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift index c3f49fb9..54536c52 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Modules/Home/HomeViewModel.swift @@ -21,9 +21,9 @@ struct HomeViewModel { weak var delegate: HomeViewModelDelegate? private let dispatchQueue: DispatchQueueProtocol - private let financeService: FinanceServiceProtocol + private let financeService: FetchHomeDataProtocol - init(financeService: FinanceServiceProtocol, dispatchQueue: DispatchQueueProtocol) { + init(financeService: FetchHomeDataProtocol, dispatchQueue: DispatchQueueProtocol) { self.financeService = financeService self.dispatchQueue = dispatchQueue } diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Service/FinanceService.swift b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Service/FinanceService.swift index b0ebb8ff..086df9ed 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceApp/Service/FinanceService.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceApp/Service/FinanceService.swift @@ -7,15 +7,19 @@ import Foundation -protocol FinanceServiceProtocol { +protocol FinanceServiceProtocol: FetchHomeDataProtocol { - func fetchHomeData(_ completion: @escaping (HomeData?) -> Void) func fetchActivityDetails(_ completion: @escaping (ActivityDetails?) -> Void) func fetchContactList(_ completion: @escaping ([Contact]?) -> Void) func transferAmount(_ completion: @escaping (TransferResult?) -> Void) func fetchUserProfile(_ completion: @escaping (UserProfile?) -> Void) } +protocol FetchHomeDataProtocol { + + func fetchHomeData(_ completion: @escaping (HomeData?) -> Void) +} + class FinanceService: FinanceServiceProtocol { let networkClient: NetworkClientProtocol diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift index 5531e969..541a2b7a 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift @@ -8,6 +8,55 @@ import XCTest @testable import FinanceApp -class HomeViewModelTests: XCTestCase { +final class HomeViewModelTests: XCTestCase { + + let dispatchQueueSpy = DispatchQueueSpy() + let financeServiceSpy = FinanceServiceSpy() + let delegateSpy = HomeViewModelDelegateSpy() + lazy var sut = HomeViewModel(financeService: financeServiceSpy, dispatchQueue: dispatchQueueSpy) + + func test_didFetchHomeData_isCalled () { + //Given + sut.delegate = delegateSpy + //When + sut.fetchData() + //Then + XCTAssertTrue(delegateSpy.delegateIsCalled) + } + + func test_fetchHomeDataAndDispatchQueue_isCalled() { + //when + sut.fetchData() + //then + XCTAssertTrue(financeServiceSpy.fetchHomeDataIsCalled) + XCTAssertTrue(dispatchQueueSpy.isDispatchCalled) + } + + func test_fetchData_shouldNotCallDelegate_whenHomedataIsNill () { + // Given + financeServiceSpy.homeData = nil + //When + sut.fetchData() + //Then + XCTAssertFalse(dispatchQueueSpy.isDispatchCalled) + } +} + +class HomeViewModelDelegateSpy: HomeViewModelDelegate { + var delegateIsCalled: Bool = false + + func didFetchHomeData(_ data: FinanceApp.HomeData) { + delegateIsCalled = true + } +} +class FinanceServiceSpy: FetchHomeDataProtocol { + + var homeData: HomeData? = HomeData(balance: 0, savings: 0, spending: 0, activity: [Activity(name: "", price: 0, time: "")]) + var fetchHomeDataIsCalled: Bool = false + + func fetchHomeData(_ completion: @escaping (FinanceApp.HomeData?) -> Void) { + fetchHomeDataIsCalled = true + completion(homeData) + } } diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift index 3c56030d..a0915248 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/Test Doubles/DispatchQueueSpy.swift @@ -5,7 +5,12 @@ import Foundation @testable import FinanceApp public class DispatchQueueSpy: DispatchQueueProtocol { + + var isDispatchCalled: Bool = false + public func async(group: DispatchGroup?, qos: DispatchQoS, flags: DispatchWorkItemFlags, execute work: @escaping @convention(block) () -> Void) { + isDispatchCalled = true work() } } + From 842772390a8ee678b316a8a291fe919ab0fbdabd Mon Sep 17 00:00:00 2001 From: Vitor Campos Date: Fri, 18 Nov 2022 14:13:32 -0300 Subject: [PATCH 11/12] turn to final class --- .../FinanceAppTests/HomeViewModelTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift index 541a2b7a..6aa2f66a 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift @@ -8,7 +8,7 @@ import XCTest @testable import FinanceApp -final class HomeViewModelTests: XCTestCase { +class HomeViewModelTests: XCTestCase { let dispatchQueueSpy = DispatchQueueSpy() let financeServiceSpy = FinanceServiceSpy() From 913b640ddac9226c111e5890e2a3306eb23f3577 Mon Sep 17 00:00:00 2001 From: Vitor Campos Date: Fri, 18 Nov 2022 14:16:45 -0300 Subject: [PATCH 12/12] turn to final class --- .../FinanceAppTests/HomeViewModelTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift index 6aa2f66a..541a2b7a 100644 --- a/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift +++ b/solutions/devsprint-brq-testes-ios-1/FinanceAppTests/HomeViewModelTests.swift @@ -8,7 +8,7 @@ import XCTest @testable import FinanceApp -class HomeViewModelTests: XCTestCase { +final class HomeViewModelTests: XCTestCase { let dispatchQueueSpy = DispatchQueueSpy() let financeServiceSpy = FinanceServiceSpy()