kapnismology 0.0.1
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.
- checksums.yaml +7 -0
- data/README.md +55 -0
- data/Rakefile +34 -0
- data/app/controllers/kapnismology/application_controller.rb +4 -0
- data/app/controllers/kapnismology/smoke_tests_controller.rb +8 -0
- data/config/routes.rb +3 -0
- data/lib/kapnismology.rb +8 -0
- data/lib/kapnismology/engine.rb +15 -0
- data/lib/kapnismology/evaluation.rb +19 -0
- data/lib/kapnismology/result.rb +22 -0
- data/lib/kapnismology/smoke_test.rb +53 -0
- data/lib/kapnismology/version.rb +3 -0
- data/lib/tasks/kapnismology_tasks.rake +5 -0
- metadata +112 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a662a1647e4ff01d3de77f9161a447a3341ffa4f
|
4
|
+
data.tar.gz: 730c6710054f95a57c72cff0a89f40ab19df018a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e66ded22c30d6eb294165e0d5c62215be82ae8fcf059d49ae7a6afc54dc246247bf24c6fdc4b5112f98b39d13efb964a5fa20b4eb17effd12be101e29caba029
|
7
|
+
data.tar.gz: 79f7130926266fcd9de53c854f70d05e04523b82af428a73eee0b538f520e80a6ced0d1c6fc8c9e4b59d8b7ca65a53309d2ef3dc90c0820a65d05cbba67fc33b
|
data/README.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# Kapnismology
|
2
|
+
|
3
|
+
Kapnismology 'the study of smoke', is a gem which contains an engine to easily create smoke tests.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Kapnismology only supports Rails.
|
8
|
+
In the Gemfile write:
|
9
|
+
```
|
10
|
+
gem 'kapnismology', git: 'git@github.com:mdsol/kapnismology.git'
|
11
|
+
```
|
12
|
+
|
13
|
+
In your config/routes write:
|
14
|
+
|
15
|
+
```
|
16
|
+
mount Kapnismology::Engine, at: "/smoke_test"
|
17
|
+
```
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Access the path '/smoke_test' to see the results of the smoke_test
|
22
|
+
|
23
|
+
|
24
|
+
## Adding more smoke tests
|
25
|
+
|
26
|
+
Create a class like this:
|
27
|
+
```
|
28
|
+
class MySmokeTest < Kapnismology::SmokeTest
|
29
|
+
|
30
|
+
def self.name
|
31
|
+
'my_test'
|
32
|
+
end
|
33
|
+
|
34
|
+
def result
|
35
|
+
"BOOO"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
The class must:
|
41
|
+
- Inherit from `Kapnismology::SmokeTest`
|
42
|
+
- Have a method `self.name` returning a string
|
43
|
+
- Have an instance method `result` returning a Kapnismology::Result object
|
44
|
+
|
45
|
+
Any class created this way will be called and its result will be added to a resulting hash.
|
46
|
+
In this case the result of this class would be added to the result as:
|
47
|
+
```
|
48
|
+
{'my_test' => 'BOOO'}
|
49
|
+
```
|
50
|
+
|
51
|
+
## TODO
|
52
|
+
|
53
|
+
- rspecs
|
54
|
+
- Automount routes
|
55
|
+
- Hypermedia output
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Kapnismology'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
Bundler::GemHelper.install_tasks
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
|
26
|
+
Rake::TestTask.new(:test) do |t|
|
27
|
+
t.libs << 'lib'
|
28
|
+
t.libs << 'test'
|
29
|
+
t.pattern = 'test/**/*_test.rb'
|
30
|
+
t.verbose = false
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
task default: :test
|
data/config/routes.rb
ADDED
data/lib/kapnismology.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#Engines blow up when being autoloaded by Rails and at the same time loaded by other gems
|
2
|
+
unless defined?(Kapnismology::Engine)
|
3
|
+
require "kapnismology/engine"
|
4
|
+
end
|
5
|
+
require 'contracts'
|
6
|
+
require 'kapnismology/result'
|
7
|
+
require 'kapnismology/evaluation'
|
8
|
+
require 'kapnismology/smoke_test'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Kapnismology
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
initializer "kapnismology.add_autoload_paths", before: :set_autoload_paths do |app|
|
4
|
+
app.config.eager_load_paths += Dir["#{app.config.root}/lib/**/*"]
|
5
|
+
end
|
6
|
+
|
7
|
+
# config.eager_load_paths += Dir["#{app.config.root}/lib/**/*"]
|
8
|
+
isolate_namespace Kapnismology
|
9
|
+
Rails.application.routes.draw do
|
10
|
+
mount Kapnismology::Engine, at: "/smoke_test"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Kapnismology
|
2
|
+
|
3
|
+
# Mapping of test_name => result for each smoke test
|
4
|
+
class Evaluation
|
5
|
+
include Contracts
|
6
|
+
extend Forwardable
|
7
|
+
attr_reader :test_name
|
8
|
+
def_delegators :@result, :data, :passed, :message
|
9
|
+
|
10
|
+
# Contract String, Any
|
11
|
+
def initialize(test_name, result)
|
12
|
+
@test_name, @result = test_name, result
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_json
|
16
|
+
{test_name => @result.to_hash}.to_json
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Kapnismology
|
2
|
+
|
3
|
+
# This is the result of each smoke test.
|
4
|
+
# This class makes sense to enforce smoke test to return something known
|
5
|
+
# Params of the constructor:
|
6
|
+
# * data : Typically Array or Hash representing the result of the test
|
7
|
+
# * passed : Boolean: true -> test passed, false -> test failed
|
8
|
+
# * message: String: extra message set by the test if it wants to provide more information
|
9
|
+
class Result
|
10
|
+
include Contracts
|
11
|
+
attr_reader :data, :passed, :message
|
12
|
+
|
13
|
+
# Contract Any, Bool, String => nil
|
14
|
+
def initialize(data, passed, message)
|
15
|
+
@data, @passed, @message = data, passed, message
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_hash
|
19
|
+
{result: @data, passed: @passed, message: @message}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
module Kapnismology
|
3
|
+
|
4
|
+
class RakeTask
|
5
|
+
def output
|
6
|
+
evaluations = SmokeTest.result
|
7
|
+
evaluations.each do |evaluation|
|
8
|
+
puts "The smoke test #{evaluation.test_name} #{passed_or_failed(evaluation.passed)}"
|
9
|
+
puts evaluation.message
|
10
|
+
puts
|
11
|
+
end
|
12
|
+
all_passed = evaluations.map(&:passed).inject{|m, result| m && result}
|
13
|
+
fail 'We have some failures in our smoke tests' unless all_passed
|
14
|
+
end
|
15
|
+
|
16
|
+
def passed_or_failed(passed)
|
17
|
+
passed ? "passed" : "failed"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# This is the base class for all the smoke tests.
|
23
|
+
# Inherit from this class and implement the result and self.name method
|
24
|
+
#
|
25
|
+
class SmokeTest
|
26
|
+
|
27
|
+
def result
|
28
|
+
raise 'this method has to be implemented in inherited classes'
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.name
|
32
|
+
raise 'this method has to be implemented in inherited classes'
|
33
|
+
end
|
34
|
+
|
35
|
+
class << self
|
36
|
+
|
37
|
+
def inherited(klass)
|
38
|
+
smoke_tests << klass
|
39
|
+
end
|
40
|
+
|
41
|
+
def smoke_tests
|
42
|
+
@smoke_tests ||= []
|
43
|
+
end
|
44
|
+
|
45
|
+
def result
|
46
|
+
smoke_tests.inject([]) do |memo, smoke_test|
|
47
|
+
memo.push(Evaluation.new(smoke_test.name, smoke_test.new.result))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kapnismology
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jordi Polo Carres
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: contracts
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.0'
|
69
|
+
description: Engine for smoke tests and base classes
|
70
|
+
email:
|
71
|
+
- mumismo@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- README.md
|
77
|
+
- Rakefile
|
78
|
+
- app/controllers/kapnismology/application_controller.rb
|
79
|
+
- app/controllers/kapnismology/smoke_tests_controller.rb
|
80
|
+
- config/routes.rb
|
81
|
+
- lib/kapnismology.rb
|
82
|
+
- lib/kapnismology/engine.rb
|
83
|
+
- lib/kapnismology/evaluation.rb
|
84
|
+
- lib/kapnismology/result.rb
|
85
|
+
- lib/kapnismology/smoke_test.rb
|
86
|
+
- lib/kapnismology/version.rb
|
87
|
+
- lib/tasks/kapnismology_tasks.rake
|
88
|
+
homepage: https://www.github.com/JordiPolo/kapnismology
|
89
|
+
licenses: []
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 2.2.2
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: Engine for smoke tests.
|
111
|
+
test_files: []
|
112
|
+
has_rdoc:
|