Skip to content

Commit 66dc32b

Browse files
author
Thomas Rosenau
committed
GH-1 Add second example project
including - static files - .development.json config overrides - display of config files in web interface
1 parent fe6059e commit 66dc32b

22 files changed

+267
-1
lines changed

.idea/jsLibraryMappings.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/example/config/server.port.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"port": 8080,
3-
"sslPort": 43
3+
"sslPort": 4443
44
}

src/example2/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.development.json
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"public": "example2-public",
3+
"mock": "example2-mocks"
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"port": 8081,
3+
"sslPort": 4444
4+
}

src/example2/config/server.port.json

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"port": 80,
3+
"sslPort": 443
4+
}

src/example2/config/server.proxy.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"backend": "https://api.github.com/users/SEITENBAU/repos",
3+
"delayedServices": {
4+
"/EXAMPLE": 42
5+
},
6+
"rejectUnauthorized": false
7+
}

src/example2/config/server.root.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"root": "/example2",
3+
"serviceBasePath": "rest/",
4+
"defaultFile": "index.html"
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"active": true,
3+
"services": [
4+
{
5+
"active": true,
6+
"path": "exampleEndpoint",
7+
"file": "delete-result.example.json",
8+
"delayBy": 5000
9+
}
10+
]
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"active": true,
3+
"services": [
4+
]
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"active": true,
3+
"services": [
4+
{
5+
"active": true,
6+
"path": "exampleEndpoint",
7+
"file": "get-result.example.json"
8+
}
9+
]
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"active": true,
3+
"services": [
4+
]
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"active": true,
3+
"services": [
4+
{
5+
"active": true,
6+
"path": "exampleEndpoint",
7+
"file": "post-result.example.json",
8+
"delayBy": 100
9+
}
10+
]
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"active": true,
3+
"services": [
4+
]
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"active": true,
3+
"services": [
4+
{
5+
"active": true,
6+
"path": "exampleEndpoint",
7+
"file": "put-result.example.json",
8+
"delayBy": 1000
9+
}
10+
]
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"active": true,
3+
"services": [
4+
5+
]
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"method": "DELETE",
3+
"result": "ok"
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"method": "GET",
3+
"result": "ok",
4+
"foo": 42
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"method": "POST",
3+
"result": "ok"
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"method": "PUT",
3+
"result": "ok"
4+
}
Loading
+159
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
<!doctype html>
2+
<html lang=en>
3+
<head>
4+
5+
<meta charset=utf-8>
6+
<title>mix-n-mock!</title>
7+
<style type="text/css">
8+
html {
9+
background: white;
10+
}
11+
body {
12+
font: 16px / 1.2 Arial, sans-serif;
13+
}
14+
body:before {
15+
display: block;
16+
width: 200px;
17+
height: 100px;
18+
content: '';
19+
float: right;
20+
background: transparent top center no-repeat url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="-11.6 -12.4 70 24.8"><g stroke-width="6" fill="none" stroke-linejoin="round" stroke-linecap="round" fill-opacity=".05"><circle r="8.2" stroke="%230d47a1" fill="%230d47a1"/><path d="M 17.2,9 l 1.5,-18 m 10,0 l -1.5,18" stroke="%23263238"/><path d="M 39,8 v -16 h 16 v 16 z" stroke="%23f57f17" fill="%23f57f17"/></g></svg>');
21+
background-size: contain;
22+
}
23+
24+
ul, li {
25+
list-style: none;
26+
padding: 0;
27+
display: block;
28+
margin: 0 0 1em;
29+
}
30+
ul {
31+
padding-bottom: 20px;
32+
clear: both;
33+
}
34+
35+
body[data-loading] ul {
36+
background: transparent left bottom no-repeat url("data:image/gif;base64,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EAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAADxiciAvPgo8Yj5XYXJuaW5nPC9iPjogIG15c3FsX3F1ZXJ5KCkgWzxhIGhyZWY9J2Z1bmN0aW9uLm15c3FsLXF1ZXJ5Jz5mdW5jdGlvbi5teXNxbC1xdWVyeTwvYT5dOiBDYW4ndCBjb25uZWN0IHRvIGxvY2FsIE15U1FMIHNlcnZlciB0aHJvdWdoIHNvY2tldCAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAoMikgaW4gPGI+L2hvbWUvYWpheGxvYWQvd3d3L2xpYnJhaXJpZXMvY2xhc3MubXlzcWwucGhwPC9iPiBvbiBsaW5lIDxiPjY4PC9iPjxiciAvPgo8YnIgLz4KPGI+V2FybmluZzwvYj46ICBteXNxbF9xdWVyeSgpIFs8YSBocmVmPSdmdW5jdGlvbi5teXNxbC1xdWVyeSc+ZnVuY3Rpb24ubXlzcWwtcXVlcnk8L2E+XTogQSBsaW5rIHRvIHRoZSBzZXJ2ZXIgY291bGQgbm90IGJlIGVzdGFibGlzaGVkIGluIDxiPi9ob21lL2FqYXhsb2FkL3d3dy9saWJyYWlyaWVzL2NsYXNzLm15c3FsLnBocDwvYj4gb24gbGluZSA8Yj42ODwvYj48YnIgLz4KPGJyIC8+CjxiPldhcm5pbmc8L2I+OiAgbXlzcWxfcXVlcnkoKSBbPGEgaHJlZj0nZnVuY3Rpb24ubXlzcWwtcXVlcnknPmZ1bmN0aW9uLm15c3FsLXF1ZXJ5PC9hPl06IENhbid0IGNvbm5lY3QgdG8gbG9jYWwgTXlTUUwgc2VydmVyIHRocm91Z2ggc29ja2V0ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICgyKSBpbiA8Yj4vaG9tZS9hamF4bG9hZC93d3cvbGlicmFpcmllcy9jbGFzcy5teXNxbC5waHA8L2I+IG9uIGxpbmUgPGI+Njg8L2I+PGJyIC8+CjxiciAvPgo8Yj5XYXJuaW5nPC9iPjogIG15c3FsX3F1ZXJ5KCkgWzxhIGhyZWY9J2Z1bmN0aW9uLm15c3FsLXF1ZXJ5Jz5mdW5jdGlvbi5teXNxbC1xdWVyeTwvYT5dOiBBIGxpbmsgdG8gdGhlIHNlcnZlciBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQgaW4gPGI+L2hvbWUvYWpheGxvYWQvd3d3L2xpYnJhaXJpZXMvY2xhc3MubXlzcWwucGhwPC9iPiBvbiBsaW5lIDxiPjY4PC9iPjxiciAvPgo8YnIgLz4KPGI+V2FybmluZzwvYj46ICBteXNxbF9xdWVyeSgpIFs8YSBocmVmPSdmdW5jdGlvbi5teXNxbC1xdWVyeSc+ZnVuY3Rpb24ubXlzcWwtcXVlcnk8L2E+XTogQ2FuJ3QgY29ubmVjdCB0byBsb2NhbCBNeVNRTCBzZXJ2ZXIgdGhyb3VnaCBzb2NrZXQgJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgKDIpIGluIDxiPi9ob21lL2FqYXhsb2FkL3d3dy9saWJyYWlyaWVzL2NsYXNzLm15c3FsLnBocDwvYj4gb24gbGluZSA8Yj42ODwvYj48YnIgLz4KPGJyIC8+CjxiPldhcm5pbmc8L2I+OiAgbXlzcWxfcXVlcnkoKSBbPGEgaHJlZj0nZnVuY3Rpb24ubXlzcWwtcXVlcnknPmZ1bmN0aW9uLm15c3FsLXF1ZXJ5PC9hPl06IEEgbGluayB0byB0aGUgc2VydmVyIGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCBpbiA8Yj4vaG9tZS9hamF4bG9hZC93d3cvbGlicmFpcmllcy9jbGFzcy5teXNxbC5waHA8L2I+IG9uIGxpbmUgPGI+Njg8L2I+PGJyIC8+Cg==");
37+
}
38+
39+
button {
40+
width: 15em;
41+
height: 2em;
42+
text-align: center;
43+
}
44+
45+
a {
46+
margin-top: 1em;
47+
margin-bottom: 1em;
48+
display: inline-block;
49+
transition: opacity .3s ease-out;
50+
}
51+
52+
div.config,
53+
div.result {
54+
font-family: monospace;
55+
white-space: pre;
56+
outline: 1px solid gray;
57+
padding: .5em;
58+
clear: left;
59+
}
60+
.hidden {
61+
display: none;
62+
}
63+
</style>
64+
65+
</head>
66+
<body>
67+
68+
<h1>Welcome to mix-n-mock</h1>
69+
<h2>Advanced example</h2>
70+
<a href="img/example.by.Marcelo.Quinan.from.unsplash.com-CC-zero.jpg" target="_blank">static file</a>
71+
<ul>
72+
<li>
73+
<button type="submit" data-method="GET" data-action="rest/exampleEndpoint">
74+
Submit GET-Request
75+
</button>
76+
<span>(no delay)</span>
77+
</li>
78+
<li>
79+
<button type="submit" data-method="POST" data-action="rest/exampleEndpoint">
80+
Submit POST-Request
81+
</button>
82+
<span>(100ms delay)</span>
83+
</li>
84+
<li>
85+
<button type="submit" data-method="PUT" data-action="rest/exampleEndpoint">
86+
Submit PUT-Request
87+
</button>
88+
<span>(1s delay)</span>
89+
</li>
90+
<li>
91+
<button type="submit" data-method="DELETE" data-action="rest/exampleEndpoint">
92+
Submit DELETE-Request
93+
</button>
94+
<span>(5s delay)</span>
95+
</li>
96+
</ul>
97+
<div class="hidden">
98+
<div class="result"></div>
99+
<a class="show-config" href="#">Show method config</a>
100+
<div class="config hidden"></div>
101+
</div>
102+
<script type="text/javascript">
103+
var configs = {};
104+
['POST', 'GET', 'PUT', 'DELETE'].forEach(function (method) {
105+
var fileName = '/src/example2/config/services/' + method + '.mock.development.json';
106+
var xhr = new XMLHttpRequest();
107+
xhr.open('get', fileName, false);
108+
xhr.send(null);
109+
configs[method] = xhr.responseText + '\n\n' + fileName;
110+
});
111+
document.querySelector('.show-config').addEventListener('click', function (e) {
112+
e.preventDefault();
113+
var method = document.querySelector('.result').dataset.method;
114+
var div = document.querySelector('.config');
115+
div.style.display = 'block';
116+
div.textContent = configs[method];
117+
document.querySelector('.show-config').style.opacity = 0;
118+
document.querySelector('.show-config').style.pointerEvents = 'none';
119+
}, false);
120+
</script>
121+
<script type="text/javascript">
122+
var loading = 0;
123+
var div = document.querySelector('div.result');
124+
Array.from(document.querySelectorAll('button')).forEach(function (button) {
125+
button.addEventListener('click', function (e) {
126+
e.preventDefault();
127+
loading++;
128+
document.body.dataset.loading = 1;
129+
var url = button.dataset.action;
130+
var xhr = new XMLHttpRequest();
131+
var method = button.dataset.method;
132+
xhr.open(method, url, true);
133+
xhr.onreadystatechange = function () {
134+
var innerHTML = 'Result of ' + method + ' to ' + button.dataset.action + ':\n\n';
135+
if (xhr.readyState == 4) {
136+
if (xhr.status == 200) {
137+
innerHTML += xhr.responseText;
138+
} else {
139+
innerHTML += 'ERROR ' + xhr.status;
140+
}
141+
div.innerHTML = innerHTML;
142+
div.parentNode.style.display = 'block';
143+
div.dataset.method = method;
144+
document.querySelector('.config').style.display = 'none';
145+
document.querySelector('.show-config').style.opacity = 1;
146+
document.querySelector('.show-config').style.pointerEvents = '';
147+
loading--;
148+
if (!loading) {
149+
delete document.body.dataset.loading;
150+
}
151+
}
152+
};
153+
xhr.send('examplePayload: 42');
154+
});
155+
});
156+
</script>
157+
158+
</body>
159+
</html>

0 commit comments

Comments
 (0)