UNPKG

4.63 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('images', () => {
17 afterEach(() => {
18 StandIn.restoreAll();
19 });
20
21 const register = {
22 plugin: CloudApiGql,
23 options: {
24 keyPath: Path.join(__dirname, 'test.key'),
25 keyId: 'test',
26 apiBaseUrl: 'http://localhost'
27 }
28 };
29
30 const image = {
31 id: '2b683a82-a066-11e3-97ab-2faa44701c5a',
32 name: 'base',
33 version: '13.4.0',
34 os: 'smartos',
35 requirements: {},
36 type: 'zone-dataset',
37 description: 'A 32-bit SmartOS image with just essential packages installed. Ideal for users who are comfortable with setting up their own environment and tools.',
38 files: [
39 {
40 compression: 'gzip',
41 sha1: '3bebb6ae2cdb26eef20cfb30fdc4a00a059a0b7b',
42 size: 110742036
43 }
44 ],
45 tags: {
46 role: 'os',
47 group: 'base-32'
48 },
49 homepage: 'https://docs.joyent.com/images/smartos/base',
50 published_at: '2014-02-28T10:50:42Z',
51 owner: '930896af-bf8c-48d4-885c-6573a94b1853',
52 public: true,
53 state: 'active'
54 };
55
56 it('can get all images', async () => {
57 const server = new Hapi.Server();
58 StandIn.replaceOnce(CloudApi.prototype, 'fetch', (stand) => {
59 return [image];
60 });
61
62 await server.register(register);
63 await server.initialize();
64 const res = await server.inject({
65 url: '/graphql',
66 method: 'post',
67 payload: { query: 'query { images(name: "base") { name os type } }' }
68 });
69 expect(res.statusCode).to.equal(200);
70 expect(res.result.data.images).to.exist();
71 expect(res.result.data.images[0].name).to.equal(image.name);
72 expect(res.result.data.images[0].os).to.equal(image.os.toUpperCase());
73 expect(res.result.data.images[0].type).to.equal(image.type.toUpperCase().replace('-', '_'));
74 });
75
76
77 it('can get a single image', async () => {
78 const server = new Hapi.Server();
79 StandIn.replaceOnce(CloudApi.prototype, 'fetch', (stand) => {
80 return image;
81 });
82
83 await server.register(register);
84 await server.initialize();
85 const res = await server.inject({
86 url: '/graphql',
87 method: 'post',
88 payload: { query: `query { image(id: "${image.id}") { name os type state } }` }
89 });
90 expect(res.statusCode).to.equal(200);
91 expect(res.result.data.image).to.exist();
92 expect(res.result.data.image.name).to.equal(image.name);
93 expect(res.result.data.image.os).to.equal(image.os.toUpperCase());
94 expect(res.result.data.image.type).to.equal(image.type.toUpperCase().replace('-', '_'));
95 });
96
97 it('can create an image from a machine', async () => {
98 const server = new Hapi.Server();
99 StandIn.replace(CloudApi.prototype, 'fetch', (stand) => {
100 return image;
101 }, { stopAfter: 2 });
102
103 await server.register(register);
104 await server.initialize();
105 const res = await server.inject({
106 url: '/graphql',
107 method: 'post',
108 payload: { query: `mutation {
109 createImageFromMachine(machine: "${image.id}", name: "base", version: "13.4.0") {
110 name os type version
111 }
112 }` }
113 });
114 expect(res.statusCode).to.equal(200);
115 expect(res.result.data.createImageFromMachine).to.exist();
116 expect(res.result.data.createImageFromMachine.name).to.equal(image.name);
117 expect(res.result.data.createImageFromMachine.os).to.equal(image.os.toUpperCase());
118 expect(res.result.data.createImageFromMachine.type).to.equal(image.type.toUpperCase().replace('-', '_'));
119 });
120
121 it('can update an image', async () => {
122 const server = new Hapi.Server();
123 StandIn.replace(CloudApi.prototype, 'fetch', (stand) => {
124 return image;
125 }, { stopAfter: 2 });
126
127 await server.register(register);
128 await server.initialize();
129 const res = await server.inject({
130 url: '/graphql',
131 method: 'post',
132 payload: { query: `mutation {
133 updateImage(id: "${image.id}", name: "base", version: "13.4.0") {
134 name os type version
135 }
136 }` }
137 });
138 expect(res.statusCode).to.equal(200);
139 expect(res.result.data.updateImage).to.exist();
140 expect(res.result.data.updateImage.name).to.equal(image.name);
141 expect(res.result.data.updateImage.os).to.equal(image.os.toUpperCase());
142 expect(res.result.data.updateImage.type).to.equal(image.type.toUpperCase().replace('-', '_'));
143 });
144});