Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions endpoints/btc/documentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Bitcoin to ISK price

Source [Myntkaup.is](https://myntkaup.is)

- GET [/btc](https://apis.is/btc)

Current Bitcoin to ISK exchange rate.

---
41 changes: 41 additions & 0 deletions endpoints/btc/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const request = require('request')
const app = require('../../server')

// set cache time to 1 minute
const cacheTime = 60

function queryGzipJson(url, callback) {
const headers = {
'user-agent': 'apis.is',
}
request.get({
headers,
url,
gzip: true,
json: true,
}, (error, response, data) => {
if (error || response.statusCode !== 200) {
callback(error, response, null)
}
callback(error, response, data)
})
}

function queryRate(callback) {
queryGzipJson('https://myntkaup.is/api/assets/bitcoin', callback)
}

function standardErrorResponse(res) {
return res.status(500).json({
error: 'myntkaup.is refuses to respond or give back data',
})
}

app.get('/btc', (req, res) => {
queryRate((error, response, data) => {
if (error || response.statusCode !== 200) {
return standardErrorResponse(res)
}
return res.cache(cacheTime).json(data)
})
})
33 changes: 33 additions & 0 deletions endpoints/btc/tests/integration_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/* eslint-disable no-bitwise */
/* eslint-disable import/first */
/* eslint-disable import/extensions */
const request = require('request')
const helpers = require('../../../lib/test_helpers.js')

describe('btc', function () {
this.timeout(20000)
const rateTypes = {
id: String,
symbol: String,
currencySymbol: String,
rateUsd: Number,
rateIsk: Number,
rateIskFriendly: String
}
const statsFields = Object.keys(rateTypes)
it('should return object containing specific fields with correct types', (done) => {
const params = helpers.testRequestParams('/btc')
request.get(params, (err, res, body) => {
if (err) throw err
let json
try {
json = JSON.parse(body)
} catch (e) {
throw e
}
helpers.assertPresenceOfFields(statsFields, [json])
helpers.assertTypesOfFields(rateTypes, [json])
done()
})
})
})
Loading