serial-spec 0.1.0 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d420daa546e3f3664a47b3fbf0cecfbd1e1cfb35
4
- data.tar.gz: da5e11f12b70238e0487ce271e82af4606943244
3
+ metadata.gz: 3d9c458412bfc5b202178846361975ee2ca36196
4
+ data.tar.gz: 59dd3ffca3fae26727f6837b4d25bde4839f5c94
5
5
  SHA512:
6
- metadata.gz: 9039bd7c95061aea2b5e783ee11b3577a0eeecc5226bc759078acc0cbdebc46f5574eafc27503901833a0ce67740480fbe27ddbbce218aecede8b20ca5812337
7
- data.tar.gz: 84ccc77ac3612457c7e8e239996f3a6bfe5cacaad0b8593d9bf067f0706abf24e8fb6e7b5eea70e5696e54721c906112cb5726305503c7e867d218a5e8508dca
6
+ metadata.gz: f5b90548ffbf738176e7e978d08943dc7c97ee6ac27747cd2b8e1208be228cb71b51f96345753ca8205445bef259008888bf1a18017328d80c5ae7301c818206
7
+ data.tar.gz: 047f0f724a992e8e514845374e4529064344a7a190a63625d7721bb8dce60c66c5e5bcaf1dd665673a86416e480d9a381b7b474c9be370445c0f5c72d8e836ce
data/Gemfile CHANGED
@@ -1,4 +1,14 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ group :development do
4
+ gem "bundler", "~> 1.8"
5
+ gem "byebug"
6
+ gem "rake", "~> 10.0"
7
+ end
8
+
9
+ group :test do
10
+ gem "rack-test", "~> 0.6.3"
11
+ gem "rspec", "~> 3.2"
12
+
3
13
  # Specify your gem's dependencies in serial-spec.gemspec
4
14
  gemspec
data/README.md CHANGED
@@ -1,15 +1,30 @@
1
1
  # SerialSpec
2
2
 
3
- SerialSpec is designed provide some simple matchers and macros overlaying a simple `rack/test` setup for testing json apis more effectively. There are a few good requirements to get you going:
4
-
5
- * Rspec 3.x. This gem uses (or will use) several parts of rspecs syntax.
6
- * Json api
7
- * ActiveModelSerializers
8
- * Single request testing pattern test architecture.
3
+ SerialSpec is designed provide some simple matchers and macros overlaying a simple `rack/test` setup for testing json apis more effectively.
9
4
 
10
5
  ## Usage
11
6
 
12
- see [examples](https://github.com/blakechambers/serial-spec/blob/master/spec/serial_spec_spec.rb).
7
+ ```ruby
8
+ require "spec_helper"
9
+
10
+ RSpec.describe "test" do
11
+ include SerialSpec
12
+
13
+ request_method "GET"
14
+ request_path "/"
15
+
16
+ it_expects(:content_encoding) { expect(status).to eq(200) }
17
+ it_expects(:content_type) { expect(status).to eq(200) }
18
+ end
19
+ ```
20
+
21
+ ## 0.2.0 - planned
22
+
23
+ - [x] `request_response`
24
+ - [x] `with_request`
25
+ - [x] `it_expects`
26
+ - [x] better response selector support
27
+ - [ ] provides_matcher
13
28
 
14
29
  ## Testing architecture
15
30
 
@@ -0,0 +1,63 @@
1
+ require "json"
2
+ require "active_support/core_ext/hash/indifferent_access"
3
+
4
+ module SerialSpec
5
+
6
+ class ParsedBody
7
+
8
+ attr_reader :raw_body
9
+ attr_reader :selector
10
+
11
+ def initialize(body)
12
+ @selector = []
13
+ @raw_body = JSON.parse(body)
14
+ end
15
+
16
+ def self.add_selector(*methuds)
17
+ methuds.each do |methud|
18
+ class_eval <<-METHOD
19
+ def #{methud.to_s}(*args)
20
+ selector.push([#{methud.to_sym}, args])
21
+ self
22
+ end
23
+ METHOD
24
+ end
25
+ end
26
+
27
+ add_selector :first, :last, :[]
28
+
29
+ def [](*args)
30
+ selector.push([:[], *args])
31
+ self
32
+ end
33
+
34
+ def first(*args)
35
+ selector.push([:first])
36
+ self
37
+ end
38
+
39
+ def last(*args)
40
+ selector.push([:last])
41
+ self
42
+ end
43
+
44
+ def execute
45
+ copy = selector.clone
46
+ selector.clear
47
+ copy.inject(raw_body) do |remainder, method_and_args|
48
+ begin
49
+ methud, *args = method_and_args
50
+ if remainder.kind_of?(Hash)
51
+ remainder.with_indifferent_access.send methud, *args
52
+ else
53
+ remainder.send methud, *args
54
+ end
55
+ rescue NoMethodError => ex
56
+ raise ArgumentError, "could not find '#{methud.inspect}' \nfor:\n '#{remainder.inspect}' \nin\n #{raw_body}"
57
+ end
58
+ end
59
+ end
60
+
61
+ end
62
+
63
+ end
@@ -0,0 +1,76 @@
1
+ require "rack/test"
2
+ require "inheritable_accessors/inheritable_hash_accessor"
3
+
4
+ module SerialSpec
5
+ module RequestResponse
6
+ extend ActiveSupport::Concern
7
+ include Rack::Test::Methods
8
+ include InheritableAccessors::InheritableHashAccessor
9
+
10
+ included do
11
+ include ::SerialSpec::RequestResponse::DSL
12
+ extend ::SerialSpec::RequestResponse::DSL
13
+
14
+ inheritable_hash_accessor :request_opts
15
+ inheritable_hash_accessor :request_params
16
+ inheritable_hash_accessor :request_envs
17
+ end
18
+
19
+ def perform_request!
20
+ env = request_envs.merge(:method => request_method, :params => request_params.to_hash)
21
+ env = current_session.send :env_for, request_path, env
22
+
23
+ current_session.send :process_request, request_path, env
24
+ end
25
+
26
+ module DSL
27
+
28
+ def request_path(new_path=nil)
29
+ if new_path
30
+ request_opts[:path] = new_path
31
+ else
32
+ path = request_opts[:path]
33
+ return path if path
34
+ raise "You must configure a path"
35
+ end
36
+ end
37
+
38
+ # GET, POST, PUT, DELETE, OPTIONS, HEAD
39
+ def request_method(new_method=nil)
40
+ if new_method
41
+ request_opts[:method] = new_method
42
+ else
43
+ methud = request_opts[:method]
44
+ return methud if methud
45
+ raise "You must configure a request method"
46
+ end
47
+ end
48
+
49
+
50
+ end
51
+
52
+ module Helpers
53
+ extend ActiveSupport::Concern
54
+
55
+ def status
56
+ response.status
57
+ end
58
+
59
+ def headers
60
+ response.headers
61
+ end
62
+
63
+ def response
64
+ last_response
65
+ end
66
+
67
+ def body
68
+ @body ||= begin
69
+ JSON.parse(response.body)
70
+ end
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+ end
@@ -1,5 +1,3 @@
1
- module Serial
2
- module Spec
3
- VERSION = "0.1.0"
4
- end
5
- end
1
+ module SerialSpec
2
+ VERSION = "0.1.1"
3
+ end
data/lib/serial_spec.rb CHANGED
@@ -1,8 +1,42 @@
1
1
  require "active_support/concern"
2
2
  require "serial_spec/version"
3
3
  require "serial_spec/it_expects"
4
+ require "serial_spec/parsed_body"
5
+ require "serial_spec/request_response"
4
6
  require "inheritable_accessors"
5
7
 
6
8
  module SerialSpec
7
9
  extend ActiveSupport::Concern
10
+ include ItExpects
11
+ include RequestResponse
12
+ include RequestResponse::Helpers
13
+ SERIAL_VALID_VERBS = %w{GET POST PUT PATCH DELETE OPTIONS HEAD}
14
+
15
+ module ClassMethods
16
+
17
+ def with_request(request_str, params={}, envs={}, &block)
18
+ if request_str.split(/\s+/).count == 2
19
+ request_method_string, request_path_str = request_str.split(/\s+/)
20
+ end
21
+
22
+ context_klass = context "with request: '#{request_str}'" do
23
+ if request_str.split(/\s+/).count == 2
24
+ request_method_string, request_path_str = request_str.split(/\s+/)
25
+ if SERIAL_VALID_VERBS.include?(request_method_string)
26
+ request_method request_method_string
27
+ request_path request_path_str
28
+ end
29
+ end
30
+
31
+ instance_exec(&block) if block_given?
32
+
33
+ it "should match all examples: #{__inherited_expectations__.keys}" do
34
+ perform_request!
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
8
42
  end
data/serial-spec.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'serial_spec/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "serial-spec"
8
- spec.version = Serial::Spec::VERSION
8
+ spec.version = SerialSpec::VERSION
9
9
  spec.authors = ["Blake Chambers"]
10
10
  spec.email = ["chambb1@gmail.com"]
11
11
  spec.summary = %q{A better way to rspec api requests.}
@@ -18,11 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.8"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec", "~> 3.2"
24
- spec.add_development_dependency "rack-test", "~> 0.6.3"
25
-
26
- spec.add_runtime_dependency "inheritable_accessors", ">= 0.1.0"
21
+ spec.add_runtime_dependency "inheritable_accessors", ">= 0.1.1"
27
22
  spec.add_runtime_dependency "activesupport", ">= 3.2.0"
28
23
  end
metadata CHANGED
@@ -1,85 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serial-spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Chambers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-03-11 00:00:00.000000000 Z
11
+ date: 2015-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.8'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.8'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '10.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: rack-test
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 0.6.3
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 0.6.3
69
13
  - !ruby/object:Gem::Dependency
70
14
  name: inheritable_accessors
71
15
  requirement: !ruby/object:Gem::Requirement
72
16
  requirements:
73
17
  - - ">="
74
18
  - !ruby/object:Gem::Version
75
- version: 0.1.0
19
+ version: 0.1.1
76
20
  type: :runtime
77
21
  prerelease: false
78
22
  version_requirements: !ruby/object:Gem::Requirement
79
23
  requirements:
80
24
  - - ">="
81
25
  - !ruby/object:Gem::Version
82
- version: 0.1.0
26
+ version: 0.1.1
83
27
  - !ruby/object:Gem::Dependency
84
28
  name: activesupport
85
29
  requirement: !ruby/object:Gem::Requirement
@@ -113,6 +57,8 @@ files:
113
57
  - bin/setup
114
58
  - lib/serial_spec.rb
115
59
  - lib/serial_spec/it_expects.rb
60
+ - lib/serial_spec/parsed_body.rb
61
+ - lib/serial_spec/request_response.rb
116
62
  - lib/serial_spec/version.rb
117
63
  - serial-spec.gemspec
118
64
  homepage: http://github.com/blakechambers/serial-spec