UNPKG

3.78 kBJavaScriptView Raw
1'use strict';
2
3const Path = require('path');
4const { expect } = require('code');
5const Hapi = require('hapi');
6const Lab = require('lab');
7const StandIn = require('stand-in');
8const CloudApiGql = require('../lib/');
9const CloudApi = require('../lib/cloudapi');
10
11
12const lab = exports.lab = Lab.script();
13const { describe, it, afterEach } = lab;
14
15
16describe('keys', () => {
17 afterEach(() => {
18 StandIn.restoreAll();
19 });
20
21 it('can get all keys', async () => {
22 const keys = [{
23 name: 'test',
24 fingerprint: 'fingerprint',
25 value: 'foo'
26 }];
27
28 const server = new Hapi.Server();
29 StandIn.replaceOnce(CloudApi.prototype, 'fetch', (stand) => {
30 return keys;
31 });
32
33 await server.register({ plugin: CloudApiGql, options: { keyPath: Path.join(__dirname, 'test.key') } });
34 await server.initialize();
35 const res = await server.inject({
36 url: '/graphql',
37 method: 'post',
38 payload: { query: 'query { keys { name fingerprint value } }' }
39 });
40 expect(res.statusCode).to.equal(200);
41 expect(res.result.data.keys).to.exist();
42 expect(res.result.data.keys[0].name).to.equal(keys[0].name);
43 expect(res.result.data.keys[0].fingerprint).to.equal(keys[0].fingerprint);
44 expect(res.result.data.keys[0].value).to.equal(keys[0].value);
45 });
46
47 it('can get a single key', async () => {
48 const key = {
49 name: 'test',
50 fingerprint: 'fingerprint',
51 value: 'foo'
52 };
53
54 const server = new Hapi.Server();
55 StandIn.replaceOnce(CloudApi.prototype, 'fetch', (stand) => {
56 return key;
57 });
58
59 await server.register({ plugin: CloudApiGql, options: { keyPath: Path.join(__dirname, 'test.key') } });
60 await server.initialize();
61 const res = await server.inject({
62 url: '/graphql',
63 method: 'post',
64 payload: { query: 'query { key(name: "test") { name fingerprint value } }' }
65 });
66 expect(res.statusCode).to.equal(200);
67 expect(res.result.data.key).to.exist();
68 expect(res.result.data.key.name).to.equal(key.name);
69 expect(res.result.data.key.fingerprint).to.equal(key.fingerprint);
70 expect(res.result.data.key.value).to.equal(key.value);
71 });
72
73 it('can create a key', async () => {
74 const server = new Hapi.Server();
75 StandIn.replaceOnce(CloudApi.prototype, 'fetch', (stand, path, options) => {
76 return {
77 name: options.payload.name,
78 value: options.payload.key,
79 fingerprint: 'fingerprint'
80 };
81 });
82
83 await server.register({ plugin: CloudApiGql, options: { keyPath: Path.join(__dirname, 'test.key') } });
84 await server.initialize();
85 const res = await server.inject({
86 url: '/graphql',
87 method: 'post',
88 payload: { query: 'mutation { createKey(name: "test", key: "foo") { name fingerprint value } }' }
89 });
90 expect(res.statusCode).to.equal(200);
91 expect(res.result.data.createKey).to.exist();
92 expect(res.result.data.createKey.name).to.equal('test');
93 expect(res.result.data.createKey.fingerprint).to.equal('fingerprint');
94 expect(res.result.data.createKey.value).to.equal('foo');
95 });
96
97 it('can delete a key', async () => {
98 const server = new Hapi.Server();
99 StandIn.replaceOnce(CloudApi.prototype, 'fetch', (stand, path) => {
100 return {
101 name: path.split('/').pop()
102 };
103 });
104
105 await server.register({ plugin: CloudApiGql, options: { keyPath: Path.join(__dirname, 'test.key') } });
106 await server.initialize();
107 const res = await server.inject({
108 url: '/graphql',
109 method: 'post',
110 payload: { query: 'mutation { deleteKey(name: "test") { name } }' }
111 });
112 expect(res.statusCode).to.equal(200);
113 expect(res.result.data.deleteKey).to.exist();
114 expect(res.result.data.deleteKey.name).to.equal('test');
115 });
116});