systemview 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/api/Connections.js +36 -0
  2. package/api/connections.txt +1 -0
  3. package/api/index.js +78 -0
  4. package/babel.config.js +12 -0
  5. package/cli/launchApp.js +0 -0
  6. package/cli/runTest.js +0 -0
  7. package/cli/utils/cli.js +48 -0
  8. package/cli/utils/init.js +17 -0
  9. package/cli/utils/log.js +11 -0
  10. package/package.json +6 -3
  11. package/plugin/SystemViewModule.js +97 -0
  12. package/plugin/getAllTest.js +21 -0
  13. package/plugin/index.js +40 -0
  14. package/src/App.css +38 -0
  15. package/src/App.js +30 -0
  16. package/src/ServiceContext.js +9 -0
  17. package/src/assets/arrow.png +0 -0
  18. package/src/assets/check.svg +1 -0
  19. package/src/assets/clear.png +0 -0
  20. package/src/assets/edit.png +0 -0
  21. package/src/assets/error.svg +1 -0
  22. package/src/assets/eval-icon.svg +10 -0
  23. package/src/assets/expand-arrow.svg +41 -0
  24. package/src/assets/expand-button.svg +41 -0
  25. package/src/assets/fonts/FontsFree-Net-SFMono-Regular.ttf +0 -0
  26. package/src/assets/fonts/Malkor-Regular.ttf +0 -0
  27. package/src/assets/iconfinder-icon (1).svg +14 -0
  28. package/src/assets/iconfinder-icon.svg +14 -0
  29. package/src/assets/icons-save-60.png +0 -0
  30. package/src/assets/loading.gif +0 -0
  31. package/src/assets/missing-doc.png +0 -0
  32. package/src/assets/saved-doc.png +0 -0
  33. package/src/assets/sysly.png +0 -0
  34. package/src/assets/test-icon.svg +10 -0
  35. package/src/assets/test-missing.png +0 -0
  36. package/src/assets/test-saved.png +0 -0
  37. package/src/assets/x.svg +1 -0
  38. package/src/atoms/Button/Button.js +20 -0
  39. package/src/atoms/Button/Button.test.js +27 -0
  40. package/src/atoms/Button/__snapshots__/Button.test.js.snap +9 -0
  41. package/src/atoms/Button/styles.scss +35 -0
  42. package/src/atoms/Count/index.js +10 -0
  43. package/src/atoms/Count/styles.scss +25 -0
  44. package/src/atoms/DataTable/DataTable.js +27 -0
  45. package/src/atoms/DataTable/DataTable.test.js +55 -0
  46. package/src/atoms/DataTable/__snapshots__/DataTable.test.js.snap +36 -0
  47. package/src/atoms/DataTable/styles.scss +28 -0
  48. package/src/atoms/DescriptionBox/DescriptionBox.js +24 -0
  49. package/src/atoms/DescriptionBox/DescriptionBox.test.js +36 -0
  50. package/src/atoms/DescriptionBox/__snapshots__/DescriptionBox.test.js.snap +14 -0
  51. package/src/atoms/DescriptionBox/styles.scss +24 -0
  52. package/src/atoms/DescriptionText/DescriptionText.js +12 -0
  53. package/src/atoms/DescriptionText/DescriptionText.test.js +22 -0
  54. package/src/atoms/DescriptionText/styles.scss +10 -0
  55. package/src/atoms/DocsIcon/DocsIcon.js +20 -0
  56. package/src/atoms/DocsIcon/DocsIcon.test.js +23 -0
  57. package/src/atoms/DocsIcon/styles.scss +7 -0
  58. package/src/atoms/ExpandableIcon/ExpandableIcon.js +30 -0
  59. package/src/atoms/ExpandableIcon/ExpandableIcon.test.js +18 -0
  60. package/src/atoms/ExpandableIcon/styles.scss +5 -0
  61. package/src/atoms/JsonTextBox/JsonTextBox.js +61 -0
  62. package/src/atoms/JsonTextBox/JsonTextBox.test.js +0 -0
  63. package/src/atoms/JsonTextBox/styles.scss +41 -0
  64. package/src/atoms/Link/Link.js +17 -0
  65. package/src/atoms/Link/Link.test.js +33 -0
  66. package/src/atoms/Link/styles.scss +8 -0
  67. package/src/atoms/List/List.js +8 -0
  68. package/src/atoms/List/List.test.js +26 -0
  69. package/src/atoms/List/styles.scss +9 -0
  70. package/src/atoms/Markdown/Markdown.js +48 -0
  71. package/src/atoms/Markdown/styles.scss +414 -0
  72. package/src/atoms/RunTestIcon/index.js +41 -0
  73. package/src/atoms/RunTestIcon/styles.scss +16 -0
  74. package/src/atoms/SaveIcon/SaveIcon.js +6 -0
  75. package/src/atoms/SaveIcon/styles.scss +3 -0
  76. package/src/atoms/Selector/Selector.js +28 -0
  77. package/src/atoms/Selector/Selector.test.js +0 -0
  78. package/src/atoms/Selector/styles.scss +1 -0
  79. package/src/atoms/StatusIndicator/StatusIndicator.js +16 -0
  80. package/src/atoms/StatusIndicator/styles.scss +33 -0
  81. package/src/atoms/TestsIcon/TestsIcon.js +17 -0
  82. package/src/atoms/TestsIcon/TestsIcon.test.js +18 -0
  83. package/src/atoms/TestsIcon/styles.scss +0 -0
  84. package/src/atoms/Text/Text.js +8 -0
  85. package/src/atoms/Text/Text.test.js +21 -0
  86. package/src/atoms/Text/styles.scss +0 -0
  87. package/src/atoms/Textbox/Textbox.js +33 -0
  88. package/src/atoms/Textbox/Textbox.test.js +23 -0
  89. package/src/atoms/Textbox/styles.scss +14 -0
  90. package/src/atoms/Title/Title.js +12 -0
  91. package/src/atoms/Title/Title.test.js +0 -0
  92. package/src/atoms/Title/styles.scss +6 -0
  93. package/src/atoms/Toggle/Toggle.js +13 -0
  94. package/src/atoms/Toggle/Toggle.test.js +0 -0
  95. package/src/atoms/Toggle/styles.scss +62 -0
  96. package/src/atoms/TypeSelector/TypeSelector.js +28 -0
  97. package/src/atoms/TypeSelector/TypeSelector.test.js +0 -0
  98. package/src/atoms/TypeSelector/styles.scss +9 -0
  99. package/src/index.css +20 -0
  100. package/src/index.js +24 -0
  101. package/src/logo.svg +7 -0
  102. package/src/molecules/Args/Args.js +302 -0
  103. package/src/molecules/Args/Args.test.js +0 -0
  104. package/src/molecules/Args/styles.scss +166 -0
  105. package/src/molecules/AutoCompleteBox/AutoCompleteBox.js +101 -0
  106. package/src/molecules/AutoCompleteBox/AutoCompleteBox.test.js +0 -0
  107. package/src/molecules/AutoCompleteBox/styles.scss +35 -0
  108. package/src/molecules/DataTableForm/DataTableForm.js +167 -0
  109. package/src/molecules/DataTableForm/DataTableForm.test.js +0 -0
  110. package/src/molecules/DataTableForm/styles.scss +51 -0
  111. package/src/molecules/EditBox/EditBox.js +49 -0
  112. package/src/molecules/EditBox/EditBox.test.js +0 -0
  113. package/src/molecules/EditBox/styles.scss +38 -0
  114. package/src/molecules/ExpandableList/ExpandableList.js +26 -0
  115. package/src/molecules/ExpandableList/ExpandableList.test.js +33 -0
  116. package/src/molecules/ExpandableList/styles.scss +18 -0
  117. package/src/molecules/ExpandableSection/ExpandableSection.js +36 -0
  118. package/src/molecules/ExpandableSection/ExpandableSection.test.js +0 -0
  119. package/src/molecules/ExpandableSection/styles.scss +22 -0
  120. package/src/molecules/ServerModulesList/ServerModulesList.js +75 -0
  121. package/src/molecules/ServerModulesList/styles.scss +28 -0
  122. package/src/molecules/TargetSelector/TargetSelector.js +34 -0
  123. package/src/molecules/TargetSelector/TargetSelector.test.js +0 -0
  124. package/src/molecules/TargetSelector/styles.scss +0 -0
  125. package/src/molecules/TestCaption/TestCaption.js +26 -0
  126. package/src/molecules/TestCaption/TestCaption.test.js +0 -0
  127. package/src/molecules/TestCaption/styles.scss +40 -0
  128. package/src/molecules/TestSummary/index.js +212 -0
  129. package/src/molecules/TestSummary/styles.scss +83 -0
  130. package/src/molecules/TextWith2Links/TextWith2Links.js +10 -0
  131. package/src/molecules/TextWith2Links/styles.scss +0 -0
  132. package/src/molecules/ValidationInput/ValidationInput.js +64 -0
  133. package/src/molecules/ValidationInput/ValidationInput.test.js +0 -0
  134. package/src/molecules/ValidationInput/ValidationMessages.js +178 -0
  135. package/src/molecules/ValidationInput/ValidationOptions.js +113 -0
  136. package/src/molecules/ValidationInput/styles.scss +74 -0
  137. package/src/molecules/ValidationInput/validator.js +244 -0
  138. package/src/organisms/Documentation/Documentation.js +128 -0
  139. package/src/organisms/Documentation/Documentation.test.js +0 -0
  140. package/src/organisms/Documentation/styles.scss +22 -0
  141. package/src/organisms/MultiTestSection/MultiTestSection.js +85 -0
  142. package/src/organisms/MultiTestSection/MultiTestSection.test.js +0 -0
  143. package/src/organisms/MultiTestSection/styles.scss +22 -0
  144. package/src/organisms/SavedTests/SavedTests.js +209 -0
  145. package/src/organisms/SavedTests/SavedTests.test.js +0 -0
  146. package/src/organisms/SavedTests/styles.scss +76 -0
  147. package/src/organisms/SavedTests/transformTests.js +51 -0
  148. package/src/organisms/ScratchPad/ScratchPad.js +128 -0
  149. package/src/organisms/ScratchPad/ScratchPad.test.js +0 -0
  150. package/src/organisms/ScratchPad/styles.scss +100 -0
  151. package/src/organisms/SystemNavigator/SystemNavigator.js +148 -0
  152. package/src/organisms/SystemNavigator/SystemNavigator.test.js +24 -0
  153. package/src/organisms/SystemNavigator/styles.scss +38 -0
  154. package/src/organisms/TestContainer/TestContainer.js +72 -0
  155. package/src/organisms/TestContainer/TestContainer.test.js +0 -0
  156. package/src/organisms/TestContainer/styles.scss +20 -0
  157. package/src/organisms/TestPanel/AfterTest/AfterTest.js +16 -0
  158. package/src/organisms/TestPanel/AfterTest/AfterTest.test.js +0 -0
  159. package/src/organisms/TestPanel/AfterTest/styles.scss +0 -0
  160. package/src/organisms/TestPanel/BeforeTest/BeforeTest.js +16 -0
  161. package/src/organisms/TestPanel/BeforeTest/BeforeTest.test.js +0 -0
  162. package/src/organisms/TestPanel/BeforeTest/styles.scss +0 -0
  163. package/src/organisms/TestPanel/Evaluations.js +369 -0
  164. package/src/organisms/TestPanel/EventsTest/EventsTest.js +19 -0
  165. package/src/organisms/TestPanel/EventsTest/styles.scss +0 -0
  166. package/src/organisms/TestPanel/MainTest/MainTest.js +20 -0
  167. package/src/organisms/TestPanel/MainTest/MainTest.test.js +0 -0
  168. package/src/organisms/TestPanel/MainTest/styles.scss +143 -0
  169. package/src/organisms/TestPanel/TestPanel.js +170 -0
  170. package/src/organisms/TestPanel/TestPanel.test.js +0 -0
  171. package/src/organisms/TestPanel/components/Argument.class.js +94 -0
  172. package/src/organisms/TestPanel/components/FullTestController.js +78 -0
  173. package/src/organisms/TestPanel/components/Test.class.js +162 -0
  174. package/src/organisms/TestPanel/components/TestController.class.js +135 -0
  175. package/src/organisms/TestPanel/components/test-helpers.js +109 -0
  176. package/src/organisms/TestPanel/styles.scss +45 -0
  177. package/src/pages/SystemView/SystemView.js +68 -0
  178. package/src/pages/SystemView/styles.scss +81 -0
  179. package/src/reportWebVitals.js +13 -0
  180. package/src/sass/bootstrap/_alert.scss +51 -0
  181. package/src/sass/bootstrap/_badge.scss +47 -0
  182. package/src/sass/bootstrap/_breadcrumb.scss +38 -0
  183. package/src/sass/bootstrap/_button-group.scss +166 -0
  184. package/src/sass/bootstrap/_buttons.scss +143 -0
  185. package/src/sass/bootstrap/_card.scss +270 -0
  186. package/src/sass/bootstrap/_carousel.scss +191 -0
  187. package/src/sass/bootstrap/_close.scss +34 -0
  188. package/src/sass/bootstrap/_code.scss +56 -0
  189. package/src/sass/bootstrap/_custom-forms.scss +297 -0
  190. package/src/sass/bootstrap/_dropdown.scss +131 -0
  191. package/src/sass/bootstrap/_forms.scss +333 -0
  192. package/src/sass/bootstrap/_functions.scss +86 -0
  193. package/src/sass/bootstrap/_grid.scss +52 -0
  194. package/src/sass/bootstrap/_images.scss +42 -0
  195. package/src/sass/bootstrap/_input-group.scss +159 -0
  196. package/src/sass/bootstrap/_jumbotron.scss +16 -0
  197. package/src/sass/bootstrap/_list-group.scss +115 -0
  198. package/src/sass/bootstrap/_media.scss +8 -0
  199. package/src/sass/bootstrap/_mixins.scss +42 -0
  200. package/src/sass/bootstrap/_modal.scss +168 -0
  201. package/src/sass/bootstrap/_nav.scss +118 -0
  202. package/src/sass/bootstrap/_navbar.scss +311 -0
  203. package/src/sass/bootstrap/_pagination.scss +77 -0
  204. package/src/sass/bootstrap/_popover.scss +183 -0
  205. package/src/sass/bootstrap/_print.scss +124 -0
  206. package/src/sass/bootstrap/_progress.scss +33 -0
  207. package/src/sass/bootstrap/_reboot.scss +482 -0
  208. package/src/sass/bootstrap/_root.scss +19 -0
  209. package/src/sass/bootstrap/_tables.scss +180 -0
  210. package/src/sass/bootstrap/_tooltip.scss +115 -0
  211. package/src/sass/bootstrap/_transitions.scss +36 -0
  212. package/src/sass/bootstrap/_type.scss +125 -0
  213. package/src/sass/bootstrap/_utilities.scss +14 -0
  214. package/src/sass/bootstrap/_variables.scss +894 -0
  215. package/src/sass/bootstrap/bootstrap-grid.scss +32 -0
  216. package/src/sass/bootstrap/bootstrap-reboot.scss +12 -0
  217. package/src/sass/bootstrap/bootstrap.scss +42 -0
  218. package/src/sass/bootstrap/mixins/_alert.scss +13 -0
  219. package/src/sass/bootstrap/mixins/_background-variant.scss +21 -0
  220. package/src/sass/bootstrap/mixins/_badge.scss +12 -0
  221. package/src/sass/bootstrap/mixins/_border-radius.scss +35 -0
  222. package/src/sass/bootstrap/mixins/_box-shadow.scss +5 -0
  223. package/src/sass/bootstrap/mixins/_breakpoints.scss +123 -0
  224. package/src/sass/bootstrap/mixins/_buttons.scss +109 -0
  225. package/src/sass/bootstrap/mixins/_caret.scss +65 -0
  226. package/src/sass/bootstrap/mixins/_clearfix.scss +7 -0
  227. package/src/sass/bootstrap/mixins/_float.scss +11 -0
  228. package/src/sass/bootstrap/mixins/_forms.scss +137 -0
  229. package/src/sass/bootstrap/mixins/_gradients.scss +45 -0
  230. package/src/sass/bootstrap/mixins/_grid-framework.scss +67 -0
  231. package/src/sass/bootstrap/mixins/_grid.scss +52 -0
  232. package/src/sass/bootstrap/mixins/_hover.scss +39 -0
  233. package/src/sass/bootstrap/mixins/_image.scss +36 -0
  234. package/src/sass/bootstrap/mixins/_list-group.scss +21 -0
  235. package/src/sass/bootstrap/mixins/_lists.scss +7 -0
  236. package/src/sass/bootstrap/mixins/_nav-divider.scss +10 -0
  237. package/src/sass/bootstrap/mixins/_navbar-align.scss +10 -0
  238. package/src/sass/bootstrap/mixins/_pagination.scss +22 -0
  239. package/src/sass/bootstrap/mixins/_reset-text.scss +17 -0
  240. package/src/sass/bootstrap/mixins/_resize.scss +6 -0
  241. package/src/sass/bootstrap/mixins/_screen-reader.scss +35 -0
  242. package/src/sass/bootstrap/mixins/_size.scss +6 -0
  243. package/src/sass/bootstrap/mixins/_table-row.scss +30 -0
  244. package/src/sass/bootstrap/mixins/_text-emphasis.scss +14 -0
  245. package/src/sass/bootstrap/mixins/_text-hide.scss +9 -0
  246. package/src/sass/bootstrap/mixins/_text-truncate.scss +8 -0
  247. package/src/sass/bootstrap/mixins/_transition.scss +9 -0
  248. package/src/sass/bootstrap/mixins/_visibility.scss +7 -0
  249. package/src/sass/bootstrap/utilities/_align.scss +8 -0
  250. package/src/sass/bootstrap/utilities/_background.scss +19 -0
  251. package/src/sass/bootstrap/utilities/_borders.scss +59 -0
  252. package/src/sass/bootstrap/utilities/_clearfix.scss +3 -0
  253. package/src/sass/bootstrap/utilities/_display.scss +38 -0
  254. package/src/sass/bootstrap/utilities/_embed.scss +52 -0
  255. package/src/sass/bootstrap/utilities/_flex.scss +46 -0
  256. package/src/sass/bootstrap/utilities/_float.scss +9 -0
  257. package/src/sass/bootstrap/utilities/_position.scss +36 -0
  258. package/src/sass/bootstrap/utilities/_screenreaders.scss +11 -0
  259. package/src/sass/bootstrap/utilities/_sizing.scss +12 -0
  260. package/src/sass/bootstrap/utilities/_spacing.scss +51 -0
  261. package/src/sass/bootstrap/utilities/_text.scss +52 -0
  262. package/src/sass/bootstrap/utilities/_visibility.scss +11 -0
  263. package/src/setupTests.js +5 -0
@@ -0,0 +1,128 @@
1
+ import React, { useState, useContext, useEffect } from "react";
2
+ import "./styles.scss";
3
+ import DescriptionBox from "../../atoms/DescriptionBox/DescriptionBox";
4
+ import EditBox from "../../molecules/EditBox/EditBox";
5
+ import Title from "../../atoms/Title/Title";
6
+ import Markdown from "../../atoms/Markdown/Markdown";
7
+ import ServiceContext from "../../ServiceContext";
8
+ import { Client } from "systemlynx";
9
+
10
+ export default function Documentation({
11
+ projectCode,
12
+ serviceId,
13
+ moduleName,
14
+ methodName,
15
+ }) {
16
+ const { connectedServices } = useContext(ServiceContext);
17
+
18
+ const service = connectedServices.find(
19
+ (service) => service.serviceId === serviceId && service.projectCode === projectCode
20
+ );
21
+ const { Plugin } = service ? Client.createService(service.system.connectionData) : {};
22
+
23
+ const [doc, setDocument] = useState({
24
+ documentation: "",
25
+ namespace: { serviceId, moduleName, methodName },
26
+ });
27
+
28
+ const fetchDocument = async (Plugin) => {
29
+ setDocument({
30
+ documentation: "",
31
+ namespace: { serviceId, moduleName, methodName },
32
+ });
33
+ try {
34
+ if (Plugin) {
35
+ const results = await Plugin.getDoc({
36
+ serviceId,
37
+ moduleName,
38
+ methodName,
39
+ });
40
+ setDocument(results);
41
+ }
42
+ } catch (error) {
43
+ console.error(error);
44
+ }
45
+ };
46
+
47
+ useEffect(() => {
48
+ fetchDocument(Plugin);
49
+ }, [methodName, moduleName, serviceId, Plugin]);
50
+
51
+ useEffect(() => {
52
+ // if (Plugin) Plugin.on(`reconnect`, fetchDocument.bind({}, Plugin));
53
+ }, [Plugin]);
54
+ return (
55
+ <section className="documentation">
56
+ <div className="documentation-view">
57
+ <div className="row">
58
+ <DocTitle
59
+ serviceId={serviceId}
60
+ moduleName={moduleName}
61
+ methodName={methodName}
62
+ />
63
+ </div>
64
+ <div className="row documentation-view__data-table">
65
+ <DocDescription doc={doc} setDocument={setDocument} Plugin={Plugin} />
66
+ </div>
67
+ </div>
68
+ </section>
69
+ );
70
+ }
71
+
72
+ const DocTitle = ({ serviceId, moduleName, methodName, variable_name = "..." }) => {
73
+ return (
74
+ <Title
75
+ style={{ marginBottom: "5px" }}
76
+ text={
77
+ <span className="documentation-view__title">
78
+ {methodName && moduleName && serviceId ? (
79
+ <>
80
+ {`${serviceId}.${moduleName}.${methodName}`}
81
+ <span className="documentation-view__parentheses">(</span>
82
+ <span className="documentation-view__parameter btn">{variable_name}</span>
83
+ <span className="documentation-view__parentheses">)</span>
84
+ </>
85
+ ) : moduleName && serviceId ? (
86
+ <>{`${serviceId}.${moduleName}`}</>
87
+ ) : (
88
+ serviceId && <>{`${serviceId}`}</>
89
+ )}
90
+ </span>
91
+ }
92
+ />
93
+ );
94
+ };
95
+
96
+ const DocDescription = ({ doc, setDocument, Plugin }) => {
97
+ const { serviceId, methodName, moduleName } = doc;
98
+ const [text, setText] = useState(doc.documentation);
99
+ const saveDocument = async (setFormDisplay) => {
100
+ if (Plugin) {
101
+ try {
102
+ const results = await Plugin.saveDoc({ ...doc, documentation: text });
103
+ setDocument(results);
104
+ setFormDisplay(false);
105
+ } catch (error) {
106
+ console.error(error);
107
+ }
108
+ }
109
+ };
110
+
111
+ const updateDoc = (documentation) => setText(documentation);
112
+ const cancel = () => setText(doc.documentation);
113
+
114
+ useEffect(() => {
115
+ setText(doc.documentation);
116
+ }, [doc]);
117
+ return (
118
+ <EditBox
119
+ mainObject={
120
+ <Markdown children={text || "Use markdown to create your documentation here"} />
121
+ }
122
+ hiddenForm={<DescriptionBox text={text || ""} setValue={updateDoc} />}
123
+ formSubmit={saveDocument}
124
+ stateChange={[serviceId, methodName, moduleName]}
125
+ onCancel={cancel}
126
+ />
127
+ );
128
+ };
@@ -0,0 +1,22 @@
1
+ .documentation-view {
2
+ padding-top: 2rem;
3
+ color: black;
4
+
5
+ &__parameter {
6
+ color: #3dceac;
7
+ font-weight: bold;
8
+ }
9
+
10
+ &__data-table {
11
+ margin-bottom: 30px;
12
+ }
13
+ &__title {
14
+ color: #454c69;
15
+ display: flex;
16
+ align-items: flex-start;
17
+ margin-left: 4px;
18
+ }
19
+ &__parentheses {
20
+ font-size: 26px;
21
+ }
22
+ }
@@ -0,0 +1,85 @@
1
+ import React, { useState } from "react";
2
+ import ExpandableSection from "../../molecules/ExpandableSection/ExpandableSection";
3
+ import TestCaption from "../../molecules/TestCaption/TestCaption";
4
+ import TestContainer from "../TestContainer/TestContainer";
5
+ import Argument from "../TestPanel/components/Argument.class";
6
+
7
+ import "./styles.scss";
8
+ import Count from "../../atoms/Count";
9
+
10
+ const MultiTestSection = ({
11
+ caption,
12
+ TestController,
13
+ TestSection,
14
+ dynamic,
15
+ namespace,
16
+ arg = {},
17
+ staticArguments,
18
+ }) => {
19
+ const className = "multi-test-section";
20
+ const [open, setOpen] = useState(false);
21
+
22
+ const toggleExpansion = () => {
23
+ setOpen((state) => !state);
24
+ };
25
+
26
+ const addTest = () => {
27
+ TestController.addTest(
28
+ namespace,
29
+ arg.name && [new Argument(arg.name, arg.FullTest, arg.input_type)]
30
+ );
31
+ TestSection.length === 1 && setOpen(true);
32
+ };
33
+ return (
34
+ <section className={className}>
35
+ <ExpandableSection
36
+ toggleExpansion={toggleExpansion}
37
+ open={open}
38
+ title={
39
+ <>
40
+ <TestCaption
41
+ caption={
42
+ <span>
43
+ {caption}{" "}
44
+ {TestSection.length > 0 && <Count count={TestSection.length} />}
45
+ </span>
46
+ }
47
+ />
48
+ <AddButton onClick={addTest} className={className} />
49
+ </>
50
+ }
51
+ title_color="#0d8065"
52
+ >
53
+ <div className={`${className}__test-data`}>
54
+ {TestSection.length > 0 ? (
55
+ TestSection.map((test, i) => (
56
+ <TestContainer
57
+ key={i}
58
+ TestController={TestController}
59
+ test={test}
60
+ testIndex={i}
61
+ title={`${i + 1}:`}
62
+ title_color={"#4b53b3"}
63
+ dynamic={dynamic}
64
+ open={true}
65
+ staticArguments={staticArguments}
66
+ multiTest
67
+ />
68
+ ))
69
+ ) : (
70
+ <span>no actions</span>
71
+ )}
72
+ </div>
73
+ </ExpandableSection>
74
+ </section>
75
+ );
76
+ };
77
+
78
+ const AddButton = ({ onClick, className }) => {
79
+ return (
80
+ <span className={`${className}__add-btn btn`} onClick={onClick}>
81
+ +
82
+ </span>
83
+ );
84
+ };
85
+ export default MultiTestSection;
@@ -0,0 +1,22 @@
1
+ .multi-test-section {
2
+ width: 100%;
3
+ &__test-data {
4
+ background: #dadada;
5
+ padding: 12px 15px;
6
+ width: 100%;
7
+ border-radius: 5px;
8
+ }
9
+ &__add-btn {
10
+ padding: 0px 4px;
11
+ border-radius: 21px;
12
+ font-weight: bold;
13
+ color: #5960b6;
14
+ font-size: 16px;
15
+ background: #cecee3;
16
+ font-family: monospace;
17
+ }
18
+ }
19
+
20
+ .react-json-view {
21
+ font-size: 14px;
22
+ }
@@ -0,0 +1,209 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import { Client } from "systemlynx";
3
+ import Count from "../../atoms/Count";
4
+ import ExpandIcon from "../../atoms/ExpandableIcon/ExpandableIcon";
5
+ import RunTestIcon, { EditIcon, XButton } from "../../atoms/RunTestIcon";
6
+ import ExpandableSection from "../../molecules/ExpandableSection/ExpandableSection";
7
+ import TestCaption from "../../molecules/TestCaption/TestCaption";
8
+ import TestSummary from "../../molecules/TestSummary";
9
+ import FullTestController from "../TestPanel/components/FullTestController";
10
+ import { resetSavedTests, resetFullTest } from "./transformTests";
11
+ import "./styles.scss";
12
+ import { ClearButton } from "../../atoms/Button/Button";
13
+
14
+ window.Client = Client;
15
+ const CLASSNAME = "test-saved-section";
16
+
17
+ const SavedTests = ({
18
+ savedTests = [],
19
+ connectedServices,
20
+ setFullTest,
21
+ Plugin,
22
+ fetchTests,
23
+ }) => {
24
+ const [open, setOpen] = useState(false);
25
+ const toggleExpansion = () => setOpen((state) => !state);
26
+ const [openAll, setOpenAll] = useState(false);
27
+ const [closeAll, setCloseAll] = useState(false);
28
+ const [savedTestList, setTests] = useState(
29
+ resetSavedTests(savedTests, connectedServices)
30
+ );
31
+ window.savedTestList = savedTestList;
32
+ window.savedTests = savedTests;
33
+
34
+ const updateTests = (i, FullTest) => {
35
+ savedTestList[i] = { ...FullTest };
36
+ setTests([...savedTestList]);
37
+ };
38
+ const clearTests = () => {
39
+ setTests(resetSavedTests(savedTests, connectedServices));
40
+ setCloseAll((state) => !state);
41
+ };
42
+
43
+ const runAllTests = async () => {
44
+ setOpen(true);
45
+ setOpenAll((state) => !state);
46
+ // await Promise.all(savedTestList.map((FullTest, i) => runTest(i, FullTest)));
47
+ await new Promise((resolve) => {
48
+ function recursiveRunTest(tests, i = 0) {
49
+ if (i === tests.length) resolve();
50
+ else runTest(i, tests[i]).then(() => recursiveRunTest(tests, i + 1));
51
+ }
52
+ recursiveRunTest(savedTestList);
53
+ });
54
+ };
55
+
56
+ const runTest = async (index, { Before, Main, Events, After }) => {
57
+ const { runFullTest } = new FullTestController({
58
+ FullTest: [Before, Main, Events, After],
59
+ connectedServices,
60
+ });
61
+
62
+ const [B, M, E, A] = await runFullTest();
63
+ const { title, namespace } = Main[0];
64
+ updateTests(index, { Before: B, Main: M, Events: E, After: A, title, namespace });
65
+ };
66
+ useEffect(() => {
67
+ setTests(resetSavedTests(savedTests, connectedServices));
68
+ }, [savedTests]);
69
+ return (
70
+ <section className={`${CLASSNAME}`}>
71
+ <ExpandableSection
72
+ toggleExpansion={toggleExpansion}
73
+ open={open}
74
+ title={
75
+ <>
76
+ <TestCaption
77
+ caption={
78
+ <span>
79
+ {"Saved"}{" "}
80
+ {savedTestList.length > 0 && <Count count={savedTestList.length} />}
81
+ </span>
82
+ }
83
+ />
84
+ <div className={`${CLASSNAME}__buttons ${CLASSNAME}__top-buttons`}>
85
+ <ClearButton onClick={clearTests} />
86
+ <RunTestIcon onClick={runAllTests} />
87
+ </div>
88
+ </>
89
+ }
90
+ >
91
+ {savedTestList.length ? (
92
+ <div className="test-saved-section__test-container">
93
+ {savedTestList.map((FullTest, i) => (
94
+ <TestDetails
95
+ key={i}
96
+ {...FullTest}
97
+ index={i}
98
+ isOpen={open}
99
+ openAll={openAll}
100
+ closeAll={closeAll}
101
+ runTest={runTest.bind({}, i, FullTest)}
102
+ setFullTest={setFullTest}
103
+ connectedServices={connectedServices}
104
+ Plugin={Plugin}
105
+ fetchTests={fetchTests}
106
+ />
107
+ ))}
108
+ </div>
109
+ ) : (
110
+ <div className="test-saved-section__test-data">
111
+ <span>no saved tests</span>
112
+ </div>
113
+ )}
114
+ </ExpandableSection>
115
+ </section>
116
+ );
117
+ };
118
+
119
+ function TestDetails({
120
+ title,
121
+ index,
122
+ Before,
123
+ Main,
124
+ Events,
125
+ After,
126
+ namespace,
127
+ runTest,
128
+ openAll,
129
+ closeAll,
130
+ setFullTest,
131
+ connectedServices,
132
+ Plugin,
133
+ fetchTests,
134
+ }) {
135
+ const [open, setOpen] = useState(true);
136
+ const [showDeleteMsg, setDeleteMsg] = useState(false);
137
+ const toggleExpansion = () => {
138
+ setOpen((state) => !state);
139
+ };
140
+ const editTest = () => {
141
+ Main[0].index = index;
142
+ const Tests = resetFullTest([Before, Main, Events, After], connectedServices);
143
+ setFullTest(Tests);
144
+ };
145
+ const hideDelete = () => setDeleteMsg(false);
146
+ const showDelete = () => setDeleteMsg(true);
147
+ const deleteTest = async () => {
148
+ if (Plugin) {
149
+ await Plugin.deleteTest(namespace, index);
150
+ hideDelete();
151
+ fetchTests();
152
+ }
153
+ };
154
+ const runTestHandler = () => {
155
+ setOpen(true);
156
+ runTest();
157
+ };
158
+ useEffect(() => {
159
+ setOpen(true);
160
+ }, [openAll]);
161
+ useEffect(() => {
162
+ setOpen(false);
163
+ }, [closeAll]);
164
+ useEffect(() => {
165
+ setOpen(false);
166
+ }, [namespace.serviceId, namespace.moduleName, namespace.methodName]);
167
+ return (
168
+ <div className={`${CLASSNAME}__test-container`}>
169
+ <div className={`${CLASSNAME}__test-row`}>
170
+ <ExpandIcon color="#4caf50" onClick={toggleExpansion} isOpen={open} />
171
+ <span className={`${CLASSNAME}__test-index`}>Test {index + 1}:</span>
172
+ {showDeleteMsg ? (
173
+ <span className={`${CLASSNAME}__delete-prompt ${CLASSNAME}__test-title`}>
174
+ Delete test?{" "}
175
+ <span
176
+ onClick={deleteTest}
177
+ className={`${CLASSNAME}__delete-btn ${CLASSNAME}__delete-btn--yes btn`}
178
+ >
179
+ Yes
180
+ </span>
181
+ <span
182
+ onClick={hideDelete}
183
+ className={`${CLASSNAME}__delete-btn ${CLASSNAME}__delete-btn--no btn`}
184
+ >
185
+ No
186
+ </span>
187
+ </span>
188
+ ) : (
189
+ <span className={`${CLASSNAME}__test-title`}>{title}</span>
190
+ )}
191
+
192
+ <span className={`${CLASSNAME}__buttons`}>
193
+ <RunTestIcon onClick={runTestHandler} />
194
+ <EditIcon onClick={editTest} />
195
+ <XButton onClick={showDelete} />
196
+ </span>
197
+ </div>
198
+ {open && (
199
+ <>
200
+ {!!Before.length && <TestSummary testSection={Before} section="Before" />}
201
+ {!!Main.length && <TestSummary testSection={Main} section="Main" />}
202
+ {!!Events.length && <TestSummary testSection={Events} section="Events" />}
203
+ {!!After.length && <TestSummary testSection={After} section="After" />}
204
+ </>
205
+ )}
206
+ </div>
207
+ );
208
+ }
209
+ export default SavedTests;
File without changes
@@ -0,0 +1,76 @@
1
+ .test-saved-section {
2
+ width: 100%;
3
+ border-top: 1px solid #e9e9e9;
4
+ padding-top: 10px;
5
+ &__test-data {
6
+ background: gainsboro;
7
+ padding: 12px 15px;
8
+ width: 100%;
9
+ }
10
+
11
+ &__test-container {
12
+ margin: 5px 0;
13
+ }
14
+ &__test-row {
15
+ background: #e9e9e9;
16
+ padding: 4px 5px;
17
+ display: flex;
18
+ align-items: center;
19
+ border: 1px solid #e9e9e9;
20
+ }
21
+
22
+ &__test-index {
23
+ color: #4caf50;
24
+ color: #3d3d3d;
25
+ font-size: 14px;
26
+ padding: 0 8px;
27
+ font-weight: 600;
28
+ flex: 1;
29
+ }
30
+ &__test-title {
31
+ color: #236382;
32
+ flex: 5;
33
+ }
34
+ &__buttons {
35
+ flex: 2;
36
+
37
+ display: flex;
38
+ flex-direction: row;
39
+ align-items: center;
40
+ justify-content: space-around;
41
+ }
42
+ &__top-buttons {
43
+ width: 77px;
44
+ flex: none;
45
+ }
46
+ &__clear-button {
47
+ background: #607d8b;
48
+ padding: 0px 8px;
49
+ color: white;
50
+ border-radius: 17px;
51
+ font-weight: 600;
52
+ align-self: flex-end;
53
+ & > img {
54
+ width: 13px;
55
+ padding-top: 2px;
56
+ }
57
+ }
58
+ &__delete-prompt {
59
+ color: #c02a2a;
60
+ font-weight: 700;
61
+ }
62
+ &__delete-btn {
63
+ margin: 0 5px;
64
+ background: gray;
65
+ padding: 0px 6px;
66
+ border-radius: 4px;
67
+ color: white;
68
+ &--yes:hover {
69
+ color: #c02a2a;
70
+ }
71
+ }
72
+ }
73
+
74
+ .react-json-view {
75
+ font-size: 14px;
76
+ }
@@ -0,0 +1,51 @@
1
+ import Argument from "../TestPanel/components/Argument.class";
2
+ import Test from "../TestPanel/components/Test.class";
3
+
4
+ export function resetSavedTests(savedTests, connectedServices) {
5
+ return savedTests.map((ft) => {
6
+ // context matters
7
+ const newTests = [];
8
+ const { title, namespace } = ft;
9
+
10
+ const Before = ft.Before.map((test) =>
11
+ resetTest(test, newTests, connectedServices, false)
12
+ );
13
+ const Main = ft.Main.map((test) =>
14
+ resetTest(test, newTests, connectedServices, false)
15
+ );
16
+ const Events = ft.Events.map((test) =>
17
+ resetTest(test, newTests, connectedServices, false)
18
+ );
19
+ const After = ft.After.map((test) =>
20
+ resetTest(test, newTests, connectedServices, false)
21
+ );
22
+ newTests.push(Before);
23
+ newTests.push(Main);
24
+ newTests.push(Events);
25
+ newTests.push(After);
26
+ return { Before, Main, Events, After, title, namespace };
27
+ });
28
+ }
29
+
30
+ export const resetTest = (test, FullTest, connectedServices, editMode) => {
31
+ return new Test({
32
+ ...test,
33
+ args: test.args.map(
34
+ (arg) =>
35
+ new Argument(arg.name, FullTest, arg.input_type, arg.input, arg.targetValues)
36
+ ),
37
+ editMode,
38
+ }).getConnection(connectedServices);
39
+ };
40
+
41
+ export const resetFullTest = (FullTest, connectedServices, editMode) => {
42
+ //context matters
43
+ const newTests = [[], [], [], []];
44
+ return FullTest.map((section, i) => {
45
+ return section.map((test) => {
46
+ const newTest = resetTest(test, newTests, connectedServices, editMode);
47
+ newTests[i].push(newTest);
48
+ return newTest;
49
+ });
50
+ });
51
+ };