techcor 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +22 -0
- data/Gemfile.lock +96 -0
- data/README.md +27 -0
- data/Rakefile +45 -0
- data/bin/tc +6 -0
- data/config/cucumber.yml +2 -0
- data/config/mongoid.yml +29 -0
- data/config/mongoid.yml.sample +29 -0
- data/db/seed.rb +37 -0
- data/features/add_metric.feature +9 -0
- data/features/add_project.feature +9 -0
- data/features/console_interface.feature +58 -0
- data/features/describe_project.feature +25 -0
- data/features/edit_property.feature +9 -0
- data/features/list_projects.feature +69 -0
- data/features/property_history.feature +51 -0
- data/features/rake.feature +11 -0
- data/features/seeds.feature +9 -0
- data/features/step_definitions/add_project.rb +22 -0
- data/features/step_definitions/console_interface.rb +7 -0
- data/features/step_definitions/list_projects.rb +3 -0
- data/features/step_definitions/property_history.rb +4 -0
- data/features/step_definitions/rake.rb +3 -0
- data/features/support/env.rb +9 -0
- data/lib/commands/add_metric.rb +17 -0
- data/lib/commands/add_project.rb +5 -0
- data/lib/commands/describe_project.rb +26 -0
- data/lib/commands/edit_property.rb +9 -0
- data/lib/commands/gli/add.rb +12 -0
- data/lib/commands/gli/add_metric.rb +23 -0
- data/lib/commands/gli/describe.rb +16 -0
- data/lib/commands/gli/edit_property.rb +22 -0
- data/lib/commands/gli/history.rb +19 -0
- data/lib/commands/gli/hooks.rb +8 -0
- data/lib/commands/gli/list.rb +14 -0
- data/lib/commands/gli/program.rb +5 -0
- data/lib/commands/list_projects.rb +32 -0
- data/lib/commands/view_history.rb +37 -0
- data/lib/console_formatter.rb +18 -0
- data/lib/gli_interface.rb +15 -0
- data/lib/metrics/boolean_metric.rb +7 -0
- data/lib/metrics/metric.rb +24 -0
- data/lib/metrics/number_metric.rb +7 -0
- data/lib/metrics/string_metric.rb +7 -0
- data/lib/project.rb +15 -0
- data/lib/project_catalog.rb +34 -0
- data/lib/property_value.rb +3 -0
- data/lib/storage/metric_mongo.rb +11 -0
- data/lib/storage/project_mongo.rb +9 -0
- data/lib/storage/property_value_mongo.rb +10 -0
- data/lib/tc/version.rb +9 -0
- data/lib/tc.rb +27 -0
- data/spec/integration/mongo_spec.rb +19 -0
- data/spec/lib/commands/add_metric_spec.rb +31 -0
- data/spec/lib/commands/add_project_spec.rb +10 -0
- data/spec/lib/commands/describe_project_spec.rb +42 -0
- data/spec/lib/commands/edit_property_spec.rb +19 -0
- data/spec/lib/commands/list_projects_spec.rb +47 -0
- data/spec/lib/commands/view_history_spec.rb +64 -0
- data/spec/lib/console_formatter_spec.rb +29 -0
- data/spec/lib/metrics/boolean_metric_spec.rb +9 -0
- data/spec/lib/metrics/metric_spec.rb +26 -0
- data/spec/lib/metrics/number_metric_spec.rb +8 -0
- data/spec/lib/metrics/string_metric_spec.rb +7 -0
- data/spec/lib/project_catalog_spec.rb +23 -0
- data/spec/lib/project_spec.rb +45 -0
- data/spec/lib/storage/metric_mongo_spec.rb +12 -0
- data/spec/lib/storage/project_mongo_spec.rb +11 -0
- data/spec/lib/storage/property_value_mongo_spec.rb +11 -0
- data/spec/spec_helper.rb +8 -0
- metadata +313 -0
data/Gemfile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
source :rubygems
|
2
|
+
|
3
|
+
group :test do
|
4
|
+
gem 'rspec'
|
5
|
+
gem 'cucumber'
|
6
|
+
gem 'autotest'
|
7
|
+
gem 'simplecov'
|
8
|
+
gem 'mongoid-rspec'
|
9
|
+
gem 'aruba'
|
10
|
+
end
|
11
|
+
|
12
|
+
group :development do
|
13
|
+
gem 'pry'
|
14
|
+
gem 'rake'
|
15
|
+
gem 'jeweler'
|
16
|
+
end
|
17
|
+
|
18
|
+
gem 'activesupport'
|
19
|
+
gem 'mongoid', '~> 3.0.0.rc'
|
20
|
+
gem 'bson_ext'
|
21
|
+
gem 'hirb'
|
22
|
+
gem 'gli', '~> 2.0.0.rc'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
ZenTest (4.8.1)
|
5
|
+
activemodel (3.2.6)
|
6
|
+
activesupport (= 3.2.6)
|
7
|
+
builder (~> 3.0.0)
|
8
|
+
activesupport (3.2.6)
|
9
|
+
i18n (~> 0.6)
|
10
|
+
multi_json (~> 1.0)
|
11
|
+
aruba (0.4.11)
|
12
|
+
childprocess (>= 0.2.3)
|
13
|
+
cucumber (>= 1.1.1)
|
14
|
+
ffi (>= 1.0.11)
|
15
|
+
rspec (>= 2.7.0)
|
16
|
+
autotest (4.4.6)
|
17
|
+
ZenTest (>= 4.4.1)
|
18
|
+
bson (1.6.4)
|
19
|
+
bson_ext (1.6.4)
|
20
|
+
bson (~> 1.6.4)
|
21
|
+
builder (3.0.0)
|
22
|
+
childprocess (0.3.2)
|
23
|
+
ffi (~> 1.0.6)
|
24
|
+
coderay (1.0.6)
|
25
|
+
cucumber (1.2.1)
|
26
|
+
builder (>= 2.1.2)
|
27
|
+
diff-lcs (>= 1.1.3)
|
28
|
+
gherkin (~> 2.11.0)
|
29
|
+
json (>= 1.4.6)
|
30
|
+
diff-lcs (1.1.3)
|
31
|
+
ffi (1.0.11)
|
32
|
+
gherkin (2.11.1)
|
33
|
+
json (>= 1.4.6)
|
34
|
+
git (1.2.5)
|
35
|
+
gli (2.0.0.rc4)
|
36
|
+
hirb (0.6.2)
|
37
|
+
i18n (0.6.0)
|
38
|
+
jeweler (1.8.4)
|
39
|
+
bundler (~> 1.0)
|
40
|
+
git (>= 1.2.5)
|
41
|
+
rake
|
42
|
+
rdoc
|
43
|
+
json (1.7.3)
|
44
|
+
method_source (0.7.1)
|
45
|
+
mongoid (3.0.0.rc)
|
46
|
+
activemodel (~> 3.1)
|
47
|
+
moped (~> 1.0.0.rc)
|
48
|
+
origin (~> 1.0.0.rc)
|
49
|
+
tzinfo (~> 0.3.22)
|
50
|
+
mongoid-rspec (1.4.6)
|
51
|
+
mongoid (>= 3.0.0.rc)
|
52
|
+
rake
|
53
|
+
rspec (>= 2.9)
|
54
|
+
moped (1.0.0.rc)
|
55
|
+
multi_json (1.3.6)
|
56
|
+
origin (1.0.1)
|
57
|
+
pry (0.9.9.6)
|
58
|
+
coderay (~> 1.0.5)
|
59
|
+
method_source (~> 0.7.1)
|
60
|
+
slop (>= 2.4.4, < 3)
|
61
|
+
rake (0.9.2.2)
|
62
|
+
rdoc (3.12)
|
63
|
+
json (~> 1.4)
|
64
|
+
rspec (2.10.0)
|
65
|
+
rspec-core (~> 2.10.0)
|
66
|
+
rspec-expectations (~> 2.10.0)
|
67
|
+
rspec-mocks (~> 2.10.0)
|
68
|
+
rspec-core (2.10.1)
|
69
|
+
rspec-expectations (2.10.0)
|
70
|
+
diff-lcs (~> 1.1.3)
|
71
|
+
rspec-mocks (2.10.1)
|
72
|
+
simplecov (0.6.4)
|
73
|
+
multi_json (~> 1.0)
|
74
|
+
simplecov-html (~> 0.5.3)
|
75
|
+
simplecov-html (0.5.3)
|
76
|
+
slop (2.4.4)
|
77
|
+
tzinfo (0.3.33)
|
78
|
+
|
79
|
+
PLATFORMS
|
80
|
+
ruby
|
81
|
+
|
82
|
+
DEPENDENCIES
|
83
|
+
activesupport
|
84
|
+
aruba
|
85
|
+
autotest
|
86
|
+
bson_ext
|
87
|
+
cucumber
|
88
|
+
gli (~> 2.0.0.rc)
|
89
|
+
hirb
|
90
|
+
jeweler
|
91
|
+
mongoid (~> 3.0.0.rc)
|
92
|
+
mongoid-rspec
|
93
|
+
pry
|
94
|
+
rake
|
95
|
+
rspec
|
96
|
+
simplecov
|
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
[![Build Status](https://secure.travis-ci.org/maksar/tc.png)](http://travis-ci.org/maksar/tc)
|
2
|
+
[![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/maksar/tc)
|
3
|
+
|
4
|
+
Technical Coordination project
|
5
|
+
---------------
|
6
|
+
|
7
|
+
This repository contains code, related and useful for performing technical coordination tasks -- collecting informational (technology, start date, current status, etc.) and statistical (unit tests count, unit tests coverage, build time, etc.) information about projects.
|
8
|
+
|
9
|
+
`tc` console tools allows to manage mentioned above information (add projects, edit metrics, etc.). Information itself is stored in `mongodb`. `tc` tool can be used in CI environments to automatically collect metrics (like coverage and build time).
|
10
|
+
|
11
|
+
In future, it is planned to have web interface for doing same operation as with cli `tc` tool. For now, use `tc --help` to get information about supported operations and commands.
|
12
|
+
|
13
|
+
Examples:
|
14
|
+
|
15
|
+
* Add new project
|
16
|
+
|
17
|
+
tc add project_name
|
18
|
+
|
19
|
+
* Add new metric
|
20
|
+
|
21
|
+
tc add_metric --mt number --pn project_name metric_name
|
22
|
+
|
23
|
+
* List unit tests count for all ruby projects
|
24
|
+
|
25
|
+
tc list --fm "{'Name' => 'name', 'Unit tests' => 'property(\"unit tests count\").value'}" "property('technology') == 'ruby'"
|
26
|
+
|
27
|
+
Code is not released as a separate gem, but will be in a nearest future.
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
require 'cucumber/rake/task'
|
3
|
+
|
4
|
+
Cucumber::Rake::Task.new(:cucumber)
|
5
|
+
RSpec::Core::RakeTask.new(:rspec) do |t|
|
6
|
+
t.rspec_opts = ' -r simplecov'
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "Creates bunch of test data in database"
|
10
|
+
task :seed do
|
11
|
+
require_relative 'db/seed'
|
12
|
+
seed
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Run Cucumber & RSpec to generate aggregated coverage"
|
16
|
+
task :default do
|
17
|
+
FileUtils.rm_rf('coverage')
|
18
|
+
|
19
|
+
Rake::Task['rspec'].invoke
|
20
|
+
Rake::Task["cucumber"].invoke
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'jeweler'
|
24
|
+
require_relative 'lib/tc/version'
|
25
|
+
Jeweler::Tasks.new do |gem|
|
26
|
+
gem.name = "techcor"
|
27
|
+
gem.homepage = "http://github.com/maksar/tc"
|
28
|
+
gem.license = "MIT"
|
29
|
+
gem.summary = %Q{Console tool allowing to perform technical coordination activities}
|
30
|
+
gem.description = %Q{This gem provides 'tc' console utility, which allows to collect and manage different metrics on software projects.}
|
31
|
+
gem.email = "Maksar.mail@gmail.com"
|
32
|
+
gem.authors = ["Alexander Shestakov"]
|
33
|
+
|
34
|
+
gem.executables = %w(tc)
|
35
|
+
gem.version = TC::Version::STRING
|
36
|
+
|
37
|
+
gem.files.exclude '.*'
|
38
|
+
gem.files.exclude '*.gemspec'
|
39
|
+
|
40
|
+
gem.add_dependency 'mongoid', '~> 3.0.0.rc'
|
41
|
+
gem.add_dependency 'bson_ext'
|
42
|
+
gem.add_dependency 'hirb'
|
43
|
+
gem.add_dependency 'gli', '~> 2.0.0.rc'
|
44
|
+
end
|
45
|
+
Jeweler::RubygemsDotOrgTasks.new
|
data/bin/tc
ADDED
data/config/cucumber.yml
ADDED
data/config/mongoid.yml
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
development:
|
2
|
+
sessions:
|
3
|
+
default:
|
4
|
+
hosts:
|
5
|
+
- localhost:27017
|
6
|
+
database: tc_development
|
7
|
+
logger: false
|
8
|
+
options:
|
9
|
+
raise_not_found_error: false
|
10
|
+
|
11
|
+
test:
|
12
|
+
sessions:
|
13
|
+
default:
|
14
|
+
hosts:
|
15
|
+
- localhost:27017
|
16
|
+
database: tc_test
|
17
|
+
logger: false
|
18
|
+
options:
|
19
|
+
raise_not_found_error: false
|
20
|
+
|
21
|
+
production:
|
22
|
+
sessions:
|
23
|
+
default:
|
24
|
+
hosts:
|
25
|
+
- localhost:27017
|
26
|
+
database: tc_production
|
27
|
+
logger: false
|
28
|
+
options:
|
29
|
+
raise_not_found_error: false
|
@@ -0,0 +1,29 @@
|
|
1
|
+
development:
|
2
|
+
sessions:
|
3
|
+
default:
|
4
|
+
hosts:
|
5
|
+
- localhost:27017
|
6
|
+
database: tc_development
|
7
|
+
logger: false
|
8
|
+
options:
|
9
|
+
raise_not_found_error: false
|
10
|
+
|
11
|
+
test:
|
12
|
+
sessions:
|
13
|
+
default:
|
14
|
+
hosts:
|
15
|
+
- localhost:27017
|
16
|
+
database: tc_test
|
17
|
+
logger: false
|
18
|
+
options:
|
19
|
+
raise_not_found_error: false
|
20
|
+
|
21
|
+
production:
|
22
|
+
sessions:
|
23
|
+
default:
|
24
|
+
hosts:
|
25
|
+
- localhost:27017
|
26
|
+
database: tc_production
|
27
|
+
logger: false
|
28
|
+
options:
|
29
|
+
raise_not_found_error: false
|
data/db/seed.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
ENV['RACK_ENV'] ||= 'development'
|
2
|
+
|
3
|
+
require_relative '../lib/tc'
|
4
|
+
|
5
|
+
def seed
|
6
|
+
Project.delete_all
|
7
|
+
|
8
|
+
user = 'a.shestakov'
|
9
|
+
|
10
|
+
ProjectCatalog.new.
|
11
|
+
add_project(
|
12
|
+
Project.new(name: 'TC').
|
13
|
+
add_metric(StringMetric.new(name: 'Technology').edit('Ruby', user)).
|
14
|
+
add_metric(BooleanMetric.new(name: 'Active').edit(true, user)).
|
15
|
+
add_metric(StringMetric.new(name: 'SCM').edit('http://github.com/maksar/tc', user)).
|
16
|
+
add_metric(StringMetric.new(name: 'CI').edit('http://travis-ci.org/#!/maksar/tc', user)).
|
17
|
+
add_metric(NumberMetric.new(name: 'Unit Tests Coverage').edit(98.55, user)).
|
18
|
+
add_metric(NumberMetric.new(name: 'Unit Tests Count').edit(40, user)).
|
19
|
+
add_metric(NumberMetric.new(name: 'Cucumber Tests Coverage').edit(92.68, user)).
|
20
|
+
add_metric(NumberMetric.new(name: 'Cucumber Tests Count').edit(10, user)).
|
21
|
+
add_metric(NumberMetric.new(name: 'Tests Coverage').edit(100, user)).
|
22
|
+
edit_property('Unit Tests Count', 45, user).
|
23
|
+
edit_property('Unit Tests Count', 60, user).
|
24
|
+
edit_property('Unit Tests Count', 100, user).
|
25
|
+
edit_property('Unit Tests Coverage', 99, user).
|
26
|
+
edit_property('Unit Tests Coverage', 100, user)
|
27
|
+
).
|
28
|
+
add_project(Project.new(name: 'Anagrams').
|
29
|
+
add_metric(StringMetric.new(name: 'Technology').edit('Ruby', user)).
|
30
|
+
add_metric(BooleanMetric.new(name: 'Active').edit(false, user)).
|
31
|
+
add_metric(StringMetric.new(name: 'SCM').edit('http://github.com/maksar/anagrams', user)).
|
32
|
+
add_metric(StringMetric.new(name: 'CI').edit('http://travis-ci.org/#!/maksar/anagrams', user)).
|
33
|
+
add_metric(NumberMetric.new(name: 'Unit Tests Coverage').edit(100, user)).
|
34
|
+
add_metric(NumberMetric.new(name: 'Unit Tests Count').edit(6, user)).
|
35
|
+
add_metric(NumberMetric.new(name: 'Tests Coverage').edit(100, 'john.dow'))).
|
36
|
+
save
|
37
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Adding metric
|
2
|
+
In order to add new metric to the project
|
3
|
+
As a console user
|
4
|
+
I want to be able to do that
|
5
|
+
|
6
|
+
Scenario: adding metric
|
7
|
+
Given catalog filled by seeds script
|
8
|
+
When I execute cli "add_metric --pn TC --mt number new_metric"
|
9
|
+
Then the cli output should contain "Metric new_metric with type number was successfully added to project TC."
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Adding project
|
2
|
+
In order to add new project
|
3
|
+
As a console user
|
4
|
+
I want to be able to do that
|
5
|
+
|
6
|
+
Scenario: adding project
|
7
|
+
Given no projects in catalog
|
8
|
+
When I execute cli "add TC"
|
9
|
+
Then the cli output should contain "Project TC was successfully added."
|
@@ -0,0 +1,58 @@
|
|
1
|
+
Feature: console command
|
2
|
+
In order to do technical coordination
|
3
|
+
As a console user
|
4
|
+
I want use cli (command line interface)
|
5
|
+
|
6
|
+
Scenario: View general help in cli
|
7
|
+
When I execute cli "help"
|
8
|
+
Then the cli output should contain "Command Line Interface for Technical Coordination"
|
9
|
+
And the cli output should contain "[global options] command [command options] [arguments...]"
|
10
|
+
And the output have option "add" with description "Adds new project"
|
11
|
+
And the output have option "add_metric" with description "Adds new metric to the project"
|
12
|
+
And the output have option "edit_property" with description "Edits one metric of the project"
|
13
|
+
And the output have option "list" with description "List projects from catalog"
|
14
|
+
|
15
|
+
Scenario: View help of add command
|
16
|
+
When I execute cli "help add"
|
17
|
+
Then the cli output should contain "Adds new project"
|
18
|
+
And the cli output should contain "add [command options] {project_name}"
|
19
|
+
And the cli output should contain "Adds new project"
|
20
|
+
And the cli output should contain "Allows to create new project"
|
21
|
+
|
22
|
+
Scenario: View help of add_metric command
|
23
|
+
When I execute cli "help add_metric"
|
24
|
+
Then the cli output should contain "add_metric [command options] {metric_name}"
|
25
|
+
And the cli output should contain "Adds new metric to the project"
|
26
|
+
And the cli output should contain "Allows to add new metric to the project"
|
27
|
+
And the output should have flag "mt/metric_type" with name "metric type" and description "type of the metric you want to add (string, number, boolean) (default: string)"
|
28
|
+
And the output should have flag "pn/project_name" with name "project name" and description "name of the project, to which you want to add metric"
|
29
|
+
|
30
|
+
Scenario: View help of edit_property command
|
31
|
+
When I execute cli "help edit_property"
|
32
|
+
Then the cli output should contain "edit_property [command options] {value}"
|
33
|
+
And the cli output should contain "Edits one metric of the project"
|
34
|
+
And the cli output should contain "Allows to edit one of the project's metrics"
|
35
|
+
And the output should have flag "mn/metric_name" with name "metric name" and description "name of the metric, which you want to edit"
|
36
|
+
And the output should have flag "pn/project_name" with name "project name" and description "name of the project, property of which you want to edit"
|
37
|
+
|
38
|
+
Scenario: View help of list command
|
39
|
+
When I execute cli "help list"
|
40
|
+
Then the cli output should contain "list [command options] {criteria}"
|
41
|
+
And the cli output should contain "List projects from catalog"
|
42
|
+
And the cli output should contain "Lists projects from catalog matching specified criteria"
|
43
|
+
And the output should have flag "fm/format" with name "table format" and description "ruby code for table format"
|
44
|
+
|
45
|
+
Scenario: View help of history command
|
46
|
+
When I execute cli "help history"
|
47
|
+
Then the cli output should contain "history [command options] [{property}],[{another_property}],[...]"
|
48
|
+
And the cli output should contain "Displays property history"
|
49
|
+
And the cli output should contain "Displays one or more properties history (list of values over time)"
|
50
|
+
And the output should have flag "pn/project_name" with name "project name" and description "name of the project, property of which you want to edit"
|
51
|
+
And the output should have flag "df/date_format" with name "date format" and description "ruby date format to display time of change (default: %d-%m-%Y)"
|
52
|
+
|
53
|
+
Scenario: View help of describe command
|
54
|
+
When I execute cli "help describe"
|
55
|
+
Then the cli output should contain "describe [command options] {project_name}"
|
56
|
+
And the cli output should contain "Describes current state of the project"
|
57
|
+
And the cli output should contain "Displays current metrics of the project, date and author of last modification"
|
58
|
+
And the output should have flag "df/date_format" with name "date format" and description "ruby date format to display time of change (default: %d-%m-%Y)"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Feature: Describing project
|
2
|
+
In order to view project metrics
|
3
|
+
As a console user
|
4
|
+
I want to see state of all current project metrics
|
5
|
+
|
6
|
+
Scenario: describing project
|
7
|
+
Given catalog filled by seeds script
|
8
|
+
When I execute cli "describe --df ---- TC"
|
9
|
+
Then the cli output should contain:
|
10
|
+
"""
|
11
|
+
+-------------------------+-----------------------------------+------------+-------------+
|
12
|
+
| Metric | Value | Changed at | Changed by |
|
13
|
+
+-------------------------+-----------------------------------+------------+-------------+
|
14
|
+
| Technology | Ruby | ---- | a.shestakov |
|
15
|
+
| Active | true | ---- | a.shestakov |
|
16
|
+
| SCM | http://github.com/maksar/tc | ---- | a.shestakov |
|
17
|
+
| CI | http://travis-ci.org/#!/maksar/tc | ---- | a.shestakov |
|
18
|
+
| Unit Tests Coverage | 100.0 | ---- | a.shestakov |
|
19
|
+
| Unit Tests Count | 100.0 | ---- | a.shestakov |
|
20
|
+
| Cucumber Tests Coverage | 92.68 | ---- | a.shestakov |
|
21
|
+
| Cucumber Tests Count | 10.0 | ---- | a.shestakov |
|
22
|
+
| Tests Coverage | 100.0 | ---- | a.shestakov |
|
23
|
+
+-------------------------+-----------------------------------+------------+-------------+
|
24
|
+
9 rows in set
|
25
|
+
"""
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Edit property
|
2
|
+
In order to edit property of the project
|
3
|
+
As a console user
|
4
|
+
I want to be able to do that
|
5
|
+
|
6
|
+
Scenario: editing property
|
7
|
+
Given catalog filled by seeds script
|
8
|
+
When I execute cli "edit_property --pn TC --mn Technology RoR"
|
9
|
+
Then the cli output should contain "Metric Technology in project TC now has value RoR."
|
@@ -0,0 +1,69 @@
|
|
1
|
+
Feature: Listing projects in console
|
2
|
+
In order to view projects by criteria
|
3
|
+
As a console user
|
4
|
+
I want to specify criteria and see list of the projects
|
5
|
+
|
6
|
+
Scenario: listing empty project catalog with empty criteria
|
7
|
+
Given no projects in catalog
|
8
|
+
When I execute cli "list --fm "{'Name' => 'name', 'Count' => '\\'Count: \\' + property(\\'Unit Tests Count\\').value.to_s'}" "
|
9
|
+
Then the cli output should contain "0 rows in set"
|
10
|
+
|
11
|
+
Scenario: listing empty project catalog with specified criteria
|
12
|
+
Given no projects in catalog
|
13
|
+
When I execute cli "list --fm "{'Name' => 'name', 'Count' => '\\'Count: \\' + property(\\'Unit Tests Count\\').value.to_s'}" "property('Unit Tests Count').value == 1""
|
14
|
+
Then the cli output should contain "0 rows in set"
|
15
|
+
|
16
|
+
Scenario: listing projects catalog with empty criteria
|
17
|
+
Given catalog filled by seeds script
|
18
|
+
When I execute cli "list --fm "{'Name' => 'name', 'Count' => '\\'Count: \\' + property(\\'Unit Tests Count\\').value.to_s'}" "
|
19
|
+
Then the cli output should contain:
|
20
|
+
"""
|
21
|
+
+----------+--------------+
|
22
|
+
| Name | Count |
|
23
|
+
+----------+--------------+
|
24
|
+
| Anagrams | Count: 6.0 |
|
25
|
+
| TC | Count: 100.0 |
|
26
|
+
+----------+--------------+
|
27
|
+
2 rows in set
|
28
|
+
"""
|
29
|
+
|
30
|
+
Scenario: listing projects catalog with simple criteria
|
31
|
+
Given catalog filled by seeds script
|
32
|
+
When I execute cli "list --fm "{'Name' => 'name', 'Count' => '\\'Count: \\' + property(\\'Unit Tests Count\\').value.to_s'}" "property('Unit Tests Count').value == 6""
|
33
|
+
Then the cli output should contain:
|
34
|
+
"""
|
35
|
+
+----------+------------+
|
36
|
+
| Name | Count |
|
37
|
+
+----------+------------+
|
38
|
+
| Anagrams | Count: 6.0 |
|
39
|
+
+----------+------------+
|
40
|
+
1 row in set
|
41
|
+
"""
|
42
|
+
|
43
|
+
Scenario: listing projects catalog with complex criteria
|
44
|
+
Given catalog filled by seeds script
|
45
|
+
When I execute cli "list --fm "{'Name' => 'name', 'Count' => '\\'Count: \\' + property(\\'Unit Tests Count\\').value.to_s'}" "property('Unit Tests Count').value == 6 || property('Unit Tests Count').value == 100""
|
46
|
+
Then the cli output should contain:
|
47
|
+
"""
|
48
|
+
+----------+--------------+
|
49
|
+
| Name | Count |
|
50
|
+
+----------+--------------+
|
51
|
+
| Anagrams | Count: 6.0 |
|
52
|
+
| TC | Count: 100.0 |
|
53
|
+
+----------+--------------+
|
54
|
+
2 rows in set
|
55
|
+
"""
|
56
|
+
|
57
|
+
Scenario: listing projects catalog with empty format
|
58
|
+
Given catalog filled by seeds script
|
59
|
+
When I execute cli "list"
|
60
|
+
Then the cli output should contain:
|
61
|
+
"""
|
62
|
+
+----------+------------+--------+-----------------------------------+-----------------------------------------+---------------------+------------------+----------------+-------------------------+----------------------+
|
63
|
+
| Name | Technology | Active | SCM | CI | Unit Tests Coverage | Unit Tests Count | Tests Coverage | Cucumber Tests Coverage | Cucumber Tests Count |
|
64
|
+
+----------+------------+--------+-----------------------------------+-----------------------------------------+---------------------+------------------+----------------+-------------------------+----------------------+
|
65
|
+
| Anagrams | Ruby | false | http://github.com/maksar/anagrams | http://travis-ci.org/#!/maksar/anagrams | 100.0 | 6.0 | 100.0 | | |
|
66
|
+
| TC | Ruby | true | http://github.com/maksar/tc | http://travis-ci.org/#!/maksar/tc | 100.0 | 100.0 | 100.0 | 92.68 | 10.0 |
|
67
|
+
+----------+------------+--------+-----------------------------------+-----------------------------------------+---------------------+------------------+----------------+-------------------------+----------------------+
|
68
|
+
2 rows in set
|
69
|
+
"""
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Feature: Property history
|
2
|
+
In order to view property history
|
3
|
+
As a console user
|
4
|
+
I want to specify property(ies) and see its history
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given catalog filled by seeds script
|
8
|
+
|
9
|
+
Scenario: trying to list non-existing property
|
10
|
+
When I execute cli "history --pn TC --df ---- "non existing property""
|
11
|
+
Then the cli output should contain "0 rows in set"
|
12
|
+
|
13
|
+
Scenario: listing property history
|
14
|
+
When I execute cli "history --pn TC --df ---- "Unit Tests Count""
|
15
|
+
Then the cli output should contain:
|
16
|
+
"""
|
17
|
+
+------+------------------+
|
18
|
+
| Date | Unit Tests Count |
|
19
|
+
+------+------------------+
|
20
|
+
| ---- | 40.0 |
|
21
|
+
| ---- | 45.0 |
|
22
|
+
| ---- | 60.0 |
|
23
|
+
| ---- | 100.0 |
|
24
|
+
+------+------------------+
|
25
|
+
4 rows in set
|
26
|
+
"""
|
27
|
+
|
28
|
+
Scenario: listing all properties history
|
29
|
+
When I execute cli "history --pn TC --df ----"
|
30
|
+
Then the cli output should contain:
|
31
|
+
"""
|
32
|
+
+------+------------+--------+-----------------------------+-----------------------------------+---------------------+------------------+-------------------------+----------------------+----------------+
|
33
|
+
| Date | Technology | Active | SCM | CI | Unit Tests Coverage | Unit Tests Count | Cucumber Tests Coverage | Cucumber Tests Count | Tests Coverage |
|
34
|
+
+------+------------+--------+-----------------------------+-----------------------------------+---------------------+------------------+-------------------------+----------------------+----------------+
|
35
|
+
| ---- | Ruby | | | | | | | | |
|
36
|
+
| ---- | | true | | | | | | | |
|
37
|
+
| ---- | | | http://github.com/maksar/tc | | | | | | |
|
38
|
+
| ---- | | | | http://travis-ci.org/#!/maksar/tc | | | | | |
|
39
|
+
| ---- | | | | | 98.55 | | | | |
|
40
|
+
| ---- | | | | | 99.0 | | | | |
|
41
|
+
| ---- | | | | | 100.0 | | | | |
|
42
|
+
| ---- | | | | | | 40.0 | | | |
|
43
|
+
| ---- | | | | | | 45.0 | | | |
|
44
|
+
| ---- | | | | | | 60.0 | | | |
|
45
|
+
| ---- | | | | | | 100.0 | | | |
|
46
|
+
| ---- | | | | | | | 92.68 | | |
|
47
|
+
| ---- | | | | | | | | 10.0 | |
|
48
|
+
| ---- | | | | | | | | | 100.0 |
|
49
|
+
+------+------------+--------+-----------------------------+-----------------------------------+---------------------+------------------+-------------------------+----------------------+----------------+
|
50
|
+
14 rows in set
|
51
|
+
"""
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: rake support
|
2
|
+
In order to do technical coordination
|
3
|
+
As a console user
|
4
|
+
I want use rake tasks
|
5
|
+
|
6
|
+
Scenario: View list of rake commands
|
7
|
+
When I run `rake -T`
|
8
|
+
And the output should contain rake command "default" with description "Run Cucumber & RSpec to generate aggregated coverage"
|
9
|
+
And the output should contain rake command "cucumber" with description "Run Cucumber features"
|
10
|
+
And the output should contain rake command "rspec" with description "Run RSpec code examples"
|
11
|
+
And the output should contain rake command "seed" with description "Creates bunch of test data in database"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: rake seed task
|
2
|
+
In order to do technical coordination
|
3
|
+
As a console user
|
4
|
+
I want use seed rake task
|
5
|
+
|
6
|
+
Scenario: Generate seed data in database
|
7
|
+
Given catalog filled by seeds script
|
8
|
+
When I execute cli "list"
|
9
|
+
Then the cli output should contain "2 rows in set"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
When /^I execute cli "(.*)"$/ do |command|
|
2
|
+
old_stdout = $stdout
|
3
|
+
$stdout = Tempfile.new("")
|
4
|
+
|
5
|
+
TcCli.exec Shellwords.shellwords command
|
6
|
+
|
7
|
+
$stdout.rewind
|
8
|
+
@console = $stdout.readlines.join
|
9
|
+
$stdout = old_stdout
|
10
|
+
end
|
11
|
+
|
12
|
+
Then /^the cli output should contain "(.*)"$/ do |text|
|
13
|
+
@console.should include text
|
14
|
+
end
|
15
|
+
|
16
|
+
Then /^the cli output should match \/(.*)\/$/ do |text|
|
17
|
+
@console.should =~ Regexp.new(text)
|
18
|
+
end
|
19
|
+
|
20
|
+
Then /^the cli output should contain:$/ do |text|
|
21
|
+
@console.should include text
|
22
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Then /^the output have option "(\w+)" with description "(.*)"$/ do |option, description|
|
2
|
+
step "the cli output should match /#{option}\\s+- #{Regexp.quote description}/"
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^the output should have flag "(\w+)\/(\w+)" with name "(.*)" and description "(.*)"$/ do |short_flag, long_flag, name, description|
|
6
|
+
step "the cli output should match /--#{Regexp.quote short_flag}, --#{Regexp.quote long_flag}=#{Regexp.quote name}[\\s]+- #{Regexp.quote description}/"
|
7
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AddMetric < Struct.new :project_name, :type, :name
|
2
|
+
def call project = project, metric = metric
|
3
|
+
project.add_metric(metric)
|
4
|
+
end
|
5
|
+
|
6
|
+
def project project_name = project_name
|
7
|
+
Project.find_by(name: project_name)
|
8
|
+
end
|
9
|
+
|
10
|
+
def metric metric_class = metric_class, name = name
|
11
|
+
metric_class.new name: name
|
12
|
+
end
|
13
|
+
|
14
|
+
def metric_class type = type
|
15
|
+
"#{type}Metric".classify.constantize
|
16
|
+
end
|
17
|
+
end
|