f5b6867fadc62011476502e92597b04d734ce93c
[it/otf.git] / execute.class.js
1 /*  Copyright (c) 2019 AT&T Intellectual Property.                             #\r
2 #                                                                              #\r
3 #   Licensed under the Apache License, Version 2.0 (the "License");            #\r
4 #   you may not use this file except in compliance with the License.           #\r
5 #   You may obtain a copy of the License at                                    #\r
6 #                                                                              #\r
7 #       http://www.apache.org/licenses/LICENSE-2.0                             #\r
8 #                                                                              #\r
9 #   Unless required by applicable law or agreed to in writing, software        #\r
10 #   distributed under the License is distributed on an "AS IS" BASIS,          #\r
11 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #\r
12 #   See the License for the specific language governing permissions and        #\r
13 #   limitations under the License.                                             #\r
14 ##############################################################################*/\r
15 \r
16 \r
17 const request = require('request');\r
18 const Response = require('http-response-object');\r
19 const logger = require('../../../lib/logger');\r
20 const util = require('../../../lib/otf-util');\r
21 const errors = require('@feathersjs/errors');\r
22 \r
23 class Service {\r
24         constructor (options) {\r
25                 this.options = options || {};\r
26         }\r
27 \r
28         async find (params) {\r
29                 return [];\r
30     }\r
31     \r
32         async get (id, params) {\r
33 \r
34         }\r
35 \r
36         async create (data, params) {\r
37                 \r
38         let id = data._id;\r
39                 delete data._id;\r
40                 delete data.createdBy;\r
41                 \r
42         let options = {\r
43                         url: this.options.app.get('serviceApi').url + 'testInstance/execute/v1/id/' + id,\r
44                         headers: {\r
45                                 'Authorization': 'Basic ' + util.base64Encode(this.options.app.get('serviceApi').aafId + ':' + this.options.app.get('serviceApi').aafPassword),\r
46                                 'Content-Type': "application/json"\r
47                         },\r
48             rejectUnauthorized: false,\r
49             body: JSON.stringify(data)\r
50                 }\r
51 \r
52                 return await new Promise((resolve, reject) => {\r
53                         request.post(options, (err, res, body) => {\r
54                                 if(err){\r
55                                         reject(err);\r
56                                 }\r
57                                 if(res.body){\r
58                                         res.body = JSON.parse(res.body);\r
59                                         if(res.body.statusCode != 200){\r
60                                                 reject(res.body);\r
61                                         }\r
62                                         resolve(res.body);\r
63                                 }else{\r
64                                         reject(res);\r
65                                 }\r
66                                 \r
67                         });\r
68                 }).then(\r
69                         res => {\r
70                 return res;\r
71             }\r
72                 ).catch(\r
73                         err => {\r
74                                 return err;\r
75                         }\r
76                 );\r
77         }\r
78 \r
79         async update (id, data, params) {\r
80                 return data;\r
81         }\r
82 \r
83         async patch (id, data, params) {\r
84                 return data;\r
85         }\r
86 \r
87         async remove (id, params) {\r
88 \r
89                 let execution = await this.options.app.services[this.options.app.get('base-path') + 'test-executions'].get(id, { query: { $select: ['processInstanceId']}});\r
90                 \r
91                 if(!execution.processInstanceId){\r
92                         throw new errors.GeneralError('Could not find the execution process instance id');\r
93                 }\r
94 \r
95                 let options = {\r
96                         url: this.options.app.get('camundaApi').url + 'otf/tcu/delete-process-instance/v1/' + execution.processInstanceId,\r
97                         headers: {\r
98                                 'Authorization': 'Basic ' + util.base64Encode(this.options.app.get('serviceApi').aafId + ':' + this.options.app.get('serviceApi').aafPassword),\r
99                                 'Content-Type': "application/json"\r
100                         },\r
101                         rejectUnauthorized: false\r
102                 }\r
103 \r
104                 return await new Promise((resolve, reject) => {\r
105                         request.delete(options, (err, res, body) => {\r
106                                 if(err){\r
107                                         reject(err);\r
108                                 }\r
109                                 if(res.body){\r
110                                         res.body = JSON.parse(res.body);\r
111                                 }\r
112                                 resolve(res);\r
113                         });\r
114                 }).then(\r
115                         res => {\r
116                                 return res;\r
117                         }\r
118                 ).catch(\r
119                         err => {\r
120                                 console.log(err);\r
121                         }\r
122                 );\r
123         }\r
124 \r
125 \r
126 }\r
127 \r
128 module.exports = function (options) {\r
129         return new Service(options);\r
130 };\r
131 \r
132 module.exports.Service = Service;\r