Skip to content

Commit

Permalink
release version 2.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
Takeichi Kanzaki Cabrera committed Oct 29, 2019
1 parent a4dbfc2 commit 14d86ee
Show file tree
Hide file tree
Showing 40 changed files with 461 additions and 152 deletions.
4 changes: 2 additions & 2 deletions AptoUISDK.podspec
Expand Up @@ -8,15 +8,15 @@

Pod::Spec.new do |s|
s.name = "AptoUISDK"
s.version = "2.2.0"
s.version = "2.2.1"
s.summary = "The Apto UI platform iOS SDK."
s.description = <<-DESC
Apto iOS UI SDK
DESC
s.homepage = "https://github.com/ShiftFinancial/apto-ui-sdk-ios.git"
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.authors = { "Ivan Oliver" => "ivan@aptopayments.com", "Takeichi Kanzaki" => "takeichi@aptopayments.com" }
s.source = { :git => "https://github.com/ShiftFinancial/apto-ui-sdk-ios.git", :tag => "2.2.0" }
s.source = { :git => "https://github.com/ShiftFinancial/apto-ui-sdk-ios.git", :tag => "2.2.1" }

s.platform = :ios
s.ios.deployment_target = '10.0'
Expand Down
2 changes: 1 addition & 1 deletion Example/Demo/Info.plist
Expand Up @@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>BuildDate</key>
<date>2019-10-14T10:49:35Z</date>
<date>2019-10-29T13:20:19Z</date>
<key>BuildType</key>
<string>Local</string>
<key>CFBundleDevelopmentRegion</key>
Expand Down
Expand Up @@ -85,8 +85,10 @@ class AptoPlatformFake: AptoPlatformProtocol {

var nextIsFeatureEnabledResult = true
private(set) var isFeatureEnabledCalled = false
private(set) var lastIsFeatureEnabledKey: FeatureKey?
func isFeatureEnabled(_ featureKey: FeatureKey) -> Bool {
isFeatureEnabledCalled = true
lastIsFeatureEnabledKey = featureKey
return nextIsFeatureEnabledResult
}

Expand Down
Expand Up @@ -29,7 +29,8 @@ class ModelDataProvider {
lazy var amountRangeConfiguration = AmountRangeConfiguration(min: 0, max: 1000, def: 100, inc: 100)

lazy var workflowAction: WorkflowAction = {
let configuration = SelectBalanceStoreActionConfiguration(allowedBalanceTypes: [balanceType])
let configuration = SelectBalanceStoreActionConfiguration(allowedBalanceTypes: [balanceType],
assetUrl: nil)
return WorkflowAction(actionId: nil,
name: nil,
order: nil,
Expand Down Expand Up @@ -452,6 +453,7 @@ class ModelDataProvider {
callToAction: "callToAction",
newUserAction: "newUserAction",
allowedBalanceTypes: [balanceType],
assetUrl: url,
oauthErrorMessageKeys: nil)

lazy var custodian = Custodian(custodianType: "custodian", name: "Custodian")
Expand Down
Expand Up @@ -113,7 +113,7 @@ class ModuleLocatorFake: ModuleLocatorProtocol {
lazy var cardWaitListModuleSpy: CardWaitListModuleSpy = {
return CardWaitListModuleSpy(serviceLocator: serviceLocator)
}()
func cardWaitListModule(card: Card, cardProduct: CardProduct) -> CardWaitListModuleProtocol {
func cardWaitListModule(card: Card) -> CardWaitListModuleProtocol {
return cardWaitListModuleSpy
}

Expand Down
Expand Up @@ -40,6 +40,7 @@ class ExternalOAuthPresenterTest: XCTestCase {
XCTAssertNotNil(sut.viewModel.callToAction.value)
XCTAssertNotNil(sut.viewModel.newUserAction.value)
XCTAssertNotNil(sut.viewModel.allowedBalanceTypes.value)
XCTAssertNotNil(sut.viewModel.assetUrl)
XCTAssertNil(sut.viewModel.error.value)
}

Expand Down
Expand Up @@ -87,4 +87,68 @@ class CardMonthlyStatsInteractorTest: XCTestCase {
// Then
XCTAssertEqual(date, returnedResult?.value?.date)
}

func testIsStatementFeatureEnabledCallPlatform() {
// When
sut.isStatementsFeatureEnabled { _ in }

// Then
XCTAssertTrue(platform.isFeatureEnabledCalled)
XCTAssertEqual(FeatureKey.showMonthlyStatementsOption.rawValue, platform.lastIsFeatureEnabledKey?.rawValue)
}

func testStatementsFeatureEnabledCallbackTrue() {
// Given
platform.nextIsFeatureEnabledResult = true

// When
sut.isStatementsFeatureEnabled { isEnabled in
// Then
XCTAssertTrue(isEnabled)
}
}

func testStatementsFeatureDisabledCallbackFalse() {
// Given
platform.nextIsFeatureEnabledResult = false

// When
sut.isStatementsFeatureEnabled { isEnabled in
// Then
XCTAssertFalse(isEnabled)
}
}

func testFetchStatementPeriodCallPlatform() {
// When
sut.fetchStatementsPeriod { _ in }

// Then
XCTAssertTrue(platform.fetchMonthlyStatementsPeriodCalled)
}

func testFetchStatementSucceedCallbackSuccess() {
// Given
platform.nextFetchMonthlyStatementsPeriodResult = .success(dataProvider.monthlyStatementsPeriod)

// When
sut.fetchStatementsPeriod { [unowned self] result in
// Then
XCTAssertTrue(result.isSuccess)
XCTAssertEqual(self.dataProvider.monthlyStatementsPeriod, result.value)
}

func testFetchStatementFailsCallbackFailure() {
// Given
let error = BackendError(code: .other)
platform.nextFetchMonthlyStatementsPeriodResult = .failure(error)

// When
sut.fetchStatementsPeriod { result in
// Then
XCTAssertTrue(result.isFailure)
XCTAssertEqual(error, result.error)
}
}
}
}
Expand Up @@ -8,6 +8,7 @@
import XCTest
@testable import AptoSDK
@testable import AptoUISDK
import Bond

class CardMonthlyStatsPresenterTest: XCTestCase {
var sut: CardMonthlyStatsPresenter! // swiftlint:disable:this implicitly_unwrapped_optional
Expand Down Expand Up @@ -230,4 +231,84 @@ class CardMonthlyStatsPresenterTest: XCTestCase {
XCTAssertTrue(router.showStatementReportCalled)
XCTAssertEqual(Month(from: date), router.lastShowStatementReportMonth)
}

func testViewLoadedCheckIfStatementFeatureIsEnabled() {
// When
sut.viewLoaded()

// Then
XCTAssertTrue(interactor.isStatementsFeatureEnabledCalled)
}

func testStatementFeatureDisabledDoNotFetchPeriod() {
// Given
interactor.nextIsStatementsFeatureEnabledResult = false

// When
sut.viewLoaded()

// Then
XCTAssertFalse(interactor.fetchStatementsPeriodCalled)
}

func testStatementFeatureEnabledFetchStatementsPeriod() {
// Given
givenStatementsFeatureEnabled()

// When
sut.viewLoaded()

// Then
XCTAssertTrue(interactor.fetchStatementsPeriodCalled)
}

func testFetchStatementsPeriodSucceedCurrentMonthInPeriodMonthlyStatementAvailable() {
// Given
givenStatementPeriodSucceed()

// When
sut.viewLoaded()

// Then
XCTAssertTrue(sut.viewModel.monthlyStatementsAvailable.value)
}

func testStatementsPeriodLoadedSelectedDateNotInPeriodMonthlyStatementNotAvailable() {
// Given
givenStatementPeriodSucceed()
sut.viewLoaded()

// When
sut.dateSelected(Date.distantFuture)

// Then
XCTAssertFalse(sut.viewModel.monthlyStatementsAvailable.value)
}

func testStatementsPeriodLoadedSelectedDateInPeriodMonthlyStatementAvailable() {
// Given
givenStatementPeriodSucceed()
sut.viewLoaded()
sut.viewModel.monthlyStatementsAvailable.send(false)

// When
sut.dateSelected(Date())

// Then
XCTAssertTrue(sut.viewModel.monthlyStatementsAvailable.value)
}

// MARK: - Test helpers
private func givenStatementsFeatureEnabled() {
interactor.nextIsStatementsFeatureEnabledResult = true
}

private func givenStatementPeriodSucceed() {
givenStatementsFeatureEnabled()
// swiftlint:disable force_unwrapping
let statementsPeriod = MonthlyStatementsPeriod(start: Month(from: Date().add(-2, units: .month)!),
end: Month(from: Date().add(2, units: .month)!))
// swiftlint:enable force_unwrapping
interactor.nextFetchStatementsPeriodResult = .success(statementsPeriod)
}
}
Expand Up @@ -37,6 +37,16 @@ class CardMonthlyStatsInteractorSpy: CardMonthlyStatsInteractorProtocol {
lastDateToFetchData = date
fetchMonthlySpendingCallCounter += 1
}

private(set) var isStatementsFeatureEnabledCalled = false
func isStatementsFeatureEnabled(callback: @escaping (_ isEnabled: Bool) -> Void) {
isStatementsFeatureEnabledCalled = true
}

private(set) var fetchStatementsPeriodCalled = false
func fetchStatementsPeriod(callback: @escaping Result<MonthlyStatementsPeriod, NSError>.Callback) {
fetchStatementsPeriodCalled = true
}
}

class CardMonthlyStatsInteractorFake: CardMonthlyStatsInteractorSpy {
Expand All @@ -48,6 +58,22 @@ class CardMonthlyStatsInteractorFake: CardMonthlyStatsInteractorSpy {
callback(result)
}
}

var nextIsStatementsFeatureEnabledResult: Bool?
override func isStatementsFeatureEnabled(callback: @escaping (_ isEnabled: Bool) -> Void) {
super.isStatementsFeatureEnabled(callback: callback)
if let result = nextIsStatementsFeatureEnabledResult {
callback(result)
}
}

var nextFetchStatementsPeriodResult: Result<MonthlyStatementsPeriod, NSError>?
override func fetchStatementsPeriod(callback: @escaping Result<MonthlyStatementsPeriod, NSError>.Callback) {
super.fetchStatementsPeriod(callback: callback)
if let result = nextFetchStatementsPeriodResult {
callback(result)
}
}
}

class CardMonthlyStatsPresenterSpy: CardMonthlyStatsPresenterProtocol {
Expand Down
Expand Up @@ -55,6 +55,7 @@ class MonthlyStatementsListPresenterTest: XCTestCase {

// Then
let months = sut.viewModel.months
XCTAssertTrue(sut.viewModel.dataLoaded.value)
XCTAssertEqual(2, months.numberOfSections)
XCTAssertEqual(1, months.numberOfItems(inSection: 0))
XCTAssertEqual(1, months.numberOfItems(inSection: 1))
Expand Down Expand Up @@ -87,6 +88,7 @@ class MonthlyStatementsListPresenterTest: XCTestCase {

// Then
XCTAssertEqual(error, sut.viewModel.error.value)
XCTAssertFalse(sut.viewModel.dataLoaded.value)
}

func testCloseTappedCallClose() {
Expand Down
Expand Up @@ -17,27 +17,48 @@ class CardWaitListModuleTest: XCTestCase {
private let card = ModelDataProvider.provider.waitListedCard
private let cardProduct = ModelDataProvider.provider.cardProduct
private lazy var presenter = serviceLocator.presenterLocatorFake.cardWaitListPresenterSpy
private lazy var platform = serviceLocator.platformFake

override func setUp() {
super.setUp()

sut = CardWaitListModule(serviceLocator: serviceLocator, card: card, cardProduct: cardProduct)
sut = CardWaitListModule(serviceLocator: serviceLocator, card: card)
}

func testInitializeCallbackSuccess() {
func testInitializeCallFetchCardProduct() {
// When
sut.initialize { _ in }

// Then
XCTAssertTrue(platform.fetchCardProductCalled)
}

func testCardProductLoadFailsCallbackFailure() {
// Given
var returnedResult: Result<UIViewController, NSError>?
platform.nextFetchCardProductResult = .failure(BackendError(code: .other))

// When
sut.initialize { result in
returnedResult = result
// Then
XCTAssertTrue(result.isFailure)
}
}

// Then
XCTAssertEqual(true, returnedResult?.isSuccess)
func testCardProductLoadSucceedInitializeCallbackSuccess() {
// Given
platform.nextFetchCardProductResult = .success(cardProduct)

// When
sut.initialize { result in
// Then
XCTAssertTrue(result.isSuccess)
}
}

func testInitializeSetUpPresenter() {
// Given
platform.nextFetchCardProductResult = .success(cardProduct)

// When
sut.initialize { _ in }

Expand Down
Expand Up @@ -51,4 +51,5 @@ class ExternalOAuthViewModel {
let newUserAction: Observable<String?> = Observable(nil)
let error: Observable<Error?> = Observable(nil)
let allowedBalanceTypes: Observable<[AllowedBalanceType]?> = Observable(nil)
let assetUrl: Observable<URL?> = Observable(nil)
}
Expand Up @@ -13,5 +13,6 @@ struct ExternalOAuthModuleConfig {
let callToAction: String
let newUserAction: String
let allowedBalanceTypes: [AllowedBalanceType]
let assetUrl: URL?
let oauthErrorMessageKeys: [String]?
}
Expand Up @@ -30,6 +30,7 @@ class ExternalOAuthPresenter: ExternalOAuthPresenterProtocol {
viewModel.callToAction.send(config.callToAction)
viewModel.newUserAction.send(config.newUserAction)
viewModel.allowedBalanceTypes.send(config.allowedBalanceTypes)
viewModel.assetUrl.send(config.assetUrl)
analyticsManager?.track(event: Event.selectBalanceStoreLogin)
}

Expand Down

0 comments on commit 14d86ee

Please sign in to comment.