lazy_fixtures 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +23 -17
- data/lazy_fixtures.gemspec +2 -1
- data/lib/lazy_fixtures.rb +6 -5
- data/lib/lazy_fixtures/factory_girl/association_manager.rb +36 -0
- data/lib/lazy_fixtures/factory_girl/attributes_manager.rb +40 -0
- data/lib/lazy_fixtures/factory_girl/factory_girl.rb +78 -0
- data/lib/lazy_fixtures/factory_girl/file_manager.rb +52 -0
- data/lib/lazy_fixtures/factory_girl/value_mapper.rb +42 -0
- data/lib/lazy_fixtures/generator.rb +9 -72
- data/lib/lazy_fixtures/object_helper.rb +11 -0
- data/lib/lazy_fixtures/version.rb +1 -1
- data/spec/factory_girl/association_manager_spec.rb +16 -0
- data/spec/{attributes_manager_spec.rb → factory_girl/attributes_manager_spec.rb} +18 -20
- data/spec/factory_girl/factory_girl_spec.rb +14 -0
- data/spec/{value_mapper_spec.rb → factory_girl/value_mapper_spec.rb} +10 -10
- data/spec/generator_spec.rb +8 -102
- data/spec/spec_helper.rb +2 -2
- metadata +32 -14
- data/lib/lazy_fixtures/association_manager.rb +0 -45
- data/lib/lazy_fixtures/attributes_manager.rb +0 -36
- data/lib/lazy_fixtures/file_manager.rb +0 -40
- data/lib/lazy_fixtures/value_mapper.rb +0 -38
- data/spec/association_manager_spec.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d79e9b85c9bc3cfe4caf26ad1b1bb1cadaddded8
|
4
|
+
data.tar.gz: d040abd87d4291d35f1f8628e8851bcf7d952b89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b96f474825907f0f10f98d215aa6b6f165fffc19d0683f7ac063e35b3293f8768ef41fd53784ae5d3bd0966fd6d6cc4ac2c01c0a2426e77d5b99130ef8fbf20e
|
7
|
+
data.tar.gz: e0a4851d561cd868aaaa369afc647bf34dc91afcdc953051b125bd441fe3e924708356ebcfb25b8ec19620b32bf63d265e81881252f5c73b3fa112932a760446
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
Generator to create factory girl fixtures, just with a simple ActiveRecord object
|
5
5
|
from your current database.
|
6
|
+
|
6
7
|
## Installation
|
7
8
|
|
8
9
|
Add this line to your application's Gemfile:
|
@@ -21,11 +22,13 @@ Or install it yourself as:
|
|
21
22
|
|
22
23
|
## Usage
|
23
24
|
|
24
|
-
Inside your console simple type `LazyFixtures.generate()`
|
25
|
+
Inside your console simple type `LazyFixtures.generate(instance)` replace instance
|
26
|
+
with any ActiveRecord object form your current database, lazy_fixtures
|
27
|
+
will generate the corresponding file inside and fixture your project.
|
25
28
|
|
26
29
|
## Initialisation
|
27
30
|
|
28
|
-
|
31
|
+
Configuration of the gem goes inside an initilizer.
|
29
32
|
|
30
33
|
```ruby
|
31
34
|
require 'factory_girl'
|
@@ -34,44 +37,47 @@ FactoryGirl.factories.clear
|
|
34
37
|
FactoryGirl.find_definitions
|
35
38
|
|
36
39
|
LazyFixtures.configure do |config|
|
37
|
-
config.factory_directory = "
|
40
|
+
config.factory_directory = "spec/factories"
|
38
41
|
config.factory_names = FactoryGirl.factories.map(&:name)
|
39
42
|
end
|
40
43
|
```
|
41
44
|
|
42
|
-
This lines will tell the gem where to store the files and it will give them a list
|
45
|
+
This lines will tell the gem where to store the files and it will give them a list
|
46
|
+
with your actual Factory Girl fixtures, with this it will avoid factory girl exceptions.
|
43
47
|
|
44
48
|
## Options
|
45
49
|
|
46
|
-
There are several options you can pass to the generator
|
50
|
+
There are several options you can pass to the generator
|
47
51
|
|
48
|
-
1. **nested** => by default is set to false, set this to true and will traverse all the associations from your object and will create
|
49
|
-
2. **overwrite** => by default is set to false, set this to true and will overwrite
|
52
|
+
1. **nested** => by default is set to false, set this to true and will traverse all the associations from your object and will create those fixtures for you as well.
|
53
|
+
2. **overwrite** => by default is set to false, set this to true and will overwrite the file with same name inside the fixtures folder that you specify. If for some reason it finds a file with the same name and the option is set to false it will ask you if you want to overwrite. That choice is up to you :-)
|
50
54
|
3. **create** => by default is set to true, this options tell the generator to create the file, if is set to false it will not generate any file.
|
51
55
|
4. **skip_attr** => this accept an array of string which will remove those attributes from the object.
|
52
56
|
5. **change_attr** => this accepts a hash with new values for the fixture you want to set.
|
53
57
|
|
54
58
|
## Examples
|
55
59
|
|
56
|
-
###This will create a
|
60
|
+
###This will create a client fixture:
|
57
61
|
|
58
|
-
`LazyFixtures.generate(
|
62
|
+
`LazyFixtures.generate(Client.last)`
|
59
63
|
|
60
|
-
###This will create a
|
64
|
+
###This will create a client fixture and traverse all the associations:
|
61
65
|
|
62
|
-
`LazyFixtures.generate(
|
66
|
+
`LazyFixtures.generate(Client.last, nested: true)`
|
63
67
|
|
64
|
-
###This will create a
|
68
|
+
###This will create a client fixture with skipped attributes:
|
65
69
|
|
66
|
-
`LazyFixtures.generate(
|
70
|
+
`LazyFixtures.generate(Client.last, skip_attr:['age', 'name'])`
|
67
71
|
|
68
|
-
###This will create a
|
72
|
+
###This will create a client fixture with custom values:
|
69
73
|
|
70
|
-
`LazyFixtures.generate(
|
74
|
+
`LazyFixtures.generate(Client.last, change_attr:{'age' => 34, 'name' => 'John'})`
|
71
75
|
|
72
76
|
##Notes
|
73
|
-
This version is the first version, I want to add more functionality to it, skipping
|
74
|
-
|
77
|
+
This version is the first version, I want to add more functionality to it, skipping
|
78
|
+
and changing nested attributes from the object, and many more.
|
79
|
+
If you use the gem I see any errors or some functionality that might be useful
|
80
|
+
please let me know.
|
75
81
|
Thanks.
|
76
82
|
|
77
83
|
|
data/lazy_fixtures.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
|
|
13
13
|
with different options you will be able to create a full compatible
|
14
14
|
factory tree from your database
|
15
15
|
}
|
16
|
-
spec.homepage = ""
|
16
|
+
spec.homepage = "https://github.com/GustavoCaso/lazy_fixtures"
|
17
17
|
spec.license = "MIT"
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.7"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "pry"
|
26
27
|
spec.add_development_dependency "activerecord"
|
27
28
|
spec.add_development_dependency "sqlite3"
|
28
29
|
spec.add_development_dependency "rspec"
|
data/lib/lazy_fixtures.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'lazy_fixtures/version'
|
2
2
|
require 'lazy_fixtures/generator'
|
3
|
-
require 'lazy_fixtures/
|
4
|
-
require 'lazy_fixtures/
|
5
|
-
require 'lazy_fixtures/
|
6
|
-
require 'lazy_fixtures/
|
3
|
+
require 'lazy_fixtures/factory_girl/factory_girl'
|
4
|
+
require 'lazy_fixtures/factory_girl/association_manager'
|
5
|
+
require 'lazy_fixtures/factory_girl/file_manager'
|
6
|
+
require 'lazy_fixtures/factory_girl/value_mapper'
|
7
|
+
require 'lazy_fixtures/factory_girl/attributes_manager'
|
7
8
|
|
8
9
|
module LazyFixtures
|
9
10
|
class << self
|
@@ -25,6 +26,6 @@ module LazyFixtures
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def self.generate(object, options = {})
|
28
|
-
LazyFixtures::Generator.new(object, options).generate
|
29
|
+
LazyFixtures::Generator.new(object, options).generate('FactoryGirl')
|
29
30
|
end
|
30
31
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module LazyFixtures
|
2
|
+
module FactoryGirl
|
3
|
+
class AssociationManager
|
4
|
+
include LazyFixtures::ObjectHelper
|
5
|
+
|
6
|
+
attr_reader :object
|
7
|
+
def initialize(object)
|
8
|
+
@object = object
|
9
|
+
@klass = @object.class.name.constantize
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_associations
|
13
|
+
columns_info.keys.map do |method|
|
14
|
+
get_object(object.send(method))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def columns_info
|
21
|
+
@klass.reflections.keys.map do |x|
|
22
|
+
reflection = @klass.reflections[x]
|
23
|
+
[
|
24
|
+
x.to_s,
|
25
|
+
{
|
26
|
+
method: x.to_s,
|
27
|
+
macro: reflection.macro,
|
28
|
+
klass: reflection.class_name
|
29
|
+
}
|
30
|
+
]
|
31
|
+
end.to_h
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module LazyFixtures
|
2
|
+
module FactoryGirl
|
3
|
+
class AttributesManager
|
4
|
+
|
5
|
+
attr_accessor :attributes
|
6
|
+
attr_reader :options, :object
|
7
|
+
|
8
|
+
def initialize(object, options={})
|
9
|
+
@object = object
|
10
|
+
@attributes = @object.attributes
|
11
|
+
@options = options
|
12
|
+
manipulate_attributes
|
13
|
+
end
|
14
|
+
|
15
|
+
def each
|
16
|
+
attributes
|
17
|
+
end
|
18
|
+
|
19
|
+
def stringify_attributes
|
20
|
+
attributes.map do |k,v|
|
21
|
+
value = ValueMapper.new(object, k.to_s.dup, v).get_value
|
22
|
+
key = ValueMapper.remove_encrypted(k.to_s.dup)
|
23
|
+
" #{key} #{value}\n"
|
24
|
+
end.join
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_association_attributes
|
28
|
+
attributes.delete_if {|k,v| k =~ Regexp.new(/.+_id/) && !v.nil?}
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def manipulate_attributes
|
34
|
+
options[:skip_attr].each { |x| attributes.delete(x)} if options[:skip_attr].any?
|
35
|
+
attributes.merge!(options[:change_attr]) if options[:change_attr].any?
|
36
|
+
delete_association_attributes
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module LazyFixtures
|
2
|
+
module FactoryGirl
|
3
|
+
class FactoryGirl
|
4
|
+
attr_reader :object, :options
|
5
|
+
|
6
|
+
def initialize(obejct, options)
|
7
|
+
@object = obejct
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate
|
12
|
+
if create_file
|
13
|
+
@file.write_file(generate_factory(
|
14
|
+
AttributesManager.new(object, options).
|
15
|
+
stringify_attributes)
|
16
|
+
)
|
17
|
+
end
|
18
|
+
run_associations if options[:nested]
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def generate_factory(text)
|
24
|
+
factory_name = get_factory_name
|
25
|
+
<<-EOF
|
26
|
+
FactoryGirl.define do
|
27
|
+
factory :#{factory_name}, class: #{class_name.constantize} do
|
28
|
+
#{text.chomp}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
EOF
|
32
|
+
end
|
33
|
+
|
34
|
+
def create_file
|
35
|
+
@file ||= FileManager.new(class_name_underscore, options)
|
36
|
+
@file.create_file
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_factory_name
|
40
|
+
if global_factory_names.include?(class_name_underscore)
|
41
|
+
"#{class_name_underscore}_new"
|
42
|
+
else
|
43
|
+
class_name_underscore
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def run_associations
|
48
|
+
get_associations.each do |association|
|
49
|
+
unless options[:parent].include? association.class.name
|
50
|
+
(options[:parent] << association.class.name).uniq!
|
51
|
+
LazyFixtures::Generator.new(association, nested: true, parent: options[:parent]).
|
52
|
+
generate('FactoryGirl')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_associations
|
58
|
+
association.get_associations
|
59
|
+
end
|
60
|
+
|
61
|
+
def association
|
62
|
+
AssociationManager.new(object)
|
63
|
+
end
|
64
|
+
|
65
|
+
def global_factory_names
|
66
|
+
LazyFixtures.configuration.factory_names
|
67
|
+
end
|
68
|
+
|
69
|
+
def class_name
|
70
|
+
object.class.name
|
71
|
+
end
|
72
|
+
|
73
|
+
def class_name_underscore
|
74
|
+
class_name.underscore
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module LazyFixtures
|
2
|
+
module FactoryGirl
|
3
|
+
class FileManager
|
4
|
+
attr_reader :name, :file_path
|
5
|
+
def initialize(name, options)
|
6
|
+
@name = name
|
7
|
+
@options = options
|
8
|
+
@file_path = File.join(global_factory_directory, get_file_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_file
|
12
|
+
return unless @options[:create]
|
13
|
+
if check_existence? && !@options[:overwrite]
|
14
|
+
puts "There is a file already inside that folder with the same name #{get_file_name}"
|
15
|
+
puts "Would you like to overwrite that file? (yes/no)"
|
16
|
+
answer = gets.chomp
|
17
|
+
if answer == 'yes'
|
18
|
+
puts 'The generator is overwriting your file'
|
19
|
+
File.new(file_path, "w")
|
20
|
+
true
|
21
|
+
else
|
22
|
+
puts 'Exiting the program'
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
puts "creating new file under #{global_factory_directory}/#{get_file_name}"
|
27
|
+
File.new(file_path, "w")
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def check_existence?
|
32
|
+
File.file?(file_path)
|
33
|
+
end
|
34
|
+
|
35
|
+
def write_file(text)
|
36
|
+
File.open(file_path, 'w') do |f|
|
37
|
+
f.write text
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def global_factory_directory
|
42
|
+
LazyFixtures.configuration.factory_directory
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_file_name
|
46
|
+
"#{name}.rb"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module LazyFixtures
|
2
|
+
module FactoryGirl
|
3
|
+
class ValueMapper
|
4
|
+
attr_reader :object, :key, :object_class
|
5
|
+
|
6
|
+
def initialize(object, key, value)
|
7
|
+
@object = object
|
8
|
+
@object_class = @object.class.name.constantize
|
9
|
+
@key = key
|
10
|
+
@value = value
|
11
|
+
remove_encrypted_attributes
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_encrypted_attributes
|
15
|
+
if key =~ /(encrypted_)/
|
16
|
+
new_key = key.dup
|
17
|
+
new_key.slice!($1)
|
18
|
+
@value = object.send(new_key)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_value
|
23
|
+
type = object_class.columns_hash[key].type
|
24
|
+
if @value.nil?
|
25
|
+
"nil"
|
26
|
+
elsif type == :integer || type == :float
|
27
|
+
@value
|
28
|
+
else
|
29
|
+
"\'#{@value}\'"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.remove_encrypted(key)
|
34
|
+
return_key = key
|
35
|
+
if key =~ /(encrypted_)/
|
36
|
+
return_key.slice!($1)
|
37
|
+
end
|
38
|
+
return_key
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
require 'lazy_fixtures/object_helper'
|
2
|
+
|
1
3
|
module LazyFixtures
|
2
4
|
class Generator
|
3
|
-
|
4
|
-
attr_reader :
|
5
|
+
include LazyFixtures::ObjectHelper
|
6
|
+
attr_reader :options, :object
|
5
7
|
|
6
8
|
DEFAULT_OPTIONS = {
|
7
9
|
nested: false,
|
@@ -15,81 +17,16 @@ module LazyFixtures
|
|
15
17
|
def initialize(object, options = {})
|
16
18
|
@options = DEFAULT_OPTIONS.merge(options)
|
17
19
|
@object = get_object(object)
|
18
|
-
@class_name = @object.class.name
|
19
|
-
@attributes = @object.attributes
|
20
|
-
@factory_body = ''
|
21
20
|
end
|
22
21
|
|
23
|
-
def generate
|
24
|
-
|
25
|
-
# first object
|
26
|
-
attribute_manager.manipulate_attributes
|
27
|
-
add_associations if @options[:nested]
|
28
|
-
@factory_body += attribute_manager.add_attributes
|
29
|
-
text = generate_factory
|
30
|
-
if create_file
|
31
|
-
@file.write_file(text)
|
32
|
-
end
|
33
|
-
self
|
22
|
+
def generate(type)
|
23
|
+
gather_class(type).new(object, options).generate
|
34
24
|
end
|
35
25
|
|
36
|
-
|
37
|
-
factory_name = get_factory_name
|
38
|
-
<<-EOF
|
39
|
-
FactoryGirl.define do
|
40
|
-
factory :#{factory_name}, class: #{@class_name.constantize} do
|
41
|
-
#{@factory_body}
|
42
|
-
end
|
43
|
-
end
|
44
|
-
EOF
|
45
|
-
end
|
46
|
-
|
47
|
-
def add_associations
|
48
|
-
association.columns_info.keys.each do |method|
|
49
|
-
begin
|
50
|
-
object = @object.send(method)
|
51
|
-
object = get_object(object)
|
52
|
-
object_class = object.class.name
|
53
|
-
next if invalid_object?(object)
|
54
|
-
parent_included = @options[:parent].include? object_class
|
55
|
-
(@options[:parent] << object_class).uniq!
|
56
|
-
self.class.new(object, nested: true, parent: @options[:parent]).generate unless parent_included
|
57
|
-
@factory_body += association.determine_association(association.columns_info[method], object_class, method)
|
58
|
-
attribute_manager.delete_association_attributes(method)
|
59
|
-
rescue => e
|
60
|
-
puts "There was an error creating the association #{e} => #{e.backtrace}"
|
61
|
-
next
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def get_object(object)
|
67
|
-
object.respond_to?('first') ? object.first : object
|
68
|
-
end
|
69
|
-
|
70
|
-
def invalid_object?(object)
|
71
|
-
object.nil? || (object.respond_to?('first') && object.empty?)
|
72
|
-
end
|
73
|
-
|
74
|
-
def create_file
|
75
|
-
@file ||= FileManager.new(@object.class.name.downcase, @options)
|
76
|
-
@file.create_file
|
77
|
-
end
|
78
|
-
|
79
|
-
def association
|
80
|
-
AssociationManager.new(@object)
|
81
|
-
end
|
82
|
-
|
83
|
-
def attribute_manager
|
84
|
-
@attribute_manager ||= AttributesManager.new(@object, @options)
|
85
|
-
end
|
26
|
+
private
|
86
27
|
|
87
|
-
def
|
88
|
-
|
89
|
-
"#{@class_name.downcase}_new"
|
90
|
-
else
|
91
|
-
@class_name.downcase
|
92
|
-
end
|
28
|
+
def gather_class(type)
|
29
|
+
"LazyFixtures::#{type}::#{type}".constantize
|
93
30
|
end
|
94
31
|
end
|
95
32
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LazyFixtures::FactoryGirl::AssociationManager do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@user = User.create(name:'Evaristo', age: 67)
|
7
|
+
@post = Post.create(title:'Post title', post_body: 'This is not important', user_id: @user.id)
|
8
|
+
end
|
9
|
+
|
10
|
+
context '#get_associations' do
|
11
|
+
it 'return a array of associations' do
|
12
|
+
associations = described_class.new(@post).get_associations
|
13
|
+
expect(associations).to eq([@user])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe LazyFixtures::AttributesManager do
|
3
|
+
describe LazyFixtures::FactoryGirl::AttributesManager do
|
4
4
|
|
5
|
-
|
5
|
+
let(:default_options) { LazyFixtures::Generator::DEFAULT_OPTIONS }
|
6
|
+
|
7
|
+
it 'will return hash with attributes' do
|
6
8
|
user = User.create(name: 'Caita', age: 57)
|
7
|
-
attributes_manager =
|
8
|
-
LazyFixtures::Generator::DEFAULT_OPTIONS)
|
9
|
+
attributes_manager = described_class.new(user, default_options)
|
9
10
|
expect_return = {'id' => user.id, 'name' => user.name,
|
10
11
|
'age' => user.age, 'created_at' => user.created_at,
|
11
12
|
'updated_at' => user.updated_at}
|
@@ -14,49 +15,46 @@ describe LazyFixtures::AttributesManager do
|
|
14
15
|
|
15
16
|
it 'will return string with all the value from the object' do
|
16
17
|
user = User.create(name: 'Caita', age: 57)
|
17
|
-
attributes_manager =
|
18
|
-
LazyFixtures::Generator::DEFAULT_OPTIONS)
|
18
|
+
attributes_manager = described_class.new(user, default_options)
|
19
19
|
expected_attributes = " id #{user.id}\n name 'Caita'\n age 57\n created_at '1986-09-29T00:00:00+00:00'\n updated_at '1986-09-29T00:00:00+00:00'\n"
|
20
|
-
expect(attributes_manager.
|
20
|
+
expect(attributes_manager.stringify_attributes).to eq expected_attributes
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'will return string with all value from the object removing the encrypted part' do
|
24
24
|
user = UserWithEncrypted.create(name: 'Eduardo', age: 60,
|
25
25
|
encrypted_password: 'retvbhj')
|
26
|
-
attributes_manager =
|
27
|
-
LazyFixtures::Generator::DEFAULT_OPTIONS)
|
28
|
-
|
26
|
+
attributes_manager = described_class.new(user, default_options)
|
29
27
|
expected_attributes = " id #{user.id}\n name 'Eduardo'\n age 60\n password 'retvbhj'\n"
|
30
|
-
expect(attributes_manager.
|
28
|
+
expect(attributes_manager.stringify_attributes).to eq expected_attributes
|
31
29
|
end
|
32
30
|
|
33
31
|
it 'will skip attributes from the options hash' do
|
34
32
|
user = User.create(name: 'Caita', age: 57)
|
35
|
-
options =
|
36
|
-
attributes_manager =
|
33
|
+
options = default_options.merge({skip_attr: ['age']})
|
34
|
+
attributes_manager = described_class.new(user, options)
|
37
35
|
expected_attributes = {'id' => user.id, 'name' => user.name,
|
38
36
|
'created_at' => user.created_at,
|
39
37
|
'updated_at' => user.updated_at}
|
40
|
-
expect(attributes_manager.
|
38
|
+
expect(attributes_manager.each).to eq expected_attributes
|
41
39
|
end
|
42
40
|
|
43
41
|
it 'will modify attributes value from the options hash' do
|
44
42
|
user = User.create(name: 'Caita', age: 57)
|
45
|
-
options =
|
46
|
-
attributes_manager =
|
43
|
+
options = default_options.merge({change_attr: {'age' => 109}})
|
44
|
+
attributes_manager = described_class.new(user, options)
|
47
45
|
expected_attributes = {'id' => user.id, 'name' => user.name,
|
48
46
|
'age' => 109, 'created_at' => user.created_at,
|
49
47
|
'updated_at' => user.updated_at}
|
50
|
-
expect(attributes_manager.
|
48
|
+
expect(attributes_manager.each).to eq expected_attributes
|
51
49
|
end
|
52
50
|
|
53
51
|
it 'will remove attributes from association which are not nill' do
|
54
52
|
user = User.create(name: 'Caita', age: 57)
|
55
53
|
post = Post.create(title:'Post title', post_body: 'This is not important', user_id: user.id)
|
56
|
-
options =
|
57
|
-
attributes_manager =
|
54
|
+
options = default_options
|
55
|
+
attributes_manager = described_class.new(post, options)
|
58
56
|
expected_attributes = {'id' => post.id, 'title' => post.title,
|
59
57
|
'post_body' => post.post_body}
|
60
|
-
expect(attributes_manager.delete_association_attributes
|
58
|
+
expect(attributes_manager.delete_association_attributes).to eq expected_attributes
|
61
59
|
end
|
62
60
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LazyFixtures::FactoryGirl::FactoryGirl do
|
4
|
+
let(:user) { User.create(name:'Evaristo', age: 67)}
|
5
|
+
let(:post) { Post.create(title:'Post title', post_body: 'This is not important', user_id: user.id) }
|
6
|
+
|
7
|
+
context 'Create FactoryGirl File' do
|
8
|
+
xit 'write the specific file' do
|
9
|
+
LazyFixtures::Generator.new(post, {create: false, nested: true}).generate('FactoryGirl')
|
10
|
+
|
11
|
+
expect(File.exist?("#{LazyFixtures.configuration.factory_directory}/post.rb"))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe LazyFixtures::ValueMapper do
|
4
|
-
describe '#
|
3
|
+
describe LazyFixtures::FactoryGirl::ValueMapper do
|
4
|
+
describe '#get_value' do
|
5
5
|
before(:each) do
|
6
6
|
@user = User.create(name: 'Gustavo', age: 26)
|
7
7
|
allow(@user).to receive(:columns_hash).and_return({})
|
@@ -9,31 +9,31 @@ describe LazyFixtures::ValueMapper do
|
|
9
9
|
|
10
10
|
it 'return correct value format for integer' do
|
11
11
|
allow({}).to receive(:type).and_return(:integer)
|
12
|
-
value =
|
12
|
+
value = described_class.new(@user, 'id', 6).get_value
|
13
13
|
expect(value).to eq 6
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'return correct format for datetime' do
|
17
17
|
allow({}).to receive(:type).and_return(:datetime)
|
18
|
-
value =
|
18
|
+
value = described_class.new(@user, 'created_at', '1986-09-29T00:00:00+00:00').get_value
|
19
19
|
expect(value).to eq "'1986-09-29T00:00:00+00:00'"
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'return correct format for string' do
|
23
23
|
allow({}).to receive(:type).and_return(:string)
|
24
|
-
value =
|
24
|
+
value = described_class.new(@user, 'name', 'Gustavo').get_value
|
25
25
|
expect(value).to eq "'Gustavo'"
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'return correct format for float' do
|
29
29
|
allow({}).to receive(:type).and_return(:float)
|
30
|
-
value =
|
30
|
+
value = described_class.new(@user, 'id', 1.5).get_value
|
31
31
|
expect(value).to eq 1.5
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'return correct format for nil' do
|
35
35
|
allow({}).to receive(:type).and_return(:string)
|
36
|
-
value =
|
36
|
+
value = described_class.new(@user, 'name', nil).get_value
|
37
37
|
expect(value).to eq "nil"
|
38
38
|
end
|
39
39
|
end
|
@@ -42,7 +42,7 @@ describe LazyFixtures::ValueMapper do
|
|
42
42
|
it 'return non encrypted values' do
|
43
43
|
dummy = Struct.new('User', :encrypted_name, :age, :name)
|
44
44
|
test_user = dummy.new('dueucvwuevcbwbcw', 23, 'gustavo')
|
45
|
-
value =
|
45
|
+
value = described_class.new(test_user, 'encrypted_name', 'dueucvwuevcbwbcw').remove_encrypted_attributes
|
46
46
|
expect(value).to eq 'gustavo'
|
47
47
|
end
|
48
48
|
end
|
@@ -50,9 +50,9 @@ describe LazyFixtures::ValueMapper do
|
|
50
50
|
describe 'self#remove_encrypted' do
|
51
51
|
it 'return key without encrypted in it' do
|
52
52
|
key = 'encrypted_password'
|
53
|
-
return_value =
|
53
|
+
return_value = described_class.remove_encrypted(key)
|
54
54
|
expect(return_value).to eq 'password'
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
end
|
58
|
+
end
|
data/spec/generator_spec.rb
CHANGED
@@ -1,111 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe LazyFixtures::Generator do
|
4
|
-
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
@user = User.create(name: 'Gustavo', age: 26)
|
8
|
-
@factory = LazyFixtures::Generator.new(@user, create: false).generate
|
9
|
-
end
|
10
|
-
|
11
|
-
it '#attributes' do
|
12
|
-
attributes = {
|
13
|
-
"id" => @user.id,
|
14
|
-
"name" => 'Gustavo',
|
15
|
-
"age" => 26,
|
16
|
-
"created_at" => DateTime.new(1986,9,29),
|
17
|
-
"updated_at" => DateTime.new(1986,9,29)
|
18
|
-
}
|
19
|
-
|
20
|
-
expect(@factory.attributes).to eq attributes
|
21
|
-
end
|
22
|
-
|
23
|
-
it '#factory_body' do
|
24
|
-
text = <<-EOF
|
25
|
-
id #{@user.id}
|
26
|
-
name 'Gustavo'
|
27
|
-
age 26
|
28
|
-
created_at '1986-09-29T00:00:00+00:00'
|
29
|
-
updated_at '1986-09-29T00:00:00+00:00'
|
30
|
-
EOF
|
31
|
-
|
32
|
-
factory_body = @factory.factory_body
|
33
|
-
expect(factory_body).to eq text
|
34
|
-
end
|
35
|
-
|
36
|
-
it '#options' do
|
37
|
-
options = {
|
38
|
-
nested: false,
|
39
|
-
overwrite: false,
|
40
|
-
create: false,
|
41
|
-
parent: [],
|
42
|
-
skip_attr: [],
|
43
|
-
change_attr: {}
|
44
|
-
}
|
45
|
-
expect(@factory.options).to eq options
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'generator methods' do
|
51
|
-
before(:each) do
|
52
|
-
@user = User.create(name: 'Gustavo', age: 26)
|
53
|
-
end
|
54
|
-
|
55
|
-
describe 'getter object and determine validity of object methods' do
|
56
|
-
|
4
|
+
describe 'Generator' do
|
5
|
+
context 'LazyFixtures::LazyFixtures::FactoryGirl' do
|
57
6
|
before(:each) do
|
58
|
-
@
|
7
|
+
@user = User.create(name: 'Gustavo', age: 26)
|
8
|
+
@generator = LazyFixtures::Generator.new(@user, create: false)
|
59
9
|
end
|
60
10
|
|
61
|
-
it '
|
62
|
-
|
63
|
-
|
11
|
+
it 'receive generate message' do
|
12
|
+
expect_any_instance_of(LazyFixtures::FactoryGirl::FactoryGirl).to receive(:generate)
|
13
|
+
@generator.generate('FactoryGirl')
|
64
14
|
end
|
65
|
-
|
66
|
-
it '#invalid_object? will return true with empty value' do
|
67
|
-
return_value = @factory.invalid_object?([])
|
68
|
-
expect(return_value).to eq true
|
69
|
-
end
|
70
|
-
|
71
|
-
it '#invalid_object? will return false with valid value' do
|
72
|
-
return_value = @factory.invalid_object?(@user)
|
73
|
-
expect(return_value).to eq false
|
74
|
-
end
|
75
|
-
|
76
|
-
it '#get_object will return the object' do
|
77
|
-
return_value = @factory.get_object(@user)
|
78
|
-
expect(return_value).to eq @user
|
79
|
-
end
|
80
|
-
|
81
|
-
it '#get_object will return the object' do
|
82
|
-
return_value = @factory.get_object(nil)
|
83
|
-
expect(return_value).to eq nil
|
84
|
-
end
|
85
|
-
|
86
|
-
it '#get_object will return the object' do
|
87
|
-
return_value = @factory.get_object([])
|
88
|
-
expect(return_value).to eq nil
|
89
|
-
end
|
90
|
-
|
91
|
-
it '#get_object will return the object' do
|
92
|
-
user2 = User.new(name: 'Test', age: 30)
|
93
|
-
return_value = @factory.get_object([user2, @user])
|
94
|
-
expect(return_value).to eq user2
|
95
|
-
end
|
96
|
-
|
97
|
-
it '#get_factory_name will return the name with appended string' do
|
98
|
-
LazyFixtures.configuration.factory_names = ['user']
|
99
|
-
return_value = @factory.get_factory_name
|
100
|
-
expect(return_value).to eq 'user_new'
|
101
|
-
end
|
102
|
-
|
103
|
-
it '#get_factory_name will return the name' do
|
104
|
-
LazyFixtures.configuration.factory_names = ['switch']
|
105
|
-
return_value = @factory.get_factory_name
|
106
|
-
expect(return_value).to eq 'user'
|
107
|
-
end
|
108
|
-
|
109
15
|
end
|
110
16
|
end
|
111
|
-
end
|
17
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,7 +6,7 @@ load File.dirname(__FILE__) + '/support/schema.rb'
|
|
6
6
|
require File.dirname(__FILE__) +'/support/models'
|
7
7
|
|
8
8
|
LazyFixtures.configure do |config|
|
9
|
-
config.factory_directory = '
|
9
|
+
config.factory_directory = './tmp/test'
|
10
10
|
config.factory_names = []
|
11
11
|
end
|
12
12
|
|
@@ -18,4 +18,4 @@ RSpec.configure do |config|
|
|
18
18
|
config.after(:each) do
|
19
19
|
User.destroy_all
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lazy_fixtures
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GustavoCaso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: activerecord
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,20 +111,23 @@ files:
|
|
97
111
|
- Rakefile
|
98
112
|
- lazy_fixtures.gemspec
|
99
113
|
- lib/lazy_fixtures.rb
|
100
|
-
- lib/lazy_fixtures/association_manager.rb
|
101
|
-
- lib/lazy_fixtures/attributes_manager.rb
|
102
|
-
- lib/lazy_fixtures/
|
114
|
+
- lib/lazy_fixtures/factory_girl/association_manager.rb
|
115
|
+
- lib/lazy_fixtures/factory_girl/attributes_manager.rb
|
116
|
+
- lib/lazy_fixtures/factory_girl/factory_girl.rb
|
117
|
+
- lib/lazy_fixtures/factory_girl/file_manager.rb
|
118
|
+
- lib/lazy_fixtures/factory_girl/value_mapper.rb
|
103
119
|
- lib/lazy_fixtures/generator.rb
|
104
|
-
- lib/lazy_fixtures/
|
120
|
+
- lib/lazy_fixtures/object_helper.rb
|
105
121
|
- lib/lazy_fixtures/version.rb
|
106
|
-
- spec/association_manager_spec.rb
|
107
|
-
- spec/attributes_manager_spec.rb
|
122
|
+
- spec/factory_girl/association_manager_spec.rb
|
123
|
+
- spec/factory_girl/attributes_manager_spec.rb
|
124
|
+
- spec/factory_girl/factory_girl_spec.rb
|
125
|
+
- spec/factory_girl/value_mapper_spec.rb
|
108
126
|
- spec/generator_spec.rb
|
109
127
|
- spec/spec_helper.rb
|
110
128
|
- spec/support/models.rb
|
111
129
|
- spec/support/schema.rb
|
112
|
-
|
113
|
-
homepage: ''
|
130
|
+
homepage: https://github.com/GustavoCaso/lazy_fixtures
|
114
131
|
licenses:
|
115
132
|
- MIT
|
116
133
|
metadata: {}
|
@@ -130,15 +147,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
147
|
version: '0'
|
131
148
|
requirements: []
|
132
149
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.4.
|
150
|
+
rubygems_version: 2.4.6
|
134
151
|
signing_key:
|
135
152
|
specification_version: 4
|
136
153
|
summary: Easy generator to save time when creating them
|
137
154
|
test_files:
|
138
|
-
- spec/association_manager_spec.rb
|
139
|
-
- spec/attributes_manager_spec.rb
|
155
|
+
- spec/factory_girl/association_manager_spec.rb
|
156
|
+
- spec/factory_girl/attributes_manager_spec.rb
|
157
|
+
- spec/factory_girl/factory_girl_spec.rb
|
158
|
+
- spec/factory_girl/value_mapper_spec.rb
|
140
159
|
- spec/generator_spec.rb
|
141
160
|
- spec/spec_helper.rb
|
142
161
|
- spec/support/models.rb
|
143
162
|
- spec/support/schema.rb
|
144
|
-
- spec/value_mapper_spec.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module LazyFixtures
|
2
|
-
class AssociationManager
|
3
|
-
def initialize(item)
|
4
|
-
@item = item
|
5
|
-
@klass = @item.class.name.constantize
|
6
|
-
end
|
7
|
-
|
8
|
-
def columns_info
|
9
|
-
return_hash = {}
|
10
|
-
@klass.reflections.keys.map do |x|
|
11
|
-
reflection = @klass.reflections[x]
|
12
|
-
return_hash[x.to_s]= {
|
13
|
-
method: x,
|
14
|
-
macro: reflection.macro,
|
15
|
-
klass: reflection.class_name
|
16
|
-
}
|
17
|
-
end
|
18
|
-
return_hash
|
19
|
-
end
|
20
|
-
|
21
|
-
def determine_association(association_info, class_name, method)
|
22
|
-
relation = association_info[:macro]
|
23
|
-
text = if relation == :belongs_to
|
24
|
-
create_belongs_to_association(association_info[:klass], class_name, method)
|
25
|
-
elsif relation == :has_many || relation == :has_and_belongs_to_many
|
26
|
-
create_has_many_associations(association_info[:klass])
|
27
|
-
end
|
28
|
-
<<-EOF
|
29
|
-
#{text}
|
30
|
-
EOF
|
31
|
-
end
|
32
|
-
|
33
|
-
def create_belongs_to_association(klass, class_name, method)
|
34
|
-
method = method == klass.downcase ? klass.downcase : method
|
35
|
-
class_name = klass == class_name ? klass : class_name
|
36
|
-
"association :#{method}, factory: :#{class_name.downcase}"
|
37
|
-
end
|
38
|
-
|
39
|
-
def create_has_many_associations(klass)
|
40
|
-
%Q(after(:create) do |x|
|
41
|
-
create_list(:#{klass.downcase}, 1, #{@item.class.name.downcase}: x)
|
42
|
-
end)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module LazyFixtures
|
2
|
-
class AttributesManager
|
3
|
-
|
4
|
-
attr_reader :attributes
|
5
|
-
|
6
|
-
def initialize(object, options={})
|
7
|
-
@object = object
|
8
|
-
@attributes = @object.attributes
|
9
|
-
@options = options
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_attributes
|
13
|
-
return_value = ''
|
14
|
-
attributes.each do |k,v|
|
15
|
-
value = ValueMapper.new(@object, k.to_s.dup, v).map_values
|
16
|
-
key = ValueMapper.remove_encrypted(k.to_s.dup)
|
17
|
-
return_value += " #{key} #{value}\n"
|
18
|
-
end
|
19
|
-
return_value
|
20
|
-
end
|
21
|
-
|
22
|
-
def manipulate_attributes
|
23
|
-
@options[:skip_attr].each { |x| attributes.delete(x)} unless @options[:skip_attr].empty?
|
24
|
-
attributes.merge!(@options[:change_attr]) unless @options[:change_attr].empty?
|
25
|
-
attributes
|
26
|
-
end
|
27
|
-
|
28
|
-
def delete_association_attributes(method)
|
29
|
-
attributes.delete_if {|k,v| k =~ Regexp.new(method) && !v.nil?}
|
30
|
-
end
|
31
|
-
|
32
|
-
def each
|
33
|
-
attributes
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module LazyFixtures
|
2
|
-
class FileManager
|
3
|
-
def initialize(name, options)
|
4
|
-
@name = name
|
5
|
-
@options = options
|
6
|
-
@title = "#{@name}.rb"
|
7
|
-
@file_path = File.join(LazyFixtures.configuration.factory_directory, @title)
|
8
|
-
end
|
9
|
-
|
10
|
-
def create_file
|
11
|
-
return unless @options[:create]
|
12
|
-
if check_existence? && !@options[:overwrite]
|
13
|
-
puts "There is a file already inside that folder with the same name #{@name}"
|
14
|
-
puts "Would you like to overwrite that file? (yes/no)"
|
15
|
-
answer = gets.chomp
|
16
|
-
if answer == 'yes'
|
17
|
-
puts 'The generator is overwriting your file'
|
18
|
-
File.new(@file_path, "w")
|
19
|
-
true
|
20
|
-
else
|
21
|
-
puts 'Exiting the program'
|
22
|
-
false
|
23
|
-
end
|
24
|
-
end
|
25
|
-
puts "creating new file under #{LazyFixtures.configuration.factory_directory}/#{@name}"
|
26
|
-
File.new(@file_path, "w")
|
27
|
-
true
|
28
|
-
end
|
29
|
-
|
30
|
-
def check_existence?
|
31
|
-
File.file?(@file_path)
|
32
|
-
end
|
33
|
-
|
34
|
-
def write_file(text)
|
35
|
-
File.open(@file_path, 'w') do |f|
|
36
|
-
f.write text
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module LazyFixtures
|
2
|
-
class ValueMapper
|
3
|
-
def initialize(object, key, value)
|
4
|
-
@object = object
|
5
|
-
@object_class = @object.class.name.constantize
|
6
|
-
@key = key
|
7
|
-
@value = value
|
8
|
-
remove_encrypted_attributes
|
9
|
-
end
|
10
|
-
|
11
|
-
def remove_encrypted_attributes
|
12
|
-
if @key =~ /(encrypted_)/
|
13
|
-
key = @key.dup
|
14
|
-
key.slice!($1)
|
15
|
-
@value = @object.send(key)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def map_values
|
20
|
-
type = @object_class.columns_hash[@key].type
|
21
|
-
value = if @value.nil?
|
22
|
-
"nil"
|
23
|
-
elsif type == :string || type == :datetime || type == :text || type == :date
|
24
|
-
"\'#{@value}\'"
|
25
|
-
else
|
26
|
-
@value
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.remove_encrypted(key)
|
31
|
-
return_key = key
|
32
|
-
if key =~ /(encrypted_)/
|
33
|
-
return_key.slice!($1)
|
34
|
-
end
|
35
|
-
return_key
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe LazyFixtures::AssociationManager do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@user = User.create(name:'Evaristo', age: 67)
|
7
|
-
@post = Post.create(title:'Post title', post_body: 'This is not important', user_id: 3)
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '#columns_info' do
|
11
|
-
it 'will return hash with reflections information' do
|
12
|
-
return_value = LazyFixtures::AssociationManager.new(@user).columns_info
|
13
|
-
expect(return_value).to eq({'posts' => {method: :posts, macro: :has_many, klass: 'Post'}})
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'will return hash with reflections information' do
|
17
|
-
return_value = LazyFixtures::AssociationManager.new(@post).columns_info
|
18
|
-
expect(return_value).to eq('user' => {method: :user, macro: :belongs_to, klass: 'User'})
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '#determine_association' do
|
23
|
-
it 'will return text for belongs to association' do
|
24
|
-
user_association_info = LazyFixtures::AssociationManager.new(@post).columns_info['user']
|
25
|
-
return_value = LazyFixtures::AssociationManager.new(@post).determine_association(user_association_info, 'User', 'user')
|
26
|
-
expect(return_value).to eq " association :user, factory: :user\n"
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'will return text for belongs to association with right association' do
|
30
|
-
user_association_info = LazyFixtures::AssociationManager.new(@post).columns_info['user']
|
31
|
-
return_value = LazyFixtures::AssociationManager.new(@post).determine_association(user_association_info, 'User', 'writter')
|
32
|
-
expect(return_value).to eq " association :writter, factory: :user\n"
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'will return text for belongs to association with right factory' do
|
36
|
-
user_association_info = LazyFixtures::AssociationManager.new(@post).columns_info['user']
|
37
|
-
return_value = LazyFixtures::AssociationManager.new(@post).determine_association(user_association_info, 'Writter', 'user')
|
38
|
-
expect(return_value).to eq " association :user, factory: :writter\n"
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
it 'will return text for has_many to association' do
|
43
|
-
post_association_info = LazyFixtures::AssociationManager.new(@user).columns_info['posts']
|
44
|
-
return_value = LazyFixtures::AssociationManager.new(@user).determine_association(post_association_info, 'Post', 'post')
|
45
|
-
expect(return_value).to eq " after(:create) do |x|\n create_list(:post, 1, user: x)\n end\n"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|