rutema_web 1.0.4 → 1.0.5
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/.gemtest +0 -0
- data/History.txt +2 -0
- data/Manifest.txt +9 -7
- data/README.md +95 -0
- data/README.txt +13 -2
- data/Rakefile +5 -6
- data/bin/rutema_web +1 -0
- data/lib/rutema_web/{model.rb → activerecord/model.rb} +9 -13
- data/lib/rutema_web/{ruport_formatter.rb → activerecord/ruport_formatter.rb} +0 -0
- data/lib/rutema_web/gems.rb +3 -4
- data/lib/rutema_web/main.rb +5 -8
- data/lib/rutema_web/sinatra.rb +15 -17
- data/test/config.yaml +9 -0
- data/test/test_model.rb +24 -20
- metadata +49 -42
- data/test/test_rutema_web.rb +0 -107
data/.gemtest
ADDED
File without changes
|
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
+
bin/rutema_web
|
1
2
|
COPYING.txt
|
2
3
|
History.txt
|
3
|
-
|
4
|
-
|
5
|
-
Rakefile
|
6
|
-
bin/rutema_web
|
4
|
+
lib/rutema_web/activerecord/model.rb
|
5
|
+
lib/rutema_web/activerecord/ruport_formatter.rb
|
7
6
|
lib/rutema_web/gems.rb
|
8
7
|
lib/rutema_web/main.rb
|
9
|
-
lib/rutema_web/model.rb
|
10
8
|
lib/rutema_web/public/css/style.css
|
11
9
|
lib/rutema_web/public/images/bg_menu.gif
|
12
10
|
lib/rutema_web/public/images/bg_submenu.gif
|
@@ -24,9 +22,13 @@ lib/rutema_web/public/js/graph.js
|
|
24
22
|
lib/rutema_web/public/js/jquery-1.3.2.min.js
|
25
23
|
lib/rutema_web/public/js/jquery.flot.min.js
|
26
24
|
lib/rutema_web/public/js/jquery.flot.stack.min.js
|
27
|
-
lib/rutema_web/ruport_formatter.rb
|
28
25
|
lib/rutema_web/sinatra.rb
|
29
26
|
lib/rutema_web/views/flot.erb
|
30
27
|
lib/rutema_web/views/main.erb
|
31
28
|
lib/rutema_web/views/timeline.erb
|
32
|
-
|
29
|
+
Manifest.txt
|
30
|
+
Rakefile
|
31
|
+
README.md
|
32
|
+
README.txt
|
33
|
+
test/config.yaml
|
34
|
+
test/test_model.rb
|
data/README.md
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
rutema_web [http://patir.rubyforge.org/rutema](http://patir.rubyforge.org/rutema)
|
2
|
+
|
3
|
+
##DESCRIPTION:
|
4
|
+
rutema_web is the web frontend for rutema.
|
5
|
+
|
6
|
+
It can be used as a viewer for database files created with the rutema ActiveRecord reporter.
|
7
|
+
It also provides you with some basic statistics about the tests in your database in the form of
|
8
|
+
diagrams of debatable aesthetics but undoubtable value!
|
9
|
+
|
10
|
+
##SYNOPSIS:
|
11
|
+
rutema_web config.yaml and browse to http://localhost:7000 for the glorious view
|
12
|
+
|
13
|
+
Here is a sample of the configuration YAML:
|
14
|
+
<pre>
|
15
|
+
---
|
16
|
+
:db:
|
17
|
+
:adapter: sqlite3
|
18
|
+
:database: rutema_test.db
|
19
|
+
:settings:
|
20
|
+
:page_size: 10
|
21
|
+
:last_n_runs: 20
|
22
|
+
:port: 7000
|
23
|
+
:show_setup_teardown: true
|
24
|
+
</pre>
|
25
|
+
The :db: section should be the activerecord adapter configuration. The :settings: section controls the behaviour of the web app.
|
26
|
+
|
27
|
+
##REQUIREMENTS:
|
28
|
+
* rutema (http://patir.rubyforge.org/rutema)
|
29
|
+
* sinatra (http://www.sinatrarb.com/)
|
30
|
+
* ruport (http://rubyreports.org/)
|
31
|
+
|
32
|
+
##INSTALL:
|
33
|
+
* sudo gem install rutema_web
|
34
|
+
|
35
|
+
##LICENSE:
|
36
|
+
(The Ruby License)
|
37
|
+
|
38
|
+
rutema is copyright (c) 2007 - 2010 Vassilis Rizopoulos
|
39
|
+
|
40
|
+
You can redistribute it and/or modify it under either the terms of the GPL
|
41
|
+
(see COPYING.txt file), or the conditions below:
|
42
|
+
|
43
|
+
1. You may make and give away verbatim copies of the source form of the
|
44
|
+
software without restriction, provided that you duplicate all of the
|
45
|
+
original copyright notices and associated disclaimers.
|
46
|
+
|
47
|
+
2. You may modify your copy of the software in any way, provided that
|
48
|
+
you do at least ONE of the following:
|
49
|
+
|
50
|
+
a) place your modifications in the Public Domain or otherwise
|
51
|
+
make them Freely Available, such as by posting said
|
52
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
53
|
+
the author to include your modifications in the software.
|
54
|
+
|
55
|
+
b) use the modified software only within your corporation or
|
56
|
+
organization.
|
57
|
+
|
58
|
+
c) rename any non-standard executables so the names do not conflict
|
59
|
+
with standard executables, which must also be provided.
|
60
|
+
|
61
|
+
d) make other distribution arrangements with the author.
|
62
|
+
|
63
|
+
3. You may distribute the software in object code or executable
|
64
|
+
form, provided that you do at least ONE of the following:
|
65
|
+
|
66
|
+
a) distribute the executables and library files of the software,
|
67
|
+
together with instructions (in the manual page or equivalent)
|
68
|
+
on where to get the original distribution.
|
69
|
+
|
70
|
+
b) accompany the distribution with the machine-readable source of
|
71
|
+
the software.
|
72
|
+
|
73
|
+
c) give non-standard executables non-standard names, with
|
74
|
+
instructions on where to get the original software distribution.
|
75
|
+
|
76
|
+
d) make other distribution arrangements with the author.
|
77
|
+
|
78
|
+
4. You may modify and include the part of the software into any other
|
79
|
+
software (possibly commercial). But some files in the distribution
|
80
|
+
are not written by the author, so that they are not under this terms.
|
81
|
+
|
82
|
+
They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
|
83
|
+
files under the ./missing directory. See each file for the copying
|
84
|
+
condition.
|
85
|
+
|
86
|
+
5. The scripts and library files supplied as input to or produced as
|
87
|
+
output from the software do not automatically fall under the
|
88
|
+
copyright of the software, but belong to whomever generated them,
|
89
|
+
and may be sold commercially, and may be aggregated with this
|
90
|
+
software.
|
91
|
+
|
92
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
93
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
94
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
95
|
+
PURPOSE.
|
data/README.txt
CHANGED
@@ -7,11 +7,22 @@ It can be used as a viewer for database files created with the rutema ActiveReco
|
|
7
7
|
It also provides you with some basic statistics about the tests in your database in the form of
|
8
8
|
diagrams of debatable aesthetics but undoubtable value!
|
9
9
|
|
10
|
-
== FEATURES/PROBLEMS:
|
11
|
-
|
12
10
|
== SYNOPSIS:
|
13
11
|
rutema_web config.yaml and browse to http://localhost:7000 for the glorious view
|
14
12
|
|
13
|
+
Here is a sample of the configuration YAML:
|
14
|
+
---
|
15
|
+
:db:
|
16
|
+
:adapter: sqlite3
|
17
|
+
:database: rutema_test.db
|
18
|
+
:settings:
|
19
|
+
:page_size: 10
|
20
|
+
:last_n_runs: 20
|
21
|
+
:port: 7000
|
22
|
+
:show_setup_teardown: true
|
23
|
+
|
24
|
+
The :db: section should be the activerecord adapter configuration. The :settings: section controls the behaviour of the web app.
|
25
|
+
|
15
26
|
== REQUIREMENTS:
|
16
27
|
* rutema (http://patir.rubyforge.org/rutema)
|
17
28
|
* sinatra (http://www.sinatrarb.com/)
|
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Copyright (c) 2008 Vassilis Rizopoulos. All rights reserved.
|
2
2
|
# -*- ruby -*-
|
3
3
|
$:.unshift File.join(File.dirname(__FILE__),"lib")
|
4
|
-
require 'rutema_web/main'
|
5
4
|
require 'rubygems'
|
5
|
+
require 'rutema_web/main'
|
6
6
|
require 'hoe'
|
7
7
|
|
8
8
|
Hoe.spec('rutema_web') do |p|
|
@@ -12,11 +12,10 @@ Hoe.spec('rutema_web') do |p|
|
|
12
12
|
p.email = "riva@braveworld.net"
|
13
13
|
p.summary = 'rutema_web is the web frontend for rutema'
|
14
14
|
p.description = p.paragraphs_of('README.txt', 1..5).join("\n\n")
|
15
|
-
p.url =
|
15
|
+
p.url = "http://patir.rubyforge.org/rutema"
|
16
16
|
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
17
|
-
p.extra_deps<<['rutema',"=1.0
|
18
|
-
p.extra_deps<<['sinatra','=1.
|
17
|
+
p.extra_deps<<['rutema',"=1.2.0"]
|
18
|
+
p.extra_deps<<['sinatra','=1.2.1']
|
19
19
|
p.extra_deps<<['ruport','>=1.6.1']
|
20
|
-
p.spec_extras={:executables=>["rutema_web"]
|
21
|
-
:default_executable=>"rutema_web"}
|
20
|
+
p.spec_extras={:executables=>["rutema_web"],:default_executable=>"rutema_web"}
|
22
21
|
end
|
data/bin/rutema_web
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Copyright (c) 2008 Vassilis Rizopoulos. All rights reserved.
|
2
2
|
$:.unshift File.join(File.dirname(__FILE__),"..")
|
3
|
-
require 'rutema/
|
3
|
+
require 'rutema/models/activerecord'
|
4
4
|
module Rutema
|
5
|
-
module
|
6
|
-
#Extensions of Rutema::
|
7
|
-
class Run
|
5
|
+
module ActiveRecord
|
6
|
+
#Extensions of Rutema::ActiveRecord::Run to accomodate specific view requirements for rutema_web
|
7
|
+
class Run <::ActiveRecord::Base
|
8
8
|
# The view wants to display runs grouped into pages,
|
9
9
|
# where each page shows page_size runs at a time.
|
10
10
|
# This method returns the runs on page page_num (starting
|
@@ -35,16 +35,16 @@ module Rutema
|
|
35
35
|
#number of unsuccessful scenarios (does not count setup or teardown scripts)
|
36
36
|
def number_of_failed
|
37
37
|
#self.scenarios.select{|sc| !sc.success? && !sc.not_executed? && sc.is_test? }.size
|
38
|
-
Rutema::
|
38
|
+
Rutema::ActiveRecord::Scenario.count(:conditions=>"run_id=#{self.id} AND status = 'error' AND name NOT LIKE '%_teardown' AND name NOT LIKE '%_setup'")
|
39
39
|
end
|
40
40
|
#number of scenarios that did not run (does not count setup or teardown scripts)
|
41
41
|
def number_of_not_executed
|
42
42
|
#self.scenarios.select{|sc| sc.not_executed? && sc.is_test? }.size
|
43
|
-
Rutema::
|
43
|
+
Rutema::ActiveRecord::Scenario.count(:conditions=>"run_id=#{self.id} AND status = 'not_executed' AND name NOT LIKE '%_teardown' AND name NOT LIKE '%_setup'")
|
44
44
|
end
|
45
45
|
#returns the number of actual tests (so, don't take into account setup or teardown tests)
|
46
46
|
def number_of_tests
|
47
|
-
Rutema::
|
47
|
+
Rutema::ActiveRecord::Scenario.count(:conditions=>"run_id=#{self.id} AND name NOT LIKE '%_teardown' AND name NOT LIKE '%_setup'")
|
48
48
|
end
|
49
49
|
#the number of the configuration file used to run the test
|
50
50
|
def config_file
|
@@ -53,8 +53,8 @@ module Rutema
|
|
53
53
|
end
|
54
54
|
|
55
55
|
end
|
56
|
-
#Extensions of Rutema::
|
57
|
-
class Scenario
|
56
|
+
#Extensions of Rutema::ActiveRecord::Scenario to accomodate specific view requirements for rutema_web
|
57
|
+
class Scenario <::ActiveRecord::Base
|
58
58
|
# The view wants to display scenarios grouped into pages,
|
59
59
|
# where each page shows page_size scenarios at a time.
|
60
60
|
# This method returns the scenarios grouped by name on page page_num (starting
|
@@ -83,7 +83,3 @@ module Rutema
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
File without changes
|
data/lib/rutema_web/gems.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
|
-
gem '
|
3
|
-
gem '
|
4
|
-
gem 'ruport','>=1.6.1'
|
1
|
+
gem 'sinatra','=1.2.1'
|
2
|
+
gem 'rutema',"=1.2.0"
|
3
|
+
gem 'json','=1.5.1'
|
data/lib/rutema_web/main.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
$:.unshift File.join(File.dirname(__FILE__),"..")
|
2
|
-
require 'rutema_web/sinatra'
|
3
2
|
require 'optparse'
|
4
|
-
require '
|
3
|
+
require 'patir/base'
|
4
|
+
require 'rutema_web/activerecord/model'
|
5
|
+
require 'rutema_web/sinatra'
|
5
6
|
#This is the web frontend for Rutema databases.
|
6
7
|
module RutemaWeb
|
7
|
-
extend Rutema::ActiveRecordConnections
|
8
8
|
#This module defines the version numbers for the library
|
9
9
|
module Version
|
10
10
|
MAJOR=1
|
11
11
|
MINOR=0
|
12
|
-
TINY=
|
12
|
+
TINY=5
|
13
13
|
STRING=[ MAJOR, MINOR, TINY ].join( "." )
|
14
14
|
end
|
15
15
|
#Starts App
|
@@ -19,7 +19,7 @@ module RutemaWeb
|
|
19
19
|
cfg_file=File.expand_path(cfg_file)
|
20
20
|
configuration=YAML.load_file(cfg_file)
|
21
21
|
if (configuration[:db])
|
22
|
-
|
22
|
+
Rutema::ActiveRecord.connect(configuration[:db],logger)
|
23
23
|
RutemaWeb::UI::SinatraApp.define_settings(configuration[:settings])
|
24
24
|
RutemaWeb::UI::SinatraApp.run!
|
25
25
|
else
|
@@ -45,8 +45,5 @@ module RutemaWeb
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
49
48
|
end
|
50
49
|
|
51
|
-
|
52
|
-
|
data/lib/rutema_web/sinatra.rb
CHANGED
@@ -2,11 +2,9 @@
|
|
2
2
|
$:.unshift File.join(File.dirname(__FILE__),"..")
|
3
3
|
require 'sinatra/base'
|
4
4
|
require 'erb'
|
5
|
-
require 'patir/configuration'
|
6
|
-
require 'patir/command'
|
7
5
|
require 'patir/base'
|
8
|
-
require 'rutema_web/model'
|
9
|
-
require 'rutema_web/ruport_formatter'
|
6
|
+
require 'rutema_web/activerecord/model'
|
7
|
+
require 'rutema_web/activerecord/ruport_formatter'
|
10
8
|
require 'json'
|
11
9
|
|
12
10
|
module RutemaWeb
|
@@ -116,7 +114,7 @@ module RutemaWeb
|
|
116
114
|
private
|
117
115
|
#extract all the configuration names
|
118
116
|
def configurations
|
119
|
-
runs=Rutema::
|
117
|
+
runs=Rutema::ActiveRecord::Run.find(:all)
|
120
118
|
return runs.map{|r| r.context[:config_file] if r.context.is_a?(Hash)}.compact.uniq
|
121
119
|
end
|
122
120
|
def panel_configurations type,action=nil
|
@@ -322,7 +320,7 @@ module RutemaWeb
|
|
322
320
|
end
|
323
321
|
#finds all the runs belonging to a specific configuration
|
324
322
|
def all_runs_in_configuration configuration
|
325
|
-
runs=Rutema::
|
323
|
+
runs=Rutema::ActiveRecord::Run.find(:all,:order=>"id ASC")
|
326
324
|
#find all runs beloging to this configuration
|
327
325
|
runs.select{|r| r.context[:config_file]==configuration if r.context.is_a?(Hash)} if configuration
|
328
326
|
end
|
@@ -338,10 +336,10 @@ module RutemaWeb
|
|
338
336
|
page_setup "All runs",nil,"All runs"
|
339
337
|
|
340
338
|
dt=[]
|
341
|
-
total_pages=(Rutema::
|
339
|
+
total_pages=(Rutema::ActiveRecord::Run.count/settings.page_size)+1
|
342
340
|
page_number=validated_page_number(page,total_pages)
|
343
341
|
|
344
|
-
runs=Rutema::
|
342
|
+
runs=Rutema::ActiveRecord::Run.find_on_page(page_number,settings.page_size)
|
345
343
|
runs.each do |r|
|
346
344
|
dt<<[status_icon(r.status),run_summary(r),r.config_file]
|
347
345
|
end
|
@@ -356,7 +354,7 @@ module RutemaWeb
|
|
356
354
|
#find which runs contain each scenario with the same name
|
357
355
|
#Ramaze::Log.debug("Getting the runs for each scenario")
|
358
356
|
conditions="name NOT LIKE '%_teardown' AND name NOT LIKE '%_setup'"
|
359
|
-
Rutema::
|
357
|
+
Rutema::ActiveRecord::Scenario.find(:all, :conditions=>conditions).each do |sc|
|
360
358
|
nm=sc.name
|
361
359
|
runs[nm]||=[]
|
362
360
|
runs[nm]<<sc.run.id
|
@@ -365,7 +363,7 @@ module RutemaWeb
|
|
365
363
|
total_pages=(runs.size / settings.page_size)+1
|
366
364
|
page_number=validated_page_number(page,total_pages)
|
367
365
|
#Ramaze::Log.debug("Getting scenarios for page #{page_number}")
|
368
|
-
scens=Rutema::
|
366
|
+
scens=Rutema::ActiveRecord::Scenario.find_on_page(page_number,settings.page_size,conditions)
|
369
367
|
#and now build the table data
|
370
368
|
dt=Array.new
|
371
369
|
scens.each do |sc|
|
@@ -395,7 +393,7 @@ module RutemaWeb
|
|
395
393
|
ret=""
|
396
394
|
page_setup "Runs for #{scenario_id}",nil,"Scenario #{scenario_id} runs"
|
397
395
|
begin
|
398
|
-
table=Rutema::
|
396
|
+
table=Rutema::ActiveRecord::Scenario.report_table(:all,:conditions=>["name = :spec_name",{:spec_name=>scenario_id}],
|
399
397
|
:order=>"run_id DESC")
|
400
398
|
if table.empty?
|
401
399
|
ret="<p>no results for the given name</p>"
|
@@ -422,9 +420,9 @@ module RutemaWeb
|
|
422
420
|
#giving a detailed list of the steps, with status and output
|
423
421
|
def scenario_in_a_run scenario_id
|
424
422
|
begin
|
425
|
-
scenario=Rutema::
|
423
|
+
scenario=Rutema::ActiveRecord::Scenario.find(scenario_id)
|
426
424
|
page_setup "Summary for #{scenario.name} in run #{scenario.run_id}",panel_runs,"Summary for #{scenario.name} in run #{scenario.run_id}"
|
427
|
-
table=Rutema::
|
425
|
+
table=Rutema::ActiveRecord::Step.report_table(:all,
|
428
426
|
:conditions=>["scenario_id = :scenario_id",{:scenario_id=>scenario_id}],
|
429
427
|
:order=>"number ASC")
|
430
428
|
if table.empty?
|
@@ -447,7 +445,7 @@ module RutemaWeb
|
|
447
445
|
def single_run run_id
|
448
446
|
ret=""
|
449
447
|
begin
|
450
|
-
run=Rutema::
|
448
|
+
run=Rutema::ActiveRecord::Run.find(run_id)
|
451
449
|
rescue
|
452
450
|
return "Could not find #{run_id}"
|
453
451
|
end
|
@@ -455,7 +453,7 @@ module RutemaWeb
|
|
455
453
|
ret<<context_table(run.context)
|
456
454
|
end
|
457
455
|
conditions="run_id = :run_id AND name NOT LIKE '%_teardown' AND name NOT LIKE '%_setup'"
|
458
|
-
table=Rutema::
|
456
|
+
table=Rutema::ActiveRecord::Scenario.report_table(:all,
|
459
457
|
:conditions=>[conditions,{:run_id=>run_id}],:except=>["run_id"],
|
460
458
|
:order=>"start_time ASC")
|
461
459
|
if table.empty?
|
@@ -474,14 +472,14 @@ module RutemaWeb
|
|
474
472
|
|
475
473
|
def panel_runs
|
476
474
|
ret=""
|
477
|
-
Rutema::
|
475
|
+
Rutema::ActiveRecord::Run.find(:all,:limit=>10,:order=>"id DESC").each do |r|
|
478
476
|
ret<<"#{status_icon(r.status)} #{run_link(r)}<br/>"
|
479
477
|
end
|
480
478
|
return ret
|
481
479
|
end
|
482
480
|
|
483
481
|
def failure_rate scenario_name
|
484
|
-
scenarios=Rutema::
|
482
|
+
scenarios=Rutema::ActiveRecord::Scenario.find(:all,:conditions=>["name = :spec_name",{:spec_name=>scenario_name}])
|
485
483
|
failures=0
|
486
484
|
scenarios.each{|sc| failures+=1 unless sc.status=="success" }
|
487
485
|
return ((failures.to_f/scenarios.size)*100).round
|
data/test/config.yaml
ADDED
data/test/test_model.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),"..")
|
1
2
|
require 'test/unit'
|
2
3
|
require 'ostruct'
|
3
|
-
require 'rutema_web/ramaze_controller'
|
4
4
|
require 'rubygems'
|
5
5
|
require 'mocha'
|
6
|
+
require 'lib/rutema_web/activerecord/model'
|
6
7
|
|
7
8
|
class TestModel <Test::Unit::TestCase
|
8
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",:database =>":memory:")
|
9
|
-
Rutema::
|
9
|
+
::ActiveRecord::Base.establish_connection(:adapter => "sqlite3",:database =>":memory:")
|
10
|
+
Rutema::ActiveRecord::Schema.up
|
10
11
|
def setup
|
11
|
-
@stp=Rutema::
|
12
|
-
@stp.name
|
13
|
-
@trd=Rutema::
|
14
|
-
@trd.name
|
15
|
-
@tst=Rutema::
|
16
|
-
@
|
17
|
-
@r=Rutema::
|
12
|
+
@stp=Rutema::ActiveRecord::Scenario.new(:name=>"TC000_setup",:attended=>false,:status=>"success",:start_time=>Time.now)
|
13
|
+
@stp.steps<<Rutema::ActiveRecord::Step.new(:name=>"echo",:number=>1,:status=>"success",:output=>"testing is nice",:error=>"",:duration=>1)
|
14
|
+
@trd=Rutema::ActiveRecord::Scenario.new(:name=>"TC000_teardown",:attended=>false,:status=>"success",:start_time=>Time.now)
|
15
|
+
@trd.steps<<Rutema::ActiveRecord::Step.new(:name=>"echo",:number=>1,:status=>"success",:output=>"testing is nice",:error=>"",:duration=>1)
|
16
|
+
@tst=Rutema::ActiveRecord::Scenario.new(:name=>"TC000",:attended=>false,:status=>"success",:start_time=>Time.now)
|
17
|
+
@trd.steps<<Rutema::ActiveRecord::Step.new(:name=>"echo",:number=>1,:status=>"success",:output=>"testing is nice",:error=>"",:duration=>1)
|
18
|
+
@r=Rutema::ActiveRecord::Run.new
|
18
19
|
@r.scenarios=[@stp,@tst,@trd]
|
20
|
+
@r.save
|
19
21
|
end
|
20
22
|
def test_status
|
21
23
|
assert_equal(:success,@r.status)
|
22
|
-
t1=Rutema::
|
23
|
-
t1.name="failed"
|
24
|
-
t1.stubs(:status).returns("error")
|
24
|
+
t1=Rutema::ActiveRecord::Scenario.new(:name=>"failed",:attended=>false,:status=>"error",:start_time=>Time.now)
|
25
25
|
@r.scenarios<<t1
|
26
26
|
assert_equal(:error,@r.status)
|
27
27
|
end
|
@@ -34,15 +34,19 @@ class TestModel <Test::Unit::TestCase
|
|
34
34
|
assert_equal(1, @r.number_of_tests)
|
35
35
|
end
|
36
36
|
def test_number_of_failed
|
37
|
-
t1=Rutema::
|
38
|
-
|
39
|
-
t1.stubs(:status).returns("error")
|
40
|
-
t2=Rutema::Model::Scenario.new
|
41
|
-
t2.name="not executed"
|
42
|
-
t2.stubs(:status).returns("not_executed")
|
37
|
+
t1=Rutema::ActiveRecord::Scenario.new(:name=>"failed",:attended=>false,:status=>"error",:start_time=>Time.now)
|
38
|
+
t2=Rutema::ActiveRecord::Scenario.new(:name=>"not executed",:attended=>false,:status=>"not_executed",:start_time=>Time.now)
|
43
39
|
@tst.stubs(:status).returns("success")
|
44
40
|
@r.scenarios<<t1
|
45
41
|
@r.scenarios<<t2
|
46
|
-
assert_equal(
|
42
|
+
assert_equal(1,@r.number_of_failed)
|
43
|
+
end
|
44
|
+
def test_number_of_not_executed
|
45
|
+
t1=Rutema::ActiveRecord::Scenario.new(:name=>"failed",:attended=>false,:status=>"error",:start_time=>Time.now)
|
46
|
+
t2=Rutema::ActiveRecord::Scenario.new(:name=>"not executed",:attended=>false,:status=>"not_executed",:start_time=>Time.now)
|
47
|
+
@tst.stubs(:status).returns("success")
|
48
|
+
@r.scenarios<<t1
|
49
|
+
@r.scenarios<<t2
|
50
|
+
assert_equal(1,@r.number_of_not_executed)
|
47
51
|
end
|
48
52
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rutema_web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
9
|
+
- 5
|
10
|
+
version: 1.0.5
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Vassilis Rizopoulos
|
@@ -14,44 +15,50 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date:
|
18
|
+
date: 2011-04-01 00:00:00 +03:00
|
18
19
|
default_executable: rutema_web
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: rutema
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - "="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 31
|
27
30
|
segments:
|
28
31
|
- 1
|
32
|
+
- 2
|
29
33
|
- 0
|
30
|
-
|
31
|
-
version: 1.0.9
|
34
|
+
version: 1.2.0
|
32
35
|
type: :runtime
|
33
36
|
version_requirements: *id001
|
34
37
|
- !ruby/object:Gem::Dependency
|
35
38
|
name: sinatra
|
36
39
|
prerelease: false
|
37
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
38
42
|
requirements:
|
39
43
|
- - "="
|
40
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 29
|
41
46
|
segments:
|
42
47
|
- 1
|
43
|
-
-
|
44
|
-
-
|
45
|
-
version: 1.
|
48
|
+
- 2
|
49
|
+
- 1
|
50
|
+
version: 1.2.1
|
46
51
|
type: :runtime
|
47
52
|
version_requirements: *id002
|
48
53
|
- !ruby/object:Gem::Dependency
|
49
54
|
name: ruport
|
50
55
|
prerelease: false
|
51
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
52
58
|
requirements:
|
53
59
|
- - ">="
|
54
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 13
|
55
62
|
segments:
|
56
63
|
- 1
|
57
64
|
- 6
|
@@ -60,33 +67,21 @@ dependencies:
|
|
60
67
|
type: :runtime
|
61
68
|
version_requirements: *id003
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
70
|
+
name: hoe
|
64
71
|
prerelease: false
|
65
72
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
66
74
|
requirements:
|
67
75
|
- - ">="
|
68
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 47
|
69
78
|
segments:
|
70
79
|
- 2
|
71
|
-
-
|
72
|
-
- 4
|
73
|
-
version: 2.0.4
|
74
|
-
type: :development
|
75
|
-
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: hoe
|
78
|
-
prerelease: false
|
79
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
segments:
|
80
|
+
- 9
|
84
81
|
- 2
|
85
|
-
|
86
|
-
- 0
|
87
|
-
version: 2.6.0
|
82
|
+
version: 2.9.2
|
88
83
|
type: :development
|
89
|
-
version_requirements: *
|
84
|
+
version_requirements: *id004
|
90
85
|
description: |-
|
91
86
|
== DESCRIPTION:
|
92
87
|
rutema_web is the web frontend for rutema.
|
@@ -95,15 +90,21 @@ description: |-
|
|
95
90
|
It also provides you with some basic statistics about the tests in your database in the form of
|
96
91
|
diagrams of debatable aesthetics but undoubtable value!
|
97
92
|
|
98
|
-
== FEATURES/PROBLEMS:
|
99
|
-
|
100
93
|
== SYNOPSIS:
|
101
94
|
rutema_web config.yaml and browse to http://localhost:7000 for the glorious view
|
102
95
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
96
|
+
Here is a sample of the configuration YAML:
|
97
|
+
---
|
98
|
+
:db:
|
99
|
+
:adapter: sqlite3
|
100
|
+
:database: rutema_test.db
|
101
|
+
:settings:
|
102
|
+
:page_size: 10
|
103
|
+
:last_n_runs: 20
|
104
|
+
:port: 7000
|
105
|
+
:show_setup_teardown: true
|
106
|
+
|
107
|
+
The :db: section should be the activerecord adapter configuration. The :settings: section controls the behaviour of the web app.
|
107
108
|
email: riva@braveworld.net
|
108
109
|
executables:
|
109
110
|
- rutema_web
|
@@ -115,15 +116,13 @@ extra_rdoc_files:
|
|
115
116
|
- Manifest.txt
|
116
117
|
- README.txt
|
117
118
|
files:
|
119
|
+
- bin/rutema_web
|
118
120
|
- COPYING.txt
|
119
121
|
- History.txt
|
120
|
-
-
|
121
|
-
-
|
122
|
-
- Rakefile
|
123
|
-
- bin/rutema_web
|
122
|
+
- lib/rutema_web/activerecord/model.rb
|
123
|
+
- lib/rutema_web/activerecord/ruport_formatter.rb
|
124
124
|
- lib/rutema_web/gems.rb
|
125
125
|
- lib/rutema_web/main.rb
|
126
|
-
- lib/rutema_web/model.rb
|
127
126
|
- lib/rutema_web/public/css/style.css
|
128
127
|
- lib/rutema_web/public/images/bg_menu.gif
|
129
128
|
- lib/rutema_web/public/images/bg_submenu.gif
|
@@ -141,14 +140,19 @@ files:
|
|
141
140
|
- lib/rutema_web/public/js/jquery-1.3.2.min.js
|
142
141
|
- lib/rutema_web/public/js/jquery.flot.min.js
|
143
142
|
- lib/rutema_web/public/js/jquery.flot.stack.min.js
|
144
|
-
- lib/rutema_web/ruport_formatter.rb
|
145
143
|
- lib/rutema_web/sinatra.rb
|
146
144
|
- lib/rutema_web/views/flot.erb
|
147
145
|
- lib/rutema_web/views/main.erb
|
148
146
|
- lib/rutema_web/views/timeline.erb
|
147
|
+
- Manifest.txt
|
148
|
+
- Rakefile
|
149
|
+
- README.md
|
150
|
+
- README.txt
|
151
|
+
- test/config.yaml
|
149
152
|
- test/test_model.rb
|
153
|
+
- .gemtest
|
150
154
|
has_rdoc: true
|
151
|
-
homepage:
|
155
|
+
homepage: http://patir.rubyforge.org/rutema
|
152
156
|
licenses: []
|
153
157
|
|
154
158
|
post_install_message:
|
@@ -158,26 +162,29 @@ rdoc_options:
|
|
158
162
|
require_paths:
|
159
163
|
- lib
|
160
164
|
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
161
166
|
requirements:
|
162
167
|
- - ">="
|
163
168
|
- !ruby/object:Gem::Version
|
169
|
+
hash: 3
|
164
170
|
segments:
|
165
171
|
- 0
|
166
172
|
version: "0"
|
167
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
none: false
|
168
175
|
requirements:
|
169
176
|
- - ">="
|
170
177
|
- !ruby/object:Gem::Version
|
178
|
+
hash: 3
|
171
179
|
segments:
|
172
180
|
- 0
|
173
181
|
version: "0"
|
174
182
|
requirements: []
|
175
183
|
|
176
184
|
rubyforge_project: patir
|
177
|
-
rubygems_version: 1.
|
185
|
+
rubygems_version: 1.5.0
|
178
186
|
signing_key:
|
179
187
|
specification_version: 3
|
180
188
|
summary: rutema_web is the web frontend for rutema
|
181
189
|
test_files:
|
182
190
|
- test/test_model.rb
|
183
|
-
- test/test_rutema_web.rb
|
data/test/test_rutema_web.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
-
require 'test/unit'
|
3
|
-
require 'ostruct'
|
4
|
-
require 'rutema_web/ramaze_controller'
|
5
|
-
require 'rubygems'
|
6
|
-
require 'mocha'
|
7
|
-
|
8
|
-
class TestRutemaWeb <Test::Unit::TestCase
|
9
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",:database =>":memory:")
|
10
|
-
|
11
|
-
def test_loading
|
12
|
-
controller=nil
|
13
|
-
assert_nothing_raised() { controller = Rutema::UI::MainController.new }
|
14
|
-
return controller
|
15
|
-
end
|
16
|
-
def test_run
|
17
|
-
cntlr=test_loading
|
18
|
-
r=mock()
|
19
|
-
r.expects(:id).returns(5).times(2)
|
20
|
-
r.stubs(:context).returns({:start_time=>Time.now,:config_file=>"test"})
|
21
|
-
r.stubs(:config_file).returns("test")
|
22
|
-
r.stubs(:status).returns(:success)
|
23
|
-
t=mock()
|
24
|
-
t.expects(:to_html).returns("mocked")
|
25
|
-
Rutema::Model::Run.expects(:find).returns([r])
|
26
|
-
Rutema::Model::Run.expects(:count).returns(1)
|
27
|
-
Ruport::Data::Table.expects(:new).returns(t)
|
28
|
-
#Check nothing is raised when calling run (with everything mocked)
|
29
|
-
assert_nothing_raised(){ cntlr.run}
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_runs
|
33
|
-
cntlr=test_loading
|
34
|
-
mock_12_runs
|
35
|
-
#Check nothing is raised when calling run (with everything mocked)
|
36
|
-
assert_nothing_raised(){ cntlr.runs}
|
37
|
-
return cntlr
|
38
|
-
end
|
39
|
-
#unit tests for the pagination code of runs
|
40
|
-
def test_pagination
|
41
|
-
cntlr=test_loading
|
42
|
-
mock_12_runs
|
43
|
-
#Check nothing is raised when calling run (with everything mocked)
|
44
|
-
assert_nothing_raised(){ cntlr.runs(1)}
|
45
|
-
return cntlr
|
46
|
-
end
|
47
|
-
def test_page_number_to_large
|
48
|
-
cntlr=test_loading
|
49
|
-
mock_12_runs
|
50
|
-
#Check nothing is raised when calling run with a page number greater than the available
|
51
|
-
assert_nothing_raised(){ cntlr.runs(50)}
|
52
|
-
end
|
53
|
-
def test_page_number_negative
|
54
|
-
cntlr=test_loading
|
55
|
-
mock_12_runs
|
56
|
-
#Check nothing is raised when calling run with a negative page number greater than the available
|
57
|
-
assert_nothing_raised(){ cntlr.runs(-1)}
|
58
|
-
end
|
59
|
-
def test_page_number_bogus
|
60
|
-
cntlr=test_loading
|
61
|
-
mock_12_runs
|
62
|
-
#Check nothing is raised when calling run with a page number that is not a number
|
63
|
-
assert_nothing_raised(){ cntlr.runs("atttaaaaack!!")}
|
64
|
-
end
|
65
|
-
|
66
|
-
#unit tests for scenarios
|
67
|
-
def test_scenarios
|
68
|
-
ctlr=test_loading
|
69
|
-
mock_12_scenarios
|
70
|
-
Rutema::Model::Run.expects(:find).returns("")
|
71
|
-
assert_nothing_raised() { ctlr.scenarios }
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_scenario_wrong_arguments
|
75
|
-
ctlr=test_loading
|
76
|
-
assert_raise(ArgumentError) { ctlr.scenario("bla","blu") }
|
77
|
-
end
|
78
|
-
private
|
79
|
-
def mock_12_runs
|
80
|
-
t=mock()
|
81
|
-
t.expects(:to_html).returns("mocked")
|
82
|
-
Ruport::Data::Table.expects(:new).returns(t)
|
83
|
-
runs=[mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock()]
|
84
|
-
runs.each do |r|
|
85
|
-
r.stubs(:id).returns(5)
|
86
|
-
r.stubs(:context).returns({:start_time=>Time.now,:config_file=>"test"})
|
87
|
-
r.stubs(:status).returns(:success)
|
88
|
-
r.stubs(:config_file).returns("test")
|
89
|
-
end
|
90
|
-
Rutema::Model::Run.expects(:find).returns(runs)
|
91
|
-
Rutema::Model::Run.expects(:count).returns(12)
|
92
|
-
end
|
93
|
-
|
94
|
-
def mock_12_scenarios
|
95
|
-
t=mock()
|
96
|
-
t.expects(:to_html).returns("mocked")
|
97
|
-
Ruport::Data::Table.expects(:new).returns(t)
|
98
|
-
scenarios=[mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock(),mock()]
|
99
|
-
scenarios.each do |sc|
|
100
|
-
sc.stubs(:name).returns(scenarios.index(sc).to_s)
|
101
|
-
sc.stubs(:status).returns(:success)
|
102
|
-
sc.expects(:title).returns(scenarios.index(sc).to_s)
|
103
|
-
sc.expects(:run).returns(scenarios.index(sc))
|
104
|
-
end
|
105
|
-
Rutema::Model::Scenario.stubs(:find).returns(scenarios)
|
106
|
-
end
|
107
|
-
end
|