expected_responses 0.1.1 → 0.1.2

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{expected_responses}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["S\303\251bastien Luquet"]
@@ -25,6 +25,8 @@ Gem::Specification.new do |s|
25
25
  "Rakefile",
26
26
  "VERSION",
27
27
  "expected_responses.gemspec",
28
+ "lib/expectation_serializer.rb",
29
+ "lib/expected_mail.rb",
28
30
  "lib/expected_responses.rb",
29
31
  "test/helper.rb",
30
32
  "test/test_expected_responses.rb"
@@ -0,0 +1,20 @@
1
+ module ExpectationSerializer
2
+ attr_accessor :batch, :output
3
+ def file_path
4
+ if respond_to? 'delegate'
5
+ delegate.class.to_s.split('::').join('/')
6
+ else
7
+ self.class.to_s.split('::').join('/')
8
+ end
9
+ end
10
+ def expected_response_root
11
+ "#{Rails.root}/tmp"
12
+ end
13
+ def meth_name
14
+ if respond_to? 'delegate'
15
+ delegate.method_name
16
+ else
17
+ method_name
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ require 'shoulda/action_mailer/assertions'
2
+ module Shoulda # :nodoc:
3
+ module ActionMailer # :nodoc:
4
+ module Assertions
5
+ # Asserts that an email was delivered. Can take a block that can further
6
+ # narrow down the types of emails you're expecting.
7
+ #
8
+ # assert_sent_email
9
+ #
10
+ # Passes if ActionMailer::Base.deliveries has an email
11
+ #
12
+ # assert_sent_email do |email|
13
+ # email.subject =~ /hi there/ && email.to.include?('none@none.com')
14
+ # end
15
+ #
16
+ # Passes if there is an email with subject containing 'hi there' and
17
+ # 'none@none.com' as one of the recipients.
18
+ #
19
+ def assert_sent_email
20
+ emails = ::ActionMailer::Base.deliveries
21
+ assert !emails.empty?, "No emails were sent"
22
+ if block_given?
23
+ matching_emails = emails.select {|email| yield email }
24
+ assert !matching_emails.empty?, "None of the emails matched."
25
+ end
26
+ save_mail
27
+ end
28
+ include ExpectationSerializer
29
+ def binary?
30
+ false
31
+ end
32
+ def save_mail path = '', bat = '_'
33
+ self.output ||= 'expected_responses'
34
+ format = 'eml'
35
+ binary = binary? ? "wb" : "w"
36
+ FileUtils.mkdir_p "#{expected_response_root}/#{output}/#{self.file_path}/" unless File.exists? "#{expected_response_root}/#{output}/#{self.file_path}/"
37
+ unless batch
38
+ f = File.new("#{expected_response_root}/#{output}/#{file_path}/#{meth_name}#{path}.#{format}", binary)
39
+ else
40
+ f = File.new("#{expected_response_root}/#{output}/#{file_path}/#{meth_name}_#{@request.path_parameters['id']||@request.path_parameters['payment_id']||@request.path_parameters['congress_id']}#{path}.#{format}", binary)
41
+ end
42
+ f.write(::ActionMailer::Base.deliveries.last.to_s)
43
+ f.close
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,59 @@
1
+ require 'expectation_serializer'
2
+ ENV["RAILS_ASSET_ID"] = '' #http://rorl.collectivex.com/discussion/topic/show/26776 & http://maintainable.com/articles/rails_asset_cache pour les cons?quences que cela peut avoir
3
+ module ActionDispatch
4
+ module Assertions
5
+ # A small suite of assertions that test responses from \Rails applications.
6
+ module ResponseAssertions
7
+ include ExpectationSerializer
8
+ def binary?
9
+ @response.headers['Content-Transfer-Encoding'] == 'binary'
10
+ end
11
+ attr_accessor :batch, :output
12
+ def save_response(type, message = nil, path = '')
13
+ format = @request.parameters[:format] if @request and @request.parameters
14
+ self.output||= 'expected_responses' # GetText.locale.to_s == "en" ? 'expected_views' : 'html'
15
+ format ||= @response.headers['Content-Type'].split(';').first.split('/').first if @response.headers['Content-Type'] and @response.headers['Content-Type'].split('/').last == 'plain'
16
+ format ||= @response.headers['Content-Disposition'].gsub('"','').split('.').last if @response.headers['Content-Disposition']
17
+ format ||= @response.headers['type'].split(';').first.split('/').last if binary? and @response.headers['type']
18
+ format ||= @response.headers['Content-Type'].split(';').first.split('/').last if @response.headers['Content-Type']
19
+ format ||= 'html'
20
+ binary = binary? ? "wb" : "w"
21
+ if type == :success #and ((format == 'application/pdf' and @request.path_parameters['action'] == 'show') or (@request.path_parameters['controller'] == 'sites/registrations'))
22
+ FileUtils.mkdir_p "#{expected_response_root}/#{output}/#{self.file_path}/" unless File.exists? "#{expected_response_root}/#{output}/#{self.file_path}/"
23
+ unless batch
24
+ file_name = "#{expected_response_root}/#{output}/#{file_path}/#{self.meth_name}.#{format}"
25
+ else
26
+ file_name = "#{expected_response_root}/#{output}/#{file_path}/#{self.meth_name}_#{@request.path_parameters['id']||@request.path_parameters['payment_id']||@request.path_parameters['congress_id']}.#{format}"
27
+ end
28
+ f = File.new(file_name, binary)
29
+ if format == 'html' and defined? RailsTidy and RailsTidy.tidy_path
30
+ RailsTidy.filter(@response)
31
+ end
32
+ if @response.body.is_a? Proc
33
+ @response.body.call(@response, f)
34
+ else
35
+ f.write(@response.body)
36
+ end
37
+ f.close
38
+ elsif type == :redirect or type == :missing
39
+ file_name = "#{expected_response_root}/#{output}/#{file_path}/#{self.meth_name}.#{format}"
40
+ File.delete(file_name) if File.exists? file_name
41
+ end
42
+ end
43
+ def assert_response(type, message = nil)
44
+ save_response(type, message)
45
+ validate_request!
46
+
47
+ if type.in?([:success, :missing, :redirect, :error]) && @response.send("#{type}?")
48
+ assert_block("") { true } # to count the assertion
49
+ elsif type.is_a?(Fixnum) && @response.response_code == type
50
+ assert_block("") { true } # to count the assertion
51
+ elsif type.is_a?(Symbol) && @response.response_code == Rack::Utils::SYMBOL_TO_STATUS_CODE[type]
52
+ assert_block("") { true } # to count the assertion
53
+ else
54
+ flunk(build_message(message, "Expected response to be a <?>, but was <?>", type, @response.response_code))
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expected_responses
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - "S\xC3\xA9bastien Luquet"
@@ -96,6 +96,8 @@ files:
96
96
  - Rakefile
97
97
  - VERSION
98
98
  - expected_responses.gemspec
99
+ - lib/expectation_serializer.rb
100
+ - lib/expected_mail.rb
99
101
  - lib/expected_responses.rb
100
102
  - test/helper.rb
101
103
  - test/test_expected_responses.rb