This repository has been archived by the owner on Jan 4, 2023. It is now read-only.
/
ArtsyAPISpec.swift
121 lines (97 loc) · 3.76 KB
/
ArtsyAPISpec.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import Quick
import Nimble
@testable
import Kiosk
import RxSwift
import Keys
import Moya
func beInTheFuture() -> Predicate<Date> {
return Predicate.fromDeprecatedClosure { actualExpression, failureMessage in
let instance = try! actualExpression.evaluate()!
let now = Date()
return instance.compare(now) == ComparisonResult.orderedDescending
}
}
class ArtsyAPISpec: QuickSpec {
override func spec() {
var defaults: UserDefaults!
var disposeBag: DisposeBag!
var networking: Networking!
func newXAppRequest() -> Observable<Moya.Response> {
return networking.request(ArtsyAPI.auctions)
}
beforeEach {
defaults = UserDefaults()
networking = Networking.newStubbingNetworking()
}
beforeEach {
disposeBag = DisposeBag()
}
describe("keys") {
it("stubs responses for invalid keys") {
let invalidKeys = APIKeys(key: "", secret: "")
expect(invalidKeys.stubResponses).to(beTruthy())
}
it("doesn't stub responses for valid keys") {
let validKeys = APIKeys(key: "key", secret: "secret")
expect(validKeys.stubResponses).to(beFalsy())
}
}
describe("requests") {
beforeSuite {
// Force provider to stub responses
APIKeys.sharedKeys = APIKeys(key: "", secret: "")
}
afterSuite {
// Reset provider
APIKeys.sharedKeys = APIKeys()
}
it("returns some data") {
setDefaultsKeys(defaults, key: nil, expiry: nil)
var called = false
// Make any XApp request, doesn't matter which, but make sure to subscribe so it actually fires
newXAppRequest().subscribe(onNext: { (object) in
called = true
}).disposed(by: disposeBag)
expect(called).to(beTruthy())
}
it("gets XApp token if it doesn't exist yet") {
setDefaultsKeys(defaults, key: nil, expiry: nil)
waitUntil { done in
newXAppRequest().subscribe(onNext: { (object) in
// nop
done()
}).disposed(by: disposeBag)
}
let past = Date(timeIntervalSinceNow: -1000)
expect(getDefaultsKeys(defaults).key).to(equal("STUBBED TOKEN!"))
expect(getDefaultsKeys(defaults).expiry).toNot(beNil())
expect(getDefaultsKeys(defaults).expiry ?? past).to(beInTheFuture())
}
it("gets XApp token if it has expired") {
let past = Date(timeIntervalSinceNow: -1000)
setDefaultsKeys(defaults, key: "some expired key", expiry: past)
newXAppRequest().subscribe(onNext: { (object) in
// nop
}).disposed(by: disposeBag)
expect(getDefaultsKeys(defaults).key).to(equal("STUBBED TOKEN!"))
expect(getDefaultsKeys(defaults).expiry).toNot(beNil())
expect(getDefaultsKeys(defaults).expiry ?? past).to(beInTheFuture())
}
}
}
}
class TestKeys: EidolonKeys {
let key: String
let secret: String
init(key: String, secret: String) {
self.key = key
self.secret = secret
}
override var artsyAPIClientKey: String {
return key
}
override var artsyAPIClientSecret: String {
return secret
}
}