(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")