@suffolklitlab/alkiln 4.10.0 โ 4.10.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.
- package/.github/workflows/test_tests.yml +6 -4
- package/CHANGELOG.md +6 -0
- package/MANIFEST.in +1 -0
- package/_alkiln-misc_artifacts/unit_tests_logs-2022-12-29 at 02h22m01s457ms UTC.txt +20 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Base64 encoded corner cases are decoded correctly-2022-12-29 at 02h12m20s302ms UTC/report.txt +23 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail to find var while keeping value secret-2022-12-29 at 02h14m21s556ms UTC/report.txt +13 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with 2 wrong signin secret names-2022-12-29 at 02h14m19s733ms UTC/report.txt +12 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with a missing phrase-2022-12-29 at 02h13m42s632ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with cannot find missing document-2022-12-29 at 02h14m13s528ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with could not find files-2022-12-29 at 02h14m20s192ms UTC/report.txt +13 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with error page from random input-2022-12-29 at 02h13m27s716ms UTC/random_answers_screenshots-2022-12-29 at 02h13m28s915ms UTC/random-1672280009244.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with error page from random input-2022-12-29 at 02h13m27s716ms UTC/report.txt +12 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with incorrectly present phrase-2022-12-29 at 02h13m43s918ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with link text not visible-2022-12-29 at 02h13m52s649ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with link unexpectedly opens in a new window-2022-12-29 at 02h14m06s008ms UTC/report.txt +56 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with link unexpectedly opens in same window-2022-12-29 at 02h14m01s128ms UTC/report.txt +56 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with link with given text does not lead to correct url-2022-12-29 at 02h13m55s993ms UTC/report.txt +56 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with missing element id-2022-12-29 at 02h13m45s207ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with missing error message-2022-12-29 at 02h13m48s710ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with missing link with url-2022-12-29 at 02h13m54s329ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with missing term with the given text-2022-12-29 at 02h14m12s071ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with no interview at arbitrary url-2022-12-29 at 02h11m01s999ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with system error after Step using wrong file name as trigger-2022-12-29 at 02h14m15s021ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with unexpectedly able to continue-2022-12-29 at 02h13m46s819ms UTC/report.txt +11 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with var not on page-2022-12-29 at 02h14m10s627ms UTC/report.txt +12 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with was unexpectedly not able to continue for invalid field input message-2022-12-29 at 02h13m50s143ms UTC/report.txt +13 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with wrong email secret name-2022-12-29 at 02h14m18s763ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fail with wrong password secret name-2022-12-29 at 02h14m19s291ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fails as it doesn't try to 'continue' with a restart button-2022-12-29 at 02h12m22s559ms UTC/report.txt +19 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fails when table has no header row and rows have only one column-2022-12-29 at 02h14m50s261ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Fields are listed out of order-2022-12-29 at 02h14m55s580ms UTC/report.txt +103 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I am able to set a custom wait time before an interview has been loaded-2022-12-29 at 02h10m12s300ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I am able to set a custom wait time that allows steps to run longer than the half minute default-2022-12-29 at 02h09m35s267ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m20s448ms UTC/random-1672280001009.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m20s448ms UTC/random-1672280001551.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m20s448ms UTC/random-1672280002244.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m20s448ms UTC/random-1672280003073.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m20s448ms UTC/random-1672280003428.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m24s217ms UTC/random-1672280004868.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m24s217ms UTC/random-1672280005425.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m24s217ms UTC/random-1672280006159.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m24s217ms UTC/random-1672280007028.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/random_answers_screenshots-2022-12-29 at 02h13m24s217ms UTC/random-1672280007371.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I answer randomly till the end twice-2022-12-29 at 02h13m19s494ms UTC/report.txt +21 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I can include .yml in the filename-2022-12-29 at 02h12m39s613ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I can match JSON page var to str-2022-12-29 at 02h12m57s106ms UTC/json_for-showifs-2022-12-29 at 02h12m59s731ms UTC.json +154 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I can match JSON page var to str-2022-12-29 at 02h12m57s106ms UTC/report.txt +33 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I can wait as a first step in a test-2022-12-29 at 02h10m50s651ms UTC/report.txt +5 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I can't match JSON page var to str-2022-12-29 at 02h14m16s014ms UTC/json_for-showifs-2022-12-29 at 02h14m18s373ms UTC.json +154 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I can't match JSON page var to str-2022-12-29 at 02h14m16s014ms UTC/report.txt +37 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I check navigation-2022-12-29 at 02h12m41s028ms UTC/report.txt +54 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I check the pages for accessibility-2022-12-29 at 02h13m02s923ms UTC/report.txt +58 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input for 1 page-2022-12-29 at 02h13m17s219ms UTC/random_answers_screenshots-2022-12-29 at 02h13m18s174ms UTC/random-1672279998764.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input for 1 page-2022-12-29 at 02h13m17s219ms UTC/report.txt +7 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input till the end-2022-12-29 at 02h13m12s258ms UTC/random_answers_screenshots-2022-12-29 at 02h13m13s676ms UTC/random-1672279994312.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input till the end-2022-12-29 at 02h13m12s258ms UTC/random_answers_screenshots-2022-12-29 at 02h13m13s676ms UTC/random-1672279994892.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input till the end-2022-12-29 at 02h13m12s258ms UTC/random_answers_screenshots-2022-12-29 at 02h13m13s676ms UTC/random-1672279995594.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input till the end-2022-12-29 at 02h13m12s258ms UTC/random_answers_screenshots-2022-12-29 at 02h13m13s676ms UTC/random-1672279996542.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input till the end-2022-12-29 at 02h13m12s258ms UTC/random_answers_screenshots-2022-12-29 at 02h13m13s676ms UTC/random-1672279996887.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I fill in random input till the end-2022-12-29 at 02h13m12s258ms UTC/report.txt +13 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I get the page's JSON-2022-12-29 at 02h13m00s023ms UTC/report.txt +71 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I have four name parts-2022-12-29 at 02h09m31s566ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I have three name parts-2022-12-29 at 02h09m27s653ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I have two name parts-2022-12-29 at 02h09m21s065ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I observe things on a single page when I arrive-2022-12-29 at 02h12m35s237ms UTC/report.txt +7 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I see user errors_-2022-12-29 at 02h12m37s167ms UTC/report.txt +9 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I set various values-2022-12-29 at 02h11m10s659ms UTC/report.txt +58 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I set various values-2022-12-29 at 02h11m10s659ms UTC/simple-doc.pdf +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I sign in-2022-12-29 at 02h10m54s349ms UTC/report.txt +7 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I take a screenshot-2022-12-29 at 02h13m01s434ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I take a screenshot-2022-12-29 at 02h13m01s434ms UTC/screenshot-some-screenshot-on-upload-files-2022-12-29 at 02h13m02s597ms UTC.jpg +0 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I upload files with a table-2022-12-29 at 02h15m13s490ms UTC/report.txt +19 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/I want to go to a full arbitrary url-2022-12-29 at 02h10m58s362ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Interview name includes url args with a wait-2022-12-29 at 02h10m52s195ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Interview name includes url args-2022-12-29 at 02h10m48s849ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Latin-Fail with missing language link-2022-12-29 at 02h13m40s278ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Latin-Fail with wrong page id-2022-12-29 at 02h13m41s379ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Proxy and regular vars are mixed-2022-12-29 at 02h14m51s648ms UTC/report.txt +35 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Report doesn't complain about `there_is_another _ False` in a table_-2022-12-29 at 02h14m36s652ms UTC/report.txt +16 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Report lists unused table rows-2022-12-29 at 02h14m29s563ms UTC/report.txt +65 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Report still shows page id when I tap to continue without setting any fields-2022-12-29 at 02h14m25s620ms UTC/report.txt +22 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Server finishes reloading-2022-12-29 at 02h11m08s477ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Sign in to server successfully-2022-12-29 at 02h14m34s127ms UTC/report.txt +6 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Story table accidentally uses the opposite double or single quotes-2022-12-29 at 02h15m11s462ms UTC/report.txt +18 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Table MISSING trigger column-2022-12-29 at 02h14m41s898ms UTC/report.txt +33 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Table has no header row, MISSING trigger column-2022-12-29 at 02h14m47s483ms UTC/report.txt +33 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Table has no header row, has trigger column-2022-12-29 at 02h14m44s776ms UTC/report.txt +37 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Table has trigger column-2022-12-29 at 02h14m39s081ms UTC/report.txt +37 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Test _Then I cannot continue_-2022-12-29 at 02h12m48s119ms UTC/report.txt +9 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Test _Then I can/342/200/231t continue_ with an apostrophe-2022-12-29 at 02h12m52s553ms UTC/report.txt" +9 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Test _Then I do not continue_-2022-12-29 at 02h12m50s316ms UTC/report.txt +9 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Test _Then I don't continue_ with a single quote-2022-12-29 at 02h12m45s907ms UTC/report.txt +9 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Test _Then I don/342/200/231t continue_ with an apostrophe-2022-12-29 at 02h12m54s800ms UTC/report.txt" +9 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/Warn when there are too many names-2022-12-29 at 02h14m22s722ms UTC/report.txt +8 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/debug_log.txt +2373 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/handles settings from Github secrets-2022-12-29 at 02h12m13s413ms UTC/report.txt +19 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/report.txt +1439 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/tap element with an error-2022-12-29 at 02h12m18s853ms UTC/report.txt +10 -0
- package/alkiln-2022-12-29 at 02h09m19s552ms UTC/tap elements-2022-12-29 at 02h12m16s677ms UTC/report.txt +6 -0
- package/docassemble/__init__.py +5 -0
- package/lib/scope.js +45 -28
- package/lib/utils/files.js +1 -1
- package/lib/utils/session_vars.js +5 -3
- package/package.json +4 -4
- package/setup.py +60 -0
- package/tests/features/assembly_line.feature +0 -43
- package/tests/features/establishing_steps.feature +0 -62
- package/tests/features/example_test.feature +0 -11
- package/tests/features/interactive_steps.feature +0 -166
- package/tests/features/observation_steps.feature +0 -153
- package/tests/features/random_input.feature +0 -31
- package/tests/features/reload.feature +0 -155
- package/tests/features/reports.feature +0 -557
- package/tests/features/some_png_1.png +0 -0
- package/tests/features/some_png_2.png +0 -0
- package/tests/features/story_table_formats.feature +0 -125
- package/tests/features/story_tables.feature +0 -91
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
---------------
|
|
3
|
+
Scenario: tap element with an error
|
|
4
|
+
Tags: @interactive @i4 @tap-elements @tabs @error
|
|
5
|
+
---------------
|
|
6
|
+
Trying to load the interview
|
|
7
|
+
|
|
8
|
+
ERROR: Couldn't find the tab with id "#Tests-not_there-tab" on the page, is there a typo?
|
|
9
|
+
|
|
10
|
+
**-- Scenario Failed --**
|
package/lib/scope.js
CHANGED
|
@@ -81,7 +81,7 @@ let toBase64 = function ( utf8_str, exclude_padding=true) {
|
|
|
81
81
|
|
|
82
82
|
let proxies_regex = /(\bx\.)|(\bx\[)|(\[[ijklmn]\])/g;
|
|
83
83
|
let da_base64_regex = /^[A-Za-z0-9+/]+$/;
|
|
84
|
-
let misc_artifacts_dir = `
|
|
84
|
+
let misc_artifacts_dir = `_alkiln-misc_artifacts`;
|
|
85
85
|
|
|
86
86
|
module.exports = {
|
|
87
87
|
trigger_not_needed_flag: `ALKiln: no trigger variable needed`,
|
|
@@ -1805,35 +1805,53 @@ module.exports = {
|
|
|
1805
1805
|
/* Try to upload one or more files to a file-type input field.
|
|
1806
1806
|
* Does not submit, so no danger of timeout with server reload.
|
|
1807
1807
|
*/
|
|
1808
|
-
|
|
1809
|
-
// Tests
|
|
1810
|
-
// Makes an absolute path from the
|
|
1811
|
-
let
|
|
1812
|
-
let
|
|
1813
|
-
let
|
|
1814
|
-
|
|
1815
|
-
// Make sure one of the valid directories exist. This only allows
|
|
1816
|
-
// one directory to be used per Step or table row. We don't anticipate
|
|
1817
|
-
// future people having a `tests/features` folder, let alone both.
|
|
1808
|
+
|
|
1809
|
+
// Tests should be one place: docassemble/*/data/sources, where * is the only folder in `docassemble`.
|
|
1810
|
+
// Makes an absolute path from the folder in which `npm run` was used plus our internal folders
|
|
1811
|
+
let docassemble_pkg_path = `${ process.cwd() }/docassemble`;
|
|
1812
|
+
let subpackage_name = session_vars.get_package_name().substring(12);
|
|
1813
|
+
let pkg_paths = [];
|
|
1818
1814
|
try {
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
}
|
|
1815
|
+
fs.accessSync(docassemble_pkg_path);
|
|
1816
|
+
// https://stackoverflow.com/a/24594123/11416267
|
|
1817
|
+
let dirs = fs.readdirSync(docassemble_pkg_path, {withFileTypes: true}).filter(dirent => dirent.isDirectory()).map(dirent => dirent.name);
|
|
1818
|
+
if (dirs.length < 1) {
|
|
1819
|
+
let msg = `You can store files to upload in 'docassemble/${ subpackage_name }/data/source'. These tests could not find a folder like that starting at ${ process.cwd() }.`;
|
|
1820
|
+
await scope.addToReport( scope, { type: `warning`, value: msg});
|
|
1821
|
+
throw Error(msg); // Most people will want to know the sources folder path;
|
|
1822
|
+
}
|
|
1823
|
+
for (let dir of dirs) {
|
|
1824
|
+
pkg_paths.push(`${docassemble_pkg_path}/${dir}`);
|
|
1825
|
+
}
|
|
1826
|
+
} catch ( error_da ) {
|
|
1827
|
+
let msg = `You can store files to upload in 'docassemble/${ subpackage_name }/data/source'. ` +
|
|
1828
|
+
`These tests could not find a folder like that. The current directory is ` +
|
|
1829
|
+
` ${ process.cwd() }; is that in the top level folder of your docassemble package? (${ session_vars.get_package_name() })?`;
|
|
1830
|
+
await scope.addToReport( scope, { type: `warning`, value: msg});
|
|
1831
|
+
throw error_da; // Most people will want to know the sources folder path;
|
|
1832
|
+
}
|
|
1827
1833
|
|
|
1828
|
-
|
|
1834
|
+
let chosen_dir = null;
|
|
1835
|
+
let err_paths = [];
|
|
1836
|
+
for (let pkg_path of pkg_paths) {
|
|
1837
|
+
let dir = `${ pkg_path }/data/sources`;
|
|
1829
1838
|
try {
|
|
1830
|
-
fs.accessSync(
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1839
|
+
fs.accessSync(dir);
|
|
1840
|
+
chosen_dir = dir;
|
|
1841
|
+
break;
|
|
1842
|
+
} catch ( error_full ) {
|
|
1843
|
+
err_paths.push(`'${dir}'`);
|
|
1835
1844
|
}
|
|
1836
1845
|
}
|
|
1846
|
+
if (chosen_dir === null) {
|
|
1847
|
+
let msg = `You can store files to upload in ${err_paths.join(", or ")}. These tests could not find any of those folders.`;
|
|
1848
|
+
await scope.addToReport( scope, { type: `warning`, value: msg });
|
|
1849
|
+
throw Error(msg); // Most people will want to know the sources folder path;
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1852
|
+
if (pkg_paths.length > 1 && pkg_paths.length - err_paths.length > 1) {
|
|
1853
|
+
await scope.addToReport( scope, { type: `warning`, value: `You have multiple folders in the 'docassemble' folder (${ pkg_paths }). These tests will use the first folder with a "data/sources" subfolder (${chosen_dir}).` });
|
|
1854
|
+
}
|
|
1837
1855
|
|
|
1838
1856
|
// Allow a typo where someone forgot to include a space after a comma
|
|
1839
1857
|
let file_names = answer.split(`,`);
|
|
@@ -1845,15 +1863,14 @@ module.exports = {
|
|
|
1845
1863
|
// If the developer correctly used a ", ", there will be a space at the
|
|
1846
1864
|
// start of the string. Remove it. If they forgot the space, that's fine too.
|
|
1847
1865
|
name = name.replace(/^\s/, '');
|
|
1848
|
-
let file_path = path.join(
|
|
1866
|
+
let file_path = path.join( chosen_dir, name );
|
|
1849
1867
|
|
|
1850
1868
|
try {
|
|
1851
1869
|
fs.accessSync( file_path );
|
|
1852
1870
|
paths.push( file_path );
|
|
1853
|
-
|
|
1854
1871
|
} catch ( err ) {
|
|
1855
1872
|
// TODO: Should this throw an error?
|
|
1856
|
-
await scope.addToReport( scope, { type: `warning`, value: `Could not find "${ name }" in "${
|
|
1873
|
+
await scope.addToReport( scope, { type: `warning`, value: `Could not find "${ name }" in "${ chosen_dir }"` });
|
|
1857
1874
|
}
|
|
1858
1875
|
}
|
|
1859
1876
|
|
package/lib/utils/files.js
CHANGED
|
@@ -31,7 +31,7 @@ files.make_artifacts_folder = function (folder_name) {
|
|
|
31
31
|
if (folder_name) {
|
|
32
32
|
folder_name = safe_filename( folder_name );
|
|
33
33
|
} else {
|
|
34
|
-
folder_name = `
|
|
34
|
+
folder_name = `alkiln-${ files.readable_date() }`
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
fs.mkdirSync( folder_name );
|
|
@@ -67,13 +67,15 @@ session_vars.get_branch_name = function () {
|
|
|
67
67
|
return branch_name;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
session_vars.
|
|
70
|
+
session_vars.get_package_name = function () {
|
|
71
71
|
/* Make an un-incremented project name based on the repo name and branch name. */
|
|
72
72
|
let repo_url_without_trailing_slash = session_vars.get_repo_url().replace(/\/$/, '');
|
|
73
73
|
let repo_name_parts = repo_url_without_trailing_slash.split('/');
|
|
74
|
-
|
|
74
|
+
return repo_name_parts[ repo_name_parts.length - 1 ];
|
|
75
|
+
};
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
session_vars.get_project_base_name = function () {
|
|
78
|
+
let name = `testing${ session_vars.get_package_name() }${ session_vars.get_branch_name() }`;
|
|
77
79
|
let sanitized_name = name.replace( /[^A-Za-z0-9]/g, '' );
|
|
78
80
|
return sanitized_name;
|
|
79
81
|
};
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@suffolklitlab/alkiln",
|
|
3
|
-
"version": "4.10.
|
|
3
|
+
"version": "4.10.1",
|
|
4
4
|
"description": "Integrated automated end-to-end testing with docassemble, puppeteer, and cucumber.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "npm run unit && npm run langs_setup && npm run cucumber -- $@",
|
|
8
8
|
"cucumber_base": "run_cucumber(){ ./node_modules/.bin/cucumber-js \"$@\"; status=$?; ./lib/utils/clean_reports.js; return $status; }; run_cucumber",
|
|
9
|
-
"cucumber": "run_base(){ npm run cucumber_base -- \"$@\"
|
|
9
|
+
"cucumber": "run_base(){ npm run cucumber_base -- \"$@\" docassemble/*/data/sources/*.feature --retry 1; }; run_base",
|
|
10
10
|
"cucumber_external": "run_cucumber(){ tmp_path=`pwd`; ( new_path=\"$1\"; shift; cd \"$new_path\"; npm run --prefix \"${tmp_path}\" cucumber_base -- \"$@\" \"$new_path\"/docassemble/*/data/sources/*.feature;) }; run_cucumber",
|
|
11
|
-
"langs": "npm run langs_setup && ./node_modules/.bin/cucumber-js --require ./lib/index.js
|
|
12
|
-
"langs_setup": "./lib/utils/langs.js '
|
|
11
|
+
"langs": "npm run langs_setup && ./node_modules/.bin/cucumber-js --require ./lib/index.js docassemble/*/data/sources/*_lang*.feature",
|
|
12
|
+
"langs_setup": "./lib/utils/langs.js 'docassemble/*/data/sources/*.feature'",
|
|
13
13
|
"langs_local": "npm run langs_setup && npm run local",
|
|
14
14
|
"local": "npm run setup && npm run cucumber; npm run takedown",
|
|
15
15
|
"setup": "./lib/docassemble/setup.js",
|
package/setup.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
from setuptools import setup, find_packages
|
|
4
|
+
from fnmatch import fnmatchcase
|
|
5
|
+
from distutils.util import convert_path
|
|
6
|
+
|
|
7
|
+
standard_exclude = ('*.pyc', '*~', '.*', '*.bak', '*.swp*')
|
|
8
|
+
standard_exclude_directories = ('.*', 'CVS', '_darcs', './build', './dist', 'EGG-INFO', '*.egg-info')
|
|
9
|
+
def find_package_data(where='.', package='', exclude=standard_exclude, exclude_directories=standard_exclude_directories):
|
|
10
|
+
out = {}
|
|
11
|
+
stack = [(convert_path(where), '', package)]
|
|
12
|
+
while stack:
|
|
13
|
+
where, prefix, package = stack.pop(0)
|
|
14
|
+
for name in os.listdir(where):
|
|
15
|
+
fn = os.path.join(where, name)
|
|
16
|
+
if os.path.isdir(fn):
|
|
17
|
+
bad_name = False
|
|
18
|
+
for pattern in exclude_directories:
|
|
19
|
+
if (fnmatchcase(name, pattern)
|
|
20
|
+
or fn.lower() == pattern.lower()):
|
|
21
|
+
bad_name = True
|
|
22
|
+
break
|
|
23
|
+
if bad_name:
|
|
24
|
+
continue
|
|
25
|
+
if os.path.isfile(os.path.join(fn, '__init__.py')):
|
|
26
|
+
if not package:
|
|
27
|
+
new_package = name
|
|
28
|
+
else:
|
|
29
|
+
new_package = package + '.' + name
|
|
30
|
+
stack.append((fn, '', new_package))
|
|
31
|
+
else:
|
|
32
|
+
stack.append((fn, prefix + name + '/', package))
|
|
33
|
+
else:
|
|
34
|
+
bad_name = False
|
|
35
|
+
for pattern in exclude:
|
|
36
|
+
if (fnmatchcase(name, pattern)
|
|
37
|
+
or fn.lower() == pattern.lower()):
|
|
38
|
+
bad_name = True
|
|
39
|
+
break
|
|
40
|
+
if bad_name:
|
|
41
|
+
continue
|
|
42
|
+
out.setdefault(package, []).append(prefix+name)
|
|
43
|
+
return out
|
|
44
|
+
|
|
45
|
+
setup(name='docassemble.ALKilnTests',
|
|
46
|
+
version='1.0.0',
|
|
47
|
+
description=('A docassemble extension for testing the ALKiln integrated testing framework.'),
|
|
48
|
+
long_description='# ALKiln support package\r\n\r\nAssembly Line Kiln (ALKiln) is a framework for automatically testing **any** [docassemble](https://docassemble.org/) package using GitHub. ALKiln is being developed as part of the SuffolkLITLab Document Assembly Line project. See [documentation for kiln](https://suffolklitlab.github.io/docassemble-AssemblyLine-documentation/docs/automated_integrated_testing).\r\n\r\nThis package supports ALKiln in different ways.\r\n\r\n## Tool to set up testing\r\n\r\n[Tap here to set up automated integrated testing for your docassemble interview](https://apps-dev.suffolklitlab.org/start/test-setup/).\r\n\r\nThis repo contains a step-by-step form that a developer can use to set up automated integrated testing for **any** docassemble package. It requires, among other things, a docassemble account and a temporary GitHub personal access token with correct permissions. It will add necessary GitHub secrets, make a new branch, push necessary files to that branch, and make a PR with that branch.\r\n\r\n',
|
|
49
|
+
long_description_content_type='text/markdown',
|
|
50
|
+
author='plocket',
|
|
51
|
+
author_email='example@example.com',
|
|
52
|
+
license='The MIT License (MIT)',
|
|
53
|
+
url='https://suffolklitlab.org/docassemble-AssemblyLine-documentation/docs/automated_integrated_testing',
|
|
54
|
+
packages=find_packages(),
|
|
55
|
+
namespace_packages=['docassemble'],
|
|
56
|
+
install_requires=['docassemble.ALToolbox>=0.5.1'],
|
|
57
|
+
zip_safe=False,
|
|
58
|
+
package_data=find_package_data(where='docassemble/ALKilnTests/', package='docassemble.ALKilnTests'),
|
|
59
|
+
)
|
|
60
|
+
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
@assembly_line
|
|
2
|
-
Feature: Assembly Line package-specific Steps
|
|
3
|
-
|
|
4
|
-
# In tag names, 'al' is for 'assembly line'
|
|
5
|
-
|
|
6
|
-
# Note: the first test for this suite is the first test in this file and we're having timeout issues, so we're trying to give the server longer to load.
|
|
7
|
-
|
|
8
|
-
@fast @al1
|
|
9
|
-
Scenario: I have two name parts
|
|
10
|
-
Given the max secs for each step is 120
|
|
11
|
-
ย ย Given I start the interview at "AL_tests"
|
|
12
|
-
And I set the name of "users[0]" to "Uli User"
|
|
13
|
-
And I tap to continue
|
|
14
|
-
And I set the address of "users[0]" to "120 Tremont Street, Unit 2, Boston, MA 02108"
|
|
15
|
-
And I tap to continue
|
|
16
|
-
And I set the name of "users[1]" to "Uli2 User2"
|
|
17
|
-
And I set the var "users[i].proxy_var" to "Mixed proxy var step test"
|
|
18
|
-
And I tap to continue
|
|
19
|
-
Then the question id should be "end"
|
|
20
|
-
|
|
21
|
-
@fast @al2
|
|
22
|
-
Scenario: I have three name parts
|
|
23
|
-
ย ย Given I start the interview at "AL_tests"
|
|
24
|
-
And I set the name of "users[0]" to "Uli Udo User"
|
|
25
|
-
And I tap to continue
|
|
26
|
-
And I set the address of "users[0]" to "120 Tremont Street, Unit 2, Boston, MA 02108"
|
|
27
|
-
And I tap to continue
|
|
28
|
-
And I set the name of "users[1]" to "Uli2 User2"
|
|
29
|
-
And I set the var "users[i].proxy_var" to "Mixed proxy var step test"
|
|
30
|
-
And I tap to continue
|
|
31
|
-
Then the question id should be "end"
|
|
32
|
-
|
|
33
|
-
@fast @al3
|
|
34
|
-
Scenario: I have four name parts
|
|
35
|
-
ย ย Given I start the interview at "AL_tests"
|
|
36
|
-
And I set the name of "users[0]" to "Uli Udo User Sr"
|
|
37
|
-
And I tap to continue
|
|
38
|
-
And I set the address of "users[0]" to "120 Tremont Street, Unit 2, Boston, MA 02108"
|
|
39
|
-
And I tap to continue
|
|
40
|
-
And I set the name of "users[1]" to "Uli2 User2"
|
|
41
|
-
And I set the var "users[i].proxy_var" to "Mixed proxy var step test"
|
|
42
|
-
And I tap to continue
|
|
43
|
-
Then the question id should be "end"
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
@establishing
|
|
2
|
-
Feature: Establishing steps
|
|
3
|
-
|
|
4
|
-
Steps that establish things about the state of the test
|
|
5
|
-
# In tag names, 'e' is for 'establishing'
|
|
6
|
-
|
|
7
|
-
@slow @e1 @wait
|
|
8
|
-
Scenario: I am able to set a custom wait time that allows steps to run longer than the half minute default
|
|
9
|
-
Given I start the interview at "all_tests"
|
|
10
|
-
And the max seconds for each step in this scenario is 40
|
|
11
|
-
And I wait 35 seconds
|
|
12
|
-
|
|
13
|
-
@slow @e2 @wait
|
|
14
|
-
Scenario: I am able to set a custom wait time before an interview has been loaded
|
|
15
|
-
Given the max seconds for each step in this scenario is 40
|
|
16
|
-
And I start the interview at "all_tests"
|
|
17
|
-
And I wait 35 seconds
|
|
18
|
-
|
|
19
|
-
@fast @e3 @urlargs
|
|
20
|
-
Scenario: Interview name includes url args
|
|
21
|
-
ย ย Given I start the interview at "url_args.yml&from=theinternets&random=zoo"
|
|
22
|
-
ย ย Then I should see the phrase "zoo"
|
|
23
|
-
|
|
24
|
-
@slow @e4 @wait_first
|
|
25
|
-
Scenario: I can wait as a first step in a test
|
|
26
|
-
Given I wait 1 second
|
|
27
|
-
|
|
28
|
-
@slow @e5 @wait_first
|
|
29
|
-
Scenario: Interview name includes url args with a wait
|
|
30
|
-
Given I wait 1 second
|
|
31
|
-
Then I start the interview at "url_args.yml&from=theinternets&random=zoo"
|
|
32
|
-
Then I should see the phrase "zoo"
|
|
33
|
-
|
|
34
|
-
@fast @e6 @signin
|
|
35
|
-
Scenario: I sign in
|
|
36
|
-
ย ย Given I sign in with the email "USER1_EMAIL" and the password "USER1_PASSWORD"
|
|
37
|
-
And I start the interview at "all_tests"
|
|
38
|
-
|
|
39
|
-
@fast @e7 @arbitraryurl
|
|
40
|
-
Scenario: I want to go to a full arbitrary url
|
|
41
|
-
Given the max seconds for each step in this scenario is 5
|
|
42
|
-
And the Scenario report should include:
|
|
43
|
-
"""
|
|
44
|
-
Trying to load the interview
|
|
45
|
-
"""
|
|
46
|
-
ย ย Given I start the interview at "https://apps-test.suffolklitlab.org/start/demo/questions"
|
|
47
|
-
ย ย Then I should see the phrase "What language do you speak?"
|
|
48
|
-
|
|
49
|
-
# WARNING: This Scenario may fail if the file moves or changes too much
|
|
50
|
-
@fast @failing @e8 @rfe8 @arbitraryurl
|
|
51
|
-
Scenario: Fail with no interview at arbitrary url
|
|
52
|
-
Given the final Scenario status should be "failed"
|
|
53
|
-
And the Scenario report should include:
|
|
54
|
-
"""
|
|
55
|
-
Trying to load the interview
|
|
56
|
-
"""
|
|
57
|
-
And the Scenario report should include:
|
|
58
|
-
"""
|
|
59
|
-
ALKiln could not find any interview question page
|
|
60
|
-
"""
|
|
61
|
-
And the max seconds for each step in this scenario is 5
|
|
62
|
-
Then I start the interview at "https://apps-test.suffolklitlab.org/list"
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
@example_feature_tag
|
|
2
|
-
Feature: An example test
|
|
3
|
-
|
|
4
|
-
The tests in this file should cover
|
|
5
|
-
- [x] Provide a template people can use to make their own tests.
|
|
6
|
-
- [ ] Direct people to more documentation.
|
|
7
|
-
- [ ] Find the ultimate question to life, the universe, and everything.
|
|
8
|
-
|
|
9
|
-
@example_scenario_tag
|
|
10
|
-
Scenario: Server finishes reloading
|
|
11
|
-
Given I start the interview at "test"
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
@interactive
|
|
2
|
-
Feature: Interactive steps
|
|
3
|
-
|
|
4
|
-
# In tag names, 'i' is for 'interactive'
|
|
5
|
-
|
|
6
|
-
@slow @i1
|
|
7
|
-
Scenario: I set various values
|
|
8
|
-
ย ย Given I start the interview at "all_tests"
|
|
9
|
-
Then the question id should be "upload files"
|
|
10
|
-
When I set the var "upload_files_visible" to "some_png_1.png, some_png_2.png"
|
|
11
|
-
And I set the var "show_upload" to "True"
|
|
12
|
-
And I upload "some_png_2.png,some_png_1.png" to "upload_files_hidden"
|
|
13
|
-
And I tap to continue
|
|
14
|
-
# Next page
|
|
15
|
-
Then the question id should be "group of complex fields"
|
|
16
|
-
And I set the var "double_quote_dict['double_quote_key']['dq_two']" to "true"
|
|
17
|
-
And I set the var "single_quote_dict['single_quote_key']['sq_two']" to "true"
|
|
18
|
-
And I tap to continue
|
|
19
|
-
Then the question id should be "direct standard fields"
|
|
20
|
-
# Next page
|
|
21
|
-
When I set the var "checkboxes_yesno" to "True"
|
|
22
|
-
And I set the var "checkboxes_other['checkbox_other_opt_1']" to "true"
|
|
23
|
-
And I set the var "dropdown_test" to "dropdown_opt_2"
|
|
24
|
-
And I set the var "radio_yesno" to "False"
|
|
25
|
-
And I set the var "radio_other" to "radio_other_opt_3"
|
|
26
|
-
And I set the var "text_input" to "Regular text input field value"
|
|
27
|
-
And I set the var "textarea" to "Multiline text\narea value"
|
|
28
|
-
And I set the var "date_input" to "today - 1"
|
|
29
|
-
When I set the var "direct_standard_fields" to "True"
|
|
30
|
-
# Next page
|
|
31
|
-
Then the question id should be "showifs"
|
|
32
|
-
When I set the var "show_2" to "True"
|
|
33
|
-
And I set the var "show_3" to "True"
|
|
34
|
-
And I set the var "showif_checkbox_yesno" to "true"
|
|
35
|
-
And I set the var "showif_checkboxes_other['showif_checkboxes_nota_2']" to "true"
|
|
36
|
-
And I set the var "showif_checkboxes_other['showif_checkboxes_nota_3']" to "true"
|
|
37
|
-
And I set the var "showif_yesnoradio" to "True"
|
|
38
|
-
And I set the var "showif_radio_other" to "showif_radio_multi_2"
|
|
39
|
-
And I set the var "showif_text_input" to "Show if text input value"
|
|
40
|
-
And I set the var "showif_textarea" to "Show if\nmultiline text\narea value"
|
|
41
|
-
And I set the var "showif_dropdown" to "showif_dropdown_1"
|
|
42
|
-
When I tap to continue
|
|
43
|
-
# Next page
|
|
44
|
-
Then the question id should be "object checkboxes"
|
|
45
|
-
And I set the var "object_checkboxes_test['obj_chkbx_opt_1']" to "true"
|
|
46
|
-
And I set the var "object_dropdown" to "obj_opt_2"
|
|
47
|
-
When I tap to continue
|
|
48
|
-
# Next page
|
|
49
|
-
Then the question id should be "buttons yesnomaybe"
|
|
50
|
-
When I set the var "buttons_yesnomaybe" to "None"
|
|
51
|
-
# Next page
|
|
52
|
-
Then the question id should be "buttons other"
|
|
53
|
-
When I set the var "buttons_other" to "button_3"
|
|
54
|
-
# Next page
|
|
55
|
-
Then the question id should be "button continue"
|
|
56
|
-
When I set the var "button_continue" to "True"
|
|
57
|
-
# Next page
|
|
58
|
-
Then the question id should be "screen features"
|
|
59
|
-
When I tap to continue
|
|
60
|
-
# Next page
|
|
61
|
-
Then the question id should be "proxy vars"
|
|
62
|
-
When I set the var "x[i].name.first" to "Proxyname1"
|
|
63
|
-
And I tap to continue
|
|
64
|
-
# Next page
|
|
65
|
-
Then the question id should be "is there another generic"
|
|
66
|
-
When I set the var "x.there_is_another" to "True"
|
|
67
|
-
# Next page
|
|
68
|
-
Then the question id should be "proxy vars"
|
|
69
|
-
When I set the var "x[i].name.first" to "Proxyname2"
|
|
70
|
-
And I tap to continue
|
|
71
|
-
# Next page
|
|
72
|
-
Then the question id should be "is there another generic"
|
|
73
|
-
When I set the var "x.there_is_another" to "False"
|
|
74
|
-
# Next page
|
|
75
|
-
Then the question id should be "first signature"
|
|
76
|
-
When I sign
|
|
77
|
-
And I tap to continue
|
|
78
|
-
# Next page
|
|
79
|
-
Then the question id should be "second signature"
|
|
80
|
-
When I sign
|
|
81
|
-
And I tap to continue
|
|
82
|
-
# Next page
|
|
83
|
-
Then the question id should be "simple doc"
|
|
84
|
-
When I download "simple-doc.pdf"
|
|
85
|
-
And I tap to continue
|
|
86
|
-
# Next page
|
|
87
|
-
Then the question id should be "button event action"
|
|
88
|
-
And I tap to continue
|
|
89
|
-
# Next page
|
|
90
|
-
Then the question id should be "single-dropdown-field"
|
|
91
|
-
And I set the var "single_dropdown_field" to "email"
|
|
92
|
-
And I tap to continue
|
|
93
|
-
# Next page
|
|
94
|
-
Then the question id should be "the end"
|
|
95
|
-
|
|
96
|
-
@fast @i2 @secret
|
|
97
|
-
Scenario: handles settings from Github secrets
|
|
98
|
-
Given the final Scenario status should be "failed"
|
|
99
|
-
And the Scenario report should include:
|
|
100
|
-
"""
|
|
101
|
-
The GitHub SECRET "SECRET_NOT_THERE" doesn't exist
|
|
102
|
-
"""
|
|
103
|
-
Given I start the interview at "test_secret_vars"
|
|
104
|
-
When I set the var "first_text_entry" to the secret "SECRET_VAR1"
|
|
105
|
-
And I tap to continue
|
|
106
|
-
Then I see the phrase "secret-var1-value"
|
|
107
|
-
When I tap to continue
|
|
108
|
-
And I set the var "second_text_entry" to the github secret "SECRET_VAR2"
|
|
109
|
-
And I tap to continue
|
|
110
|
-
Then I see the phrase "secret-var2-value"
|
|
111
|
-
When I tap to continue
|
|
112
|
-
And I set the variable "third_text_entry" to secret "SECRET_NOT_THERE"
|
|
113
|
-
|
|
114
|
-
@i3 @tap-elements @tabs
|
|
115
|
-
Scenario: tap elements
|
|
116
|
-
Given I start the interview at "test_taps"
|
|
117
|
-
And I tap the "Tests-first_template-tab" tab
|
|
118
|
-
Then I see the phrase "Mechanics"
|
|
119
|
-
And I tap the "Tests-second_template-tab" tab
|
|
120
|
-
Then I see the phrase "villify"
|
|
121
|
-
And I tap the "Tests-third_template-tab" tab
|
|
122
|
-
Then I see the phrase "museum"
|
|
123
|
-
And I tap the "#special_event" element and wait 1 second
|
|
124
|
-
Then I see the phrase "Portishead"
|
|
125
|
-
|
|
126
|
-
@i4 @tap-elements @tabs @error
|
|
127
|
-
Scenario: tap element with an error
|
|
128
|
-
Given the final Scenario status should be "failed"
|
|
129
|
-
And the Scenario report should include:
|
|
130
|
-
"""
|
|
131
|
-
is there a typo?
|
|
132
|
-
"""
|
|
133
|
-
Given I start the interview at "test_taps"
|
|
134
|
-
And I tap the "Tests-not_there-tab" tab
|
|
135
|
-
|
|
136
|
-
@i5 @decoding-test @object-multiselect
|
|
137
|
-
Scenario: Base64 encoded corner cases are decoded correctly
|
|
138
|
-
Given I start the interview at "test_decoding"
|
|
139
|
-
And I get to "end screen" with this data:
|
|
140
|
-
| var | value | trigger |
|
|
141
|
-
| object_multiselect_test['obj_opt_1'] | True | |
|
|
142
|
-
| object_multiselect_test['obj_opt_3'] | True | |
|
|
143
|
-
| multiselect_test['hi'] | True | |
|
|
144
|
-
| multiselect_test['dear'] | True | |
|
|
145
|
-
| object_radio_field | object_radio_choice_one | |
|
|
146
|
-
| object_checkboxes_test['obj_chkbx_opt_1'] | True | |
|
|
147
|
-
| object_dropdown | obj_opt_2 | |
|
|
148
|
-
| checkbox_dict['single_quote_key']['๐ณ๐งด๐ฏ๐ฅซ๐
๐๐น๐ท๐ฒ๐ฏต'] | True | |
|
|
149
|
-
|
|
150
|
-
# This test should fail because it's target id is never found, but that also means
|
|
151
|
-
# it has succeeded because it didn't try to keep looking for the id by pressing 'restart'
|
|
152
|
-
# to continue.
|
|
153
|
-
@fast @i6
|
|
154
|
-
Scenario: Fails as it doesn't try to 'continue' with a restart button
|
|
155
|
-
Given the final Scenario status should be "failed"
|
|
156
|
-
And the Scenario report should include:
|
|
157
|
-
"""
|
|
158
|
-
The test got stuck on "kickout-screen"
|
|
159
|
-
"""
|
|
160
|
-
Given the max seconds for each step in this scenario is 10
|
|
161
|
-
Given I start the interview at "test_kickout"
|
|
162
|
-
And I get to "doesnt exist" with this data:
|
|
163
|
-
| var | value | trigger |
|
|
164
|
-
| user_choice | wrong | |
|
|
165
|
-
|
|
166
|
-
|