@aj-shadow/actorjs-documentation-text 0.0.0-aj-beta.221

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 (160) hide show
  1. package/.gitattributes +26 -0
  2. package/Documentation/Document-global-Be-100-more-efficient.txt +31 -0
  3. package/Documentation/Document-global-actorjs-trigger-mock-and-intercept-anything.txt +21 -0
  4. package/Documentation/Document-global-advanced-visualization.txt +28 -0
  5. package/Documentation/Document-global-debugging.txt +4 -0
  6. package/Documentation/Document-global-divide-and-reuse.txt +37 -0
  7. package/Documentation/Document-global-general-separation.txt +2 -0
  8. package/Documentation/Document-global-markup-anchor.txt +6 -0
  9. package/Documentation/Document-global-markup-api-status.txt +39 -0
  10. package/Documentation/Document-global-markup-chart-line.txt +18 -0
  11. package/Documentation/Document-global-markup-documentation-status.txt +39 -0
  12. package/Documentation/Document-global-markup-documentation.txt +72 -0
  13. package/Documentation/Document-global-markup-embed.txt +6 -0
  14. package/Documentation/Document-global-markup-flowchart.txt +88 -0
  15. package/Documentation/Document-global-markup-html.txt +122 -0
  16. package/Documentation/Document-global-markup-ie.txt +18 -0
  17. package/Documentation/Document-global-markup-image.txt +55 -0
  18. package/Documentation/Document-global-markup-lab.txt +63 -0
  19. package/Documentation/Document-global-markup-markup.txt +21 -0
  20. package/Documentation/Document-global-markup-navigation.txt +25 -0
  21. package/Documentation/Document-global-markup-node-diagram.txt +163 -0
  22. package/Documentation/Document-global-markup-note.txt +6 -0
  23. package/Documentation/Document-global-markup-ref.txt +6 -0
  24. package/Documentation/Document-global-markup-sequence-diagram.txt +215 -0
  25. package/Documentation/Document-global-markup-state-machine.txt +121 -0
  26. package/Documentation/Document-global-markup-table.txt +34 -0
  27. package/Documentation/Document-global-navigation-pane.txt +3 -0
  28. package/Documentation/Document-global-navigation.txt +2 -0
  29. package/Documentation/Document-global-specialized-javascript-editors.txt +2 -0
  30. package/Documentation/Document-global-stacks-connection.txt +2 -0
  31. package/Documentation/Document-global-stacks-server.txt +2 -0
  32. package/Documentation/Document-global-test-environment-overview.txt +15 -0
  33. package/Documentation/Document-global-the-architecture.txt +51 -0
  34. package/Documentation/Document-global-the-development-environment.txt +5 -0
  35. package/Documentation/Document-global-the-test-environment.txt +15 -0
  36. package/Documentation/Document-global-think-ahead.txt +35 -0
  37. package/Documentation/Document-global-thinking-in-actors-unlimited.txt +1 -0
  38. package/Documentation/Document-global-what-is-a-stack.txt +2 -0
  39. package/Documentation/Document-global-why-actorjs.txt +52 -0
  40. package/Documentation/Document-global-why-actors-unlimited.txt +182 -0
  41. package/Documentation/Document-global-x-test-case-tool.txt +2 -0
  42. package/Documentation/Navigation-Documentation-actorjs-global.txt +372 -0
  43. package/Documentation/Navigation-Documentation-actorsite-global.txt +363 -0
  44. package/Documentation/abstractions/Document-global-addressing.txt +81 -0
  45. package/Documentation/abstractions/Document-global-configuration-floor.txt +2 -0
  46. package/Documentation/abstractions/Document-global-content.txt +3 -0
  47. package/Documentation/abstractions/Document-global-functions-test.txt +4 -0
  48. package/Documentation/abstractions/Document-global-functions-unde-test.txt +2 -0
  49. package/Documentation/abstractions/Document-global-load-test.txt +3 -0
  50. package/Documentation/abstractions/Document-global-repo.txt +79 -0
  51. package/Documentation/abstractions/Document-global-shared-data.txt +5 -0
  52. package/Documentation/abstractions/Document-global-system-to-test.txt +2 -0
  53. package/Documentation/abstractions/Document-global-system-under-test.txt +3 -0
  54. package/Documentation/abstractions/Document-global-test-data.txt +251 -0
  55. package/Documentation/abstractions/Document-global-test-suite.txt +37 -0
  56. package/Documentation/abstractions/Document-global-verification-data.txt +103 -0
  57. package/Documentation/abstractions/actor/Document-global-actor-condition.txt +74 -0
  58. package/Documentation/abstractions/actor/Document-global-actor-local.txt +44 -0
  59. package/Documentation/abstractions/actor/Document-global-actor-originating.txt +100 -0
  60. package/Documentation/abstractions/actor/Document-global-actor-proxy.txt +119 -0
  61. package/Documentation/abstractions/actor/Document-global-actor-terminating.txt +101 -0
  62. package/Documentation/abstractions/actor/Document-global-actor.txt +90 -0
  63. package/Documentation/abstractions/actor/Document-global-execution-states.txt +21 -0
  64. package/Documentation/abstractions/actorpart/Document-global-actorpart.txt +2 -0
  65. package/Documentation/abstractions/stack/Document-global-client-connection.txt +3 -0
  66. package/Documentation/abstractions/stack/Document-global-connection.txt +3 -0
  67. package/Documentation/abstractions/stack/Document-global-decoder.txt +3 -0
  68. package/Documentation/abstractions/stack/Document-global-encoder.txt +3 -0
  69. package/Documentation/abstractions/stack/Document-global-message.txt +4 -0
  70. package/Documentation/abstractions/stack/Document-global-server-connection.txt +3 -0
  71. package/Documentation/abstractions/stack/Document-global-stack.txt +12 -0
  72. package/Documentation/abstractions/stack/Document-global-worker.txt +3 -0
  73. package/Documentation/abstractions/test-case/Document-global-phases.txt +30 -0
  74. package/Documentation/abstractions/test-case/Document-global-test-case-result.txt +23 -0
  75. package/Documentation/abstractions/test-case/Document-global-test-case.txt +199 -0
  76. package/Documentation/actor-api/Document-global-actor-part.txt +7 -0
  77. package/Documentation/actor-api/Document-global-actor.txt +375 -0
  78. package/Documentation/actor-api/Document-global-async.txt +176 -0
  79. package/Documentation/actor-api/Document-global-client-stack.txt +215 -0
  80. package/Documentation/actor-api/Document-global-content.txt +106 -0
  81. package/Documentation/actor-api/Document-global-logger.txt +426 -0
  82. package/Documentation/actor-api/Document-global-process.txt +7 -0
  83. package/Documentation/actor-api/Document-global-server-stack.txt +213 -0
  84. package/Documentation/actor-api/Document-global-shared-data.txt +259 -0
  85. package/Documentation/actor-api/Document-global-test-data.txt +816 -0
  86. package/Documentation/actor-api/Document-global-timer.txt +70 -0
  87. package/Documentation/actor-api/Document-global-verification-data.txt +624 -0
  88. package/Documentation/connection-worker-api/Document-global-logger.txt +3 -0
  89. package/Documentation/documentation-references.json +199 -0
  90. package/Documentation/embedded/Document-global-test-case-result.txt +10 -0
  91. package/Documentation/howto/Document-global-create-actor.txt +1 -0
  92. package/Documentation/howto/Document-global-create-stack.txt +1 -0
  93. package/Documentation/howto/Document-global-create-test-case.txt +1 -0
  94. package/Documentation/howto/Document-global-create-test-suite.txt +1 -0
  95. package/Documentation/howto/Document-global-define-addresses.txt +1 -0
  96. package/Documentation/howto/Document-global-define-fut.txt +1 -0
  97. package/Documentation/howto/Document-global-define-sut.txt +16 -0
  98. package/Documentation/howto/Document-global-full-workflow.txt +143 -0
  99. package/Documentation/howto/Document-global-normal-workflow.txt +58 -0
  100. package/Documentation/howto/Document-global-prerequisites.txt +8 -0
  101. package/Documentation/howto/prerequisites/Document-global-install-actorjs.txt +64 -0
  102. package/Documentation/howto/prerequisites/Document-global-install-git.txt +26 -0
  103. package/Documentation/howto/prerequisites/Document-global-install-nodejs.txt +19 -0
  104. package/Documentation/markup/Document-global-markup-test-case.txt +6 -0
  105. package/Documentation/markup/Document-global-markup-test-suite.txt +13 -0
  106. package/Documentation/markup/embed/Document-global-inner_markup_tc.txt +164 -0
  107. package/Documentation/nodejs-api/Document-global-fs.txt +7 -0
  108. package/Documentation/stack-api/Document-global-ascii-dictionary.txt +108 -0
  109. package/Documentation/stack-api/Document-global-binary-log.txt +91 -0
  110. package/Documentation/stack-api/Document-global-bit-byte.txt +80 -0
  111. package/Documentation/stack-api/Document-global-content-base.txt +169 -0
  112. package/Documentation/stack-api/Document-global-ip-log.txt +101 -0
  113. package/Documentation/stack-api/Document-global-log-inner.txt +152 -0
  114. package/Documentation/stack-api/Document-global-log-part-error.txt +12 -0
  115. package/Documentation/stack-api/Document-global-log-part-ref.txt +80 -0
  116. package/Documentation/stack-api/Document-global-log-part-text.txt +81 -0
  117. package/Documentation/tools/Document-global-actors.txt +196 -0
  118. package/Documentation/tools/Document-global-addressing.txt +38 -0
  119. package/Documentation/tools/Document-global-content.txt +1 -0
  120. package/Documentation/tools/Document-global-global-test-data.txt +197 -0
  121. package/Documentation/tools/Document-global-stacks.txt +1 -0
  122. package/Documentation/tools/Document-global-test-case-analyze.txt +3 -0
  123. package/Documentation/tools/Document-global-test-case-debug.txt +16 -0
  124. package/Documentation/tools/Document-global-test-case-definition.txt +37 -0
  125. package/Documentation/tools/Document-global-test-case-execution.txt +28 -0
  126. package/Documentation/tools/Document-global-test-case-log.txt +95 -0
  127. package/Documentation/tools/Document-global-test-case-sequence-diagram.txt +17 -0
  128. package/Documentation/tools/Document-global-test-case-specification.txt +3 -0
  129. package/Documentation/tools/Document-global-test-cases.txt +11 -0
  130. package/Documentation/tools/Document-global-tool-test-suite.txt +202 -0
  131. package/Education/Document-global-add-your-first-addresses.txt +75 -0
  132. package/Education/Document-global-define-your-first-sut.txt +18 -0
  133. package/Education/Document-global-make-your-first-actors.txt +35 -0
  134. package/Education/Document-global-make-your-first-test-case.txt +43 -0
  135. package/Education/Document-global-make-your-first-test-suite.txt +29 -0
  136. package/Education/Document-global-share-your-work.txt +35 -0
  137. package/Education/Navigation-Education-actorjs-global.txt +31 -0
  138. package/LICENSE.txt +96 -0
  139. package/README.md +5 -0
  140. package/Workshop/Document-global-actordemo-image-ai.txt +5 -0
  141. package/Workshop/Document-global-actordemo-login.txt +10 -0
  142. package/Workshop/Document-global-actordemo-site.txt +3 -0
  143. package/Workshop/Document-global-actordemo-start.txt +5 -0
  144. package/Workshop/Document-global-actordemo-the-architecture.txt +27 -0
  145. package/Workshop/Document-global-introduction-actor.txt +84 -0
  146. package/Workshop/Document-global-introduction-actorjs.txt +42 -0
  147. package/Workshop/Document-global-introduction-stack.txt +25 -0
  148. package/Workshop/Document-global-introduction-system-under-test.txt +102 -0
  149. package/Workshop/Document-global-introduction-test-case.txt +50 -0
  150. package/Workshop/Document-global-introduction-test-suite.txt +31 -0
  151. package/Workshop/Document-global-login-with-puppeter.txt +45 -0
  152. package/Workshop/Document-global-mock-with-http.txt +83 -0
  153. package/Workshop/Document-global-mock-with-icap.txt +94 -0
  154. package/Workshop/Document-global-prerequisites-actorJs.txt +18 -0
  155. package/Workshop/Document-global-prerequisites-actordemo.txt +15 -0
  156. package/Workshop/Document-global-trigger-with-http.txt +93 -0
  157. package/Workshop/Document-global-trigger-with-puppeter.txt +49 -0
  158. package/Workshop/Navigation-Workshop-actorjs-global.txt +86 -0
  159. package/npm-shrinkwrap.json +13 -0
  160. package/package.json +10 -0
package/LICENSE.txt ADDED
@@ -0,0 +1,96 @@
1
+
2
+ LICENSE AGREEMENT
3
+
4
+ Effective: 1st of November 2020
5
+ This License Agreement is between Licensee and Hagnell Konsulting AB (a company incorporated in Sweden with
6
+ company registration number: 559476-0570) (“Hagnell Konsulting”) and governs the use by Licensee of ActorJs
7
+ (as defined below).
8
+ By installing the Software (as defined below), Licensee agrees to be bound by the terms of this License Agreement.
9
+
10
+ DEFENITIONS
11
+ ActorJs The test tool developed by Hagnell Konsulting, utilizing the Patent and the Software.
12
+ Derivative Works Any work, whether in source or object code, which is based on the Software and which
13
+ does not constitute a new and independent work pursuant to paragraph 2 of article 4 of
14
+ the Swedish Act (1960:729) on Copyright in Literary and Artistic Works.
15
+ Documentation The manuals and instruction materials furnished by Hagnell Konsulting in connection
16
+ with ActorJs.
17
+ Licensee The physical or legal person to which the License hereunder has been granted by
18
+ Hagnell Konsulting.
19
+ Patent The patent application for a system and method for testing of systems under test, patent
20
+ application number:19218798.7 (European Patent Office).
21
+ Software The software developed and owned by Hagnell Konsulting, identified as ActorJs.
22
+
23
+ § 1 - LICENSE
24
+ Licensee is hereby granted a limited, non-exclusive and non-transferable license to use ActorJs (including any
25
+ Derivative Works created by Licensee hereunder) (the “License”). The License is granted subject to the terms and
26
+ conditions set forth below.
27
+ The Software is licensed to Licensee on an open source basis. The License includes the right to create Derivative
28
+ Works pursuant to sub-clause 3 below.
29
+ ActorJs may be used only by Licensee himself/herself/itself, or (if, for instance, Licensee is a company), by the
30
+ employees and consultants of Licensee.
31
+ The License does not include any updates to the Software, or any support services. Notwithstanding the foregoing,
32
+ should Hagnell Konsulting furnish any updates to Licensee, such updates shall be subject to the License granted hereunder.
33
+ As regards the Documentation provided by Hagnell Konsulting, Licensee may use this Documentation for the purpose of
34
+ the License hereunder (only). Licensee shall not be entitled to distribute copies of the Documentation, or electronically
35
+ communicate the Documentation, to recipients who are not employees or consultants of Licensee.
36
+
37
+ § 2 - LICENSE RESTRICTIONS
38
+ Licensee may not:
39
+ i) Rent, lease, lend, sell, distribute, transfer or otherwise make available ActorJs (and/or a Derivative Work)
40
+ (whether for value or otherwise) to third parties without Hagnell Konsulting´s written approval. Any such approval
41
+ will be subject to the third party acknowledging in writing (vis-à-vis Hagnell Konsulting) that its use of ActorJs
42
+ (and/or the Derivative Work) shall be subject to the terms and conditions of this Agreement.
43
+
44
+ ii) Distribute copies of the Software (and/or a Derivate Work), or electronically communicate the Software
45
+ (and/or a Derivative Work), to recipients who are not employees or consultants of Licensee.
46
+
47
+ § 3 – DERITATIVE WORKS
48
+ Should Licensee, or (if applicable) any of its employees or consultants, create a Derivative Work, Licensee shall
49
+ inform Hagnell Konsulting thereof in writing (an e-mail shall be sufficient). Licensee may use the Derivative Work to the
50
+ same extent as it may use the Software hereunder, but Hagnell Konsulting shall be the sole and exclusive owner of any
51
+ and all rights in the Derivative Work, including the copyright. At the request of Hagnell Konsulting, Licensee and
52
+ Hagnell Konsulting shall formalize the rights transfer in a written contract, which shall, inter alia, confirm that all rights
53
+ in the Derivative Work have been irrevocably transferred to Hagnell Konsulting, that Hagnell Konsulting is be entitled to
54
+ exploit the Derivative Work without limitation in time or any other kind of limitation, that Hagnell Konsulting may transfer
55
+ its rights to the Derivative Work to third parties and that the rights transfer from Licensee to Hagnell Konsulting shall be
56
+ free of charge.
57
+
58
+ § 4 – IMPROVEMENTS TO THE PATENT
59
+ Any improvement to the Patent, whether patentable or not, which Licensee, or (if applicable) any of its employees or
60
+ consultants, may discover, create or develop or otherwise have at its disposal, directly or indirectly, without restraints
61
+ as to the use thereof (“Improvements”), shall be disclosed promptly to Hagnell Konsulting and Hagnell Konsulting shall
62
+ have the exclusive right of perpetual duration to use the Improvements as well as to grant the use thereof to other licensees
63
+ in the whole world without compensation to Licensee, except that Licensee shall during the life of this Agreement have
64
+ the non-exclusive right to use such Improvements including corresponding patents, if any, in accordance with the
65
+ provisions of this Agreement. If Licensee decides not to apply for a patent relating to an Improvement made by
66
+ Licensee or if Licensee no longer wishes to maintain such a patent or patent application then Hagnell Konsulting may in its
67
+ sole discretion and at its own expense apply for such a patent or maintain such a patent or patent application (as the
68
+ case may be).
69
+
70
+ § 5 - COPYRIGHT AND INTELLECTUAL PROPERTY RIGHTS
71
+ The Software, the Patent and the Documentation are protected by copyright and patent laws and international
72
+ copyright and patent treaties, as well other intellectual property laws and treaties. Any such intellectual property
73
+ rights are owned and especially reserved by Hagnell Konsulting, without limitation. For the avoidance of doubt, no
74
+ ownership rights are transferred to Licensee hereunder.
75
+ “ActorJs” is a registered trademark of Hagnell Konsulting. This Agreement does not include a license to use the
76
+ trademark “ActorJs”.
77
+
78
+ § 6 - LIMITITATION ON LIABILITY
79
+ ActorJs is licensed to Licensee “as is”. Hagnell Konsulting gives no guarantees as regards the use, functionality
80
+ or performance of ActorJs and assumes no liability (whatsoever) as regards any defaults in ActorJs or any possible
81
+ infringements on third party statutory or contractual rights. Hagnell Konsulting expressly disclaims any and all warranties
82
+ not expressly given in this Agreement, including any implied warranties of merchantability, satisfactory quality, fitness
83
+ for a particular purpose, title and non-infringement. Thus, the entire risk arising out of any use of ActorJs hereunder
84
+ remains with Licensee.
85
+ The limitation of liability hereunder shall be to the maximum extent permitted by applicable law. Under no
86
+ circumstances shall Hagnell Konsulting be liable for any cost of substitute products or services, for any indirect losses or
87
+ for any consequential damages (including any loss of profits, interruptions or loss of business information).
88
+
89
+ § 7 - MISCELLANEOUS
90
+ Licensee may not, either wholly or partly, assign or pledge its rights or obligations under this Agreement to any third
91
+ party without the prior written consent of Hagnell Konsulting.
92
+
93
+ § 8 - DISPUTES
94
+ This agreement shall be governed by Swedish law. Any dispute, controversy or claim arising out of or in connection
95
+ with this contract, or the breach, termination or invalidity thereof, shall be settled by the general courts of Sweden,
96
+ with the district court of Stockholm in the first instance.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # README #
2
+
3
+ # ActorJs
4
+
5
+ **Library used by @actorjs/actorjs**
@@ -0,0 +1,5 @@
1
+ # **Image AI page**
2
+ The [ActorDemo](http://localhost:9045/image-ai) Image AI page shows images and buttons to transform the images.
3
+
4
+ <br />
5
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoImageAI.png" style="width:100%; margin: 0px 16px 10px;">
@@ -0,0 +1,10 @@
1
+ # **Login page**
2
+ The [ActorDemo](http://localhost:9045/start) login page contains either a login box or a logout box.
3
+
4
+ ---
5
+ ## **Login**
6
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoLogin.png" style="width:100%; margin: 0px 16px 10px;">
7
+
8
+ ---
9
+ ## **Logout**
10
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoLogout.png" style="width:100%; margin: 0px 16px 10px;">
@@ -0,0 +1,3 @@
1
+ # **ActorDemo site**
2
+ **ActorDemo** is a simple site where you can use an AI service to transform images.
3
+ The site can be configured to use authorization. If authorization is turned on, the user must login to be able to use the service.
@@ -0,0 +1,5 @@
1
+ # **Start page**
2
+ The [ActorDemo](http://localhost:9045/start) start page contains a simple example of what the Image AIService can do.
3
+
4
+ <br />
5
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/workshop/ActorDemoStart.png" style="width:100%; margin: 0px 16px 10px;">
@@ -0,0 +1,27 @@
1
+ # **The Architecture**
2
+ ## **Description**
3
+ The architecture of **ActorDemo** is a bit exaggerated to show the possibilities of ActorJs.
4
+
5
+ ```node
6
+ Config(nodeWidth: 80, nodeHeight: 80, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 40, border: true, backgroundColor: AliceBlue)
7
+
8
+ Nodes[, , , , UserService(; ; White)]
9
+ Nodes[Browser(; ; White), , ActorDemo(; ; Honeydew), , ImageService(; ; White)]
10
+ Nodes[, , , , AIService(; ; White)]
11
+
12
+ Groups[Actor Orig(0; 1; 0; 3), SUT(2; 3; 0; 3), Actor Term(4; 5; 0; 3)]
13
+
14
+ Browser => ActorDemo[puppeteer]: puppeteer
15
+ Browser => ActorDemo[http]: http
16
+ Browser => ActorDemo[websocket]: websocket
17
+ ActorDemo => UserService[http]: http
18
+ ActorDemo => ImageService[http]: http
19
+ ActorDemo => AIService[icap]: icap
20
+ ```
21
+
22
+ ### **Nodes**
23
+ * **Browser**: the client to use **ActorDemo**.
24
+ * **ActorDemo**: the [[REF=, ABS_System_Under_Test]]. It is a web server containing the site and a REST API.
25
+ * **UserService**: a service handling user data, such as logins.
26
+ * **ImageService**: a service handling images.
27
+ * **AIService**: a service handling image transformations.
@@ -0,0 +1,84 @@
1
+ # **Introduction - Actor**
2
+ ## **What is an Actor?**
3
+ An [[REF=, ABS_Actor]] is the fundamental building block of ActorJs. An [[REF=, ABS_Actor]] is a simulated process that is controlled by ActorJs, which starts, stops, and interrupts [[REF=, ABS_Actors]] depending on the data and outcome of the [[REF=, ABS_Test_Case]].
4
+
5
+ An [[REF=, ABS_Actor]] is 100% code, which gives the test developer full control. For maximal reuse and optimal maintenance, [[REF=, ABS_Actors]] have their own:
6
+ * Logic
7
+ * Flow
8
+
9
+ ActorJs will provide Actors with:
10
+ * [[REF=, ABS_Addresses]]
11
+ * [[REF=, ABS_Test_Data]]
12
+ * [[REF=, ABS_Verification_Data]]
13
+ * [[REF=, ABS_Content]]
14
+
15
+ [[REF=, ABS_Actors]] use [[REF=, ABS_Stacks]] to communicate. A [[REF=, ABS_Test_Case]] contains [[REF=, ABS_Actors]] to isolate the [[REF=, ABS_System_Under_Test]]. An [[REF=, ABS_Actor]] can be reused over and over again in different [[REF=, ABS_Test_Cases]], and can change its behavior in response to the [[REF=, ABS_Test_Data]].
16
+
17
+ ## **Analyze**
18
+ Let's say we have a system to test, containing a browser, a proxy, and a web server.
19
+ ```node
20
+ Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
21
+
22
+ Nodes[Browser, , Proxy, , web-server]
23
+
24
+ Groups[STT(0; 5; 0; 1)]
25
+
26
+ Browser => Proxy[http]: http
27
+ Proxy => web-server[http]: http
28
+ ```
29
+ If we want to test the proxy, we define it as the [[REF=, ABS_System_Under_Test]]. Then we simulate the browser and the web server with [[REF=, ABS_Actors]].
30
+ ```node
31
+ Config(nodeWidth: 70, nodeHeight: 70, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
32
+
33
+ Nodes[Browser, , Proxy, , web-server]
34
+
35
+ Groups[Actor Orig(0; 1; 0; 1), SUT(2; 3; 0; 1), Actor Term(4; 5; 0; 1)]
36
+
37
+ Browser => Proxy[http]: http
38
+ Proxy => web-server[http]: http
39
+ ```
40
+ We want to test a situation where the browser fetches an image from the web server via the proxy. The use case looks like this:
41
+ ```seq
42
+ Config(nodeWidth: 150, nodeMessageHeight: 17, nodeEventHeight: 10, widthBias: 30, heightBias: 30, lineNumbers: false, border: true, backgroundColor: default)
43
+
44
+ Nodes[Browser, Proxy, web-server]
45
+ Browser => Proxy[http]: Get /image.png
46
+ Proxy => web-server[http]: Get /image.png
47
+ web-server => Proxy[http]: 200 OK
48
+ Proxy => Browser[http]: 200 OK
49
+ ```
50
+ To implement this use case, we need:
51
+ * an HTTP Stack
52
+ * an http get image request message
53
+ * an http get image response message
54
+
55
+ Once these items are in place, all we have to do is implement the [[REF=, ABS_Actors]].
56
+ 1) The browser [[REF=, ABS_Actor]] sends a request and receives a response.
57
+ 2) The web server [[REF=, ABS_Actor]] receives a request and sends a response.
58
+
59
+ ## **Implement**
60
+ Minimal code is needed to implement simple [[REF=, ABS_Actors]]. We recommend keeping [[REF=, ABS_Actors]] simple, letting them implement only part of the flow in the use case. An [[REF=, ABS_Actor]] can implement a whole simulator, of course, but this would not provide any advantage over using a conventional simulator.
61
+ #### Browser
62
+ ```javascript
63
+
64
+ *run() {
65
+ this.httpConnection.send(new HttpMsgGetRequest(this.requistUri));
66
+ const response = this.httpConnection.receive();
67
+ }
68
+
69
+ ```
70
+ #### **Web server**
71
+ ```javascript
72
+
73
+ *run() {
74
+ this.httpConnection.accept();
75
+ const request = this.httpConnection.receive();
76
+ this.httpConnection.send(new HttpGet200OkResponse(this.content));
77
+ }
78
+
79
+ ```
80
+
81
+ # **Tools**
82
+ The Actors tool is an editor to build [[REF=, ABS_Actors]].
83
+
84
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/actors.png" style="width: 100%; margin: 0px 16px 10px;">
@@ -0,0 +1,42 @@
1
+ # **Introduction - ActorJs**
2
+
3
+ <div style="position:relative;display:flex;flex-direction:column;float:right">
4
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Repos</h3>
5
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/repos.png" style="width: 233px; margin: 0px 16px 10px;">
6
+ <h4 style="width: 233px; margin: 2px 16px 10px; font-weight:bold;">Core Tool - SUTs</h3>
7
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/sut.png" style="width: 233px; margin: 0px 16px 10px;">
8
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Test Suits</h3>
9
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-execution.png" style="width: 233px; margin: 0px 16px 10px;">
10
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Test Cases</h3>
11
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-definition.png" style="width: 233px; margin: 0px 16px 10px;">
12
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Actors</h3>
13
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/actors.png" style="width: 233px; margin: 0px 16px 10px;">
14
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Core Tool - Stacks</h3>
15
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/stacks.png" style="width: 233px; margin: 0px 16px;">
16
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Data Tool - Address</h3>
17
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/address.png" style="width: 233px; margin: 0px 16px;">
18
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Data Tool - Test Data</h3>
19
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-data.png" style="width: 233px; margin: 0px 16px;">
20
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Data Tool - Content</h3>
21
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/content.png" style="width: 233px; margin: 0px 16px;">
22
+ </div>
23
+
24
+ ActorJs is an integrated test - development environment. It contains tools, organizes data, and provides several views that visualize logs, sequence diagrams, and more in real time.
25
+
26
+ ## **Core Tools**
27
+ * [[REF=, ABS_Repos]] - manages your [[REF=, ABS_Repos]].
28
+ * [[REF=, ABS_SUTs]] - manages your [[REF=, ABS_SUTs]].
29
+ * [[REF=, ABS_Test_Suites]] - manages and execute [[REF=, ABS_Test_Suites]].
30
+ * [[REF=, ABS_Test_Cases]] - manages and execute [[REF=, ABS_Test_Cases]].
31
+ * [[REF=, ABS_Stacks]] - editor to build [[REF=, ABS_Stacks]].
32
+ * [[REF=, ABS_Actors]] - editor to build [[REF=, ABS_Actors]].
33
+
34
+ ## **Data Tools**
35
+ * [[REF=, ABS_Addressing_Address]] - manages your [[REF=, ABS_Addressing]].
36
+ * [[REF=, ABS_Test_Data]] - manages your [[REF=, ABS_Test_Data]].
37
+ * [[REF=, ABS_Content]] - manages your [[REF=, ABS_Content]].
38
+ * [[REF=, ABS_Load]] - manages your [[REF=, ABS_Load]]. `Coming soon`
39
+
40
+ ## **Visualization Tools**
41
+ * Log
42
+ * Sequence Diagram
@@ -0,0 +1,25 @@
1
+ # **Introduction - Stack**
2
+ ## **What is a Stack?**
3
+ A [[REF=, ABS_Stack]] is a group of components used to send and receive messages from an [[REF=, ABS_Actor]]. It is an implementation of a protocol, either a standard or proprietary protocol, or communication with hardware or a GUI. The [[REF=, ABS_Stack]] abstraction differs slightly from those commonly used when implementing protocols; it contains only an [[REF=, ABS_Encoder]] and [[REF=, ABS_Decoder]], and does not keep states or handle timers. These parts of a common stack will be implemented in [[REF=, ABS_Actors]] when needed.
4
+
5
+ The components of a Stack are:
6
+ * **[[REF=, ABS_Connection]]** - sends and receives messages
7
+ * **[[REF=, ABS_Message]]** - a container of data from which data can be sent and to which data can be received
8
+ * **[[REF=, ABS_Encoder]]** - encodes the data of a message to the chosen protocol
9
+ * **[[REF=, ABS_Decoder]]** - decodes the selected protocol data to a message
10
+
11
+ Some common stacks include: **Http**, **Diameter**, **Radius**, **Sip**, **MQTT**, and others.
12
+
13
+ ```node
14
+ Config(nodeWidth: 90, nodeHeight: 40, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
15
+
16
+ Nodes[MessageS, Encoder, , Decoder, MessageR]
17
+
18
+ Groups[Sending Actor(0; 1; 0; 1), Client Connection(1; 2; 0; 1), Server Connection(3; 4; 0; 1), Receiving Actor(4; 5; 0; 1)]
19
+
20
+ MessageS => Encoder[]:
21
+ Encoder => Decoder[http]:
22
+ Decoder => MessageR[]:
23
+ ```
24
+ 1) An [[REF=, ABS_Actor]] sends an [[REF=, ABS_Message]] with a [[REF=, ABS_Connection]] which encodes the [[REF=, ABS_Message]] to chosen protocol.
25
+ 1) A [[REF=, ABS_Connection]] receives an [[REF=, ABS_Message]] and decodes the protocol to a [[REF=, ABS_Message]] and returns it to the receiving [[REF=, ABS_Actor]].
@@ -0,0 +1,102 @@
1
+ # **Introduction - System Under Test**
2
+ ## **What is a System To Test?**
3
+
4
+ When testing a system, we define the nodes/processes not handled by ActorJs as the [[REF=, ABS_System_Under_Test]]. The [[REF=, ABS_Actors]] - simulated processes - communicating with the [[REF=, ABS_System_Under_Test]] will be defined as the **Test Scenography**. The Test Scenography is divided into two parts: Actor Clients and Actor Servers.
5
+
6
+ ```node
7
+ Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 30)
8
+
9
+ Nodes[, Browser, , , ]
10
+ Nodes[, , Sensor 1, , Core]
11
+ Nodes[, , Sensor 2, , , ]
12
+
13
+ Groups[Clients(0; 2; 0; 3), STT(2; 6; 0; 3)]
14
+
15
+ Browser => Core[radius]: radius
16
+ Browser => Core[http]: http
17
+ Sensor 1 => Core[mqtt]: mqtt
18
+ Sensor 2 => Core[mqtt]: mqtt
19
+ ```
20
+ ## **The detailed System To Test**
21
+ The [[REF=, ABS_System_To_Test]] usually consists of many different nodes that either belong to the product or are third-party nodes on which the product is dependent.
22
+
23
+ It can of interest to build test cases for the whole system, and that's what we'll do, but remember: **it will not be possible to test everything.** How can we perform different negative tests? How do we control the sensors? How can we control the third-party products? The answer is that we cannot.
24
+
25
+ ```node
26
+ Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 25, widthBias: 30, heightBias: 30)
27
+
28
+ Nodes[, , , , , ]
29
+ Nodes[, Browser, , Login, , , , Hss, ]
30
+ Nodes[, , , Frontend, , Backend, , WWW]
31
+ Nodes[, , , Sensor 1, , , , Store]
32
+ Nodes[, , , Sensor 2, , MQTT]
33
+
34
+ Groups[Clients(0; 3; 0; 5), STT - Product(3; 6; 0; 5), STT - Third Party(6; 9; 0; 5)]
35
+
36
+ Browser => Login[radius]: radius
37
+ Browser => Frontend[http]: http
38
+ Sensor 1 => MQTT[mqtt]: mqtt
39
+ Sensor 2 => MQTT[mqtt]: mqtt
40
+ Login => Hss[diameter]: diamter
41
+ Frontend => Backend[socket]: socket
42
+ MQTT => Backend[socket]: socket
43
+ Backend => Hss[diameter]: diameter
44
+ Backend => WWW[http]: http
45
+ Backend => Store[socket]: socket
46
+ ```
47
+ ## **System Under Test**
48
+ The [[REF=, ABS_System_To_Test]] can be divided into several [[REF=, ABS_System_Under_Test]]s. By definition, a [[REF=, ABS_System_Under_Test]] is either the whole [[REF=, ABS_System_To_Test]], or parts of it.
49
+ ### **System Under Test - Core Product**
50
+ 1) Normally, it will not be necessary to test the third-party products. We can replace them with [[REF=, ABS_Actors]] instead.
51
+ 2) We can also replace sensors with [[REF=, ABS_Actors]].
52
+ ```node
53
+ Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 30)
54
+
55
+ Nodes[, , , , , ]
56
+ Nodes[, Browser, , Login, , , , Hss, ]
57
+ Nodes[, , , Frontend, , Backend, , WWW]
58
+ Nodes[, Sensor 1, , MQTT, , , , Store, ]
59
+ Nodes[, Sensor 2, , , ]
60
+
61
+ Groups[Originating Actors(0; 3; 0; 5), SUT - Core Product(3; 6; 0; 5), Terminating Actor(6; 9; 0; 5)]
62
+
63
+ Browser => Login[radius]: radius
64
+ Browser => Frontend[http]: http
65
+ Sensor 1 => MQTT[mqtt]: mqtt
66
+ Sensor 2 => MQTT[mqtt]: mqtt
67
+ Login => Hss[diameter]: diameter
68
+ Frontend => Backend[socket]: socket
69
+ MQTT => Backend[socket]: socket
70
+ Backend => Hss[diameter]: diameter
71
+ Backend => WWW[http]: http
72
+ Backend => Store[socket]: socket
73
+ ```
74
+ ### **System Under Test - Login**
75
+ 1) The browser and Hss can be replaced with [[REF=, ABS_Actors]].
76
+ ```node
77
+ Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 40, widthBias: 30, heightBias: 30)
78
+
79
+ Nodes[Browser, , Login, , Hss]
80
+
81
+ Groups[Originating Actors(0; 2; 0; 1), SUT - Login(2; 3; 0; 1), Terminating Actor(3; 5; 0; 1)]
82
+
83
+ Browser => Login[radius]: radius
84
+ Login => Hss[diameter]: diameter
85
+ ```
86
+ ### **System Under Test - Sensor 1**
87
+ 1) Sensor 1 can be tested by replacing the MQTT Node with [[REF=, ABS_Actors]].
88
+ ```node
89
+ Config(nodeWidth: 50, nodeHeight: 50, nodeWidthBetween: 25, nodeHeightBetween: 45, widthBias: 30, heightBias: 30)
90
+
91
+ Nodes[, Sensor 1, , MQTT, , ]
92
+
93
+ Groups[SUT - Sensor 1(0; 3; 0; 1), Actor Servers(3; 6; 0; 1)]
94
+
95
+ Sensor 1 => MQTT[mqtt]: mqtt
96
+ ```
97
+ ## **Conclusion**
98
+ There is no limit to the number of [[REF=, ABS_System_Under_Test]] into which you can divide your [[REF=, ABS_System_To_Test]].
99
+
100
+ Perhaps different development teams are developing each node. Then the teams can isolate their specific node with [[REF=, ABS_Actors]] and test it.
101
+
102
+ Later, you can define two or more nodes as a [[REF=, ABS_System_To_Test]], reusing the previously developed [[REF=, ABS_Actors]], and test the nodes together - practically for free.
@@ -0,0 +1,50 @@
1
+ # **Introduction - Test Case**
2
+
3
+ ### **What is a Test Case?**
4
+
5
+ A Test Case is 100% data driven. The data to provide is as follows:
6
+ * [[REF=, ABS_Actors]]
7
+ * [[REF=, ABS_Addressing]]
8
+ * [[REF=, ABS_Test_Data]]
9
+ * [[REF=, ABS_Verification_Data]]
10
+
11
+ Even though a [[REF=, ABS_Test_Case]] is 100% data driven, you maintain 100% control of the code. The code is written as [[REF=, ABS_Actors]]. [[REF=, ABS_Actors]] determine what [[REF=, ABS_Test_Data]] and [[REF=, ABS_Verification_Data]] they need.
12
+
13
+
14
+ ### **Example**
15
+
16
+ ```tc
17
+ |Actor |
18
+ |name |node|type|phase|execution|src |dst |srv |testData|verification|
19
+ |Actors-global.workshop.BrowserOrig | |orig| | |browser|proxy| | | |
20
+ |Actors-global.workshop.WebServerTerm| |term| | | | |server| | |
21
+ | | | | | | | | | | |
22
+
23
+ |TestDataTestCase |
24
+ |key|value |description|
25
+ |url|/image.png| |
26
+ | | | |
27
+ ```
28
+
29
+ [[DIV={"id":"d624004c-5f2c-4c33-bf4d-d5f7dff9ddf4","style":{"float":"left"}}]]
30
+
31
+
32
+ <div style="display: flex;flex-direction:column;float:right">
33
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Definition</h3>
34
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-definition.png" style="width: 233px; margin: 0px 16px 10px;">
35
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Execution</h3>
36
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-execution.png" style="width: 233px; margin: 0px 16px 10px;">
37
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Log</h3>
38
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-log.png" style="width: 233px; margin: 0px 16px 10px;">
39
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Sequence Diagram</h3>
40
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-sequence-diagram.png" style="width: 233px; margin: 0px 16px 10px;">
41
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Debug</h3>
42
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-debugging.png" style="width: 233px; margin: 0px 16px 10px;">
43
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Specification</h3>
44
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-specification.png" style="width: 233px; margin: 0px 16px 10px;">
45
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Analyze</h3>
46
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-case-analyze.png" style="width: 233px; margin: 0px 16px 10px;">
47
+ </div>
48
+
49
+ ### **Core Tool - Test Cases**
50
+ When working with a [[REF=, ABS_Test_Case]] there are several tabs with different functionality.
@@ -0,0 +1,31 @@
1
+ # **Introduction - Test Suite**
2
+
3
+ ### **What is a Test Suite?**
4
+
5
+ A Test Suite is 100% data driven. The data to provide is:
6
+ * [[REF=, ABS_Test_Cases]]
7
+ * [[REF=, ABS_Test_Suites]]
8
+
9
+ ```ts
10
+ |TestSuiteAbstraction |
11
+ |name |execution|iterationsTs|
12
+ |tc.ImageService.Image.ImagePng-1-Message-Flow | | |
13
+ |tc.ImageService.Image.ImagePng-2-Test-Data-Denmark| | |
14
+ |tc.ImageService.Image.ImagePng-2-Test-Data-Sweden | | |
15
+ | | | |
16
+ ```
17
+
18
+ [[DIV={"id":"d624004c-5f2c-4c33-bf4d-d5f7dff9ddf4","style":{"float":"left"}}]]
19
+
20
+
21
+ <div style="display: flex;flex-direction:column;float:right">
22
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Definitions</h3>
23
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-definition.png" style="width: 233px; margin: 0px 16px 10px;">
24
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Execution</h3>
25
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-execution.png" style="width: 233px; margin: 0px 16px 10px;">
26
+ <h4 style="width: 233px; margin: 0px 16px 10px; font-weight:bold;">Tab - Log</h3>
27
+ <img class="markup_image" onclick="if('100%' === this.style.width) {this.style.width = '233px';} else {this.style.width = '100%';}" src="/abs-images/images/visualization/test-suite-log.png" style="width: 233px; margin: 0px 16px 10px;">
28
+ </div>
29
+
30
+ ### **Core Tool - Test Cases**
31
+ When working with a [[REF=, ABS_Test_Suite]] there are several tabs with different functionality.
@@ -0,0 +1,45 @@
1
+ # **2) Login with Puppeteer**
2
+
3
+ #### **Purpose**
4
+ Learn how to use a ***mock***, called [[REF=, ABS_Actor_Terminating]].
5
+ #### **Task**
6
+ **Description**:
7
+ 1) Load the ***ActorDemo*** site and click the ***"goto login"*** button.
8
+ 2) Type the ***username*** and the ***password***.
9
+ 3) Click the "login button.
10
+
11
+ **Test type:** GUI test
12
+
13
+ #### **Analyze**
14
+ ```node
15
+ Config(nodeWidth: 80, nodeHeight: 50, nodeWidthBetween: 75, nodeHeightBetween: 25, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
16
+
17
+ Nodes[Browser(; ; White), ActorDemo(; ; Honeydew), UserService(; ; White)]
18
+
19
+
20
+ Browser => ActorDemo[http]: http
21
+ ActorDemo => UserService[http]: http
22
+ ```
23
+
24
+ * Create an [[REF=, ABS_Actor_Originating]] which uses the ***puppeteer*** stack.
25
+ * Create an [[REF=, ABS_Actor_Terminating]] which uses the ***http*** stack.
26
+
27
+ #### **Sequence Diagram**
28
+ ```seq
29
+ Config(nodeWidth: 200, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 60, heightBias: 30, lineNumbers: false, border: true, backgroundColor: EAFEEA)
30
+
31
+ Nodes[Browser, ActorDemo, UserService]
32
+ Browser page [puppeteer]:
33
+ Browser -o ActorDemo[http]:
34
+ Browser => ActorDemo[http]: GET http://actordemo:9045/start
35
+ ActorDemo => Browser[http]: 200 OK
36
+ Browser click [puppeteer]: id = from_start_to_login
37
+ Browser type [puppeteer]: id = actor_demo_username_input
38
+ Browser type [puppeteer]: id = actor_demo_password_input
39
+ Browser click [puppeteer]: id = actor_demo_login_button
40
+ Browser => ActorDemo[http]: GET http://actordemo:9045/login
41
+ ActorDemo => UserService[http]: GET
42
+ UserService => ActorDemo[http]: 200 OK
43
+ ActorDemo => Browser[http]: 200 OK
44
+ Browser -x ActorDemo[http]:
45
+ ```
@@ -0,0 +1,83 @@
1
+ # **2) Mock with HTTP**
2
+
3
+ ---
4
+ ## ***Goto the Image AI page***
5
+
6
+ ---
7
+ #### **Purpose**
8
+ Learn how to ***mock*** with the [[REF=, STACK_HTTP]] stack. ***Mock*** with a [[REF=, ABS_Terminating_Actor]].
9
+ Learn how to use ***[[REF=, ABS_Content]]*** with the [[REF=, API_Actor_Content]].
10
+
11
+ ---
12
+ #### **Task**
13
+ 1) Mock ***ImageService*** and reply with ***Justin***.
14
+ 2) Load the ***ActorDemo*** site and click the **"Goto:** Image AI**"** button.
15
+
16
+ ---
17
+ #### **Analyze**
18
+ ```node
19
+ Config(nodeWidth: 80, nodeHeight: 50, nodeWidthBetween: 75, nodeHeightBetween: 25, widthBias: 30, heightBias: 30, border: true, backgroundColor: default)
20
+
21
+ Nodes[Browser(; ; White), ActorDemo(; ; Honeydew), ImageService(; ; White)]
22
+
23
+
24
+ Browser => ActorDemo[http]: http
25
+ ActorDemo => ImageService[http]: http
26
+ ```
27
+
28
+ The ***Image AI*** page uses the backend node ImageService.
29
+ * [[REF=, STACK_HTTP]] is the protocol between the ***Browser*** and ***ActorDemo*** so we will use the [[REF=, STACK_PUPPETEER]] stack to test this page.
30
+ * [[REF=, STACK_HTTP]] is the protocol between the ***ActorDemo*** and ***ImageService*** so we will use the [[REF=, STACK_HTTP]] stack to ***mock*** the ***ImageService***.
31
+
32
+ * The ***ImageService*** has two **REST API** methods.
33
+ * 1) **AiGetImages**:
34
+ 1.1) **protocol**: HTTP
35
+ 1.2) **Method**: GET
36
+ 1.3) **url**: api/v1/image/get-images
37
+ 1.4) **returns**: [[REF=, MDN_JSON]] - **content-type**: application/json
38
+ * [[REF=, MDN_objects]]: *Array of objects with image & AI data*
39
+ * **name**: [[REF=, MDN_string]]: *Name of the image*
40
+ * **mime**: [[REF=, MDN_string]]: *Image mime type*
41
+ * **aix**: [[REF=, MDN_strings]]: *Array of AI transformations*
42
+ * 2) **AiGetImage**
43
+ 2.1) **protocol**: HTTP
44
+ 2.2) **Method**: GET
45
+ 2.3) **url**: api/v1/image/get-image/[**name**]
46
+ &nbsp; &nbsp; 2.3.1) **name**: *the name of the AI instance.*
47
+ 1.4) **returns**: Image - **content-type**: image/[mime]
48
+
49
+ ```seq
50
+ Config(nodeWidth: 280, nodeMessageHeight: 17, nodeEventHeight: 10, nodeCommentHeight: 26, widthBias: 60, heightBias: 30, lineNumbers: false, border: true, backgroundColor: #EAFEEA)
51
+
52
+ Nodes[Browser, ActorDemo, ImageService]
53
+ ActorDemo -o ImageService[http]:
54
+ Browser browser [puppeteer]: srcActorDemo
55
+ Browser page [puppeteer]: page1
56
+ Browser -o ActorDemo[http]:
57
+ Browser => ActorDemo[http]: GET http://localhost:9045/start
58
+ ActorDemo => Browser[http]: 200 OK
59
+ Browser /**/ ActorDemo[http]: Loading site (js, css, images, REST API, ... .)
60
+ Browser click [puppeteer]: id = #from_start_to_image_ai
61
+ Browser => ActorDemo[http]: POST http://actordemo:9045/abs-data/AiGetImages
62
+ ActorDemo => ImageService[http]: GET api/v1/image/get-images
63
+ ImageService => ActorDemo[http]: 200 OK
64
+ ActorDemo => Browser[http]: 200 OK
65
+ Browser => ActorDemo[http]: POST http://actordemo:9045/abs-data/AiGetImage
66
+ ActorDemo => ImageService[http]: GET api/v1/image/get-image/Justin
67
+ ImageService => ActorDemo[http]: 200 OK
68
+ ActorDemo => Browser[http]: 200 OK
69
+ ImageService -x ActorDemo[http]:
70
+ Browser -x ActorDemo[http]:
71
+ ```
72
+
73
+ ---
74
+ #### **Conclusion**
75
+ 1) Create an [[REF=, ABS_Originating_Actor]] with the [[REF=, STACK_PUPPETEER]] stack.
76
+ 1.1 **Click** the button with ***selector***: #from_start_to_image_ai
77
+ 2) Create a [[REF=, ABS_Terminating_Actor]] with the [[REF=, STACK_HTTP]] stack.
78
+ 2.1 Answer the [[REF=, STACK_HTTP]] REST API ***request*** AiGetImages. Answer with one image: [{name:'Justin',mime:'images/jpeg',ais:['background', 'shirt', 'sunglasses']}]
79
+ 2.2 Answer the [[REF=, STACK_HTTP]] REST API ***request*** AiGetImage/Justin. Answer with the image requested.
80
+
81
+ ---
82
+ #### **Solution**
83
+ + Test Case: [GotoImageAI](/../test-cases/ActorDemo/ImageIA/GotoImageAI)