@suffolklitlab/alkiln 5.0.2-feat-github-server-4 → 5.0.2-feat-github-server-6
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/github_server.yml +1 -1
- package/action.yml +26 -26
- package/docassemble/ALKiln/__init__.py +1 -0
- package/docassemble/ALKiln/data/questions/AL_tests.yml +40 -0
- package/docassemble/ALKiln/data/questions/all_tests.yml +312 -0
- package/docassemble/ALKiln/data/questions/test.yml +14 -0
- package/docassemble/ALKiln/data/questions/test_date_and_time.yml +34 -0
- package/docassemble/ALKiln/data/questions/test_decoding.yml +101 -0
- package/docassemble/ALKiln/data/questions/test_kickout.yml +37 -0
- package/docassemble/ALKiln/data/questions/test_languages.yml +26 -0
- package/docassemble/ALKiln/data/questions/test_longest_filepath.yml +19 -0
- package/docassemble/ALKiln/data/questions/test_loops.yml +66 -0
- package/docassemble/ALKiln/data/questions/test_missing_var_error_screen.yml +9 -0
- package/docassemble/ALKiln/data/questions/test_random_input.yml +83 -0
- package/docassemble/ALKiln/data/questions/test_secret_vars.yml +32 -0
- package/docassemble/ALKiln/data/questions/test_signature.yml +25 -0
- package/docassemble/ALKiln/data/questions/test_taps.yml +43 -0
- package/docassemble/ALKiln/data/questions/test_trigger.yml +25 -0
- package/docassemble/ALKiln/data/questions/url_args.yml +33 -0
- package/docassemble/ALKiln/data/sources/README.md +4 -0
- package/docassemble/ALKiln/data/sources/ar.xlsx +0 -0
- package/docassemble/ALKiln/data/sources/assembly_line.feature +43 -0
- package/docassemble/ALKiln/data/sources/es.xlsx +0 -0
- package/docassemble/ALKiln/data/sources/establishing_steps.feature +62 -0
- package/docassemble/ALKiln/data/sources/example_test.feature +11 -0
- package/docassemble/ALKiln/data/sources/filepaths.feature +9 -0
- package/docassemble/ALKiln/data/sources/interactive_steps.feature +172 -0
- package/docassemble/ALKiln/data/sources/languages.feature +36 -0
- package/docassemble/ALKiln/data/sources/observation_steps.feature +174 -0
- package/docassemble/ALKiln/data/sources/random_input.feature +36 -0
- package/docassemble/ALKiln/data/sources/reload.feature +155 -0
- package/docassemble/ALKiln/data/sources/reports.feature +574 -0
- package/docassemble/ALKiln/data/sources/some_png_1.png +0 -0
- package/docassemble/ALKiln/data/sources/some_png_2.png +0 -0
- package/docassemble/ALKiln/data/sources/story_table_formats.feature +125 -0
- package/docassemble/ALKiln/data/sources/story_tables.feature +139 -0
- package/docassemble/ALKiln/data/static/README.md +4 -0
- package/docassemble/ALKiln/data/static/styles.css +46 -0
- package/docassemble/ALKiln/data/templates/README.md +3 -0
- package/docassemble/ALKiln/data/templates/simple.pdf +0 -0
- package/lib/scope.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
@story_tables_formats @table
|
|
2
|
+
Feature: Supported story table formats
|
|
3
|
+
|
|
4
|
+
NOTE:
|
|
5
|
+
Unsupported formats:
|
|
6
|
+
- Format 1 and 2 tables (permanent) (see https://github.com/plocket/docassemble-cucumber/issues/264)
|
|
7
|
+
|
|
8
|
+
NOTE:
|
|
9
|
+
x[i].name.first is the string in the YAML for this variable name, and it's the info that will be in the DOM.
|
|
10
|
+
https://github.com/plocket/docassemble-ALAutomatedTestingTests/blob/ad1232049d7ca7a9b97b22f8ca3915dd3dae8114/docassemble/ALAutomatedTestingTests/data/questions/all_tests.yml#L80
|
|
11
|
+
|
|
12
|
+
NOTE:
|
|
13
|
+
The `trigger` column does not require a value. That way simple interviews
|
|
14
|
+
don't have to deal with it. They don't even need a trigger column (see tests below).
|
|
15
|
+
|
|
16
|
+
### Here for reference. See note above about formats 1 and 2 being unsupported
|
|
17
|
+
## TODO: Test og table with `trigger` col added?
|
|
18
|
+
#@fast @stf1
|
|
19
|
+
#Scenario: Table is format 1 (og three cols)
|
|
20
|
+
# Given I start the interview at "all_tests"
|
|
21
|
+
# And I get to "showifs" with this data:
|
|
22
|
+
# | var | choice | value |
|
|
23
|
+
# | checkboxes_other['checkbox_other_opt_1'] | | true |
|
|
24
|
+
# | checkboxes_yesno | True | true |
|
|
25
|
+
# | dropdown_test | | dropdown_opt_2 |
|
|
26
|
+
# | radio_other | | radio_other_opt_3 |
|
|
27
|
+
# | radio_yesno | False | true |
|
|
28
|
+
# | text_input | | Regular text input field value |
|
|
29
|
+
# | textarea | | Multiline text\narea value |
|
|
30
|
+
#
|
|
31
|
+
#@fast @stf2
|
|
32
|
+
#Scenario: Table is format 2 (no trigger column)
|
|
33
|
+
# Given I start the interview at "all_tests"
|
|
34
|
+
# And I get to "showifs" with this data:
|
|
35
|
+
# | var | value | checked |
|
|
36
|
+
# | checkboxes_other['checkbox_other_opt_2'] | true | |
|
|
37
|
+
# | checkboxes_yesno | True | true |
|
|
38
|
+
# | dropdown_test | dropdown_opt_2 | |
|
|
39
|
+
# | radio_other | radio_other_opt_3 | |
|
|
40
|
+
# | radio_yesno | False | false |
|
|
41
|
+
# | text_input | Regular text input field value | |
|
|
42
|
+
# | textarea | Multiline text\narea value | |
|
|
43
|
+
|
|
44
|
+
# TODO: Only go up to the x[i] pages
|
|
45
|
+
@slow @stf3
|
|
46
|
+
Scenario: Table has trigger column
|
|
47
|
+
Given I start the interview at "all_tests"
|
|
48
|
+
And I get to "showifs" with this data:
|
|
49
|
+
| var | value | trigger |
|
|
50
|
+
| double_quote_dict["double_quote_key"]['dq_two'] | true | |
|
|
51
|
+
| checkboxes_other['checkbox_other_opt_1'] | true | |
|
|
52
|
+
| checkboxes_other['checkbox_other_opt_2'] | true | |
|
|
53
|
+
| checkboxes_other['checkbox_other_opt_3'] | false | |
|
|
54
|
+
| checkboxes_yesno | True | |
|
|
55
|
+
| dropdown_test | dropdown_opt_2 | |
|
|
56
|
+
| radio_other | radio_other_opt_3 | |
|
|
57
|
+
| radio_yesno | False | |
|
|
58
|
+
| single_quote_dict['single_quote_key']['sq_two'] | true | |
|
|
59
|
+
| text_input | Regular text input field value | |
|
|
60
|
+
| textarea | Multiline text\narea value | |
|
|
61
|
+
|
|
62
|
+
# TODO: Only go up to the x[i] pages
|
|
63
|
+
@slow @stf4
|
|
64
|
+
Scenario: Table MISSING trigger column
|
|
65
|
+
Given I start the interview at "all_tests"
|
|
66
|
+
And I get to "showifs" with this data:
|
|
67
|
+
| var | value |
|
|
68
|
+
| double_quote_dict["double_quote_key"]['dq_two'] | true |
|
|
69
|
+
| checkboxes_other['checkbox_other_opt_2'] | true |
|
|
70
|
+
| checkboxes_yesno | True |
|
|
71
|
+
| dropdown_test | dropdown_opt_2 |
|
|
72
|
+
| radio_other | radio_other_opt_3 |
|
|
73
|
+
| radio_yesno | False |
|
|
74
|
+
| single_quote_dict['single_quote_key']['sq_two'] | true |
|
|
75
|
+
| text_input | Regular text input field value |
|
|
76
|
+
| textarea | Multiline text\narea value |
|
|
77
|
+
|
|
78
|
+
@fast @stf5
|
|
79
|
+
Scenario: Table has no header row, has trigger column
|
|
80
|
+
Given I start the interview at "all_tests"
|
|
81
|
+
And I get to "showifs" with this data:
|
|
82
|
+
| double_quote_dict["double_quote_key"]['dq_two'] | true | |
|
|
83
|
+
| checkboxes_other['checkbox_other_opt_1'] | true | |
|
|
84
|
+
| checkboxes_other['checkbox_other_opt_2'] | true | |
|
|
85
|
+
| checkboxes_other['checkbox_other_opt_3'] | false | |
|
|
86
|
+
| checkboxes_yesno | True | |
|
|
87
|
+
| dropdown_test | dropdown_opt_2 | |
|
|
88
|
+
| radio_other | radio_other_opt_3 | |
|
|
89
|
+
| radio_yesno | False | |
|
|
90
|
+
| single_quote_dict['single_quote_key']['sq_two'] | true | |
|
|
91
|
+
| text_input | Regular text input field value | |
|
|
92
|
+
| textarea | Multiline text\narea value | |
|
|
93
|
+
|
|
94
|
+
@fast @stf6
|
|
95
|
+
Scenario: Table has no header row, MISSING trigger column
|
|
96
|
+
Given I start the interview at "all_tests"
|
|
97
|
+
And I get to "showifs" with this data:
|
|
98
|
+
| double_quote_dict["double_quote_key"]['dq_two'] | true |
|
|
99
|
+
| checkboxes_other['checkbox_other_opt_2'] | true |
|
|
100
|
+
| checkboxes_yesno | True |
|
|
101
|
+
| dropdown_test | dropdown_opt_2 |
|
|
102
|
+
| radio_other | radio_other_opt_3 |
|
|
103
|
+
| radio_yesno | False |
|
|
104
|
+
| single_quote_dict['single_quote_key']['sq_two'] | true |
|
|
105
|
+
| text_input | Regular text input field value |
|
|
106
|
+
| textarea | Multiline text\narea value |
|
|
107
|
+
|
|
108
|
+
@fast @stf7
|
|
109
|
+
Scenario: Fails when table has no header row and rows have only one column
|
|
110
|
+
Given the final Scenario status should be "failed"
|
|
111
|
+
And the Scenario report should include:
|
|
112
|
+
"""
|
|
113
|
+
Your Story Table definition needs to be changed.
|
|
114
|
+
"""
|
|
115
|
+
Given I start the interview at "all_tests"
|
|
116
|
+
And I get to "showifs" with this data:
|
|
117
|
+
| double_quote_dict["double_quote_key"]['dq_two'] |
|
|
118
|
+
| checkboxes_other['checkbox_other_opt_2'] |
|
|
119
|
+
| checkboxes_yesno |
|
|
120
|
+
| dropdown_test |
|
|
121
|
+
| radio_other |
|
|
122
|
+
| radio_yesno |
|
|
123
|
+
| single_quote_dict['single_quote_key']['sq_two'] |
|
|
124
|
+
| text_input |
|
|
125
|
+
| textarea |
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
@story_tables @table
|
|
2
|
+
Feature: Story tables
|
|
3
|
+
|
|
4
|
+
NOTE:
|
|
5
|
+
Unit tests make sure that all things that are supposed to match do match.
|
|
6
|
+
|
|
7
|
+
@fast @st1 @mixed
|
|
8
|
+
Scenario: Proxy and regular vars are mixed
|
|
9
|
+
Given I start the interview at "AL_tests"
|
|
10
|
+
And I get to "end" with this data:
|
|
11
|
+
| var | value | trigger |
|
|
12
|
+
| users[0].name.first | Uli1 | users[0].name.first |
|
|
13
|
+
| users[0].name.last | User1 | users[0].name.first |
|
|
14
|
+
| users[0].address.address | 120 Tremont Street | users[0].name.first |
|
|
15
|
+
| users[0].address.unit | Unit 2 | users[0].name.first |
|
|
16
|
+
| users[0].address.city | Boston | users[0].name.first |
|
|
17
|
+
| users[0].address.state | MA | users[0].name.first |
|
|
18
|
+
| users[0].address.zip | 02108 | users[0].name.first |
|
|
19
|
+
| users[1].name.first | Uli2 | users[1].name.first |
|
|
20
|
+
| users[1].name.last | User2 | users[1].name.first |
|
|
21
|
+
| users[i].proxy_var | Index var value | users[1].name.first |
|
|
22
|
+
|
|
23
|
+
@slow @st2 @out_of_order
|
|
24
|
+
Scenario: Fields are listed out of order
|
|
25
|
+
|
|
26
|
+
Covers story table tests for:
|
|
27
|
+
- [x] Trigger action
|
|
28
|
+
- [x] Basic direct fields
|
|
29
|
+
- [x] Able to select first choice (not thorough)
|
|
30
|
+
- [x] Able to select second choice (not thorough)
|
|
31
|
+
- [x] Able to select third choice (not thorough)
|
|
32
|
+
- [x] Hidden fields
|
|
33
|
+
- [x] Nested hidden fields listed out of order
|
|
34
|
+
- [x] Continue button field listed before unrequired fields
|
|
35
|
+
|
|
36
|
+
Given I start the interview at "all_tests"
|
|
37
|
+
And I get to "the end" with this data:
|
|
38
|
+
| var | value | trigger |
|
|
39
|
+
| direct_showifs | True | |
|
|
40
|
+
| double_quote_dict["double_quote_key"]['dq_two'] | true | |
|
|
41
|
+
| button_continue | True | |
|
|
42
|
+
| buttons_other | button_2 | |
|
|
43
|
+
| buttons_yesnomaybe | True | |
|
|
44
|
+
| checkboxes_other['checkbox_other_opt_1'] | true | |
|
|
45
|
+
| checkboxes_other['checkbox_other_opt_2'] | true | |
|
|
46
|
+
| checkboxes_other['checkbox_other_opt_3'] | false | |
|
|
47
|
+
| checkboxes_yesno | True | |
|
|
48
|
+
| direct_standard_fields | True | |
|
|
49
|
+
| dropdown_test | dropdown_opt_2 | |
|
|
50
|
+
| object_checkboxes_test["obj_chkbx_opt_1"] | true | |
|
|
51
|
+
| object_dropdown | obj_opt_2 | |
|
|
52
|
+
| radio_other | radio_other_opt_3 | |
|
|
53
|
+
| radio_yesno | False | |
|
|
54
|
+
| screen_features | True | |
|
|
55
|
+
| showif_checkbox_yesno | False | |
|
|
56
|
+
| showif_checkboxes_other['showif_checkboxes_nota_1'] | false | |
|
|
57
|
+
| showif_checkboxes_other['showif_checkboxes_nota_2'] | true | |
|
|
58
|
+
| showif_checkboxes_other['showif_checkboxes_nota_3'] | false | |
|
|
59
|
+
| showif_dropdown | showif_dropdown_1 | |
|
|
60
|
+
| showif_radio_other | showif_radio_multi_2 | |
|
|
61
|
+
| showif_text_input | Show if text input value | |
|
|
62
|
+
| showif_textarea | Show if\nmultiline text\narea value | |
|
|
63
|
+
| showif_yesnoradio | True | |
|
|
64
|
+
| text_input | Regular text input field value | |
|
|
65
|
+
| textarea | Multiline text\narea value | |
|
|
66
|
+
| show_3 | True | |
|
|
67
|
+
| show_2 | True | |
|
|
68
|
+
| signature_1 | | |
|
|
69
|
+
| signature_2 | | |
|
|
70
|
+
| single_quote_dict['single_quote_key']['sq_two'] | true | |
|
|
71
|
+
| single_dropdown_field | email | |
|
|
72
|
+
| x[i].name.first | Proxyname1 | proxy_list[0].name.first |
|
|
73
|
+
| x[i].name.first | Proxyname2 | proxy_list[1].name.first |
|
|
74
|
+
| x.target_number | 2 | proxy_list.target_number |
|
|
75
|
+
|
|
76
|
+
@fast @st3 @quotes
|
|
77
|
+
Scenario: Story table accidentally uses the opposite double or single quotes
|
|
78
|
+
Given I start the interview at "all_tests"
|
|
79
|
+
And I get to "direct standard fields" with this data:
|
|
80
|
+
| var | value | trigger |
|
|
81
|
+
| double_quote_dict['double_quote_key']["dq_two"] | true | |
|
|
82
|
+
| single_quote_dict["single_quote_key"]['sq_two'] | true | |
|
|
83
|
+
|
|
84
|
+
@fast @st4 @upload
|
|
85
|
+
Scenario: I upload files with a table
|
|
86
|
+
Given I start the interview at "all_tests"
|
|
87
|
+
And I get to "group of complex fields" with this data:
|
|
88
|
+
| var | value | trigger |
|
|
89
|
+
| upload_files_visible | some_png_1.png, some_png_2.png | |
|
|
90
|
+
| show_upload | True | |
|
|
91
|
+
| upload_files_hidden | some_png_2.png | |
|
|
92
|
+
|
|
93
|
+
@slow @st5 @loops
|
|
94
|
+
Scenario: 0 target_number for there_are_any and target_number lists, 1 for there_is_another
|
|
95
|
+
Given I start the interview at "test_loops.yml"
|
|
96
|
+
And I get to "end" with this data:
|
|
97
|
+
| var | value | trigger |
|
|
98
|
+
| x.target_number | 0 | there_are_any_people.target_number |
|
|
99
|
+
| x.target_number | 1 | there_is_another_people.target_number |
|
|
100
|
+
| x[i].name.first | AnotherPerson1 | there_is_another_people[0].name.first |
|
|
101
|
+
| target_people.target_number | 0 | |
|
|
102
|
+
And I SHOULD see the phrase "there_are_any_people people: 0"
|
|
103
|
+
And I SHOULD see the phrase "there_is_another_people people: 1"
|
|
104
|
+
And I SHOULD see the phrase "target_people people: 0"
|
|
105
|
+
|
|
106
|
+
@slow @st6 @loops
|
|
107
|
+
Scenario: target_number 2 for there_are_any, there_is_another, and target_number lists
|
|
108
|
+
Given I start the interview at "test_loops.yml"
|
|
109
|
+
And I take a screenshot
|
|
110
|
+
And I get to "end" with this data:
|
|
111
|
+
| var | value | trigger |
|
|
112
|
+
| x.target_number | 2 | there_are_any_people.target_number |
|
|
113
|
+
| x[i].name.first | AnyPerson1 | there_are_any_people[0].name.first |
|
|
114
|
+
| x[i].name.first | AnyPerson2 | there_are_any_people[1].name.first |
|
|
115
|
+
| x.target_number | 2 | there_is_another_people.target_number |
|
|
116
|
+
| x[i].name.first | AnotherPerson1 | there_is_another_people[0].name.first |
|
|
117
|
+
| x[i].name.first | AnotherPerson2 | there_is_another_people[1].name.first |
|
|
118
|
+
| target_people.target_number | 2 | |
|
|
119
|
+
| x[i].name.first | TargetPerson1 | target_people[0].name.first |
|
|
120
|
+
| x[i].name.first | TargetPerson2 | target_people[1].name.first |
|
|
121
|
+
And I SHOULD see the phrase "there_are_any_people people: 2"
|
|
122
|
+
And I SHOULD see the phrase "there_is_another_people people: 2"
|
|
123
|
+
And I SHOULD see the phrase "target_people people: 2"
|
|
124
|
+
|
|
125
|
+
@slow @st7 @loops
|
|
126
|
+
Scenario: target_number 1 for all people lists
|
|
127
|
+
Given I start the interview at "test_loops.yml"
|
|
128
|
+
And I take a screenshot
|
|
129
|
+
And I get to "end" with this data:
|
|
130
|
+
| var | value | trigger |
|
|
131
|
+
| x.target_number | 1 | there_are_any_people.target_number |
|
|
132
|
+
| x[i].name.first | AnyPerson1 | there_are_any_people[0].name.first |
|
|
133
|
+
| x.target_number | 1 | there_is_another_people.target_number |
|
|
134
|
+
| x[i].name.first | AnotherPerson1 | there_is_another_people[0].name.first |
|
|
135
|
+
| target_people.target_number | 1 | |
|
|
136
|
+
| x[i].name.first | TargetPerson1 | target_people[0].name.first |
|
|
137
|
+
And I SHOULD see the phrase "there_are_any_people people: 1"
|
|
138
|
+
And I SHOULD see the phrase "there_is_another_people people: 1"
|
|
139
|
+
And I SHOULD see the phrase "target_people people: 1"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
body {
|
|
2
|
+
font-family: Helvetica;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/* https://www.cssportal.com/blog/numbered-lists-with-css/ */
|
|
6
|
+
/* Will work with 2-digit numbers */
|
|
7
|
+
ol {
|
|
8
|
+
list-style:none;
|
|
9
|
+
counter-reset:mycounter;
|
|
10
|
+
padding:0;
|
|
11
|
+
}
|
|
12
|
+
ol li {
|
|
13
|
+
position:relative;
|
|
14
|
+
margin-left: 2em;
|
|
15
|
+
}
|
|
16
|
+
ol li:before {
|
|
17
|
+
content: counter(mycounter);
|
|
18
|
+
counter-increment: mycounter;
|
|
19
|
+
position: absolute;
|
|
20
|
+
left: -2em;
|
|
21
|
+
width: 1.5em;
|
|
22
|
+
height: 1.3em;
|
|
23
|
+
line-height: 1.3em;
|
|
24
|
+
border-radius: 2px;
|
|
25
|
+
color: #212529;
|
|
26
|
+
background: white;
|
|
27
|
+
text-align: center;
|
|
28
|
+
border: 1px solid #212529;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
ul {
|
|
32
|
+
padding-inline-start: 1em;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.daterm, .daterm:hover {
|
|
36
|
+
text-decoration: underline dashed;
|
|
37
|
+
text-underline-offset: 2px;
|
|
38
|
+
/* Increases the contrast so it doesn't fail. */
|
|
39
|
+
color: #3b842c;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.da-review ul {
|
|
43
|
+
list-style: none;
|
|
44
|
+
padding: .5em;
|
|
45
|
+
border: 4px solid #55555555;
|
|
46
|
+
}
|
|
Binary file
|
package/lib/scope.js
CHANGED
|
@@ -756,6 +756,7 @@ module.exports = {
|
|
|
756
756
|
|
|
757
757
|
if ( !scope.page ) { scope.page = await scope.browser.newPage(); }
|
|
758
758
|
|
|
759
|
+
interview_url = `http://localhost/interview?new_session=1&i=docassemble.ALKilnTests%3Adata/questions/AL_tests.yml`
|
|
759
760
|
console.log(`interview_url:`, interview_url);
|
|
760
761
|
|
|
761
762
|
// TODO: implement and use scope.handle_possible_timeout()
|
package/package.json
CHANGED