widlam/dev/implement_rest_mock #231

Merged
bema merged 8 commits from widlam/dev/implement_rest_mock into master 2023-06-22 14:11:51 +02:00
12 changed files with 254 additions and 15 deletions
Showing only changes of commit c0fcd53d35 - Show all commits

View File

@@ -18,3 +18,13 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
EXPOSE 443
FROM node:latest as dev
WORKDIR /app
COPY package*.json ./
RUN npm install
ENV HOST=0.0.0.0
COPY . .
EXPOSE 8080
CMD ["npm", "run", "dev"]

View File

@@ -3,7 +3,7 @@
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "vite",
"dev": "vite --host",
"build": "run-p type-check build-only",
"preview": "vite preview",
"build-only": "vite build",

View File

@@ -0,0 +1,53 @@
<script setup>
import {ref} from 'vue';
const props = defineProps(
{
headersObject : Object
}
)
const headerData = ref( props.headersObject )
const newHeaderName = ref('');
const newHeaderValue = ref('');
function isHeaderEssential(headerName){
return headerName == "Keep-Alive" || headerName == "Connection" || headerName == "Date"
}
function setEssentialHeaderStyle(headerName){
return isHeaderEssential(headerName) ? "text-gray-400" : "text-red-400";
}
function deleteHeader(index){
if(!isHeaderEssential(index)){
delete headerData.value[index]
}
}
function addNewHeader(name, value){
headerData.value[name] = value;
newHeaderName.value = "";
newHeaderValue.value = "";
}
</script>
<template>
<div class="w-full flex">
<div class="w-full">Header name</div>
<div class="w-full">Header value</div>
</div>
<div class="flex flex-col gap-4">
<div class="flex gap-9 flex-row" v-for="(item, index) in headerData" :key="index">
<input type="text" :value="index" class="w-full bg-gray-600 p-2" />
<input type="text" :value="item" class="w-full bg-gray-600 p-2" />
<button @click="deleteHeader(index)" :class="setEssentialHeaderStyle(index)">X</button>
</div>
<div class="flex gap-9 flex-row">
<input type="text" v-model="newHeaderName" class="w-full p-2 bg-gray-600" />
<input type="text" v-model="newHeaderValue" class="w-full p-2 bg-gray-600" />
<button class="text-2xl" @click="addNewHeader(newHeaderName, newHeaderValue)" > + </button>
</div>
</div>
</template>

View File

@@ -1,10 +0,0 @@
<script setup lang="ts">
</script>
<template>
<h1>RestMock</h1>
</template>
<style scoped></style>

View File

@@ -0,0 +1,69 @@
<script setup lang="ts">
import {ref, onBeforeMount , type Ref} from 'vue';
import HeadersComponent from './HeadersComponent.vue';
const clientUUID = ref('');
const host = window.location.protocol + "//" + window.location.hostname + "/mock";
const mockMessageLink = ref("www.google.com");
interface mockedMessageData {
clientUUID: string;
contentType: string;
messageBody: object;
httpHeaders: object;
httpStatus: number;
}
const exampleData : mockedMessageData = {
clientUUID : "exampleUUID",
contentType: "application/json",
messageBody: {message: "hello!"},
httpHeaders: {Connection:"keep-alive"},
httpStatus: 200,
}
let messageData : Ref<mockedMessageData> = ref(exampleData) ;
onBeforeMount( () => {
if ( localStorage.clientUUID != undefined ){
clientUUID.value = localStorage.clientUUID;
}
fetch(host + '/api/mock/' + clientUUID.value).then( response => response.json() ).then(data => putDataInFields(data));
} )
function putDataInFields(data: mockedMessageData){
clientUUID.value = data.clientUUID;
localStorage.clientUUID = clientUUID.value
mockMessageLink.value = host.replace("/mock","/api/mock")+"/r/"+clientUUID.value
messageData = ref( data )
}
</script>
<template>
<div class="flex flex-col w-3/5 text-center gap-6">
<div>
<label for="link">Link</label><br/>
<div class="p-2 border-white border-2">
<a class="underline" :href="mockMessageLink">{{ mockMessageLink }}</a>
</div>
</div>
<div class="flex flex-row w-full gap-64">
<div class="w-full">
<label for="contentType">Content Type</label><br/>
<input class="bg-gray-600 w-full" id="contentType" type="text" :value="messageData.contentType"/>
</div>
<div class=" w-full">
<label for="httpStatus">HttpStatus</label><br/>
<input class="bg-gray-600 w-full" id="httpStatus" type="text" :value="messageData.httpStatus"/>
</div>
</div>
<div class="flex flex-col">
<label for="messageBody">Body</label>
<textarea class="bg-gray-600 h-64" id="messageBody" :value="messageData.messageBody.toString()"></textarea>
</div>
<HeadersComponent :key="JSON.stringify(messageData.httpHeaders)" :headers-object="messageData.httpHeaders"></HeadersComponent>
</div>
</template>
<style scoped></style>

View File

@@ -34,6 +34,16 @@ const routes = [
name: 'xslt',
component: () => xsltTool
},
{
path: '/xml/xpath',
name: 'xpath',
component: () => restMock
},
{
path: '/rest/mock',
name: 'restmock',
component: () => restMock
}
]

View File

@@ -1,14 +1,20 @@
<script lang="ts">
import RestMockComponent from '@components/mock/RestMockComponent.vue'
import RestMockMessageComponent from '@components/mock/RestMockMessageComponent.vue'
import mockedMessageData from '@components/mock/RestMockMessageComponent.vue'
export default {
name:"RestMockView",
components: {RestMockComponent}
components: {RestMockMessageComponent}
}
</script>
<template>
<RestMockComponent></RestMockComponent>
<div class="flex w-full h-screen items-center flex-col">
<RestMockMessageComponent></RestMockMessageComponent>
</div>
</template>

View File

@@ -8,6 +8,27 @@ export default defineConfig({
plugins: [
vue(),
],
server:{
port: 80,
host: '0.0.0.0',
proxy : {
'/java': {
target:'http://xmltools-backend:8081/',
rewrite: (path) => path.replace(/^\/java/, ''),
},
'/libxml': {
target:'http://xmltools-libxml-backend/',
rewrite: (path) => path.replace(/^\/libxml/, ''),
},
'/mock': {
target:'http://xmltools-mocked-services:8097/',
rewrite: (path) => path.replace(/^\/mock/, ''),
},
'/api/mock': {
target: 'http://xmltools-mocked-services:8097/'
}
},
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),

75
docker-compose.dev.yml Normal file
View File

@@ -0,0 +1,75 @@
version: "3"
services:
redis:
container_name: xmltools-redis
build: ./Redis
restart: "no"
xmltools-frontend:
build:
context: ./Frontend
target: dev
container_name: xmltools-frontend
image: xmltools-frontend
ports:
- 80:80
volumes:
- ./Frontend:/app
- /app/node_modules
xmltools-backend:
build: ./Backend/tools-services
container_name: xmltools-backend
image: xmltools-backend
ports:
- 8081:8081
xmltools-libxml-backend:
build: ./Backend-libXML
container_name: xmltools-libxml-backend
image: xmltools-libxml-backend
ports:
- 8082:80
xmltools-mocked-services:
build:
context: ./Backend/mocked-services
dockerfile: Dockerfile
container_name: xmltools-mocked-services
restart: "no"
ports:
- "8097:8097"
depends_on:
- redis
environment:
SPRING_PROFILES_ACTIVE: DEV
TZ: Europe/Warsaw
swagger:
image: "swaggerapi/swagger-ui:latest"
container_name: xmltools-swagger
ports:
- "8000:8080"
environment:
- BASE_URL=/swagger
- SWAGGER_JSON=/Swagger/swagger.json
volumes:
- ./Swagger:/Swagger
filebeat:
build: ./Filebeat
container_name: xmltools-filebeat
user: root
volumes:
- "./Filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"
- "/var/lib/docker/containers:/var/lib/docker/containers:ro"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
environment:
- ENV_TYPE
command:
- "-e"
- "--strict.perms=false"
networks:
default:
name: tools_network

View File

@@ -7,7 +7,9 @@ services:
restart: "no"
xmltools-frontend:
build: ./Frontend
build:
context: ./Frontend
target: production-stage
container_name: xmltools-frontend
image: xmltools-frontend
ports:

View File

@@ -41,6 +41,9 @@ within created container.
## How to run
Dev server(with hot-reload frontend): docker-compose -f docker-compose.dev.yml up --build
Prod: docker-compose up --build
### Localy
In order to run application use
```aidl