systemview 1.0.0 → 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 (264) 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/index.js +23 -6
  6. package/cli/launchApp.js +0 -0
  7. package/cli/runTest.js +0 -0
  8. package/cli/utils/cli.js +48 -0
  9. package/cli/utils/init.js +17 -0
  10. package/cli/utils/log.js +11 -0
  11. package/package.json +7 -4
  12. package/plugin/SystemViewModule.js +97 -0
  13. package/plugin/getAllTest.js +21 -0
  14. package/plugin/index.js +40 -0
  15. package/src/App.css +38 -0
  16. package/src/App.js +30 -0
  17. package/src/ServiceContext.js +9 -0
  18. package/src/assets/arrow.png +0 -0
  19. package/src/assets/check.svg +1 -0
  20. package/src/assets/clear.png +0 -0
  21. package/src/assets/edit.png +0 -0
  22. package/src/assets/error.svg +1 -0
  23. package/src/assets/eval-icon.svg +10 -0
  24. package/src/assets/expand-arrow.svg +41 -0
  25. package/src/assets/expand-button.svg +41 -0
  26. package/src/assets/fonts/FontsFree-Net-SFMono-Regular.ttf +0 -0
  27. package/src/assets/fonts/Malkor-Regular.ttf +0 -0
  28. package/src/assets/iconfinder-icon (1).svg +14 -0
  29. package/src/assets/iconfinder-icon.svg +14 -0
  30. package/src/assets/icons-save-60.png +0 -0
  31. package/src/assets/loading.gif +0 -0
  32. package/src/assets/missing-doc.png +0 -0
  33. package/src/assets/saved-doc.png +0 -0
  34. package/src/assets/sysly.png +0 -0
  35. package/src/assets/test-icon.svg +10 -0
  36. package/src/assets/test-missing.png +0 -0
  37. package/src/assets/test-saved.png +0 -0
  38. package/src/assets/x.svg +1 -0
  39. package/src/atoms/Button/Button.js +20 -0
  40. package/src/atoms/Button/Button.test.js +27 -0
  41. package/src/atoms/Button/__snapshots__/Button.test.js.snap +9 -0
  42. package/src/atoms/Button/styles.scss +35 -0
  43. package/src/atoms/Count/index.js +10 -0
  44. package/src/atoms/Count/styles.scss +25 -0
  45. package/src/atoms/DataTable/DataTable.js +27 -0
  46. package/src/atoms/DataTable/DataTable.test.js +55 -0
  47. package/src/atoms/DataTable/__snapshots__/DataTable.test.js.snap +36 -0
  48. package/src/atoms/DataTable/styles.scss +28 -0
  49. package/src/atoms/DescriptionBox/DescriptionBox.js +24 -0
  50. package/src/atoms/DescriptionBox/DescriptionBox.test.js +36 -0
  51. package/src/atoms/DescriptionBox/__snapshots__/DescriptionBox.test.js.snap +14 -0
  52. package/src/atoms/DescriptionBox/styles.scss +24 -0
  53. package/src/atoms/DescriptionText/DescriptionText.js +12 -0
  54. package/src/atoms/DescriptionText/DescriptionText.test.js +22 -0
  55. package/src/atoms/DescriptionText/styles.scss +10 -0
  56. package/src/atoms/DocsIcon/DocsIcon.js +20 -0
  57. package/src/atoms/DocsIcon/DocsIcon.test.js +23 -0
  58. package/src/atoms/DocsIcon/styles.scss +7 -0
  59. package/src/atoms/ExpandableIcon/ExpandableIcon.js +30 -0
  60. package/src/atoms/ExpandableIcon/ExpandableIcon.test.js +18 -0
  61. package/src/atoms/ExpandableIcon/styles.scss +5 -0
  62. package/src/atoms/JsonTextBox/JsonTextBox.js +61 -0
  63. package/src/atoms/JsonTextBox/JsonTextBox.test.js +0 -0
  64. package/src/atoms/JsonTextBox/styles.scss +41 -0
  65. package/src/atoms/Link/Link.js +17 -0
  66. package/src/atoms/Link/Link.test.js +33 -0
  67. package/src/atoms/Link/styles.scss +8 -0
  68. package/src/atoms/List/List.js +8 -0
  69. package/src/atoms/List/List.test.js +26 -0
  70. package/src/atoms/List/styles.scss +9 -0
  71. package/src/atoms/Markdown/Markdown.js +48 -0
  72. package/src/atoms/Markdown/styles.scss +414 -0
  73. package/src/atoms/RunTestIcon/index.js +41 -0
  74. package/src/atoms/RunTestIcon/styles.scss +16 -0
  75. package/src/atoms/SaveIcon/SaveIcon.js +6 -0
  76. package/src/atoms/SaveIcon/styles.scss +3 -0
  77. package/src/atoms/Selector/Selector.js +28 -0
  78. package/src/atoms/Selector/Selector.test.js +0 -0
  79. package/src/atoms/Selector/styles.scss +1 -0
  80. package/src/atoms/StatusIndicator/StatusIndicator.js +16 -0
  81. package/src/atoms/StatusIndicator/styles.scss +33 -0
  82. package/src/atoms/TestsIcon/TestsIcon.js +17 -0
  83. package/src/atoms/TestsIcon/TestsIcon.test.js +18 -0
  84. package/src/atoms/TestsIcon/styles.scss +0 -0
  85. package/src/atoms/Text/Text.js +8 -0
  86. package/src/atoms/Text/Text.test.js +21 -0
  87. package/src/atoms/Text/styles.scss +0 -0
  88. package/src/atoms/Textbox/Textbox.js +33 -0
  89. package/src/atoms/Textbox/Textbox.test.js +23 -0
  90. package/src/atoms/Textbox/styles.scss +14 -0
  91. package/src/atoms/Title/Title.js +12 -0
  92. package/src/atoms/Title/Title.test.js +0 -0
  93. package/src/atoms/Title/styles.scss +6 -0
  94. package/src/atoms/Toggle/Toggle.js +13 -0
  95. package/src/atoms/Toggle/Toggle.test.js +0 -0
  96. package/src/atoms/Toggle/styles.scss +62 -0
  97. package/src/atoms/TypeSelector/TypeSelector.js +28 -0
  98. package/src/atoms/TypeSelector/TypeSelector.test.js +0 -0
  99. package/src/atoms/TypeSelector/styles.scss +9 -0
  100. package/src/index.css +20 -0
  101. package/src/index.js +24 -0
  102. package/src/logo.svg +7 -0
  103. package/src/molecules/Args/Args.js +302 -0
  104. package/src/molecules/Args/Args.test.js +0 -0
  105. package/src/molecules/Args/styles.scss +166 -0
  106. package/src/molecules/AutoCompleteBox/AutoCompleteBox.js +101 -0
  107. package/src/molecules/AutoCompleteBox/AutoCompleteBox.test.js +0 -0
  108. package/src/molecules/AutoCompleteBox/styles.scss +35 -0
  109. package/src/molecules/DataTableForm/DataTableForm.js +167 -0
  110. package/src/molecules/DataTableForm/DataTableForm.test.js +0 -0
  111. package/src/molecules/DataTableForm/styles.scss +51 -0
  112. package/src/molecules/EditBox/EditBox.js +49 -0
  113. package/src/molecules/EditBox/EditBox.test.js +0 -0
  114. package/src/molecules/EditBox/styles.scss +38 -0
  115. package/src/molecules/ExpandableList/ExpandableList.js +26 -0
  116. package/src/molecules/ExpandableList/ExpandableList.test.js +33 -0
  117. package/src/molecules/ExpandableList/styles.scss +18 -0
  118. package/src/molecules/ExpandableSection/ExpandableSection.js +36 -0
  119. package/src/molecules/ExpandableSection/ExpandableSection.test.js +0 -0
  120. package/src/molecules/ExpandableSection/styles.scss +22 -0
  121. package/src/molecules/ServerModulesList/ServerModulesList.js +75 -0
  122. package/src/molecules/ServerModulesList/styles.scss +28 -0
  123. package/src/molecules/TargetSelector/TargetSelector.js +34 -0
  124. package/src/molecules/TargetSelector/TargetSelector.test.js +0 -0
  125. package/src/molecules/TargetSelector/styles.scss +0 -0
  126. package/src/molecules/TestCaption/TestCaption.js +26 -0
  127. package/src/molecules/TestCaption/TestCaption.test.js +0 -0
  128. package/src/molecules/TestCaption/styles.scss +40 -0
  129. package/src/molecules/TestSummary/index.js +212 -0
  130. package/src/molecules/TestSummary/styles.scss +83 -0
  131. package/src/molecules/TextWith2Links/TextWith2Links.js +10 -0
  132. package/src/molecules/TextWith2Links/styles.scss +0 -0
  133. package/src/molecules/ValidationInput/ValidationInput.js +64 -0
  134. package/src/molecules/ValidationInput/ValidationInput.test.js +0 -0
  135. package/src/molecules/ValidationInput/ValidationMessages.js +178 -0
  136. package/src/molecules/ValidationInput/ValidationOptions.js +113 -0
  137. package/src/molecules/ValidationInput/styles.scss +74 -0
  138. package/src/molecules/ValidationInput/validator.js +244 -0
  139. package/src/organisms/Documentation/Documentation.js +128 -0
  140. package/src/organisms/Documentation/Documentation.test.js +0 -0
  141. package/src/organisms/Documentation/styles.scss +22 -0
  142. package/src/organisms/MultiTestSection/MultiTestSection.js +85 -0
  143. package/src/organisms/MultiTestSection/MultiTestSection.test.js +0 -0
  144. package/src/organisms/MultiTestSection/styles.scss +22 -0
  145. package/src/organisms/SavedTests/SavedTests.js +209 -0
  146. package/src/organisms/SavedTests/SavedTests.test.js +0 -0
  147. package/src/organisms/SavedTests/styles.scss +76 -0
  148. package/src/organisms/SavedTests/transformTests.js +51 -0
  149. package/src/organisms/ScratchPad/ScratchPad.js +128 -0
  150. package/src/organisms/ScratchPad/ScratchPad.test.js +0 -0
  151. package/src/organisms/ScratchPad/styles.scss +100 -0
  152. package/src/organisms/SystemNavigator/SystemNavigator.js +148 -0
  153. package/src/organisms/SystemNavigator/SystemNavigator.test.js +24 -0
  154. package/src/organisms/SystemNavigator/styles.scss +38 -0
  155. package/src/organisms/TestContainer/TestContainer.js +72 -0
  156. package/src/organisms/TestContainer/TestContainer.test.js +0 -0
  157. package/src/organisms/TestContainer/styles.scss +20 -0
  158. package/src/organisms/TestPanel/AfterTest/AfterTest.js +16 -0
  159. package/src/organisms/TestPanel/AfterTest/AfterTest.test.js +0 -0
  160. package/src/organisms/TestPanel/AfterTest/styles.scss +0 -0
  161. package/src/organisms/TestPanel/BeforeTest/BeforeTest.js +16 -0
  162. package/src/organisms/TestPanel/BeforeTest/BeforeTest.test.js +0 -0
  163. package/src/organisms/TestPanel/BeforeTest/styles.scss +0 -0
  164. package/src/organisms/TestPanel/Evaluations.js +369 -0
  165. package/src/organisms/TestPanel/EventsTest/EventsTest.js +19 -0
  166. package/src/organisms/TestPanel/EventsTest/styles.scss +0 -0
  167. package/src/organisms/TestPanel/MainTest/MainTest.js +20 -0
  168. package/src/organisms/TestPanel/MainTest/MainTest.test.js +0 -0
  169. package/src/organisms/TestPanel/MainTest/styles.scss +143 -0
  170. package/src/organisms/TestPanel/TestPanel.js +170 -0
  171. package/src/organisms/TestPanel/TestPanel.test.js +0 -0
  172. package/src/organisms/TestPanel/components/Argument.class.js +94 -0
  173. package/src/organisms/TestPanel/components/FullTestController.js +78 -0
  174. package/src/organisms/TestPanel/components/Test.class.js +162 -0
  175. package/src/organisms/TestPanel/components/TestController.class.js +135 -0
  176. package/src/organisms/TestPanel/components/test-helpers.js +109 -0
  177. package/src/organisms/TestPanel/styles.scss +45 -0
  178. package/src/pages/SystemView/SystemView.js +68 -0
  179. package/src/pages/SystemView/styles.scss +81 -0
  180. package/src/reportWebVitals.js +13 -0
  181. package/src/sass/bootstrap/_alert.scss +51 -0
  182. package/src/sass/bootstrap/_badge.scss +47 -0
  183. package/src/sass/bootstrap/_breadcrumb.scss +38 -0
  184. package/src/sass/bootstrap/_button-group.scss +166 -0
  185. package/src/sass/bootstrap/_buttons.scss +143 -0
  186. package/src/sass/bootstrap/_card.scss +270 -0
  187. package/src/sass/bootstrap/_carousel.scss +191 -0
  188. package/src/sass/bootstrap/_close.scss +34 -0
  189. package/src/sass/bootstrap/_code.scss +56 -0
  190. package/src/sass/bootstrap/_custom-forms.scss +297 -0
  191. package/src/sass/bootstrap/_dropdown.scss +131 -0
  192. package/src/sass/bootstrap/_forms.scss +333 -0
  193. package/src/sass/bootstrap/_functions.scss +86 -0
  194. package/src/sass/bootstrap/_grid.scss +52 -0
  195. package/src/sass/bootstrap/_images.scss +42 -0
  196. package/src/sass/bootstrap/_input-group.scss +159 -0
  197. package/src/sass/bootstrap/_jumbotron.scss +16 -0
  198. package/src/sass/bootstrap/_list-group.scss +115 -0
  199. package/src/sass/bootstrap/_media.scss +8 -0
  200. package/src/sass/bootstrap/_mixins.scss +42 -0
  201. package/src/sass/bootstrap/_modal.scss +168 -0
  202. package/src/sass/bootstrap/_nav.scss +118 -0
  203. package/src/sass/bootstrap/_navbar.scss +311 -0
  204. package/src/sass/bootstrap/_pagination.scss +77 -0
  205. package/src/sass/bootstrap/_popover.scss +183 -0
  206. package/src/sass/bootstrap/_print.scss +124 -0
  207. package/src/sass/bootstrap/_progress.scss +33 -0
  208. package/src/sass/bootstrap/_reboot.scss +482 -0
  209. package/src/sass/bootstrap/_root.scss +19 -0
  210. package/src/sass/bootstrap/_tables.scss +180 -0
  211. package/src/sass/bootstrap/_tooltip.scss +115 -0
  212. package/src/sass/bootstrap/_transitions.scss +36 -0
  213. package/src/sass/bootstrap/_type.scss +125 -0
  214. package/src/sass/bootstrap/_utilities.scss +14 -0
  215. package/src/sass/bootstrap/_variables.scss +894 -0
  216. package/src/sass/bootstrap/bootstrap-grid.scss +32 -0
  217. package/src/sass/bootstrap/bootstrap-reboot.scss +12 -0
  218. package/src/sass/bootstrap/bootstrap.scss +42 -0
  219. package/src/sass/bootstrap/mixins/_alert.scss +13 -0
  220. package/src/sass/bootstrap/mixins/_background-variant.scss +21 -0
  221. package/src/sass/bootstrap/mixins/_badge.scss +12 -0
  222. package/src/sass/bootstrap/mixins/_border-radius.scss +35 -0
  223. package/src/sass/bootstrap/mixins/_box-shadow.scss +5 -0
  224. package/src/sass/bootstrap/mixins/_breakpoints.scss +123 -0
  225. package/src/sass/bootstrap/mixins/_buttons.scss +109 -0
  226. package/src/sass/bootstrap/mixins/_caret.scss +65 -0
  227. package/src/sass/bootstrap/mixins/_clearfix.scss +7 -0
  228. package/src/sass/bootstrap/mixins/_float.scss +11 -0
  229. package/src/sass/bootstrap/mixins/_forms.scss +137 -0
  230. package/src/sass/bootstrap/mixins/_gradients.scss +45 -0
  231. package/src/sass/bootstrap/mixins/_grid-framework.scss +67 -0
  232. package/src/sass/bootstrap/mixins/_grid.scss +52 -0
  233. package/src/sass/bootstrap/mixins/_hover.scss +39 -0
  234. package/src/sass/bootstrap/mixins/_image.scss +36 -0
  235. package/src/sass/bootstrap/mixins/_list-group.scss +21 -0
  236. package/src/sass/bootstrap/mixins/_lists.scss +7 -0
  237. package/src/sass/bootstrap/mixins/_nav-divider.scss +10 -0
  238. package/src/sass/bootstrap/mixins/_navbar-align.scss +10 -0
  239. package/src/sass/bootstrap/mixins/_pagination.scss +22 -0
  240. package/src/sass/bootstrap/mixins/_reset-text.scss +17 -0
  241. package/src/sass/bootstrap/mixins/_resize.scss +6 -0
  242. package/src/sass/bootstrap/mixins/_screen-reader.scss +35 -0
  243. package/src/sass/bootstrap/mixins/_size.scss +6 -0
  244. package/src/sass/bootstrap/mixins/_table-row.scss +30 -0
  245. package/src/sass/bootstrap/mixins/_text-emphasis.scss +14 -0
  246. package/src/sass/bootstrap/mixins/_text-hide.scss +9 -0
  247. package/src/sass/bootstrap/mixins/_text-truncate.scss +8 -0
  248. package/src/sass/bootstrap/mixins/_transition.scss +9 -0
  249. package/src/sass/bootstrap/mixins/_visibility.scss +7 -0
  250. package/src/sass/bootstrap/utilities/_align.scss +8 -0
  251. package/src/sass/bootstrap/utilities/_background.scss +19 -0
  252. package/src/sass/bootstrap/utilities/_borders.scss +59 -0
  253. package/src/sass/bootstrap/utilities/_clearfix.scss +3 -0
  254. package/src/sass/bootstrap/utilities/_display.scss +38 -0
  255. package/src/sass/bootstrap/utilities/_embed.scss +52 -0
  256. package/src/sass/bootstrap/utilities/_flex.scss +46 -0
  257. package/src/sass/bootstrap/utilities/_float.scss +9 -0
  258. package/src/sass/bootstrap/utilities/_position.scss +36 -0
  259. package/src/sass/bootstrap/utilities/_screenreaders.scss +11 -0
  260. package/src/sass/bootstrap/utilities/_sizing.scss +12 -0
  261. package/src/sass/bootstrap/utilities/_spacing.scss +51 -0
  262. package/src/sass/bootstrap/utilities/_text.scss +52 -0
  263. package/src/sass/bootstrap/utilities/_visibility.scss +11 -0
  264. package/src/setupTests.js +5 -0
@@ -0,0 +1,212 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import Count from "../../atoms/Count";
3
+ import TestCaption from "../TestCaption/TestCaption";
4
+ import CHECK from "../../assets/check.svg";
5
+ import ERROR from "../../assets/error.svg";
6
+ import ARROW from "../../assets/arrow.png";
7
+ import LOADING from "../../assets/loading.gif";
8
+ import "./styles.scss";
9
+ import ExpandIcon from "../../atoms/ExpandableIcon/ExpandableIcon";
10
+ import { Argument } from "../Args/Args";
11
+ import ValidationMessage from "../ValidationInput/ValidationMessages";
12
+
13
+ const CLASS_NAME = "test-summary";
14
+ export default function TestSummary({ testSection = [], section, isTesting }) {
15
+ const [open, setOpen] = useState(false);
16
+ const toggleExpansion = () => {
17
+ setOpen((state) => !state);
18
+ };
19
+
20
+ const validationCount = testSection.reduce((sum, test) => {
21
+ test.totalValidations = test.savedEvaluations.reduce(
22
+ (sum, { type, expected_type, namespace, validations }) => {
23
+ sum.push({
24
+ name: "typeError",
25
+ expected: expected_type,
26
+ received: type,
27
+ namespace,
28
+ });
29
+
30
+ return sum.concat(
31
+ validations.map(({ name, value }) => ({ name, expected: value, namespace }))
32
+ );
33
+ },
34
+ []
35
+ );
36
+
37
+ return (sum += test.totalValidations.length);
38
+ }, 0);
39
+
40
+ const errorCount = testSection.reduce((sum, { errors }) => (sum += errors.length), 0);
41
+
42
+ useEffect(() => {
43
+ setOpen(true);
44
+ }, [isTesting]);
45
+ return (
46
+ <section className={`${CLASS_NAME}`}>
47
+ <div className={`${CLASS_NAME}__header`}>
48
+ <ExpandIcon color="#0d8065" isOpen={open} onClick={toggleExpansion} />
49
+
50
+ <TestCaption
51
+ caption={
52
+ <div className={`${CLASS_NAME}__caption--${section}`}>
53
+ <span>{section + " Test"}:</span>
54
+ <span>
55
+ <Count count={testSection.length} stat="actions" />
56
+ <Count
57
+ count={validationCount}
58
+ stat="validations"
59
+ type={!!validationCount && "caution"}
60
+ />
61
+ </span>
62
+ <span>
63
+ <Count count={errorCount} stat="errors" type={!!errorCount && "error"} />
64
+ </span>
65
+ </div>
66
+ }
67
+ />
68
+ </div>
69
+ {open && (
70
+ <div>
71
+ {testSection.map((test, i) => (
72
+ <Test key={i} {...test} />
73
+ ))}
74
+ </div>
75
+ )}
76
+ </section>
77
+ );
78
+ }
79
+ function Test({
80
+ title,
81
+ errors = [],
82
+ namespace,
83
+ args,
84
+ results,
85
+ test_end,
86
+ test_start,
87
+ response_type,
88
+ totalValidations,
89
+ }) {
90
+ const filterPassingValidations = (tv) =>
91
+ tv.filter(
92
+ (v) => !errors.find((e) => e.namespace === v.namespace && e.name === v.name)
93
+ );
94
+
95
+ const [open, setOpen] = useState(false);
96
+ const toggleExpansion = () => {
97
+ setOpen((state) => !state);
98
+ };
99
+
100
+ return (
101
+ <div>
102
+ <div className={`${CLASS_NAME}__actions`}>
103
+ <span className={`${CLASS_NAME}__action-text`}>
104
+ <ExpandIcon color="black" onClick={toggleExpansion} isOpen={open} /> {title}
105
+ </span>
106
+ {!!test_start && !test_end && (
107
+ <img src={LOADING} alt="check" style={{ width: "18px" }} />
108
+ )}
109
+ {/* <img src={LOADING} alt="check" style={{ width: "18px" }} /> */}
110
+
111
+ {!!test_end && (
112
+ <>
113
+ {errors.length ? (
114
+ <img src={ERROR} alt="check" style={{ width: "18px" }} />
115
+ ) : (
116
+ <img src={CHECK} alt="check" style={{ width: "18px" }} />
117
+ )}
118
+ </>
119
+ )}
120
+ </div>
121
+ {open && (
122
+ <>
123
+ <TestMethod namespace={namespace} args={args} />
124
+ {!!test_end && (
125
+ <>
126
+ <TestResponse results={results} response_type={response_type} />
127
+ {!!errors.length && (
128
+ <TestValidations title={"failing validations"} validations={errors} />
129
+ )}
130
+ </>
131
+ )}
132
+
133
+ <TestValidations
134
+ title={`${!test_end ? "total" : "passing"} validations`}
135
+ validations={filterPassingValidations(totalValidations)}
136
+ isError={false}
137
+ />
138
+ </>
139
+ )}
140
+ </div>
141
+ );
142
+ }
143
+
144
+ function TestMethod({ namespace, args }) {
145
+ const { serviceId, moduleName, methodName } = namespace;
146
+ return (
147
+ <div className={`${CLASS_NAME}__method`}>
148
+ <img className={`${CLASS_NAME}__arrow`} src={ARROW} alt="arrow" />
149
+ <span
150
+ className={`${CLASS_NAME}__namespace`}
151
+ >{`${serviceId}.${moduleName}.${methodName}`}</span>
152
+ <span className={`${CLASS_NAME}__parentheses`}>(</span>
153
+ {args.map(({ data_type, value, targetValues }, i) => (
154
+ <React.Fragment key={i}>
155
+ <span className={`${CLASS_NAME}__parameter`}>
156
+ {!!targetValues.length && "tv:"}
157
+ <Argument value={value()} data_type={data_type} />
158
+ </span>
159
+ {i < args.length - 1 && <span className={`${CLASS_NAME}__comma`}>,</span>}
160
+ </React.Fragment>
161
+ ))}
162
+ <span className={`${CLASS_NAME}__parentheses`}>)</span>
163
+ </div>
164
+ );
165
+ }
166
+
167
+ function TestResponse({ results = mock, response_type = "results" }) {
168
+ return (
169
+ <div className={`${CLASS_NAME}__method`}>
170
+ <img className={`${CLASS_NAME}__arrow`} src={ARROW} alt="arrow" />
171
+ <span className={`${CLASS_NAME}__results`}>{response_type}:</span>
172
+ <Argument value={results} />
173
+ </div>
174
+ );
175
+ }
176
+
177
+ function TestValidations({ validations = [], isError = true, title }) {
178
+ // const color = ;
179
+ const color = isError ? "#f44336" : "#2aa198";
180
+ const [open, setOpen] = useState(isError);
181
+ const toggleExpansion = () => {
182
+ setOpen((state) => !state);
183
+ };
184
+
185
+ return (
186
+ <div>
187
+ <div className={`${CLASS_NAME}__method ${CLASS_NAME}__validations`}>
188
+ <img className={`${CLASS_NAME}__arrow`} src={ARROW} alt="arrow" />
189
+ <span style={{ color }} className={`${CLASS_NAME}__results`}>
190
+ {validations.length} {title}:
191
+ </span>
192
+ <ExpandIcon onClick={toggleExpansion} isOpen={open} color={"#2aa198"} size={10} />
193
+ </div>
194
+ {open && (
195
+ <>
196
+ {validations.map((error, i) => {
197
+ return <ValidationMessage key={i} {...error} error={isError} />;
198
+ })}
199
+ </>
200
+ )}
201
+ </div>
202
+ );
203
+ }
204
+
205
+ const mock = {
206
+ host: "localhost",
207
+ route: "/bu/api/basketball",
208
+ port: 4100,
209
+ serviceUrl: "http://localhost:4100/bu/api/basketball",
210
+ namespace: "http://localhost:2923/vRwTJOske",
211
+ SystemLynxService: true,
212
+ };
@@ -0,0 +1,83 @@
1
+ .test-summary {
2
+ padding: 8px 5px;
3
+ border: 1px solid #dfdfdf;
4
+ border-top: none;
5
+ border-bottom: 1px solid #e8e8e8;
6
+ &:last-child {
7
+ border-bottom: 1px solid #dfdfdf;
8
+ }
9
+ &__actions {
10
+ padding: 3px 0px;
11
+ display: flex;
12
+ font-weight: 300;
13
+ }
14
+ &__action-text {
15
+ flex: 1;
16
+ }
17
+ &__method {
18
+ font-family: "FS Mono", monospace;
19
+ margin-left: 10px;
20
+ margin-bottom: 10px;
21
+ color: #223a95;
22
+ color: #a954ff;
23
+ font-weight: 500;
24
+ display: flex;
25
+ align-items: flex-start;
26
+ flex-wrap: wrap;
27
+ & span.collapsed-icon {
28
+ position: relative;
29
+ top: 2px;
30
+ left: 7px;
31
+ }
32
+ }
33
+ &__validations {
34
+ & .expandable-icon {
35
+ align-self: flex-end;
36
+ margin-left: 3px;
37
+ }
38
+ }
39
+ &__failed-validations {
40
+ padding: 4px 25px;
41
+ color: #ff5722;
42
+ font-family: monospace;
43
+ &--namespace {
44
+ color: #a954ff;
45
+ font-weight: 700;
46
+ }
47
+ }
48
+ &__header {
49
+ display: flex;
50
+ align-items: center;
51
+ }
52
+ &__parameter {
53
+ display: inline-flex;
54
+ border-radius: 4px;
55
+ background: white;
56
+ border: 1px solid #fce8ff;
57
+ }
58
+ &__comma {
59
+ font-weight: bold;
60
+ color: green;
61
+ font-size: 17;
62
+ margin-right: 3px;
63
+ align-self: flex-end;
64
+ }
65
+ &__parentheses {
66
+ font-weight: bolder;
67
+ font-size: 15px;
68
+ position: relative;
69
+ top: -1px;
70
+ align-self: flex-end;
71
+ }
72
+
73
+ &__results {
74
+ color: #a954ff;
75
+ font-weight: 700;
76
+ }
77
+ &__arrow {
78
+ margin-right: 10px;
79
+ }
80
+ &__caption--Main {
81
+ font-weight: bold;
82
+ }
83
+ }
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import "./styles.scss";
3
+ import Text from "../../atoms/Text/Text";
4
+ import Link from "../../atoms/Link/Link";
5
+
6
+ const TextWith2Links = () => {
7
+ return <div>TextWith2Links</div>;
8
+ };
9
+
10
+ export default TextWith2Links;
File without changes
@@ -0,0 +1,64 @@
1
+ import React, { useState } from "react";
2
+ import Selector from "../../atoms/Selector/Selector";
3
+ import Toggle from "../../atoms/Toggle/Toggle";
4
+ import options from "./ValidationOptions";
5
+ import "./styles.scss";
6
+
7
+ const ValidationInput = ({
8
+ type,
9
+ name,
10
+ value,
11
+ className = "",
12
+ onSelect,
13
+ onInputChanged,
14
+ }) => {
15
+ const [inputType, setType] = useState(
16
+ options[type].inputs[Math.max(options[type].values.indexOf(name), 0)]
17
+ );
18
+
19
+ const select = (e) => {
20
+ const validation_type = e.target.value;
21
+ const i = options[type].values.findIndex((v) => v === validation_type);
22
+ setType(options[type].inputs[i]);
23
+
24
+ onSelect(e.target.value);
25
+ };
26
+ const inputChanged = (e) => {
27
+ if (e.target.type === "number") onInputChanged(parseInt(e.target.value));
28
+ else if (e.target.type === "checkbox") onInputChanged(e.target.checked);
29
+ else onInputChanged(e.target.value);
30
+ };
31
+ const classname = "validation-input";
32
+ return (
33
+ <div className={`validation-input ${className}`}>
34
+ <Selector
35
+ className={`${classname}__selector`}
36
+ options={options[type].options}
37
+ values={options[type].values}
38
+ controlledOption={name}
39
+ onSelect={select}
40
+ />
41
+ {type !== "boolean" ? (
42
+ <input
43
+ className={`${classname}__input`}
44
+ type={inputType}
45
+ name="validtion-input"
46
+ autoComplete="off"
47
+ value={value}
48
+ onChange={inputChanged}
49
+ />
50
+ ) : (
51
+ <>
52
+ <Toggle isChecked={value} onChange={inputChanged} round={true} />{" "}
53
+ <span
54
+ className={`${classname}__value--boolean ${classname}__value--boolean--${value}`}
55
+ >
56
+ {(value === true) + ""}
57
+ </span>
58
+ </>
59
+ )}
60
+ </div>
61
+ );
62
+ };
63
+
64
+ export default ValidationInput;
@@ -0,0 +1,178 @@
1
+ import moment from "moment/moment";
2
+
3
+ const vowels = ["a", "e", "i", "o", "u"];
4
+ const isVowel = (str) => vowels.includes((str + "").toLowerCase());
5
+ const an = (word) =>
6
+ word + "" === "undefined" ? "" : isVowel((word + "")[0]) ? "an" : "a";
7
+ const className = "error-message";
8
+
9
+ export default function ValidationMessage({
10
+ name,
11
+ namespace,
12
+ expected,
13
+ error = true,
14
+ received,
15
+ }) {
16
+ const PRETEXT = error ? "Expected" : "Expecting";
17
+ return (
18
+ <div className={`${className}`}>
19
+ {ErrorMessages[name](namespace, expected, PRETEXT, error && received)}
20
+ </div>
21
+ );
22
+ }
23
+
24
+ const typeError = (namespace, expected, pretext, received, amendment) => {
25
+ return (
26
+ <div className={`${className}__message`}>
27
+ {pretext} <span className={`${className}__namespace`}>{namespace}</span> to be{" "}
28
+ {an(expected)} <span className={`${className}__expected`}>{expected} </span>
29
+ {received && (
30
+ <span>
31
+ (received {an(received)} {received})
32
+ </span>
33
+ )}
34
+ {amendment && amendment}
35
+ </div>
36
+ );
37
+ };
38
+ const lengthEquals = (namespace, expected, PRETEXT, received) => (
39
+ <div className={`${className}__message`}>
40
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to have a
41
+ length of <span className={`${className}__expected`}>{expected}</span>
42
+ {received && <span> (received {received})</span>}
43
+ </div>
44
+ );
45
+ const maxLength = (namespace, expected, PRETEXT, received) => (
46
+ <div className={`${className}__message`}>
47
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to have a
48
+ maximum length of <span className={`${className}__expected`}>{expected}</span>
49
+ {received && <span> (received {received})</span>}
50
+ </div>
51
+ );
52
+ const minLength = (namespace, expected, PRETEXT, received) => (
53
+ <div className={`${className}__message`}>
54
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to have a
55
+ minimum length of <span className={`${className}__expected`}>{expected}</span>
56
+ {received && <span> (received {received})</span>}
57
+ </div>
58
+ );
59
+ const includes = (namespace, expected, PRETEXT) => (
60
+ <div className={`${className}__message`}>
61
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to include
62
+ the following value: <span className={`${className}__expected`}>{expected}</span>
63
+ </div>
64
+ );
65
+ const isLike = (namespace, expected, PRETEXT) => (
66
+ <div className={`${className}__message`}>
67
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be like
68
+ the following expression: <span className={`${className}__expected`}>{expected}</span>
69
+ </div>
70
+ );
71
+ const isOneOf = (namespace, expected, PRETEXT) => (
72
+ <div className={`${className}__message`}>
73
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be one of
74
+ the following values: <span className={`${className}__expected`}>{expected}</span>
75
+ </div>
76
+ );
77
+ const strEquals = (namespace, expected, PRETEXT) => (
78
+ <div className={`${className}__message`}>
79
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to equal{" "}
80
+ <span className={`${className}__expected`}>"{expected}"</span>
81
+ </div>
82
+ );
83
+ const numEquals = (namespace, expected, PRETEXT, received) => (
84
+ <div className={`${className}__message`}>
85
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to equal{" "}
86
+ <span className={`${className}__expected`}>{parseInt(expected)} </span>
87
+ {received && <span> (received {received})</span>}
88
+ </div>
89
+ );
90
+ const max = (namespace, expected, PRETEXT, received) => (
91
+ <div className={`${className}__message-container`}>
92
+ {typeError(
93
+ namespace,
94
+ "number",
95
+ PRETEXT,
96
+ undefined,
97
+ <span>
98
+ less than <span className={`${className}__expected`}>{expected}</span>
99
+ {received && <span> (received {received})</span>}
100
+ </span>
101
+ )}
102
+ </div>
103
+ );
104
+ const min = (namespace, expected, PRETEXT, received) => (
105
+ <div className={`${className}__message-container`}>
106
+ {typeError(
107
+ namespace,
108
+ "number",
109
+ PRETEXT,
110
+ undefined,
111
+ <span>
112
+ greater than <span className={`${className}__expected`}>{expected}</span>
113
+ {received && <span> (received {received})</span>}
114
+ </span>
115
+ )}
116
+ </div>
117
+ );
118
+ const boolEquals = (namespace, expected, PRETEXT, received) => (
119
+ <div className={`${className}__message`}>
120
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be{" "}
121
+ {expected.toString()} {received && <span> (received {received})</span>}
122
+ </div>
123
+ );
124
+ const dateEquals = (namespace, expected, PRETEXT) => (
125
+ <div className={`${className}__message`}>
126
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be
127
+ {moment(expected).format("L LTS")}
128
+ </div>
129
+ );
130
+ const minDate = (namespace, expected, PRETEXT) => (
131
+ <div className={`${className}__message`}>
132
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be a
133
+ date/time later than <span className={`${className}__expected`}>{expected}</span>
134
+ </div>
135
+ );
136
+ const maxDate = (namespace, expected, PRETEXT) => (
137
+ <div className={`${className}__message`}>
138
+ {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be a
139
+ date/time earlier than <span className={`${className}__expected`}>{expected}</span>
140
+ </div>
141
+ );
142
+ export const ErrorMessages = {
143
+ typeError,
144
+ lengthEquals,
145
+ maxLength,
146
+ minLength,
147
+ includes,
148
+ isLike,
149
+ isOneOf,
150
+ strEquals,
151
+ numEquals,
152
+ max,
153
+ min,
154
+ boolEquals,
155
+ dateEquals,
156
+ minDate,
157
+ maxDate,
158
+ };
159
+ // export const errorMessages = {
160
+ // typeError= (namespace, expected) => {
161
+ // const a = isVowel(e) ? "an" : "a";
162
+ // return `Expected ${namespace}to be ${a} ${expected}`;
163
+ // },
164
+ // lengthEquals= (namespace, expected) => `Expected ${namespace} to have a length of ${expected}`,
165
+ // maxLength= (namespace, expected) => `Expected ${namespace} to have a maximum length of ${expected}`,
166
+ // minLength= (namespace, expected) => `Expected ${namespace} to have a minimum length of ${expected}`,
167
+ // includes= (namespace, expected) => `Expected ${namespace} to include the following value: ${expected}`,
168
+ // isLike= (namespace, expected) => `Expected ${namespace} to be like the following expression: ${expected}`,
169
+ // isOneOf= (namespace, expected) => `Expected ${namespace} to be one of the following values: ${expected}`,
170
+ // strEquals= (namespace, expected) => `Expected ${namespace} to equal "${expected}"`,
171
+ // numEquals= (namespace, expected) => `Expected ${namespace} to equal ${expected}`,
172
+ // max= (namespace, expected) => `Expected ${namespace} to be less than ${expected}`,
173
+ // min= (namespace, expected) => `Expected ${namespace} to be greater than ${expected}`,
174
+ // boolEquals= (namespace, expected) => `Expected ${namespace} to be ${e.toString()}`,
175
+ // dateEquals= (namespace, expected) => `Expected ${namespace} to be ${moment(e).format()}`,
176
+ // minDate= (namespace, expected) => `Expected ${namespace} to be a date/time later than ${expected}`,
177
+ // maxDate= (namespace, expected) => `Expected ${namespace} to be a date/time earlier than ${expected}`,
178
+ // };
@@ -0,0 +1,113 @@
1
+ const string = {
2
+ options: [
3
+ "Equals:",
4
+ "Min Length:",
5
+ "Max Length:",
6
+ "Length Equals:",
7
+ "Is Like:",
8
+ "Is One Of:",
9
+ ],
10
+ values: ["strEquals", "minLength", "maxLength", "lengthEquals", "isLike", "isOneOf"],
11
+ inputs: ["text", "number", "number", "number", "text", "text"],
12
+ };
13
+ const number = {
14
+ options: ["Equals:", "Min:", "Max:", "Is One Of:"],
15
+ values: ["numEquals", "min", "max", "isOneOf"],
16
+ inputs: ["number", "number", "number", "text"],
17
+ };
18
+ const array = {
19
+ options: ["Min Length:", "Max Length:", "Length Equals:", "Includes:"],
20
+ values: ["minLength", "maxLength", "lengthEquals", "includes"],
21
+ inputs: ["number", "number", "number", "text"],
22
+ };
23
+ const date = {
24
+ options: ["Equals:", "Min:", "Max:"],
25
+ values: ["dateEquals", "minDate", "maxDate"],
26
+ inputs: ["datetime-local", "datetime-local", "datetime-local"],
27
+ };
28
+ const boolean = { options: ["Equals:"], values: ["boolEquals"], inputs: ["checkbox"] };
29
+ const object = { options: [], values: [], inputs: [] };
30
+ const target = {
31
+ options: [
32
+ //string
33
+ "Equals (str):",
34
+ "Min Length (str):",
35
+ "Max Length (str):",
36
+ "Length Equals (str):",
37
+ "Is Like:",
38
+ "Is One Of (str):",
39
+ //number
40
+ "Equals (num):",
41
+ "Min (num):",
42
+ "Max (num):",
43
+ "Is One Of (num):",
44
+ //array
45
+ "Min Length (arr):",
46
+ "Max Length (arr):",
47
+ "Length Equals (arr):",
48
+ "Includes:",
49
+ //date
50
+ "Date Equals:",
51
+ "Min Date:",
52
+ "Max Date:",
53
+ //boolean
54
+ "Equals (bool)",
55
+ ],
56
+ values: [
57
+ //string
58
+ "strEquals",
59
+ "minLength",
60
+ "maxLength",
61
+ "lengthEquals",
62
+ "isLike",
63
+ "isOneOf",
64
+ //number
65
+ "numEquals",
66
+ "min",
67
+ "max",
68
+ "isOneOf",
69
+ //array
70
+ "minLength",
71
+ "maxLength",
72
+ "lengthEquals",
73
+ "includes",
74
+ //date
75
+ "dateEquals",
76
+ "minDate",
77
+ "maxDate",
78
+ //boolean
79
+ "boolEquals",
80
+ ],
81
+ inputs: [
82
+ //string
83
+ "text",
84
+ "number",
85
+ "number",
86
+ "number",
87
+ //number
88
+ "text",
89
+ "text",
90
+ "number",
91
+ "number",
92
+ "number",
93
+ "text",
94
+ //array
95
+ "number",
96
+ "number",
97
+ "number",
98
+ "text",
99
+ //date
100
+ "datetime-local",
101
+ "datetime-local",
102
+ "datetime-local",
103
+ "checkbox",
104
+ ],
105
+ };
106
+ const options = { array, number, date, boolean, string, object, target };
107
+ export default options;
108
+ export const inputToTypes = {
109
+ text: "string",
110
+ number: "number",
111
+ "datetime-local": "date",
112
+ checkbox: "boolean",
113
+ };