Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit 99808be

Browse files
author
Alan Shaw
committed
test: add HTTP API tests for pin.* with cid-base option
License: MIT Signed-off-by: Alan Shaw <[email protected]>
1 parent 4961cf4 commit 99808be

File tree

2 files changed

+175
-3
lines changed

2 files changed

+175
-3
lines changed

src/http/api/routes/pin.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ module.exports = (server) => {
1212
pre: [
1313
{ method: resources.pin.add.parseArgs, assign: 'args' }
1414
],
15-
handler: resources.pin.add.handler
15+
handler: resources.pin.add.handler,
16+
validate: resources.pin.add.validate
1617
}
1718
})
1819

@@ -23,7 +24,8 @@ module.exports = (server) => {
2324
pre: [
2425
{ method: resources.pin.rm.parseArgs, assign: 'args' }
2526
],
26-
handler: resources.pin.rm.handler
27+
handler: resources.pin.rm.handler,
28+
validate: resources.pin.rm.validate
2729
}
2830
})
2931

@@ -34,7 +36,8 @@ module.exports = (server) => {
3436
pre: [
3537
{ method: resources.pin.ls.parseArgs, assign: 'args' }
3638
],
37-
handler: resources.pin.ls.handler
39+
handler: resources.pin.ls.handler,
40+
validate: resources.pin.ls.validate
3841
}
3942
})
4043
}

test/http-api/inject/pin.js

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
'use strict'
44

55
const expect = require('chai').expect
6+
const FormData = require('form-data')
7+
const streamToPromise = require('stream-to-promise')
8+
const multibase = require('multibase')
69

710
// We use existing pin structure in the go-ipfs-repo fixture
811
// so that we don't have to stream a bunch of object/put operations
@@ -77,6 +80,62 @@ module.exports = (http) => {
7780
})
7881
})
7982
})
83+
84+
it('should remove pin and return base64 encoded CID', done => {
85+
const form = new FormData()
86+
form.append('data', Buffer.from('TEST' + Date.now()))
87+
const headers = form.getHeaders()
88+
89+
streamToPromise(form).then((payload) => {
90+
api.inject({
91+
method: 'POST',
92+
url: '/api/v0/add',
93+
headers: headers,
94+
payload: payload
95+
}, (res) => {
96+
expect(res.statusCode).to.equal(200)
97+
const hash = JSON.parse(res.result).Hash
98+
99+
api.inject({
100+
method: 'POST',
101+
url: `/api/v0/pin/rm?arg=${hash}&cid-base=base64`
102+
}, (res) => {
103+
expect(res.statusCode).to.equal(200)
104+
res.result.Pins.forEach(cid => {
105+
expect(multibase.isEncoded(cid)).to.deep.equal('base64')
106+
})
107+
done()
108+
})
109+
})
110+
})
111+
})
112+
113+
it('should not remove pin for invalid cid-base option', done => {
114+
const form = new FormData()
115+
form.append('data', Buffer.from('TEST' + Date.now()))
116+
const headers = form.getHeaders()
117+
118+
streamToPromise(form).then((payload) => {
119+
api.inject({
120+
method: 'POST',
121+
url: '/api/v0/add',
122+
headers: headers,
123+
payload: payload
124+
}, (res) => {
125+
expect(res.statusCode).to.equal(200)
126+
const hash = JSON.parse(res.result).Hash
127+
128+
api.inject({
129+
method: 'POST',
130+
url: `/api/v0/pin/rm?arg=${hash}&cid-base=invalid`
131+
}, (res) => {
132+
expect(res.statusCode).to.equal(400)
133+
expect(res.result.Message).to.include('child "cid-base" fails')
134+
done()
135+
})
136+
})
137+
})
138+
})
80139
})
81140

82141
describe('add', () => {
@@ -115,6 +174,62 @@ module.exports = (http) => {
115174
done()
116175
})
117176
})
177+
178+
it('should add pin and return base64 encoded CID', done => {
179+
const form = new FormData()
180+
form.append('data', Buffer.from('TEST' + Date.now()))
181+
const headers = form.getHeaders()
182+
183+
streamToPromise(form).then((payload) => {
184+
api.inject({
185+
method: 'POST',
186+
url: '/api/v0/add?pin=false',
187+
headers: headers,
188+
payload: payload
189+
}, (res) => {
190+
expect(res.statusCode).to.equal(200)
191+
const hash = JSON.parse(res.result).Hash
192+
193+
api.inject({
194+
method: 'POST',
195+
url: `/api/v0/pin/add?arg=${hash}&cid-base=base64`
196+
}, (res) => {
197+
expect(res.statusCode).to.equal(200)
198+
res.result.Pins.forEach(cid => {
199+
expect(multibase.isEncoded(cid)).to.deep.equal('base64')
200+
})
201+
done()
202+
})
203+
})
204+
})
205+
})
206+
207+
it('should not add pin for invalid cid-base option', done => {
208+
const form = new FormData()
209+
form.append('data', Buffer.from('TEST' + Date.now()))
210+
const headers = form.getHeaders()
211+
212+
streamToPromise(form).then((payload) => {
213+
api.inject({
214+
method: 'POST',
215+
url: '/api/v0/add?pin=false',
216+
headers: headers,
217+
payload: payload
218+
}, (res) => {
219+
expect(res.statusCode).to.equal(200)
220+
const hash = JSON.parse(res.result).Hash
221+
222+
api.inject({
223+
method: 'POST',
224+
url: `/api/v0/pin/add?arg=${hash}&cid-base=invalid`
225+
}, (res) => {
226+
expect(res.statusCode).to.equal(400)
227+
expect(res.result.Message).to.include('child "cid-base" fails')
228+
done()
229+
})
230+
})
231+
})
232+
})
118233
})
119234

120235
describe('ls', () => {
@@ -165,6 +280,60 @@ module.exports = (http) => {
165280
done()
166281
})
167282
})
283+
284+
it('should list pins and return base64 encoded CIDs', done => {
285+
const form = new FormData()
286+
form.append('data', Buffer.from('TEST' + Date.now()))
287+
const headers = form.getHeaders()
288+
289+
streamToPromise(form).then((payload) => {
290+
api.inject({
291+
method: 'POST',
292+
url: '/api/v0/add',
293+
headers: headers,
294+
payload: payload
295+
}, (res) => {
296+
expect(res.statusCode).to.equal(200)
297+
298+
api.inject({
299+
method: 'POST',
300+
url: `/api/v0/pin/ls?cid-base=base64`
301+
}, (res) => {
302+
expect(res.statusCode).to.equal(200)
303+
Object.keys(res.result.Keys).forEach(cid => {
304+
expect(multibase.isEncoded(cid)).to.deep.equal('base64')
305+
})
306+
done()
307+
})
308+
})
309+
})
310+
})
311+
312+
it('should not list pins for invalid cid-base option', done => {
313+
const form = new FormData()
314+
form.append('data', Buffer.from('TEST' + Date.now()))
315+
const headers = form.getHeaders()
316+
317+
streamToPromise(form).then((payload) => {
318+
api.inject({
319+
method: 'POST',
320+
url: '/api/v0/add',
321+
headers: headers,
322+
payload: payload
323+
}, (res) => {
324+
expect(res.statusCode).to.equal(200)
325+
326+
api.inject({
327+
method: 'POST',
328+
url: `/api/v0/pin/ls?cid-base=invalid`
329+
}, (res) => {
330+
expect(res.statusCode).to.equal(400)
331+
expect(res.result.Message).to.include('child "cid-base" fails')
332+
done()
333+
})
334+
})
335+
})
336+
})
168337
})
169338
})
170339
}

0 commit comments

Comments
 (0)