wagn 1.20.1 → 1.20.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/features/pointer_inputs.feature +4 -4
- data/features/step_definitions/wagn_steps.rb +52 -4
- data/features/step_definitions/web_steps.rb +0 -22
- data/features/support/env.rb +45 -0
- data/lib/wagn/commands/command.rb +11 -0
- data/lib/wagn/commands/cucumber_command.rb +13 -4
- data/lib/wagn/commands/cucumber_command/parser.rb +33 -0
- data/lib/wagn/commands/rspec_command.rb +2 -14
- data/lib/wagn/commands/rspec_command/parser.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aacbd8d9020a2bbde198f363933365b287b919e0
|
4
|
+
data.tar.gz: c99bec35184f50ca1e3bb10326b325693d909518
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 278a1e0e50eab3b2b77a89cd5f99455cc39e3cb3613a2ddc81f451237a4d334f54b93f0d75502a62af84e231fa7e0086c0192acad36d361a6368e5b067283c45
|
7
|
+
data.tar.gz: 1a5166f2a1afe02442e37e40bdb70cfec3895911521dd6389488fbac3561eeff1bf027e7f825138f7202e48b648250db9e9c0fc7dc52ba5257466a68f00cf636
|
@@ -12,7 +12,7 @@ Feature: Pointer Inputs
|
|
12
12
|
Scenario: Creating a card with select input
|
13
13
|
Given I create Phrase card "friends+*right+*input" with content "select"
|
14
14
|
When I go to card "Joe User+friends"
|
15
|
-
And I select "Joe Camel" from "
|
15
|
+
And I select "Joe Camel" from "Content"
|
16
16
|
And I press "Submit"
|
17
17
|
And I go to card "Joe User+friends"
|
18
18
|
Then I should see "Joe Camel"
|
@@ -21,7 +21,7 @@ Feature: Pointer Inputs
|
|
21
21
|
Given I create Phrase card "User+*type+*structure" with content "{{+friends}}"
|
22
22
|
And I create Phrase card "friends+*right+*input" with content "select"
|
23
23
|
When I edit "Joe User"
|
24
|
-
And I select "Joe Admin" from "
|
24
|
+
And I select "Joe Admin" from "+friends"
|
25
25
|
And I press "Submit"
|
26
26
|
And I go to card "Joe User"
|
27
27
|
Then I should see "Joe Admin"
|
@@ -29,7 +29,7 @@ Feature: Pointer Inputs
|
|
29
29
|
Scenario: Creating a card with multiselect input
|
30
30
|
Given I create Phrase card "friends+*right+*input" with content "multiselect"
|
31
31
|
When I go to card "Joe User+friends"
|
32
|
-
And I select "Joe Camel" from "
|
32
|
+
And I select "Joe Camel" from "Content"
|
33
33
|
And I press "Submit"
|
34
34
|
And I go to card "Joe User+friends"
|
35
35
|
Then I should see "Joe Camel"
|
@@ -38,7 +38,7 @@ Feature: Pointer Inputs
|
|
38
38
|
Given I create Phrase card "User+*type+*structure" with content "{{+friends}}"
|
39
39
|
And I create Phrase card "friends+*right+*input" with content "multiselect"
|
40
40
|
When I edit "Joe User"
|
41
|
-
And I select "Joe Admin" from "
|
41
|
+
And I select "Joe Admin" from "friends"
|
42
42
|
And I press "Submit"
|
43
43
|
And I go to card "Joe User"
|
44
44
|
And I should see "Joe Admin"
|
@@ -91,7 +91,7 @@ When /^(.*) edits? "([^\"]*)" with plusses:/ do |username, cardname, plusses|
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def set_content name, content,
|
94
|
+
def set_content name, content, _cardtype=nil
|
95
95
|
Capybara.ignore_hidden_elements = false
|
96
96
|
ace_editors = all(".ace-editor-textarea[name='#{name}']")
|
97
97
|
pm_editors = all(".prosemirror-editor > [name='#{name}']")
|
@@ -103,7 +103,7 @@ def set_content name, content, cardtype=nil
|
|
103
103
|
editor_id = pm_editors.first.first(:xpath, ".//..")[:id]
|
104
104
|
set_prosemirror_content editor_id, content
|
105
105
|
else
|
106
|
-
#rescue Selenium::WebDriver::Error::JavascriptError
|
106
|
+
# rescue Selenium::WebDriver::Error::JavascriptError
|
107
107
|
fill_in(name, with: content)
|
108
108
|
end
|
109
109
|
Capybara.ignore_hidden_elements = true
|
@@ -188,8 +188,9 @@ end
|
|
188
188
|
# end
|
189
189
|
#
|
190
190
|
Then /debug/ do
|
191
|
-
require
|
192
|
-
binding.pry
|
191
|
+
require "pry"
|
192
|
+
binding.pry #
|
193
|
+
nil
|
193
194
|
end
|
194
195
|
# if RUBY_VERSION =~ /^2/
|
195
196
|
# else
|
@@ -409,3 +410,50 @@ end
|
|
409
410
|
When /^I fill in "([^\"]*)" with$/ do |field, value|
|
410
411
|
fill_in(field, with: value)
|
411
412
|
end
|
413
|
+
|
414
|
+
module Capybara
|
415
|
+
module Node
|
416
|
+
module Actions
|
417
|
+
alias_method :original_fill_in, :fill_in
|
418
|
+
alias_method :original_select, :select
|
419
|
+
|
420
|
+
def fill_in locator, options={}
|
421
|
+
wagn_fill_in(locator, options) || original_fill_in(locator, options)
|
422
|
+
end
|
423
|
+
|
424
|
+
def select value, options={}
|
425
|
+
wagn_select(value, options) || original_select(value, options)
|
426
|
+
end
|
427
|
+
|
428
|
+
def wagn_fill_in locator, options
|
429
|
+
el = labeled_field(:input, locator) || labeled_field(:textarea, locator)
|
430
|
+
return unless el
|
431
|
+
el.set options[:with]
|
432
|
+
true
|
433
|
+
end
|
434
|
+
|
435
|
+
def wagn_select value, options
|
436
|
+
el = labeled_field :select, options[:from], visible: false
|
437
|
+
return unless el
|
438
|
+
value = el.find("option", text: value, visible: false)["value"]
|
439
|
+
choose_value el, value
|
440
|
+
true
|
441
|
+
end
|
442
|
+
|
443
|
+
def choose_value el, value
|
444
|
+
id = el["id"]
|
445
|
+
session.execute_script("$('##{id}').val('#{value}')")
|
446
|
+
# session.execute_script("$('##{id}').trigger('chosen:updated')")
|
447
|
+
# session.execute_script("$('##{id}').change()")
|
448
|
+
end
|
449
|
+
|
450
|
+
def labeled_field type, label, options={}
|
451
|
+
label.gsub!(/^\+/, "") # because '+' is in an extra span,
|
452
|
+
# descendant-or-self::text doesn't find it
|
453
|
+
first :xpath,
|
454
|
+
"//label[descendant-or-self::text()='#{label}']/..//#{type}",
|
455
|
+
options.merge(wait: 5)
|
456
|
+
end
|
457
|
+
end
|
458
|
+
end
|
459
|
+
end
|
@@ -55,28 +55,6 @@ When /^(?:|I )submit form$/ do
|
|
55
55
|
find(:css, "button[type='submit']").click
|
56
56
|
end
|
57
57
|
|
58
|
-
When /^(?:|I )single-select "([^"]*)" from "([^"]*)"$/ do |value, field|
|
59
|
-
select =
|
60
|
-
find("label", text: field).find(:xpath, "..//select", visible: false)
|
61
|
-
value = select.find("option", text: value, visible: false)["value"]
|
62
|
-
page.execute_script("$('##{select['id']}').val('#{value}')")
|
63
|
-
page.execute_script("$('##{select['id']}').trigger('chosen:updated')")
|
64
|
-
page.execute_script("$('##{select['id']}').change()")
|
65
|
-
|
66
|
-
# code below doesn't work on wikirate because if you select an item in
|
67
|
-
# a very long list the list gets pushed below the navigation bar
|
68
|
-
# find("label", text: field).find(:xpath, "..//a[@class='chosen-single']")
|
69
|
-
# .click
|
70
|
-
# li = find("li", text: value, visible: false)
|
71
|
-
# li.click
|
72
|
-
# # If the list element is too far down the list then the first click
|
73
|
-
# # scrolls it up but doesn't select it. It needs another click.
|
74
|
-
# # A selected item is no longer visible (because the list disappears)
|
75
|
-
# if li.visible?
|
76
|
-
# li.click
|
77
|
-
# end
|
78
|
-
end
|
79
|
-
|
80
58
|
# Use this step in conjunction with Rail's datetime_select helper. For example:
|
81
59
|
# When I select "December 25, 2008 10:00" as the date and time
|
82
60
|
When /^(?:|I )select "([^"]*)" as the date and time$/ do |time|
|
data/features/support/env.rb
CHANGED
@@ -83,3 +83,48 @@ ActionController::Base.allow_rescue = false
|
|
83
83
|
# The :transaction strategy is faster, but might give you threading problems.
|
84
84
|
# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature
|
85
85
|
Cucumber::Rails::Database.javascript_strategy = :truncation
|
86
|
+
|
87
|
+
# `LAUNCHY=1 cucumber` to open page on failure
|
88
|
+
After do |scenario|
|
89
|
+
save_and_open_page if scenario.failed? && ENV["LAUNCHY"]
|
90
|
+
end
|
91
|
+
|
92
|
+
# `FAST=1 cucumber` to stop on first failure
|
93
|
+
After do |scenario|
|
94
|
+
Cucumber.wants_to_quit = ENV["FAST"] && scenario.failed?
|
95
|
+
end
|
96
|
+
|
97
|
+
# `DEBUG=1 cucumber` to drop into debugger on failure
|
98
|
+
After do |scenario|
|
99
|
+
next unless ENV["DEBUG"] && scenario.failed?
|
100
|
+
puts "Debugging scenario: #{scenario.name}"
|
101
|
+
if respond_to? :debugger
|
102
|
+
debugger
|
103
|
+
elsif binding.respond_to? :pry
|
104
|
+
binding.pry #
|
105
|
+
else
|
106
|
+
puts "Can't find debugger or pry to debug"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# `STEP=1 cucumber` to pause after each step
|
111
|
+
AfterStep do |result, step|
|
112
|
+
next unless ENV["STEP"]
|
113
|
+
unless defined?(@counter)
|
114
|
+
#puts "Stepping through #{scenario.name}"
|
115
|
+
@counter = 0
|
116
|
+
end
|
117
|
+
@counter += 1
|
118
|
+
#print "At step ##{@counter} of #{scenario.steps.count}. Press Return to"\
|
119
|
+
# " execute..."
|
120
|
+
print "Press Return to execute next step...\n"\
|
121
|
+
"(d=debug, c=continue, s=step, a=abort)"
|
122
|
+
case STDIN.getch
|
123
|
+
when "d" then
|
124
|
+
binding.pry #
|
125
|
+
when "c" then
|
126
|
+
ENV.delete "STEP"
|
127
|
+
when "a" then
|
128
|
+
Cucumber.wants_to_quit = true
|
129
|
+
end
|
130
|
+
end
|
@@ -10,6 +10,17 @@ module Wagn
|
|
10
10
|
command += " 2>&1"
|
11
11
|
exit $CHILD_STATUS.exitstatus unless system command
|
12
12
|
end
|
13
|
+
|
14
|
+
# split special wagn args and original command args separated by '--'
|
15
|
+
def split_args args
|
16
|
+
before_split = true
|
17
|
+
wagn_args, command_args =
|
18
|
+
args.partition do |a|
|
19
|
+
before_split = (a == "--" ? false : before_split)
|
20
|
+
end
|
21
|
+
command_args.shift
|
22
|
+
[wagn_args, command_args]
|
23
|
+
end
|
13
24
|
end
|
14
25
|
end
|
15
26
|
end
|
@@ -6,7 +6,9 @@ module Wagn
|
|
6
6
|
def initialize args
|
7
7
|
require "wagn"
|
8
8
|
require "./config/environment"
|
9
|
-
@
|
9
|
+
@wagn_args, @cucumber_args = split_args args
|
10
|
+
@opts = {}
|
11
|
+
Parser.new(@opts).parse!(@wagn_args)
|
10
12
|
end
|
11
13
|
|
12
14
|
def command
|
@@ -17,13 +19,18 @@ module Wagn
|
|
17
19
|
private
|
18
20
|
|
19
21
|
def env_args
|
20
|
-
env_args = "
|
21
|
-
|
22
|
+
env_args = @opts[:env].join " "
|
23
|
+
# turn coverage off if not all cukes run
|
24
|
+
env_args << " COVERAGE=false" if @cucumber_args.present?
|
22
25
|
env_args
|
23
26
|
end
|
24
27
|
|
25
28
|
def feature_args
|
26
|
-
@
|
29
|
+
if @cucumber_args.empty?
|
30
|
+
feature_paths.join(" ")
|
31
|
+
else
|
32
|
+
@cucumber_args.shelljoin
|
33
|
+
end
|
27
34
|
end
|
28
35
|
|
29
36
|
def require_args
|
@@ -39,3 +46,5 @@ module Wagn
|
|
39
46
|
end
|
40
47
|
end
|
41
48
|
end
|
49
|
+
|
50
|
+
require File.expand_path("../cucumber_command/parser", __FILE__)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require "optparse"
|
3
|
+
|
4
|
+
module Wagn
|
5
|
+
module Commands
|
6
|
+
class CucumberCommand
|
7
|
+
class Parser < OptionParser
|
8
|
+
def initialize opts
|
9
|
+
super() do |parser|
|
10
|
+
parser.banner = "Usage: wagn cucumber [WAGN ARGS] -- [CUCUMBER ARGS]\n\n"
|
11
|
+
parser.separator <<-EOT.strip_heredoc
|
12
|
+
|
13
|
+
WAGN ARGS
|
14
|
+
EOT
|
15
|
+
opts[:env] = ["RAILS_ROOT=."]
|
16
|
+
parser.on("-d", "--debug", "Drop into debugger on failure") do |a|
|
17
|
+
opts[:env] << "DEBUG=1" if a
|
18
|
+
end
|
19
|
+
parser.on("-f", "--fast", "Stop on first failure") do |a|
|
20
|
+
opts[:env] << "FAST=1" if a
|
21
|
+
end
|
22
|
+
parser.on("-l", "--launchy", "Open page on failure") do |a|
|
23
|
+
opts[:env] << "LAUNCHY=1" if a
|
24
|
+
end
|
25
|
+
parser.on("-s", "--step", "Pause after each step") do |a|
|
26
|
+
opts[:env] << "STEP=1" if a
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -7,7 +7,7 @@ module Wagn
|
|
7
7
|
require "rspec/core"
|
8
8
|
require "wagn/application"
|
9
9
|
|
10
|
-
@wagn_args, @rspec_args =
|
10
|
+
@wagn_args, @rspec_args = split_args args
|
11
11
|
@opts = {}
|
12
12
|
Parser.new(@opts).parse!(@wagn_args)
|
13
13
|
end
|
@@ -31,20 +31,8 @@ module Wagn
|
|
31
31
|
end
|
32
32
|
@opts[:simplecov]
|
33
33
|
end
|
34
|
-
|
35
|
-
def split_wagn_and_rspec_args args
|
36
|
-
before_split = true
|
37
|
-
wagn, rspec =
|
38
|
-
args.partition do |a|
|
39
|
-
before_split = (a == "--" ? false : before_split)
|
40
|
-
end
|
41
|
-
rspec.shift
|
42
|
-
[wagn, rspec]
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
34
|
end
|
47
35
|
end
|
48
36
|
end
|
49
37
|
|
50
|
-
require File.expand_path("../rspec_command/parser", __FILE__)
|
38
|
+
require File.expand_path("../rspec_command/parser", __FILE__)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wagn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.20.
|
4
|
+
version: 1.20.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan McCutchen
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-
|
14
|
+
date: 2017-03-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
@@ -33,14 +33,14 @@ dependencies:
|
|
33
33
|
requirements:
|
34
34
|
- - '='
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 1.20.
|
36
|
+
version: 1.20.2
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - '='
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.20.
|
43
|
+
version: 1.20.2
|
44
44
|
description: a wiki approach to stuctured data, dynamic interaction, and web design
|
45
45
|
email:
|
46
46
|
- info@wagn.org
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- lib/wagn/commands/application.rb
|
115
115
|
- lib/wagn/commands/command.rb
|
116
116
|
- lib/wagn/commands/cucumber_command.rb
|
117
|
+
- lib/wagn/commands/cucumber_command/parser.rb
|
117
118
|
- lib/wagn/commands/rake_command.rb
|
118
119
|
- lib/wagn/commands/rake_command/parser.rb
|
119
120
|
- lib/wagn/commands/rspec_command.rb
|