-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
86 lines (74 loc) · 2.42 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
var path = require('path');
var fs = require('fs');
var qs = require('query-string');
var utils = require('./utils.js');
var DEFAULT_CONFIG = {
validateStatus: function (status) {
return status >= 200 && status < 300;
},
};
function getResponse(method, url, data, _config) {
var default_config_copy = Object.assign({}, DEFAULT_CONFIG);
var config = Object.assign(default_config_copy, _config || {});
var mockups_path = config.mockupsPath || __dirname;
var url_slipt = url.split('?', 2);
var url_path = url_slipt[0];
if (url_path.slice(-1) === '/') {
url_path = url_slipt[0].slice(0, -1);
}
var query_string = qs.parse(url_slipt[1] || '');
var mockup_path = path.join(
mockups_path,
method,
url_path + '.json');
var mockup_file_content = fs.readFileSync(mockup_path, 'utf8');
var mockup_content = JSON.parse(mockup_file_content);
var data_str = utils.dictToComparableStr(data || {});
var results = mockup_content.filter(function (mockup) {
// Check data
if (data || mockup.data) {
var mockup_data_str = utils.dictToComparableStr(mockup.data || {});
if (data_str !== mockup_data_str) return false;
}
// Check headers
if (config.headers || mockup.headers) {
var headers_str = utils.dictToComparableStr(config.headers || {});
var mockup_headers_str = utils.dictToComparableStr(mockup.headers || {});
if (headers_str !== mockup_headers_str) return false;
}
// Check query string
if (query_string || mockup.query_string) {
var query_string_str = utils.dictToComparableStr(query_string || {});
var mockup_query_string_str = utils.dictToComparableStr(mockup.query_string || {});
if (query_string_str !== mockup_query_string_str) return false;
}
return true;
});
var result = results.shift();
if (result) {
var response = result.response;
if (response && response.status && !config.validateStatus(response.status)) {
var error = new Error(response);
error.response = response;
throw error;
}
return response;
}
throw new Error('Mockup don\'t match');
}
module.exports = {
getResponse: getResponse,
create: function (method, config) {
return function (url, data, extraConfig) {
return getResponse(
method,
url,
data,
Object.assign(
Object.assign({}, config || {}),
extraConfig || {})
);
};
},
utils: utils,
};