From bbb37e1a9f4ee74da59ce54f6c8131f6ea470518 Mon Sep 17 00:00:00 2001 From: Szakalakamaka Date: Tue, 3 Nov 2020 19:38:45 +0100 Subject: [PATCH] - default message for user testing, - updating frontend --- .idea/workspace.xml | 98 ++++------- .../klaus/controller/KlausMvcController.java | 8 +- .../klaus/service/KlausServiceImpl.java | 5 +- src/main/resources/logback.xml | 2 +- src/main/resources/templates/index.html | 155 +++++++++++------- target/classes/bootstrap-PROD.yml | 25 +++ target/classes/bootstrap.yml | 24 +++ .../klaus/controller/KlausMvcController.class | Bin 9611 -> 9657 bytes .../repository/EventRepositoryImpl.class | Bin 8426 -> 8078 bytes .../klaus/service/KlausServiceImpl.class | Bin 5254 -> 5379 bytes target/classes/logback.xml | 2 +- target/classes/templates/index.html | 155 +++++++++++------- target/classes/templates/temp.html | 100 +++++++++++ 13 files changed, 375 insertions(+), 199 deletions(-) create mode 100644 target/classes/bootstrap-PROD.yml create mode 100644 target/classes/bootstrap.yml create mode 100644 target/classes/templates/temp.html diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7db65c9..d6ef91c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -23,49 +23,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -668,7 +633,6 @@ @@ -708,9 +673,10 @@ - - + + + @@ -745,39 +711,39 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -827,11 +793,11 @@ - - + + - + diff --git a/src/main/java/com/release11/klaus/controller/KlausMvcController.java b/src/main/java/com/release11/klaus/controller/KlausMvcController.java index 6f40884..0033288 100644 --- a/src/main/java/com/release11/klaus/controller/KlausMvcController.java +++ b/src/main/java/com/release11/klaus/controller/KlausMvcController.java @@ -120,9 +120,7 @@ public class KlausMvcController { return UUID.randomUUID(); } - public void getModelMockedMessageDto(Model model, MockedMessageDto mockedMessageDto) { - System.out.println(mockedMessageDto); - System.out.println(globalMockedMessageDto); + private void getModelMockedMessageDto(Model model, MockedMessageDto mockedMessageDto) { if (mockedMessageDto.getMockedResponseId() == null){ Map headers = new HashMap<>(); headers.put("Keep-Alive", "timeout=60"); @@ -163,4 +161,8 @@ public class KlausMvcController { getModelMockedMessageDto(model, mockedMessageDto); } + public static MockedMessageDto getGlobalMockedMessageDto() { + return globalMockedMessageDto; + } + } \ No newline at end of file diff --git a/src/main/java/com/release11/klaus/service/KlausServiceImpl.java b/src/main/java/com/release11/klaus/service/KlausServiceImpl.java index ad6be86..4222d09 100644 --- a/src/main/java/com/release11/klaus/service/KlausServiceImpl.java +++ b/src/main/java/com/release11/klaus/service/KlausServiceImpl.java @@ -1,5 +1,6 @@ package com.release11.klaus.service; +import com.release11.klaus.controller.KlausMvcController; import com.release11.klaus.mappers.MockedMessageMapper; import com.release11.klaus.model.MockedMessage; import com.release11.klaus.model.MockedMessageDto; @@ -41,10 +42,10 @@ public class KlausServiceImpl implements KlausService { public MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId) { String key = clientUUID.toString() + "_" + mockedResponseId; Optional optionalMockedMessage = mockedResponseRepository.findById(key); - MockedMessageDto mockedMessageDto = new MockedMessageDto(); + MockedMessageDto mockedMessageDto = KlausMvcController.getGlobalMockedMessageDto(); if (optionalMockedMessage.isPresent()) { mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get()); - log.info(mockedMessageDto.toString().replaceAll("\"","\\\"")); + log.info(mockedMessageDto.toString().replaceAll("\"","\\\\\"")); return mockedMessageDto; } log.info(mockedMessageDto.toString()); diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index eca6395..651420c 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -3,7 +3,7 @@ - localhost + redis 6379 logstash diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 6e49b0f..d5232c4 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -18,33 +18,58 @@
-

With this tool you can create mockups for http requests and use them for integration tests of your system.

-
-
- +

With this tool you can create mockups for http requests and use them for integration tests of + your system.

+

-

In order to set mockup response please fill the form below:

+

You can test the mocked message using the url or the button below:

+ + + + +
+

+ http://[[${localhost}]]:8097/klaus/v1/get/[[${mockedMessageDto.clientUUID}]]/[[${mockedMessageDto.mockedResponseId}]]

+
+
+ + + +
+
+
+ + +

In order to set or update mockup response please fill the form below and save + your message:

- - - + + + - + - @@ -53,30 +78,35 @@ - + - + - - + + + @@ -97,60 +127,57 @@

-
Mocked response id:Id - Error - Media type:
Mocked response body: Body Error + Body Error +
Mocked response http code status: HttpStatus Error + + HttpStatus Error
Header value
- +
- +
Media type:Mocked response id:Id + Error +
-
- - -

-
-

Mock has been saved


-
- - - - - - - - - - - - -
-

#

-
-

MessageId

-
-

Media Type

-
-

Http Status

-
-
-
-
-
+
-

+
+

Here you can see the interactive list of all your mocked messages. You can call all of them. Use the buttons to sort the list and also update or delete messages.

+
+ + + + + + + + + + + + +
+

#

+
+

MessageId

+
+

Media Type

+
+

Http Status

+
+
+
+
+
+

-
If you are keen to use the mocking service with bigger amount of messages or automate the process by inserting - high amount of random messages please consider using the tools below: +
If you are keen to use the mocking service with bigger amount of messages or automate the process by + inserting + high amount of random messages please consider using swagger or send batch requests on the urls below: -
http://[[${localhost}]]:8097/swagger-ui.html +
http://[[${localhost}]]:8097/swagger-ui.html

http://[[${localhost}]]:8097/klaus/v1/delete/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
http://[[${localhost}]]:8097/klaus/v1/set/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}?httpStatus={httpStatus} @@ -160,14 +187,15 @@

- - + + diff --git a/target/classes/bootstrap-PROD.yml b/target/classes/bootstrap-PROD.yml new file mode 100644 index 0000000..c9a2696 --- /dev/null +++ b/target/classes/bootstrap-PROD.yml @@ -0,0 +1,25 @@ +spring: + profiles: + active: PROD + application: + name: klaus + cloud: + spring: + cloud: + config: + fail-fast: false + uri: http://s5000xvn.zipper.release11.com:8888 + retry: + max-attempts: 20 + max-interval: 15000 + initial-interval: 10000 +server: + port: 8097 + +eureka: + client: + enabled: true + register-with-eureka: true + fetch-registry: true + serviceUrl: + defaultZone: http://netflix:eureka@eureka:8761/eureka diff --git a/target/classes/bootstrap.yml b/target/classes/bootstrap.yml new file mode 100644 index 0000000..b6615a6 --- /dev/null +++ b/target/classes/bootstrap.yml @@ -0,0 +1,24 @@ +spring: +# profiles: +# active: DEV + application: + name: klaus + cloud: + spring: + cloud: + config: + uri: http://s5000xvn.zipper.release11.com:8888 + retry: + max-attempts: 20 + max-interval: 15000 + initial-interval: 10000 +server: + port: 8097 + +eureka: + client: + enabled: true + register-with-eureka: true + fetch-registry: true + serviceUrl: + defaultZone: http://netflix:eureka@localhost:8761/eureka diff --git a/target/classes/com/release11/klaus/controller/KlausMvcController.class b/target/classes/com/release11/klaus/controller/KlausMvcController.class index 16043dba3e6f1efe22524be1c51c857fea1b7373..7a73a22a26899cf03e14f24116d252fd0216b129 100644 GIT binary patch delta 1116 zcmXw1Yiv_x7=GTatUae+S5}tcU^k$Z-D*V_gCh%~M1~t^GTEZy<*YmDDy5z5tci(i zMAXC>FXSVNpr}MZys?{ybqK|(3>T(?)8Tcx>E;C$?j${2hcB1s8=}q5L02nL4j9sNESNQ zI1)Hw!)pRbye>N&`%B*x@Z%^Uw`65$-R)XT^M|!a(7!Tb=s|tM5)}y?6L#^uqh>dY?%zQUx;RcllQS@>Gu z8+k1Cfs&f#wx{t-Bjf8~g>SU&4oNT+*`yM~p5yr6EZ2uGW=@TzEFo!-1^+QxDt zO7O{LvvXxv-r3pwHeRVa^(YV(b8Vq{aLL4+owFuE%*&{pDtG~0At_tuHc(Oy&K;#m z`BeUhGf6(an~5BR*yW~z%lUSoU>o1o7j9-8EgWXtU37}Eqj;QAn|FvcMe}PqlRV2w zS&SZl@{s{6Pl;8Ss2qfL5PNPofag~G-22=w#IZ30jXw8F?*0Fl-Tmk_5uc|07~s!J zOdPiM;|&vo?qL(}xZgAJzR$#|Y#d7;e_~>+7ZZD7tLR1NM7g`A2NQ8La_?>)Z6!Zr zCM@TmXONfctC7uk7i`!F7dkKpo$z84DseX!V>6cG9<0EQQ(c9p}VesKGN>ja~94kB|3rzvmLaLTfS3{|DX+t5fgda5$_T%m34M&b*GCY z&Wg%3QKR#V#_NnqK)kP`hn5L4MM2!GR0PC3;9aLUFH;nK&xn7%?|I%n-+Ou9o^0#g zt;+t>J9YtRq_x9J(&2Jo3!b%MtH5)3Ue0r0Q!D;Snh_ob=>Dnd>L66>*JH}mUFy>>?bI>EYF)58k(;7uFe64;A<1n*2eGm*3_ z4X!=tQ((b60^^vFS18NX9Nx3xfIuGa6Pjg_vsq3mU4-+r z8>}A_=E%X45~+yUm7fyaT09<&bZBN%p_{s+3Uc^d;0qj+mxu_RkWY!N)j516@HLJR zoZaExUTs~tIktAaDg9R9JA5y@T%EogeiWF*QJ$+)*W=4{O;7Zinx6$u;um?+)l~Sa zz;F0n4yf}T)A-YdzXVRn-D*|gKLV%muRNhP$xZHaX?kSbJ>j6BT;wg4<7Lxc-UYAF zW4;DaHDe3aK$RbzJye_qF|VaMs%L8$AusPKZ=<|CUVfO;aHm=OdzLifhXW+{X9I0Mm)`fJi`NTlB@hd-rK$Y3uh5JXoZ~gSJ9Mo1zPA@ w*%p|4S<3W^X8bX~D4-N}PF6r`7%SXDjvMcQgH|%P&?=fg6SvT6ex?Ec0WwcD`v3p{ diff --git a/target/classes/com/release11/klaus/repository/EventRepositoryImpl.class b/target/classes/com/release11/klaus/repository/EventRepositoryImpl.class index 09147d886b105365104a138be8e027e56eddb665..14ce58842c67a1ef3bdc7f850106c8285d9ab0e7 100644 GIT binary patch delta 2028 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 delta 1131 zcmZXS+iz4=6vlu1^vs-@Gsl_ESg4cqI&Ep0!jwx4+8T@|K8a9TupwzuTSKq~+XAJa zs3jucttxD9TokW(!%I7DhiMUScmq+n_&@mItB(@aKGTdQKAf}n{?^*-`_{Mi{`A4c z?uF~K=YUrJm~j8LgAVHzX}vv?PP(+y>9K*0ir^jngZ(3`6(voJ@6V10?ork4l!O>i zs8on;3adNiGRTm_u*Y_G=#`h>?QPlC zJGiA~UEjdw2S;39;;_RJ56#PZGTd&zs%Vma$_}3`%VylYcJ!>vmz;C>$|KCzIu||f zek*EJj|y>KABfdPe{lJcpB#SnxWL8iRIF0jmlX|1;#F?_nxUbsyM`UE>VHaG0^=xN z(aYo2&TG7m#ZlcAzx9D*;%EX}{uM;1WC2ywQO$8d(mr0#3Eq$s)bl1MrHa|T#oJON zLXvlQmlEC+G;B!%5<-&Rr%~Xe`mgw%WB-!WQ6`sDG_X`?49P+%1DPU8W}d_p3@E?g zDcM?lAVojqBcojE+oCNfcwh4js$v!g)~2V3EX}jVqSc z%QWZNX_05QMb{+dV!}g-{=}owVV)|BIUd`Tcw&xy;=z-X?9cIxVYD!l7>i0(xJ^cJ zy9}xIKVxVs_SoiYSH372!)dut7(-SX*}zm`4BRKHDHcoTcs|`cO(wl$n#hDe1+t)| zBd^Mgx~7miRwRju(aZgW7%@ua%De~5 - localhost + redis 6379 logstash diff --git a/target/classes/templates/index.html b/target/classes/templates/index.html index 6e49b0f..d5232c4 100644 --- a/target/classes/templates/index.html +++ b/target/classes/templates/index.html @@ -18,33 +18,58 @@
-

With this tool you can create mockups for http requests and use them for integration tests of your system.

-
-
- +

With this tool you can create mockups for http requests and use them for integration tests of + your system.

+

-

In order to set mockup response please fill the form below:

+

You can test the mocked message using the url or the button below:

+ + + + +
+

+ http://[[${localhost}]]:8097/klaus/v1/get/[[${mockedMessageDto.clientUUID}]]/[[${mockedMessageDto.mockedResponseId}]]

+
+
+ + + +
+
+
+ + +

In order to set or update mockup response please fill the form below and save + your message:

- - - + + + - + - @@ -53,30 +78,35 @@ - + - + - - + + + @@ -97,60 +127,57 @@

-
Mocked response id:Id - Error - Media type:
Mocked response body: Body Error + Body Error +
Mocked response http code status: HttpStatus Error + + HttpStatus Error
Header value
- +
- +
Media type:Mocked response id:Id + Error +
-
- - -

-
-

Mock has been saved


-
- - - - - - - - - - - - -
-

#

-
-

MessageId

-
-

Media Type

-
-

Http Status

-
-
-
-
-
+
-

+
+

Here you can see the interactive list of all your mocked messages. You can call all of them. Use the buttons to sort the list and also update or delete messages.

+
+ + + + + + + + + + + + +
+

#

+
+

MessageId

+
+

Media Type

+
+

Http Status

+
+
+
+
+
+

-
If you are keen to use the mocking service with bigger amount of messages or automate the process by inserting - high amount of random messages please consider using the tools below: +
If you are keen to use the mocking service with bigger amount of messages or automate the process by + inserting + high amount of random messages please consider using swagger or send batch requests on the urls below: -
http://[[${localhost}]]:8097/swagger-ui.html +
http://[[${localhost}]]:8097/swagger-ui.html

http://[[${localhost}]]:8097/klaus/v1/delete/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
http://[[${localhost}]]:8097/klaus/v1/set/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}?httpStatus={httpStatus} @@ -160,14 +187,15 @@

- - + + diff --git a/target/classes/templates/temp.html b/target/classes/templates/temp.html new file mode 100644 index 0000000..ba95957 --- /dev/null +++ b/target/classes/templates/temp.html @@ -0,0 +1,100 @@ + + + + + Title + + + + +
+ +
+ +
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut + labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et + commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. + Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec + lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est + euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec + fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, + consequat quis, neque

+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut + labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et + commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. + Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec + lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est + euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec + fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, + consequat quis, neque

+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut + labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et + commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. + Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec + lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est + euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec + fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, + consequat quis, neque

+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut + labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in + voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et + commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. + Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec + lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est + euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec + fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, + consequat quis, neque

+
+
+
+
+ +
+ + + +