2 <div class="wrapper wrapper-content animated fadeIn">
\r
3 <div class="row" style="margin-bottom: 20px;">
\r
4 <div class="col-md-8">
\r
5 <ol class="breadcrumb" style="padding-left: 20px; font-size: 17px;">
\r
7 <router-link to="/" >root</router-link>
\r
10 <router-link :to="{ path: '/testcase', query: { name: suitename }}" >{{this.$route.query.suiteName}}</router-link>
\r
13 <router-link :to="{ path: '/content', query: { suiteName: suitename, caseName: casename } }"><b>{{this.$route.query.caseName}}</b></router-link>
\r
18 <div id="page-content" class="row">
\r
19 <div class="col-lg-12">
\r
21 <div class="ibox-title">
\r
22 <h5 style="font-size:26px;margin-top: -3px;">Test Case Content</h5>
\r
23 <div v-show="contentLoading || contentSaving" class="sk-spinner sk-spinner-circle" style="float: left;margin-left: 10px;">
\r
24 <div class="sk-circle1 sk-circle"></div>
\r
25 <div class="sk-circle2 sk-circle"></div>
\r
26 <div class="sk-circle3 sk-circle"></div>
\r
27 <div class="sk-circle4 sk-circle"></div>
\r
28 <div class="sk-circle5 sk-circle"></div>
\r
29 <div class="sk-circle6 sk-circle"></div>
\r
30 <div class="sk-circle7 sk-circle"></div>
\r
31 <div class="sk-circle8 sk-circle"></div>
\r
32 <div class="sk-circle9 sk-circle"></div>
\r
33 <div class="sk-circle10 sk-circle"></div>
\r
34 <div class="sk-circle11 sk-circle"></div>
\r
35 <div class="sk-circle12 sk-circle"></div>
\r
37 <div class="ibox-tools">
\r
38 <button class="btn btn-info btn-sm my-button-sm" type="button" v-on:click="runTestcase()">Run</button>
\r
39 <button class="btn btn-success btn-sm my-button-sm" type="button" v-on:click="setEditable()">Edit</button>
\r
40 <button v-show="isEditable" class="btn btn-warning btn-sm my-button-sm" v-on:click="saveTestcase()" type="button">Save</button>
\r
41 <button v-show="isEditable" class="btn btn-danger btn-sm my-button-sm" v-on:click="cancelEdit()" type="button">Cancel</button>
\r
42 <a class="collapse-link">
\r
43 <i class="fa fa-chevron-up"></i>
\r
45 <a class="fullscreen-link">
\r
46 <i class="fa fa-expand"></i>
\r
50 <div class="ibox-content" style="max-height: 600px; overflow-y: auto; padding: 0; border: 1px solid #e7e7e7;">
\r
51 <div style='text-align:center;'>
\r
52 <textarea v-show='!isEditable' v-model="content" id="tc_content" style="white-space:nowrap; overflow:scroll;max-width:2400px; width: 100%;height: 100%;min-height: 500px;font-size:16px;border:none; vertical-align: middle; padding: 30px 0 20px 40px;">
\r
54 </div><editor v-show='isEditable' v-bind:saveSignal='saveSignal' v-bind = 'editorContent' v-on:saveResponse='processSaveResponse'></editor>
\r
61 <div class="col-lg-12">
\r
63 <div class="ibox-title">
\r
64 <h5 style="font-size:26px;margin-top: -3px;">Workflow</h5>
\r
65 <div class="ibox-tools">
\r
66 <a class="collapse-link">
\r
67 <i class="fa fa-chevron-up"></i>
\r
69 <a class="fullscreen-link">
\r
70 <i class="fa fa-expand"></i>
\r
74 <div class="ibox-content" style="padding-top: 60px;">
\r
75 <wfresult v-bind:workflowId="workflowId" v-bind:wfloading='wfloading' v-bind:wfJson='wfJson'></wfresult>
\r
83 import editor from './editor/editor.vue'
\r
84 import wfresult from './workflow_graph/wfresult.vue'
\r
85 import showMessage from './message/showMessage.js'
\r
87 name: 'testcase_content',
\r
91 editorContent: {'stepList': [], 'mainOrdersList': [], 'subflowList': []},
\r
94 contentLoading: false,
\r
95 contentSaving: false,
\r
96 suitename:this.$route.query.suiteName,
\r
97 casename:this.$route.query.caseName,
\r
104 created: function() {
\r
105 this.getTestcase();
\r
108 setEditable: function(){
\r
109 this.isEditable = true;
\r
110 this.bakContent = this.content;
\r
112 cancelEdit: function(){
\r
113 this.content = this.bakContent;
\r
114 this.isEditable = false;
\r
116 saveTestcase: function(){
\r
117 console.log("save");
\r
118 this.saveSignal = true;
\r
119 this.contentSaving = true;
\r
121 runTestcase: function(){
\r
123 var msgTitle = "RUN -- TESTCASE";
\r
125 url: this.global.SERVER_ADDR + "execute/testcase",
\r
128 "suiteName": this.$route.query.suiteName,
\r
129 "caseName": this.$route.query.caseName
\r
131 beforeSend: function(XHR) {
\r
132 self.wfloading = true;
\r
133 showMessage("info", msgTitle, "start to run <strong>" + self.$route.query.caseName + "</strong>");
\r
135 success: function(data) {
\r
136 if(data['code'] == 200) {
\r
137 self.workflowId = data['result']['workflowId'];
\r
138 showMessage(data['code'], msgTitle, "<strong>" + self.$route.query.caseName + "</strong> finished!");
\r
140 url: self.global.SERVER_ADDR + "story-content",
\r
143 "service": self.$route.query.suiteName,
\r
144 "story": self.$route.query.caseName
\r
146 success: function(data) {
\r
147 if(data['code'] == 200) {
\r
148 self.wfJson = data['result']['content'];
\r
150 showMessage(data['code'], msgTitle, "workflow.json get failed!");
\r
153 error: function(obj, status, msg) {
\r
154 showMessage(status, msgTitle, msg);
\r
158 self.wfloading = false;
\r
159 showMessage(data['code'], msgTitle, "Failed to run <strong>" + self.$route.query.caseName + "</strong>", data['error']);
\r
162 error: function(obj, status, msg) {
\r
163 self.wfloading = false;
\r
164 showMessage(status, msgTitle, "Failed to run <strong>" + self.$route.query.caseName + "</strong>", msg);
\r
168 getTestcase: function(){
\r
170 var msgTitle = "GET -- TESTCASE";
\r
172 url: this.global.SERVER_ADDR + "testcase/content",
\r
175 suiteName: this.$route.query.suiteName,
\r
176 caseName: this.$route.query.caseName
\r
178 beforeSend: function(XHR) {
\r
179 self.contentLoading = true;
\r
181 success:function (data) {
\r
182 if(data['code'] == 200) {
\r
183 self.content = data['result']['content'];
\r
184 self.contentLoading = false;
\r
185 self.editorContent = data['result']['editorContent'];
\r
188 showMessage("error", msgTitle, "fail to load testcase content!", data['error']);
\r
189 self.contentLoading = false;
\r
192 error: function (obj, status, msg) {
\r
193 showMessage(status, msgTitle, "fail to load testcase content!", msg);
\r
194 self.contentLoading = false;
\r
198 async processSaveResponse(result) {
\r
199 if(result == true) {
\r
200 this.saveSignal = false;
\r
201 this.isEditable = false;
\r
202 this.contentSaving = false;
\r
203 this.getTestcase();
\r
205 this.saveSignal = false;
\r
206 this.contentSaving = false;
\r