spassky 0.1.34 → 0.1.35
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.
- data/features/run_html_tests.feature +10 -0
- data/lib/spassky/client/test_runner.rb +6 -1
- data/lib/spassky/device_test_status.rb +20 -0
- data/lib/spassky/server/app.rb +4 -3
- data/lib/spassky/server/device_database.rb +11 -3
- data/lib/spassky/server/html_test.rb +18 -8
- data/lib/spassky/server/test_run.rb +3 -1
- data/lib/spassky/test_result.rb +12 -26
- data/lib/spassky/version.rb +1 -1
- data/spassky.gemspec +1 -0
- data/spec/factories.rb +12 -0
- data/spec/spassky/client/pusher_spec.rb +8 -5
- data/spec/spassky/client/test_runner_spec.rb +18 -2
- data/spec/spassky/server/app_spec.rb +6 -2
- data/spec/spassky/server/device_database_spec.rb +10 -1
- data/spec/spassky/server/test_run_spec.rb +14 -0
- data/spec/spassky/test_result_spec.rb +23 -21
- data/spec/spassky/test_result_summariser_spec.rb +12 -12
- data/spec/spec_helper.rb +2 -0
- metadata +42 -28
@@ -81,3 +81,13 @@ Feature: Run HTML Tests
|
|
81
81
|
FAIL failing.html on blackberry
|
82
82
|
"""
|
83
83
|
And the exit status should be 1
|
84
|
+
|
85
|
+
Scenario: Failing Test with Message
|
86
|
+
Given a connected mobile device "blackberry"
|
87
|
+
When I run "spassky run failing.html <host>" with the server host
|
88
|
+
Then the output should contain:
|
89
|
+
"""
|
90
|
+
FAIL failing.html on blackberry
|
91
|
+
this test should fail
|
92
|
+
"""
|
93
|
+
And the exit status should be 1
|
@@ -31,10 +31,15 @@ module Spassky::Client
|
|
31
31
|
|
32
32
|
def write_in_progress_status test_result
|
33
33
|
test_result.completed_since(@previous_test_result).each do |device_test_status|
|
34
|
-
|
34
|
+
write_completed_test_status device_test_status
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def write_completed_test_status device_test_status
|
39
|
+
write(device_test_status.status, "#{device_test_status.status.upcase} #{device_test_status.test_name} on #{device_test_status.device_id}")
|
40
|
+
write(device_test_status.status, device_test_status.message)
|
41
|
+
end
|
42
|
+
|
38
43
|
def write status, message
|
39
44
|
method = status == 'pass' ? :write_passing : :write_failing
|
40
45
|
@writer.send(method, message)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spassky
|
2
|
+
class DeviceTestStatus
|
3
|
+
attr_accessor :device_id, :test_name, :status, :message
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@device_id = options[:device_id]
|
7
|
+
@test_name = options[:test_name]
|
8
|
+
@status = options[:status]
|
9
|
+
@message = options[:message]
|
10
|
+
end
|
11
|
+
|
12
|
+
def in_progress?
|
13
|
+
@status == "in progress"
|
14
|
+
end
|
15
|
+
|
16
|
+
def completed?
|
17
|
+
@status != "in progress"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/spassky/server/app.rb
CHANGED
@@ -64,7 +64,8 @@ module Spassky::Server
|
|
64
64
|
get '/test_runs/:id/run/:random/assert' do
|
65
65
|
TestRun.find(params[:id]).save_result_for_device(
|
66
66
|
:device_identifier => get_device_identifier,
|
67
|
-
:status => params[:status]
|
67
|
+
:status => params[:status],
|
68
|
+
:message => params[:message]
|
68
69
|
)
|
69
70
|
end
|
70
71
|
|
@@ -90,8 +91,8 @@ module Spassky::Server
|
|
90
91
|
|
91
92
|
def idle_page
|
92
93
|
"<html><head><meta http-equiv=\"refresh\" content=\"1; url='#{idle_url}'\"></head>" +
|
93
|
-
|
94
|
-
|
94
|
+
"<body>Idle #{RandomStringGenerator.random_string}</body>" +
|
95
|
+
"</html>"
|
95
96
|
end
|
96
97
|
end
|
97
98
|
end
|
@@ -28,9 +28,17 @@ module Spassky::Server
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def device_identifier user_agent
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
@stored_device_identifiers ||= {}
|
32
|
+
|
33
|
+
unless @stored_device_identifiers[user_agent]
|
34
|
+
device = @wurfl[user_agent]
|
35
|
+
if device.nil?
|
36
|
+
@stored_device_identifiers[user_agent] = user_agent
|
37
|
+
else
|
38
|
+
@stored_device_identifiers[user_agent] = "#{device.model_name} (id = #{device.id}, mobile_browser = #{device.mobile_browser}, device_os_version = #{device.device_os_version})"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
@stored_device_identifiers[user_agent]
|
34
42
|
end
|
35
43
|
|
36
44
|
def device user_agent
|
@@ -2,26 +2,36 @@ module Spassky::Server
|
|
2
2
|
class HtmlTest
|
3
3
|
def initialize(contents, url, seconds)
|
4
4
|
@contents = contents
|
5
|
-
@
|
5
|
+
@url = url
|
6
|
+
@seconds = seconds
|
6
7
|
end
|
7
8
|
|
8
9
|
def get_file(name)
|
9
10
|
file_contents = @contents[name]
|
10
|
-
|
11
|
-
|
12
|
-
file_contents = @contents[html_file]
|
11
|
+
if file_contents.nil?
|
12
|
+
file_contents = get_test_file_contents
|
13
13
|
end
|
14
|
-
file_contents
|
14
|
+
add_helpers_to_html file_contents
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
def
|
20
|
-
|
19
|
+
def get_test_file_contents
|
20
|
+
html_file = @contents.keys.find {|key| key.end_with?(".html")}
|
21
|
+
file_contents = @contents[html_file]
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_helpers_to_html html
|
25
|
+
html.gsub('</head>', assert_js_script + meta_refresh_tag + '</head>')
|
21
26
|
end
|
22
27
|
|
23
28
|
def assert_js_script
|
24
|
-
File.read(File.join(File.dirname(__FILE__), 'assert.js'))
|
29
|
+
assert_js = File.read(File.join(File.dirname(__FILE__), 'assert.js'))
|
30
|
+
"<script type=\"text/javascript\">#{assert_js}</script>"
|
31
|
+
end
|
32
|
+
|
33
|
+
def meta_refresh_tag
|
34
|
+
"<meta http-equiv=\"refresh\" content=\"#{@seconds}; url='#{@url}'\">"
|
25
35
|
end
|
26
36
|
end
|
27
37
|
end
|
@@ -8,6 +8,7 @@ module Spassky::Server
|
|
8
8
|
@name = options[:name]
|
9
9
|
@contents = options[:contents]
|
10
10
|
@status_by_device_id = {}
|
11
|
+
@message_by_device_id = {}
|
11
12
|
(options[:devices] || []).each do |device|
|
12
13
|
@status_by_device_id[device] = "in progress"
|
13
14
|
end
|
@@ -22,6 +23,7 @@ module Spassky::Server
|
|
22
23
|
raise "#{options[:status]} is not a valid status"
|
23
24
|
end
|
24
25
|
@status_by_device_id[options[:device_identifier]] = options[:status]
|
26
|
+
@message_by_device_id[options[:device_identifier]] = options[:message]
|
25
27
|
end
|
26
28
|
|
27
29
|
def update_connected_devices(device_ids)
|
@@ -34,7 +36,7 @@ module Spassky::Server
|
|
34
36
|
|
35
37
|
def result
|
36
38
|
Spassky::TestResult.new(@status_by_device_id.map { |device_id, status|
|
37
|
-
Spassky::DeviceTestStatus.new(device_id, status, name)
|
39
|
+
Spassky::DeviceTestStatus.new(:device_id => device_id, :status => status, :message => @message_by_device_id[device_id], :test_name => @name)
|
38
40
|
})
|
39
41
|
end
|
40
42
|
|
data/lib/spassky/test_result.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spassky/test_result_summariser'
|
2
|
+
require 'spassky/device_test_status'
|
2
3
|
require 'json'
|
3
4
|
|
4
5
|
module Spassky
|
@@ -24,7 +25,6 @@ module Spassky
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
|
-
|
28
28
|
def summary
|
29
29
|
TestResultSummariser.new(@device_statuses).summary
|
30
30
|
end
|
@@ -35,20 +35,24 @@ module Spassky
|
|
35
35
|
:device_statuses => @device_statuses.map do |status|
|
36
36
|
{
|
37
37
|
:device_id => status.device_id,
|
38
|
+
:test_name => status.test_name,
|
38
39
|
:status => status.status,
|
39
|
-
:
|
40
|
+
:message => status.message
|
40
41
|
}
|
41
42
|
end
|
42
43
|
}.to_json
|
43
44
|
end
|
44
45
|
|
45
46
|
def self.from_json json
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
device_test_statuses = JSON.parse(json)['device_statuses'].map do |device_test_status|
|
48
|
+
DeviceTestStatus.new({
|
49
|
+
:device_id => device_test_status["device_id"],
|
50
|
+
:test_name => device_test_status["test_name"],
|
51
|
+
:status => device_test_status["status"],
|
52
|
+
:message => device_test_status["message"]}
|
53
|
+
)
|
54
|
+
end
|
55
|
+
test_result = TestResult.new(device_test_statuses)
|
52
56
|
end
|
53
57
|
|
54
58
|
private
|
@@ -69,22 +73,4 @@ module Spassky
|
|
69
73
|
end
|
70
74
|
end
|
71
75
|
end
|
72
|
-
|
73
|
-
class DeviceTestStatus
|
74
|
-
attr_reader :device_id, :status, :test_name
|
75
|
-
|
76
|
-
def initialize(device_id, status, test_name)
|
77
|
-
@device_id = device_id
|
78
|
-
@status = status
|
79
|
-
@test_name = test_name
|
80
|
-
end
|
81
|
-
|
82
|
-
def in_progress?
|
83
|
-
@status == "in progress"
|
84
|
-
end
|
85
|
-
|
86
|
-
def completed?
|
87
|
-
@status != "in progress"
|
88
|
-
end
|
89
|
-
end
|
90
76
|
end
|
data/lib/spassky/version.rb
CHANGED
data/spassky.gemspec
CHANGED
data/spec/factories.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "spassky/device_test_status"
|
2
|
+
|
3
|
+
FactoryGirl.define do
|
4
|
+
factory :device_test_status, :class => Spassky::DeviceTestStatus do
|
5
|
+
sequence :device_id do |number|
|
6
|
+
"agent#{number}"
|
7
|
+
end
|
8
|
+
test_name "test"
|
9
|
+
status "pass"
|
10
|
+
message "test message"
|
11
|
+
end
|
12
|
+
end
|
@@ -15,15 +15,15 @@ module Spassky::Client
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def in_progress_status
|
18
|
-
Spassky::TestResult.new([
|
18
|
+
Spassky::TestResult.new([FactoryGirl.build(:device_test_status, :status => 'in progress')]).to_json
|
19
19
|
end
|
20
20
|
|
21
21
|
def passed_status
|
22
|
-
Spassky::TestResult.new([
|
22
|
+
Spassky::TestResult.new([FactoryGirl.build(:device_test_status)]).to_json
|
23
23
|
end
|
24
24
|
|
25
25
|
def failed_status
|
26
|
-
Spassky::TestResult.new([
|
26
|
+
Spassky::TestResult.new([FactoryGirl.build(:device_test_status, :status => 'fail')]).to_json
|
27
27
|
end
|
28
28
|
|
29
29
|
it "pushes a test to the server" do
|
@@ -65,12 +65,15 @@ module Spassky::Client
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "yields the outcome of the test to the block" do
|
68
|
-
|
68
|
+
in_progress_status1 = in_progress_status
|
69
|
+
in_progress_status2 = in_progress_status
|
70
|
+
passed_status1 = passed_status
|
71
|
+
RestClient.stub!(:get).and_return(in_progress_status1, in_progress_status2, passed_status1)
|
69
72
|
yielded_results = []
|
70
73
|
@pusher.push("test contents") do |result|
|
71
74
|
yielded_results << result.to_json
|
72
75
|
end
|
73
|
-
yielded_results.should == [
|
76
|
+
yielded_results.should == [in_progress_status1, in_progress_status2, passed_status1]
|
74
77
|
end
|
75
78
|
|
76
79
|
it "sleeps while looping during get requests" do
|
@@ -124,8 +124,8 @@ module Spassky::Client
|
|
124
124
|
@test_pusher.stub!(:push).and_yield(in_progress_one).and_yield(in_progress_two)
|
125
125
|
|
126
126
|
in_progress_two.stub!(:completed_since).with(in_progress_one).and_return([
|
127
|
-
mock(:status_one, :status => "pass", :device_id => "ipad", :test_name => "foo"),
|
128
|
-
mock(:status_one, :status => "fail", :device_id => "iphone", :test_name => "bar")
|
127
|
+
mock(:status_one, :status => "pass", :device_id => "ipad", :test_name => "foo", :message => "test_result"),
|
128
|
+
mock(:status_one, :status => "fail", :device_id => "iphone", :test_name => "bar", :message => "test_result")
|
129
129
|
])
|
130
130
|
|
131
131
|
@writer.should_receive(:write_passing).with("PASS foo on ipad").once
|
@@ -134,5 +134,21 @@ module Spassky::Client
|
|
134
134
|
@test_runner.run_tests("foo bar")
|
135
135
|
end
|
136
136
|
end
|
137
|
+
|
138
|
+
context "failed result yielded" do
|
139
|
+
it "writes out the test message" do
|
140
|
+
in_progress_one = new_in_progress_test_result
|
141
|
+
in_progress_two = new_in_progress_test_result
|
142
|
+
@test_pusher.stub!(:push).and_yield(in_progress_one).and_yield(in_progress_two)
|
143
|
+
|
144
|
+
in_progress_two.stub!(:completed_since).with(in_progress_one).and_return([
|
145
|
+
mock(:status_one, :status => "fail", :device_id => "iphone", :test_name => "bar", :message => "test result message")
|
146
|
+
])
|
147
|
+
|
148
|
+
@writer.should_receive(:write_failing).with("test result message").once
|
149
|
+
|
150
|
+
@test_runner.run_tests("foo bar")
|
151
|
+
end
|
152
|
+
end
|
137
153
|
end
|
138
154
|
end
|
@@ -83,8 +83,12 @@ module Spassky::Server
|
|
83
83
|
SingletonDeviceDatabase.stub!(:instance).and_return(@device_database)
|
84
84
|
test = mock(:test)
|
85
85
|
TestRun.stub!(:find).with('123').and_return(test)
|
86
|
-
test.should_receive(:save_result_for_device).with(
|
87
|
-
|
86
|
+
test.should_receive(:save_result_for_device).with(
|
87
|
+
:device_identifier => "the device identifier",
|
88
|
+
:status => "pass",
|
89
|
+
:message => "the_test_result_message"
|
90
|
+
)
|
91
|
+
get "/test_runs/123/run/random/assert?status=pass&message=the_test_result_message"
|
88
92
|
end
|
89
93
|
end
|
90
94
|
|
@@ -20,6 +20,7 @@ module Spassky::Server
|
|
20
20
|
FileUtils.should_receive(:mkdir_p).with(Spassky::Server::WURFL_DIRECTORY)
|
21
21
|
DeviceDatabase.new
|
22
22
|
end
|
23
|
+
|
23
24
|
it "loads up the wurfl database" do
|
24
25
|
wurfl = mock(:wurfl).as_null_object
|
25
26
|
WURFL.should_receive(:new).with(Spassky::Server::WURFL_FILE).and_return(wurfl)
|
@@ -43,6 +44,14 @@ module Spassky::Server
|
|
43
44
|
describe ".device_identifier" do
|
44
45
|
subject { DeviceDatabase.new }
|
45
46
|
|
47
|
+
it "only requests the device identifier once" do
|
48
|
+
wurfl = mock(:wurfl)
|
49
|
+
wurfl.should_receive(:[]).once
|
50
|
+
WURFL.should_receive(:new).and_return(wurfl)
|
51
|
+
subject.device_identifier("apples")
|
52
|
+
subject.device_identifier("apples")
|
53
|
+
end
|
54
|
+
|
46
55
|
context "existing device" do
|
47
56
|
it "returns the device identifier" do
|
48
57
|
device = mock(:device)
|
@@ -57,7 +66,7 @@ module Spassky::Server
|
|
57
66
|
end
|
58
67
|
end
|
59
68
|
|
60
|
-
context "device
|
69
|
+
context "device doesnt't exist in the database" do
|
61
70
|
it "returns user-agent" do
|
62
71
|
wurfl = mock(:wurfl)
|
63
72
|
wurfl.should_receive(:[]).and_return(nil)
|
@@ -94,5 +94,19 @@ module Spassky::Server
|
|
94
94
|
run.result.device_statuses.first.status.should == "pass"
|
95
95
|
run.result.device_statuses.last.status.should == "fail"
|
96
96
|
end
|
97
|
+
|
98
|
+
it "returns device test statuses" do
|
99
|
+
run = TestRun.create({:name => "test name"})
|
100
|
+
run.save_result_for_device(
|
101
|
+
:device_identifier => "device",
|
102
|
+
:status => "pass",
|
103
|
+
:message => "the status message"
|
104
|
+
)
|
105
|
+
device_status = run.result.device_statuses.first
|
106
|
+
device_status.device_id.should == "device"
|
107
|
+
device_status.test_name.should == "test name"
|
108
|
+
device_status.status.should == "pass"
|
109
|
+
device_status.message.should == "the status message"
|
110
|
+
end
|
97
111
|
end
|
98
112
|
end
|
@@ -20,8 +20,8 @@ module Spassky
|
|
20
20
|
context "when all devices pass" do
|
21
21
|
it "is a pass" do
|
22
22
|
TestResult.new([
|
23
|
-
|
24
|
-
|
23
|
+
FactoryGirl.build(:device_test_status),
|
24
|
+
FactoryGirl.build(:device_test_status)
|
25
25
|
]).status.should == "pass"
|
26
26
|
end
|
27
27
|
end
|
@@ -29,8 +29,8 @@ module Spassky
|
|
29
29
|
context "when any device fails" do
|
30
30
|
it "is a fail" do
|
31
31
|
TestResult.new([
|
32
|
-
|
33
|
-
|
32
|
+
FactoryGirl.build(:device_test_status),
|
33
|
+
FactoryGirl.build(:device_test_status, :status => 'fail')
|
34
34
|
]).status.should == "fail"
|
35
35
|
end
|
36
36
|
end
|
@@ -38,9 +38,9 @@ module Spassky
|
|
38
38
|
context "when any test is still in progress" do
|
39
39
|
it "is a fail" do
|
40
40
|
TestResult.new([
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
FactoryGirl.build(:device_test_status),
|
42
|
+
FactoryGirl.build(:device_test_status, :status => 'fail'),
|
43
|
+
FactoryGirl.build(:device_test_status, :status => 'in progress')
|
44
44
|
]).status.should == "in progress"
|
45
45
|
end
|
46
46
|
end
|
@@ -48,27 +48,29 @@ module Spassky
|
|
48
48
|
context "when 1 test times out" do
|
49
49
|
it "has the status 'timed out'" do
|
50
50
|
test_result = TestResult.new([
|
51
|
-
|
52
|
-
|
51
|
+
FactoryGirl.build(:device_test_status, :status => 'timed out'),
|
52
|
+
FactoryGirl.build(:device_test_status)
|
53
53
|
])
|
54
54
|
test_result.status.should == "timed out"
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
it "can be serialized and deserialized" do
|
59
|
-
|
59
|
+
device_test_statuses = [FactoryGirl.build(:device_test_status)]
|
60
|
+
test_result = TestResult.new(device_test_statuses)
|
60
61
|
json = test_result.to_json
|
61
62
|
deserialized = TestResult.from_json(json)
|
62
63
|
deserialized.device_statuses.size.should == 1
|
63
|
-
deserialized.device_statuses.first.device_id.should ==
|
64
|
-
deserialized.device_statuses.first.status.should
|
64
|
+
deserialized.device_statuses.first.device_id.should == device_test_statuses.first.device_id
|
65
|
+
deserialized.device_statuses.first.status.should == device_test_statuses.first.status
|
66
|
+
deserialized.device_statuses.first.message.should == device_test_statuses.first.message
|
65
67
|
end
|
66
68
|
|
67
69
|
describe "#completed_since(nil)" do
|
68
70
|
it "returns all device test results that are not in progress" do
|
69
|
-
status_1 =
|
70
|
-
status_2 =
|
71
|
-
status_3 =
|
71
|
+
status_1 = FactoryGirl.build(:device_test_status)
|
72
|
+
status_2 = FactoryGirl.build(:device_test_status, :status => 'in progress', :test_name => 'test2')
|
73
|
+
status_3 = FactoryGirl.build(:device_test_status, :status => 'fail', :test_name => 'test3')
|
72
74
|
test_result = TestResult.new([status_1, status_2, status_3])
|
73
75
|
test_result.completed_since(nil).should == [status_1, status_3]
|
74
76
|
end
|
@@ -76,12 +78,12 @@ module Spassky
|
|
76
78
|
|
77
79
|
describe "#completed_since(other_test_result)" do
|
78
80
|
it "returns all device test results that are no longer in progress" do
|
79
|
-
status_a1 =
|
80
|
-
status_a2 =
|
81
|
-
status_a3 =
|
82
|
-
status_b1 =
|
83
|
-
status_b2 =
|
84
|
-
status_b3 =
|
81
|
+
status_a1 = FactoryGirl.build(:device_test_status, :status => 'pass', :test_name => 'test1')
|
82
|
+
status_a2 = FactoryGirl.build(:device_test_status, :status => 'in progress', :test_name => 'test2')
|
83
|
+
status_a3 = FactoryGirl.build(:device_test_status, :status => 'in progress', :test_name => 'test3')
|
84
|
+
status_b1 = FactoryGirl.build(:device_test_status, :status => 'pass', :test_name => 'test1')
|
85
|
+
status_b2 = FactoryGirl.build(:device_test_status, :status => 'fail', :test_name => 'test2')
|
86
|
+
status_b3 = FactoryGirl.build(:device_test_status, :status => 'timed out', :test_name => 'test3')
|
85
87
|
|
86
88
|
test_result_before = TestResult.new([status_a1, status_a2, status_a3])
|
87
89
|
test_result_after = TestResult.new([status_b1, status_b2, status_b3])
|
@@ -4,36 +4,36 @@ module Spassky
|
|
4
4
|
describe TestResultSummariser do
|
5
5
|
it "shows passing tests" do
|
6
6
|
device_statuses = [
|
7
|
-
|
8
|
-
|
7
|
+
FactoryGirl.build(:device_test_status),
|
8
|
+
FactoryGirl.build(:device_test_status)
|
9
9
|
]
|
10
10
|
TestResultSummariser.new(device_statuses).summary.should == "2 passed"
|
11
11
|
end
|
12
12
|
|
13
13
|
it "shows failing tests" do
|
14
14
|
device_statuses = [
|
15
|
-
|
16
|
-
|
15
|
+
FactoryGirl.build(:device_test_status, :status => 'fail'),
|
16
|
+
FactoryGirl.build(:device_test_status, :status => 'fail')
|
17
17
|
]
|
18
18
|
TestResultSummariser.new(device_statuses).summary.should == "2 failed"
|
19
19
|
end
|
20
20
|
|
21
21
|
it "shows timed out tests" do
|
22
22
|
device_statuses = [
|
23
|
-
|
24
|
-
|
23
|
+
FactoryGirl.build(:device_test_status, :status => 'timed out'),
|
24
|
+
FactoryGirl.build(:device_test_status, :status => 'timed out')
|
25
25
|
]
|
26
26
|
TestResultSummariser.new(device_statuses).summary.should == "2 timed out"
|
27
27
|
end
|
28
28
|
|
29
29
|
it "shows failed, passed and timed out tests" do
|
30
30
|
device_statuses = [
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
FactoryGirl.build(:device_test_status, :status => 'pass'),
|
32
|
+
FactoryGirl.build(:device_test_status, :status => 'pass'),
|
33
|
+
FactoryGirl.build(:device_test_status, :status => 'fail'),
|
34
|
+
FactoryGirl.build(:device_test_status, :status => 'fail'),
|
35
|
+
FactoryGirl.build(:device_test_status, :status => 'timed out'),
|
36
|
+
FactoryGirl.build(:device_test_status, :status => 'timed out')
|
37
37
|
]
|
38
38
|
TestResultSummariser.new(device_statuses).summary.should == "2 passed, 2 failed, 2 timed out"
|
39
39
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spassky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.35
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2011-09-
|
14
|
+
date: 2011-09-09 00:00:00.000000000Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
18
|
-
requirement: &
|
18
|
+
requirement: &70126581990920 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70126581990920
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json
|
29
|
-
requirement: &
|
29
|
+
requirement: &70126581989580 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70126581989580
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: sinatra
|
40
|
-
requirement: &
|
40
|
+
requirement: &70126581988300 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70126581988300
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: rainbow
|
51
|
-
requirement: &
|
51
|
+
requirement: &70126581986260 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ! '>='
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: '0'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70126581986260
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: wurfl-lite
|
62
|
-
requirement: &
|
62
|
+
requirement: &70126581984940 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: '0'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70126581984940
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: commandable
|
73
|
-
requirement: &
|
73
|
+
requirement: &70126581983900 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: '0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *70126581983900
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rake
|
84
|
-
requirement: &
|
84
|
+
requirement: &70126581982900 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *70126581982900
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: rspec
|
95
|
-
requirement: &
|
95
|
+
requirement: &70126581981960 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: '0'
|
101
101
|
type: :development
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *70126581981960
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: cucumber
|
106
|
-
requirement: &
|
106
|
+
requirement: &70126581980780 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: '0'
|
112
112
|
type: :development
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *70126581980780
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: capybara
|
117
|
-
requirement: &
|
117
|
+
requirement: &70126581979720 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ! '>='
|
@@ -122,10 +122,10 @@ dependencies:
|
|
122
122
|
version: '0'
|
123
123
|
type: :development
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *70126581979720
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: aruba
|
128
|
-
requirement: &
|
128
|
+
requirement: &70126581978220 !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
131
|
- - ! '>='
|
@@ -133,10 +133,10 @@ dependencies:
|
|
133
133
|
version: '0'
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
|
-
version_requirements: *
|
136
|
+
version_requirements: *70126581978220
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: fakefs
|
139
|
-
requirement: &
|
139
|
+
requirement: &70126581977420 !ruby/object:Gem::Requirement
|
140
140
|
none: false
|
141
141
|
requirements:
|
142
142
|
- - ! '>='
|
@@ -144,10 +144,10 @@ dependencies:
|
|
144
144
|
version: '0'
|
145
145
|
type: :development
|
146
146
|
prerelease: false
|
147
|
-
version_requirements: *
|
147
|
+
version_requirements: *70126581977420
|
148
148
|
- !ruby/object:Gem::Dependency
|
149
149
|
name: ruby-debug19
|
150
|
-
requirement: &
|
150
|
+
requirement: &70126581976620 !ruby/object:Gem::Requirement
|
151
151
|
none: false
|
152
152
|
requirements:
|
153
153
|
- - ! '>='
|
@@ -155,7 +155,18 @@ dependencies:
|
|
155
155
|
version: '0'
|
156
156
|
type: :development
|
157
157
|
prerelease: false
|
158
|
-
version_requirements: *
|
158
|
+
version_requirements: *70126581976620
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: factory_girl
|
161
|
+
requirement: &70126581975680 !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
type: :development
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: *70126581975680
|
159
170
|
description: ''
|
160
171
|
email:
|
161
172
|
- andrew.vos@gmail.com
|
@@ -196,6 +207,7 @@ files:
|
|
196
207
|
- lib/spassky/client/pusher.rb
|
197
208
|
- lib/spassky/client/test_runner.rb
|
198
209
|
- lib/spassky/client/writer.rb
|
210
|
+
- lib/spassky/device_test_status.rb
|
199
211
|
- lib/spassky/server.rb
|
200
212
|
- lib/spassky/server/app.rb
|
201
213
|
- lib/spassky/server/assert.js
|
@@ -209,6 +221,7 @@ files:
|
|
209
221
|
- lib/spassky/version.rb
|
210
222
|
- spassky.gemspec
|
211
223
|
- spassky.jpg
|
224
|
+
- spec/factories.rb
|
212
225
|
- spec/spassky/client/cli_spec.rb
|
213
226
|
- spec/spassky/client/device_list_retriever_spec.rb
|
214
227
|
- spec/spassky/client/directory_reader_spec.rb
|
@@ -258,6 +271,7 @@ test_files:
|
|
258
271
|
- features/summary.feature
|
259
272
|
- features/support/env.rb
|
260
273
|
- features/support/fixtures/qunit.js
|
274
|
+
- spec/factories.rb
|
261
275
|
- spec/spassky/client/cli_spec.rb
|
262
276
|
- spec/spassky/client/device_list_retriever_spec.rb
|
263
277
|
- spec/spassky/client/directory_reader_spec.rb
|