mattscilipoti-model_steps 0.2.0 → 0.2.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/Rakefile CHANGED
@@ -6,7 +6,7 @@ begin
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "mattscilipoti-model_steps"
8
8
  gem.summary = %Q{Model Steps for cucumber}
9
- gem.description = %Q{Model Steps for cucumber}
9
+ gem.description = %Q{Step Definitions for cucumber which support ActiveRecord Models}
10
10
  gem.email = "matt@scilipoti.name"
11
11
  gem.homepage = "http://github.com/mattscilipoti/mattscilipoti-model_steps"
12
12
  gem.authors = ["Matt Scilipoti"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.2
@@ -1,6 +1,6 @@
1
1
  Cucumber::Ast::Table.class_eval do
2
2
  def is_date_column?(column_name)
3
- column_name.columnify =~ /( at|_at|time|date)$/
3
+ column_name.columnify =~ /( at|_at|time|date)$/i
4
4
  end
5
5
 
6
6
  def chronic_parsable_columns
@@ -55,7 +55,7 @@ Then /^I should see (\d+) (\D+)$/ do |expected_count, requested_model|
55
55
 
56
56
  end
57
57
 
58
- Then /^I should see (?:these|the following) (\D+):$/ do |requested_model, table|
58
+ Then /^I should see (?:these|this|the following) (\D+):$/ do |requested_model, table|
59
59
  # table is a Cucumber::Ast::Table
60
60
  table.map_chronic_columns!
61
61
  #WORKAROUND: why does table.diff! expect Trouble to be nil (vs. '')?
@@ -76,7 +76,7 @@ end
76
76
  #Given the following Camera Events exist:
77
77
  #Note: use ((?!.*should) to avoid conflicts with
78
78
  # Given the following Camera Events should exist:
79
- Given /^(?:these|the following) (?!.*should)(.+) exist:$/ do |requested_model, table|
79
+ Given /^(?:these|this|the following) (?!.*should)(.+) exist:$/ do |requested_model, table|
80
80
 
81
81
  # table is a Cucumber::Ast::Table
82
82
  model = requested_model_to_model(requested_model)
@@ -89,16 +89,7 @@ Given /^(?:these|the following) (?!.*should)(.+) exist:$/ do |requested_model, t
89
89
 
90
90
  model_params = requested_params_to_model_params(requested_params, model)
91
91
 
92
- model_under_test = Factory.create(model_to_factory_symbol(model.name), model_params)
93
-
94
- if model_under_test.is_a?(ImportSession)
95
- Traffipax.deprecated("special fixture code for 'the following Import Sessions exist'", 'only until ImportSession no longer has ImportSteps') unless ImportSession.new.respond_to?('import_steps')
96
- trouble = model_params[:trouble]
97
- #ensure last step has proper status
98
- #TODO: this is a smell. We are bypassing proper operation. Is this test appropriate?
99
- model_under_test.current_step.update_attributes!(:started_at => model_under_test.started_at, :completed_at => model_under_test.completed_at)
100
- model_under_test.current_step.trouble = trouble if trouble
101
- end
92
+ model_under_test = Factory.create(model_to_factory_symbol(requested_model), model_params)
102
93
 
103
94
  model_under_test
104
95
  end
@@ -167,7 +158,7 @@ end
167
158
  #Given ModelA has the following existing ModelB's (see table)
168
159
  # Finds the ModelB's which match the conditions
169
160
  # And assigns themto ModelA.association
170
- Given /^(\D+):(.+) has (?:these|the following) existing (\D+):$/ do |requested_model, default_identifier, requested_association_name, table|
161
+ Given /^(\D+):(.+) has (?:these|this|the following) existing (\D+):$/ do |requested_model, default_identifier, requested_association_name, table|
171
162
  association_quantity = table.rows.size
172
163
 
173
164
  map_table_columns!(table)
@@ -366,12 +357,12 @@ end
366
357
  #Assumes:
367
358
  # * Header = method name
368
359
  # * the first column in each row is the default identifier for that row.
369
- Then /^(?:these|the following) (.+) should exist:$/ do |requested_model, table|
360
+ Then /^(?:these|this|the following) (.+) should exist:$/ do |requested_model, table|
370
361
  # table is a Cucumber::Ast::Table
371
362
  model_klass = requested_model_to_model(requested_model)
372
363
 
373
364
  models_to_verify = requested_models(requested_model)
374
- assert_models(table, models_to_verify)
365
+ assert_models(models_to_verify, table)
375
366
  end
376
367
 
377
368
  Then /^there should be (\d*) (.*)$/ do |cnt, requested_model|
@@ -386,17 +377,38 @@ end
386
377
  #end
387
378
 
388
379
  #Then Location:L1 should have the following Pings
380
+ #Or
381
+ #Then Location:L1 should have these attributes
389
382
  #Works against actual models (instead of view)
390
383
  #Verifies model count and each method in each row.
391
384
  #Assumes:
392
385
  # * Header = method name
393
386
  # * the first column in each row is the default identifier for that row.
394
- Then /^(\w+):(.+) should have (?:these|the following|this) (.+):$/ do |requested_model, default_identifier, association, table|
387
+ Then /^(\w+):(.+) (?!.not|NOT)should have (?:these|this|the following) (.+):$/ do |requested_model, default_identifier, association, table|
395
388
  # table is a Cucumber::Ast::Table
396
389
  model_under_test = requested_model_with_identifier_to_model_instance(requested_model, default_identifier)
390
+ if association == 'attributes'
391
+ table.hashes.first.each do |attribute, expected_value|
392
+ model_under_test.send(attribute).to_s.should == expected_value
393
+ end
394
+ else
395
+ associated_models = model_under_test.send(association.underscore)
396
+ assert_models(associated_models, table)
397
+ end
398
+ end
397
399
 
398
- associated_models = model_under_test.send(association.underscore)
399
- assert_models(table, associated_models)
400
+ Then /^(\w+):(.+) should (?:not|NOT) have (?:these|this|the following) (.+):$/ do |requested_model, default_identifier, association, table|
401
+ # table is a Cucumber::Ast::Table
402
+ model_under_test = requested_model_with_identifier_to_model_instance(requested_model, default_identifier)
403
+
404
+ if association == 'attributes'
405
+ table.hashes.first.each do |attribute, expected_value|
406
+ model_under_test.send(attribute).to_s.should_not == expected_value
407
+ end
408
+ else
409
+ associated_models = model_under_test.send(association.underscore)
410
+ assert_models(associated_models, table, :should_not)
411
+ end
400
412
  end
401
413
 
402
414
  #Then ModelA should have 1 ModelB
@@ -416,13 +428,16 @@ private
416
428
  #Assumes:
417
429
  # * Header = method name
418
430
  # * the first column in each row is the default identifier for that row.
419
- def assert_models(table, *expected_models)
420
- expected_models.flatten!
421
- model_klass = expected_models.first && expected_models.first.class.base_class rescue expected_models.first.class #support non-AR models
431
+ def assert_models(expected_models, table, should_not = false)
432
+ model_klass = expected_models.first && expected_models.first.class.base_class rescue expected_models.first.class
422
433
 
423
434
  map_table_columns!(table)
424
435
  rows = map_table_headers(table).hashes
425
- expected_models.count.should == rows.size
436
+ if should_not
437
+ expected_models.count.should_not == rows.size
438
+ else
439
+ expected_models.count.should == rows.size
440
+ end
426
441
 
427
442
  first_column_name = table.headers[0]
428
443
 
@@ -434,26 +449,30 @@ def assert_models(table, *expected_models)
434
449
  #find the model for this row
435
450
  model_under_test = expected_models.detect {|model| model.send(first_column_name).to_s == default_identifier }
436
451
 
437
- #compare model with expectations
438
- requested_params.each do |attribute_name, expected_value|
439
- actual = model_under_test.send(attribute_name)
440
- if actual.is_a?(ActiveRecord::Base)
441
- #if AR model, compare against value of default_identifier_column
442
- actual = actual.send(actual.class.default_identifier_column)
443
- end
452
+ unless should_not
453
+ model_under_test.should_not be_nil
454
+ end if
444
455
 
445
- err_msg = "Expected ##{attribute_name} for '#{model_klass.name}:#{default_identifier}'\n\t to be: '#{expected_value}'\n\tbut was: '#{actual}'\n * Expectations: #{requested_params.inspect} \n * #{model_klass.name}:#{default_identifier}: #{model_under_test.inspect}.\n\n"
446
- if expected_value =~ /[*]/ #has wild card
447
- expected_value = expected_value.gsub('*', '.*')
448
- actual.to_s.should match(expected_value), err_msg
449
- else
450
- actual.to_s.should eql(expected_value.to_s), err_msg
456
+ if model_under_test
457
+ #compare model with expectations
458
+ requested_params.each do |attribute_name, expected_value|
459
+ actual = model_under_test.send(attribute_name)
460
+ if actual.is_a?(ActiveRecord::Base)
461
+ actual = actual.send(actual.class.default_identifier_column)
462
+ end
463
+ if should_not
464
+ err_msg = "Expected ##{attribute_name} for '#{model_klass.name}:#{default_identifier}'\n\t to NOT have: '#{expected_value}'\n\tbut was: '#{actual}'\n * Expectations: #{requested_params.inspect} \n * #{model_klass.name}:#{default_identifier}: #{model_under_test.inspect}.\n\n"
465
+ actual.to_s.should_not eql(expected_value), err_msg
466
+ else
467
+ err_msg = "Expected ##{attribute_name} for '#{model_klass.name}:#{default_identifier}'\n\t to be: '#{expected_value}'\n\tbut was: '#{actual}'\n * Expectations: #{requested_params.inspect} \n * #{model_klass.name}:#{default_identifier}: #{model_under_test.inspect}.\n\n"
468
+ actual.to_s.should eql(expected_value), err_msg
469
+ end
451
470
  end
452
-
453
471
  end
454
472
  end
455
473
  end
456
474
 
475
+
457
476
  def requested_model_with_identifier_to_model_instance(requested_model, default_identifier)
458
477
  model = requested_model_to_model(requested_model)
459
478
  model_under_test = model.find_by_default_identifier!(default_identifier)
@@ -570,7 +589,7 @@ def map_table_header(header)
570
589
  #TODO: associations should be underscore'd
571
590
  # mapped_header = header.columnify
572
591
  mapped_header = header
573
- mapped_header.sub!('#', 'Number')
592
+ # mapped_header.sub!('#', 'Number')
574
593
  case header
575
594
  when 'printer'
576
595
  mapped_header = 'printer_prefix'
@@ -692,7 +711,7 @@ def requested_params_to_model_params(requested_params, model)
692
711
  association_names = model.reflect_on_all_associations.collect &:name
693
712
 
694
713
  mapped_params = {}
695
- requested_params.each {|header, value| mapped_params[header.columnify] = value}
714
+ requested_params.each {|header, value| mapped_params[header] = value}
696
715
 
697
716
  association_params = mapped_params.reject { |param_name, value| !association_names.include?(ModelSteps::Inflector.param_to_association_name(param_name)) }
698
717
  association_params.each do |param_name, value|
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mattscilipoti-model_steps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 2
10
+ version: 0.2.2
5
11
  platform: ruby
6
12
  authors:
7
13
  - Matt Scilipoti
@@ -9,30 +15,38 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-02-24 00:00:00 -05:00
18
+ date: 2010-05-14 00:00:00 -04:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: micronaut
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
23
32
  version: "0"
24
- version:
33
+ type: :development
34
+ version_requirements: *id001
25
35
  - !ruby/object:Gem::Dependency
26
36
  name: cucumber
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
30
40
  requirements:
31
41
  - - ">="
32
42
  - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
33
46
  version: "0"
34
- version:
35
- description: Model Steps for cucumber
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: Step Definitions for cucumber which support ActiveRecord Models
36
50
  email: matt@scilipoti.name
37
51
  executables: []
38
52
 
@@ -65,21 +79,27 @@ rdoc_options:
65
79
  require_paths:
66
80
  - lib
67
81
  required_ruby_version: !ruby/object:Gem::Requirement
82
+ none: false
68
83
  requirements:
69
84
  - - ">="
70
85
  - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
71
89
  version: "0"
72
- version:
73
90
  required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
74
92
  requirements:
75
93
  - - ">="
76
94
  - !ruby/object:Gem::Version
95
+ hash: 3
96
+ segments:
97
+ - 0
77
98
  version: "0"
78
- version:
79
99
  requirements: []
80
100
 
81
101
  rubyforge_project:
82
- rubygems_version: 1.3.5
102
+ rubygems_version: 1.3.7
83
103
  signing_key:
84
104
  specification_version: 3
85
105
  summary: Model Steps for cucumber