summaryrefslogtreecommitdiff
path: root/test/api.scm
blob: 1a85a77cc772bf029855ad2652060fb83e61d531 (plain)
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
(use-modules (ibkr api)
	     (ibkr types)
	     (json)
	     (web uri)
	     (web request)
	     (srfi srfi-64)
	     (ice-9 textual-ports)
	     (ice-9 iconv))

;; (test-begin "errors")
;; (test-error &ibkr-request-error (auth-status-connected "http://localhost:12345"))
;; (test-end "errors")

(define (read-text path)
  (call-with-input-file path (lambda (p) (get-string-all p))))

(test-begin "auth-status")
(test-equal "uri" "http://base/v1/api/iserver/auth/status"
	    (auth-status-uri "http://base"))
(test-end "auth-status")

(test-begin "accounts")
(test-equal "uri" "http://base/v1/api/portfolio/accounts"
	    (accounts-uri "http://base"))
(let ((body (read-text "test/account-response.json")))
  (test-assert "conversion" (account? (car (response-body->accounts body)))))
(test-end "accounts")

(test-begin "positions")
(test-equal "uri" "http://base/v1/api/portfolio2/ACCT/positions"
	    (positions-uri "http://base" "ACCT"))
(let ((body (read-text "test/position-response.json")))
  (test-assert "conversion" (position? (car (response-body->positions body)))))
(test-end "positions")

(test-begin "ledger")
(test-equal "uri" "http://base/v1/api/portfolio/ACCT/ledger"
	    (ledger-uri "http://base" "ACCT"))
(let ((body (read-text "test/ledger-response.json")))
  (test-assert "conversion" (ledger? (response-body->ledger body "USD"))))
(test-end "ledger")

(test-begin "stocks")
(test-equal "uri"
  "http://base/v1/api/trsrv/stocks?symbols=IBKR"
  (stocks-by-symbol-uri "http://base" "IBKR"))
(let* ((body (read-text "test/stocks-response.json"))
       (converted (response-body->stocks-by-symbol body "AAPL")))
  (test-assert "conversion-list" (list? converted))
  (test-assert "conversion-type" (stock? (car converted)))
  (test-assert "contract-list" (list? (stock-contracts (car converted))))
  (test-equal "exchange-search"
    265598 (contract-id (first-contract-on-exchange converted "NASDAQ"))))
(test-end "stocks")

(test-begin "contract-snapshot")
(test-equal "uri"
  "http://base/v1/api/iserver/marketdata/snapshot?conids=265598&fields=31"
  (contract-snapshot-uri "http://base" 265598 'last-trade))
(let ((body (read-text "test/snapshot-response.json")))
  (test-assert "conversion"
    (number? (response-body->contract-snapshot body 'last-trade))))
(test-end "contract-snapshot")

(test-begin "order-preview")
(test-equal "uri" "http://base/v1/api/iserver/account/ACCT/orders/whatif"
	    (order-preview-uri "http://base" "ACCT"))
(test-end "order-preview")

(test-begin "order-submit")
(test-equal "uri" "http://base/v1/api/iserver/account/ACCT/orders"
	    (order-submit-uri "http://base" "ACCT"))
(test-end "order-submit")

(test-begin "order-status")
(test-equal "uri" "http://base/v1/api/iserver/account/order/status/OID"
	    (order-status-uri "http://base" "OID"))
(test-end "order-status")

(test-begin "suppress")
(test-equal "uri" "http://base/v1/api/iserver/questions/suppress"
	    (suppress-uri "http://base"))
(test-end "suppress")

(test-begin "reset-suppress")
(test-equal "uri" "http://base/v1/api/iserver/questions/suppress/reset"
	    (reset-suppress-uri "http://base"))
(test-end "reset-suppress")

(test-begin "reply")
(test-equal "uri" "http://base/v1/api/iserver/reply/REPID"
	    (reply-uri "http://base" "REPID"))
(test-end "reply")