spec_producer 0.10.0 → 0.11.0
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/spec_producer.rb +5 -56
- data/lib/spec_producer/factories_production_module.rb +8 -4
- data/lib/spec_producer/spec_production_module.rb +80 -24
- data/lib/spec_producer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dc0df225c68f60eaba14c10ce0df5d1e034a700
|
4
|
+
data.tar.gz: 154ac15712e0627720352253248b53f55e788544
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c22e5ee62ae1a302e6db6d206e0fbb96df5c34900ddc3ff4761505587c3ea992f85dddebe117d1d28188f8deac07767e3b0fd8a79a8a5301997e34dc70a11c51
|
7
|
+
data.tar.gz: 2db9ee13638bf2f18ce909e14cb587bfda6c050447e12c5fef095a1fb07abb2a0a936c82424f6732fe645907a42b0cd6e6e47bdcb5e44dcf9aa2443de204f74d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 0.11.0 (2016-10-18)
|
2
|
+
|
3
|
+
Features:
|
4
|
+
* Add serializer specs production
|
5
|
+
* Fixes in view specs
|
6
|
+
* Handle missing Delayed Jobssetup
|
7
|
+
* Update helper specs to include helper methods
|
8
|
+
* Logs in name error now describe the error as well.
|
9
|
+
|
1
10
|
## 0.10.0 (2016-10-07)
|
2
11
|
|
3
12
|
Features:
|
data/lib/spec_producer.rb
CHANGED
@@ -13,6 +13,7 @@ module SpecProducer
|
|
13
13
|
SpecProductionModule.produce_specs_for_helpers
|
14
14
|
SpecProductionModule.produce_specs_for_mailers
|
15
15
|
SpecProductionModule.produce_specs_for_jobs
|
16
|
+
SpecProductionModule.produce_specs_for_serializers
|
16
17
|
end
|
17
18
|
|
18
19
|
def self.produce_specs_for_models
|
@@ -43,6 +44,10 @@ module SpecProducer
|
|
43
44
|
SpecProductionModule.produce_specs_for_jobs
|
44
45
|
end
|
45
46
|
|
47
|
+
def self.produce_specs_for_serializers
|
48
|
+
SpecProductionModule.produce_specs_for_serializers
|
49
|
+
end
|
50
|
+
|
46
51
|
def self.set_up_necessities
|
47
52
|
gemfiles = Dir.glob(Rails.root.join('Gemfile'))
|
48
53
|
|
@@ -75,62 +80,6 @@ module SpecProducer
|
|
75
80
|
end
|
76
81
|
|
77
82
|
def self.produce_factories
|
78
|
-
Dir.glob(Rails.root.join('app/models/*.rb')).each do |x|
|
79
|
-
require x
|
80
|
-
end
|
81
|
-
|
82
|
-
not_valid_descendants = [ ActiveRecord::SchemaMigration, Delayed::Backend::ActiveRecord::Job ]
|
83
|
-
|
84
|
-
ActiveRecord::Base.descendants.reject { |descendant| not_valid_descendants.include? descendant }.each do |descendant|
|
85
|
-
final_text = "FactoryGirl.define do\n"
|
86
|
-
final_text << " factory :#{descendant.name.underscore}, :class => #{descendant.name} do\n"
|
87
|
-
|
88
|
-
descendant.columns.each do |column|
|
89
|
-
value = case column.type
|
90
|
-
when :string then "'#{descendant.name.underscore.upcase}_#{column.name.underscore.upcase}'"
|
91
|
-
when :text then "'#{descendant.name.underscore.upcase}_#{column.name.underscore.upcase}'"
|
92
|
-
when :integer then "#{rand(1...10)}"
|
93
|
-
when :decimal then "#{rand(1.0...100.0)}"
|
94
|
-
when :float then "#{rand(1.0...100.0)}"
|
95
|
-
when :datetime then "'#{DateTime.now + 365}'"
|
96
|
-
when :time then "'#{Time.now + 365*24*60*60}'"
|
97
|
-
when :date then "'#{Date.today + 365}'"
|
98
|
-
when :boolean then "#{rand(2) == 1 ? true : false}"
|
99
|
-
when :binary then "#{5.times.collect { rand(0..1).to_s }.join('')}"
|
100
|
-
end
|
101
|
-
|
102
|
-
final_text << " #{column.name} #{value}\n"
|
103
|
-
end
|
104
|
-
|
105
|
-
final_text << " end\n"
|
106
|
-
final_text << "end"
|
107
|
-
|
108
|
-
if File.exists?(Rails.root.join("spec/factories/#{descendant.name.underscore}.rb"))
|
109
|
-
puts '#'*100
|
110
|
-
puts "Please, check whether the following lines are included in: spec/factories/" + descendant.name.underscore + ".rb\n"
|
111
|
-
puts '#'*100
|
112
|
-
puts "\n"
|
113
|
-
puts final_text
|
114
|
-
else
|
115
|
-
unless Dir.exists? Rails.root.join("spec")
|
116
|
-
puts "Generating spec directory"
|
117
|
-
Dir.mkdir(Rails.root.join("spec"))
|
118
|
-
end
|
119
|
-
|
120
|
-
unless Dir.exists? Rails.root.join("spec/factories")
|
121
|
-
puts "Generating spec/factories directory"
|
122
|
-
Dir.mkdir(Rails.root.join("spec/factories"))
|
123
|
-
end
|
124
|
-
|
125
|
-
path = "spec/factories/#{descendant.name.underscore}.rb"
|
126
|
-
puts "Producing factory file for: #{path}"
|
127
|
-
f = File.open("#{Rails.root.join(path)}", 'wb+')
|
128
|
-
f.write(final_text)
|
129
|
-
f.close
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
nil
|
134
83
|
FactoriesProductionModule.produce_factories
|
135
84
|
end
|
136
85
|
|
@@ -3,8 +3,12 @@ module SpecProducer::FactoriesProductionModule
|
|
3
3
|
Dir.glob(Rails.root.join('app/models/*.rb')).each do |x|
|
4
4
|
require x
|
5
5
|
end
|
6
|
-
|
7
|
-
not_valid_descendants = [ ActiveRecord::SchemaMigration
|
6
|
+
|
7
|
+
not_valid_descendants = [ ActiveRecord::SchemaMigration ]
|
8
|
+
|
9
|
+
if Object.const_defined?('Delayed')
|
10
|
+
not_valid_descendants << Delayed::Backend::ActiveRecord::Job
|
11
|
+
end
|
8
12
|
|
9
13
|
ActiveRecord::Base.descendants.reject { |descendant| not_valid_descendants.include? descendant }.each do |descendant|
|
10
14
|
final_text = "FactoryGirl.define do\n"
|
@@ -56,8 +60,8 @@ module SpecProducer::FactoriesProductionModule
|
|
56
60
|
end
|
57
61
|
|
58
62
|
nil
|
59
|
-
rescue NameError
|
60
|
-
puts "
|
63
|
+
rescue NameError => e
|
64
|
+
puts "NameError '#{e}' was raised. Can't produce factories for this project."
|
61
65
|
rescue Exception => e
|
62
66
|
puts "Exception '#{e}' was raised. Skipping factories production."
|
63
67
|
end
|
@@ -211,6 +211,7 @@ module SpecProducer::SpecProductionModule
|
|
211
211
|
objects_in_file = file_content.scan(/@(?<field>[a-zA-Z_]*)/).flatten.uniq
|
212
212
|
templates_in_file = file_content.scan(/render ('|")(?<template>\S*)('|")/).flatten.uniq
|
213
213
|
partials_in_file = file_content.scan(/render :partial => ('|")(?<partial>\S*)('|")/).flatten.uniq
|
214
|
+
links_in_file = file_content.scan(/<a.*href=\"(\S*)\".*>(.*)<\/a>/).uniq
|
214
215
|
|
215
216
|
file_name = "#{file.gsub('app/', 'spec/')}_spec.rb"
|
216
217
|
final_text = "require '#{require_helper_string}'\n\n"
|
@@ -231,27 +232,29 @@ module SpecProducer::SpecProductionModule
|
|
231
232
|
final_text << " render\n"
|
232
233
|
final_text << " end\n\n"
|
233
234
|
|
234
|
-
|
235
|
-
final_text << " describe 'content' do\n"
|
235
|
+
final_text << " describe 'content' do\n"
|
236
236
|
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
templates_in_file.each do |template_name|
|
242
|
-
final_text << " it { should render_template '#{template_name }' }\n"
|
243
|
-
end
|
237
|
+
fields_in_file.each do |field_name|
|
238
|
+
final_text << " it { should have_field '#{ field_name }' }\n"
|
239
|
+
end
|
244
240
|
|
245
|
-
|
246
|
-
|
247
|
-
|
241
|
+
templates_in_file.each do |template_name|
|
242
|
+
template_path_elements = template_name.split('/')
|
243
|
+
template_path_elements.last.gsub!(/^/, '_')
|
248
244
|
|
249
|
-
final_text << "
|
250
|
-
final_text << " end\n"
|
251
|
-
else
|
252
|
-
final_text << " pending 'view content test'\n"
|
245
|
+
final_text << " it { should render_template '#{ template_path_elements.join('/') }' }\n"
|
253
246
|
end
|
254
|
-
|
247
|
+
|
248
|
+
partials_in_file.each do |partial_name|
|
249
|
+
final_text << " it { should render_template(:partial => '#{ partial_name }') }\n"
|
250
|
+
end
|
251
|
+
|
252
|
+
links_in_file.each do |link|
|
253
|
+
final_text << " it { should have_link '#{link[1]}', :href => '#{link[0]}' }\n"
|
254
|
+
end
|
255
|
+
|
256
|
+
final_text << " pending 'view content test'\n"
|
257
|
+
final_text << " end\n"
|
255
258
|
final_text << "end\n"
|
256
259
|
|
257
260
|
check_if_spec_folder_exists
|
@@ -280,11 +283,12 @@ module SpecProducer::SpecProductionModule
|
|
280
283
|
end
|
281
284
|
|
282
285
|
def self.produce_specs_for_helpers
|
283
|
-
|
286
|
+
helpers_list = ActionController::Base.modules_for_helpers(ActionController::Base.all_helpers_from_path 'app/helpers')
|
284
287
|
|
285
|
-
|
288
|
+
helpers_list.each do |helper|
|
289
|
+
file_name = "spec/helpers/#{helper.name.gsub("::", "/").underscore}_spec.rb"
|
286
290
|
full_path = 'spec'
|
287
|
-
|
291
|
+
file_name.gsub("spec/", "").split("/").each do |path|
|
288
292
|
unless /.*\.rb/.match path
|
289
293
|
full_path << "/#{path}"
|
290
294
|
|
@@ -294,10 +298,12 @@ module SpecProducer::SpecProductionModule
|
|
294
298
|
end
|
295
299
|
end
|
296
300
|
|
297
|
-
file_name = "#{file.gsub('app/', 'spec/').gsub('.rb', '')}_spec.rb"
|
298
301
|
final_text = "require '#{require_helper_string}'\n\n"
|
299
|
-
final_text << "describe #{
|
300
|
-
|
302
|
+
final_text << "describe #{helper}, :type => :helper do\n"
|
303
|
+
helper.instance_methods.each do |method_name|
|
304
|
+
final_text << " pending '#{method_name.to_s}'\n"
|
305
|
+
end
|
306
|
+
|
301
307
|
final_text << "end"
|
302
308
|
|
303
309
|
check_if_spec_folder_exists
|
@@ -405,7 +411,7 @@ module SpecProducer::SpecProductionModule
|
|
405
411
|
puts final_text
|
406
412
|
end
|
407
413
|
else
|
408
|
-
puts "Producing
|
414
|
+
puts "Producing job spec file for: #{file_name}"
|
409
415
|
f = File.open(file_name, 'wb+')
|
410
416
|
f.write(final_text)
|
411
417
|
f.close
|
@@ -417,6 +423,56 @@ module SpecProducer::SpecProductionModule
|
|
417
423
|
puts "Exception '#{e}' was raised. Skipping job specs production."
|
418
424
|
end
|
419
425
|
|
426
|
+
def self.produce_specs_for_serializers
|
427
|
+
Dir.glob(Rails.root.join('app/serializers/*.rb')).each do |x|
|
428
|
+
require x
|
429
|
+
end
|
430
|
+
|
431
|
+
not_valid_descendants = [ ActiveModel::Serializer::ErrorSerializer ]
|
432
|
+
|
433
|
+
ActiveModel::Serializer.descendants.reject { |descendant| not_valid_descendants.include? descendant }.each do |descendant|
|
434
|
+
final_text = "require '#{require_helper_string}'\n\n"
|
435
|
+
final_text << "describe #{descendant.name}, :type => :serializer do\n"
|
436
|
+
|
437
|
+
final_text << " describe 'serializer tests' do\n"
|
438
|
+
final_text << " subject { #{descendant.name}.new(FactoryGirl.build(:#{descendant.name.underscore.gsub('_serializer', '')})) }\n\n"
|
439
|
+
final_text << " it 'includes the expected attributes' do\n"
|
440
|
+
final_text << " expect(subject.attributes.keys).to contain_exactly(#{descendant._attributes.map { |x| ":#{x.to_s}" }.join(', ')})\n"
|
441
|
+
final_text << " expect(subject.attributes).to eq({})\n"
|
442
|
+
final_text << " end\n"
|
443
|
+
final_text << " end\n"
|
444
|
+
final_text << "end"
|
445
|
+
|
446
|
+
if File.exists?(Rails.root.join("spec/serializers/#{descendant.name.underscore}_spec.rb"))
|
447
|
+
if File.open(Rails.root.join("spec/serializers/#{descendant.name.underscore}_spec.rb")).read == final_text
|
448
|
+
# nothing to do here, pre-existing content is the same :)
|
449
|
+
else
|
450
|
+
puts '#'*100
|
451
|
+
puts "Please, check whether the following lines are included in: " + descendant.name.underscore + "_spec.rb\n"
|
452
|
+
puts '#'*100
|
453
|
+
puts "\n"
|
454
|
+
puts final_text
|
455
|
+
end
|
456
|
+
else
|
457
|
+
check_if_spec_folder_exists
|
458
|
+
|
459
|
+
unless Dir.exists? Rails.root.join("spec/serializers")
|
460
|
+
puts "Generating spec/serializers directory"
|
461
|
+
Dir.mkdir(Rails.root.join("spec/serializers"))
|
462
|
+
end
|
463
|
+
|
464
|
+
path = "spec/serializers/#{descendant.name.underscore}_spec.rb"
|
465
|
+
puts "Producing serializer spec file for: #{path}"
|
466
|
+
f = File.open("#{Rails.root.join(path)}", 'wb+')
|
467
|
+
f.write(final_text)
|
468
|
+
f.close
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
nil
|
473
|
+
rescue Exception => e
|
474
|
+
puts "Exception '#{e}' was raised. Skipping serializer specs production."
|
475
|
+
end
|
420
476
|
|
421
477
|
def self.produce_specs_for_controllers
|
422
478
|
Dir.glob(Rails.root.join('app/controllers/**/*.rb')).each do |x|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spec_producer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasilis Kalligas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|