to_factory 0.2.1 → 2.0.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -9
  3. data/Gemfile +2 -3
  4. data/lib/to_factory/file_writer.rb +0 -8
  5. data/lib/to_factory/generation/attribute.rb +7 -13
  6. data/lib/to_factory/generation/factory.rb +5 -9
  7. data/lib/to_factory/parsing/file.rb +2 -8
  8. data/lib/to_factory/parsing/ruby_parsing_helpers.rb +17 -0
  9. data/lib/to_factory/parsing/syntax.rb +34 -11
  10. data/lib/to_factory/representation.rb +21 -0
  11. data/lib/to_factory/version.rb +1 -1
  12. data/lib/to_factory.rb +2 -11
  13. data/spec/example_factories/{new_syntax/admin.rb → admin.rb} +1 -1
  14. data/spec/example_factories/{new_syntax/admin_with_header.rb → admin_with_header.rb} +1 -1
  15. data/spec/example_factories/{new_syntax/project_with_header.rb → project_with_header.rb} +0 -0
  16. data/spec/example_factories/{new_syntax/user.rb → user.rb} +1 -1
  17. data/spec/example_factories/{new_syntax/user_admin.rb → user_admin.rb} +2 -2
  18. data/spec/example_factories/{new_syntax/user_admin_root.rb → user_admin_root.rb} +1 -1
  19. data/spec/example_factories/{new_syntax/user_admin_super_admin.rb → user_admin_super_admin.rb} +0 -0
  20. data/spec/example_factories/{new_syntax/user_admin_with_header.rb → user_admin_with_header.rb} +2 -2
  21. data/spec/example_factories/{new_syntax/user_with_header.rb → user_with_header.rb} +1 -1
  22. data/spec/integration/file_sync_spec.rb +6 -6
  23. data/spec/integration/file_writer_spec.rb +1 -1
  24. data/spec/integration/lint_spec.rb +3 -7
  25. data/spec/integration/to_factory_method_spec.rb +7 -18
  26. data/spec/spec_helper.rb +0 -7
  27. data/spec/unit/file_writer_spec.rb +1 -3
  28. data/spec/unit/finders/factory_spec.rb +3 -3
  29. data/spec/unit/generation/attribute_spec.rb +18 -2
  30. data/spec/unit/generation/factory_spec.rb +64 -0
  31. data/spec/unit/parsing/file_spec.rb +31 -17
  32. data/to_factory.gemspec +5 -20
  33. metadata +49 -65
  34. data/lib/to_factory/parsing/new_syntax.rb +0 -19
  35. data/lib/to_factory/parsing/old_syntax.rb +0 -13
  36. data/spec/example_factories/old_syntax/admin.rb +0 -7
  37. data/spec/example_factories/old_syntax/project_with_header.rb +0 -5
  38. data/spec/example_factories/old_syntax/user.rb +0 -7
  39. data/spec/example_factories/old_syntax/user_admin.rb +0 -15
  40. data/spec/example_factories/old_syntax/user_admin_root.rb +0 -21
  41. data/spec/example_factories/old_syntax/user_admin_super_admin.rb +0 -12
  42. data/spec/example_factories/old_syntax/user_admin_with_header.rb +0 -15
  43. data/spec/example_factories/old_syntax/user_with_header.rb +0 -7
  44. data/spec/unit/generator_spec.rb +0 -68
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b7199b7f56596066bd61469c11ed611c8559011
4
- data.tar.gz: 9799646595d3bb9835d61cceffde7514334bfc9a
3
+ metadata.gz: 6906cfbba894ee5d9a25a7a8c30467c59c0c7c27
4
+ data.tar.gz: 5a27e0c0912602908f81bd19335c46b880adbe77
5
5
  SHA512:
6
- metadata.gz: eb276d7e60f92af6de9fb7a6c6fa0883cdffbd43d585141d359bb64b6e4539936d7fe40545453026419ccfa513a72db5804eecbe80ffd75f42d886d2f7c61e1c
7
- data.tar.gz: 9345ae024ec70089a05d6430e1039691bbfad6eb43833525e8bb1ed4d7ba9054560a5d15b780617f4ede28efb51bc88c3e770250a24883ecc435563f05efc804
6
+ metadata.gz: ac378d94509e96ea3417a714e6b4073033552fe675e43b263d020a577c9c2201f119ef23fe13563221a5a67d098bcca34f900f305117485980b3394faaa5c654
7
+ data.tar.gz: d19f74bdd1789ebf9d57c0fc267c39e5c9db3221828c9adec12d4dbc6002ea0ef11818e9c2009ee0d4943ebb142f332553a8c4c752d139ce4947e15fcb2c7df7
data/.travis.yml CHANGED
@@ -1,16 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.0
4
- - 2.1.5
5
- - 2.1.4
6
- - 2.1.3
7
- - 2.1.2
8
- - 2.1.1
9
- - 2.1.0
3
+ - 2.2.3
4
+ - 2.1.7
10
5
  - 2.0.0
11
6
  - 1.9.3
12
- - 1.9.2
13
- - 1.8.7
14
7
 
15
8
  script: "./bin/ci"
16
9
 
data/Gemfile CHANGED
@@ -1,6 +1,5 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- if RUBY_VERSION != "1.8.7"
4
- gem "codeclimate-test-reporter", :group => :test, :require => nil
5
- end
3
+ gem "codeclimate-test-reporter", :group => :test, :require => nil
4
+
6
5
  gemspec
@@ -23,14 +23,6 @@ module ToFactory
23
23
  end
24
24
 
25
25
  def wrap_factories(definitions)
26
- if ToFactory.new_syntax?
27
- modern_header(definitions)
28
- else
29
- definitions.join("\n\n")
30
- end
31
- end
32
-
33
- def modern_header(definitions)
34
26
  out = "FactoryGirl.define do\n"
35
27
  out << definitions.join("\n\n")
36
28
  out << "end"
@@ -8,12 +8,7 @@ module ToFactory
8
8
 
9
9
  def to_s
10
10
  setter = "#{@attribute}#{inspect_value(@value)}"
11
-
12
- if ToFactory.new_syntax?
13
- " #{setter}"
14
- else
15
- " o.#{setter}"
16
- end
11
+ " #{setter}"
17
12
  end
18
13
 
19
14
  def inspect_value(value, nested=false)
@@ -26,10 +21,12 @@ module ToFactory
26
21
  formatted
27
22
  end
28
23
 
29
- def format(value, nested)
24
+ def format(value, nested=false)
30
25
  case value
31
26
  when Time, DateTime
32
27
  inspect_time(value)
28
+ when Date
29
+ value.to_s.inspect
33
30
  when BigDecimal
34
31
  value.to_f.inspect
35
32
  when Hash
@@ -60,8 +57,9 @@ module ToFactory
60
57
  end
61
58
 
62
59
  def inspect_time(value)
63
- time = in_utc(value).strftime("%Y-%m-%dT%H:%M%Z").inspect
64
- time.gsub(/UTC"$/, "Z\"").gsub(/GMT"$/, "Z\"")
60
+ value = value.strftime("%Y-%m-%dT%H:%M %Z").inspect
61
+ value.gsub! /GMT/, "UTC"
62
+ value
65
63
  end
66
64
 
67
65
  def inspect_hash(value, nested)
@@ -86,10 +84,6 @@ module ToFactory
86
84
  formatted_value = inspect_value(value.fetch(key), true)
87
85
  "#{formatted_key} => #{formatted_value}"
88
86
  end
89
-
90
- def in_utc(time)
91
- time.utc
92
- end
93
87
  end
94
88
  end
95
89
  end
@@ -18,25 +18,21 @@ module ToFactory
18
18
  end
19
19
 
20
20
  def header(&block)
21
- if ToFactory.new_syntax?
22
- generic_header(" factory", "", " end", &block)
23
- else
24
- generic_header("Factory.define", " |o|", "end", &block)
25
- end
21
+ generic_header(" factory", "", " end", &block)
26
22
  end
27
23
 
28
24
  def factory_attribute(attr, value)
29
25
  Attribute.new(attr, value).to_s
30
26
  end
31
27
 
32
- private
33
-
34
28
  def attributes
35
- to_skip = [:id, :created_at, :updated_at]
29
+ to_skip = [:id, :created_at, :created_on, :updated_at, :updated_on]
36
30
 
37
- @representation.attributes.delete_if{|key, _| to_skip.include? key.to_sym}
31
+ @representation.attributes.delete_if{|key, _| key.nil? || to_skip.include?(key.to_sym)}
38
32
  end
39
33
 
34
+ private
35
+
40
36
  def parent_name
41
37
  @representation.parent_name
42
38
  end
@@ -1,8 +1,7 @@
1
1
  require 'ruby2ruby'
2
2
  require 'ruby_parser'
3
+ require "to_factory/parsing/ruby_parsing_helpers"
3
4
  require 'to_factory/parsing/syntax'
4
- require 'to_factory/parsing/new_syntax'
5
- require 'to_factory/parsing/old_syntax'
6
5
 
7
6
  module ToFactory
8
7
  module Parsing
@@ -26,14 +25,9 @@ module ToFactory
26
25
  end
27
26
 
28
27
  def parser
29
- @parser ||= parser_klass.new(@contents)
28
+ @parser ||= Syntax.new(@contents)
30
29
  end
31
30
 
32
- private
33
-
34
- def parser_klass
35
- ToFactory.new_syntax? ? NewSyntax : OldSyntax
36
- end
37
31
  end
38
32
  end
39
33
  end
@@ -0,0 +1,17 @@
1
+ module ToFactory
2
+ module Parsing
3
+ module RubyParsingHelpers
4
+ def to_ruby(sexp)
5
+ ruby2ruby.process sexp.deep_clone
6
+ end
7
+
8
+ def ruby2ruby
9
+ @ruby2ruby ||= Ruby2Ruby.new
10
+ end
11
+
12
+ def ruby_parser
13
+ @ruby_parseer ||= RubyParser.new
14
+ end
15
+ end
16
+ end
17
+ end
@@ -2,7 +2,16 @@ module ToFactory
2
2
  module Parsing
3
3
  ParseException = Class.new ::Exception
4
4
 
5
+ class CouldNotInferClassException < ::Exception
6
+ attr_reader :sexp
7
+
8
+ def initialize(sexp)
9
+ @sexp = sexp
10
+ end
11
+ end
12
+
5
13
  class Syntax
14
+ include Parsing::RubyParsingHelpers
6
15
  attr_accessor :contents
7
16
 
8
17
  def initialize(contents)
@@ -15,13 +24,22 @@ module ToFactory
15
24
 
16
25
  def parse
17
26
  factories.map do |x|
18
- Representation.new(name_from(x), parent_from(x), to_ruby(x))
27
+ representation_from(x)
19
28
  end
20
29
 
21
30
  rescue Racc::ParseError, StringScanner::Error => e
22
31
  raise ParseException.new("Original exception: #{e.message}\n #{e.backtrace}\nToFactory Error parsing \n#{@contents}\n o")
23
32
  end
24
33
 
34
+
35
+ def representation_from(x)
36
+ Representation.new(name_from(x), parent_from(x), to_ruby(x))
37
+ rescue CouldNotInferClassException => e
38
+ ruby = to_ruby(e.sexp)
39
+ Kernel.warn "ToFactory could not parse\n#{ruby}"
40
+ NullRepresentation.new(e.sexp)
41
+ end
42
+
25
43
  def factories
26
44
  if multiple_factories?
27
45
  factories_sexp[1..-1]
@@ -36,25 +54,30 @@ module ToFactory
36
54
 
37
55
  def name_from(sexp)
38
56
  sexp[1][3][1]
57
+ rescue NoMethodError
58
+ raise CouldNotInferClassException.new(sexp)
39
59
  end
40
60
 
41
- private
61
+ def header?
62
+ sexp[1][1][1] == :FactoryGirl rescue false
63
+ end
42
64
 
43
- def to_ruby(sexp)
44
- ruby2ruby.process sexp.deep_clone
65
+ def parent_from(x)
66
+ # e.g.
67
+ #s(:call, nil, :factory, s(:lit, :admin), s(:hash, s(:lit, :parent), s(:lit, :"to_factory/user")))
68
+ x[1][4][2][1]
69
+ rescue NoMethodError
70
+ # e.g.
71
+ #s(:call, nil, :factory, s(:lit, :"to_factory/user"))
72
+ x[1][3][1]
45
73
  end
46
74
 
75
+ private
76
+
47
77
  def sexp
48
78
  @sexp ||= ruby_parser.process(@contents)
49
79
  end
50
80
 
51
- def ruby2ruby
52
- @ruby2ruby ||= Ruby2Ruby.new
53
- end
54
-
55
- def ruby_parser
56
- @ruby_parseer ||= RubyParser.new
57
- end
58
81
  end
59
82
  end
60
83
  end
@@ -1,4 +1,25 @@
1
1
  module ToFactory
2
+ class NullRepresentation
3
+ include ToFactory::Parsing::RubyParsingHelpers
4
+
5
+ def initialize(sexp)
6
+ @sexp = sexp
7
+ end
8
+
9
+ def name
10
+ nil
11
+ end
12
+
13
+ def parent
14
+ nil
15
+ end
16
+
17
+ def definition
18
+ to_ruby(@sexp)
19
+ end
20
+ end
21
+
22
+
2
23
  class Representation
3
24
  delegate :attributes, :to => :record
4
25
  attr_accessor :klass, :name, :parent_name, :definition, :hierarchy_order, :record
@@ -1,3 +1,3 @@
1
1
  module ToFactory
2
- VERSION = "0.2.1"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/to_factory.rb CHANGED
@@ -8,27 +8,18 @@ require "to_factory/collation"
8
8
  require "to_factory/file_writer"
9
9
  require "to_factory/finders/model"
10
10
  require "to_factory/finders/factory"
11
- require "to_factory/representation"
12
11
  require "to_factory/file_sync"
13
12
  require "to_factory/parsing/file"
13
+ require "to_factory/representation"
14
14
  require "to_factory/klass_inference"
15
15
  require "to_factory/options_parser"
16
+ require "factory_girl"
16
17
 
17
18
  module ToFactory
18
19
  class MissingActiveRecordInstanceException < Exception;end
19
20
  class NotFoundError < Exception;end
20
21
 
21
22
  class << self
22
- def new_syntax?
23
- require "factory_girl"
24
- if FactoryGirl::VERSION.to_s[0..0].to_i > 1
25
- true
26
- else
27
- false
28
- end
29
- rescue NameError, ArgumentError
30
- false
31
- end
32
23
 
33
24
  def definition_for(item)
34
25
  if item.is_a? ActiveRecord::Base
@@ -1,5 +1,5 @@
1
1
  factory(:admin, :parent => :"to_factory/user") do
2
- birthday "2014-07-08T15:30Z"
2
+ birthday "2014-07-08T15:30 UTC"
3
3
  email "admin@example.com"
4
4
  name "Admin"
5
5
  some_attributes({:a => 1})
@@ -1,6 +1,6 @@
1
1
  FactoryGirl.define do
2
2
  factory(:admin, :parent => :"to_factory/user") do
3
- birthday "2014-07-08T15:30Z"
3
+ birthday "2014-07-08T15:30 UTC"
4
4
  email "admin@example.com"
5
5
  name "Admin"
6
6
  some_attributes({:a => 1})
@@ -1,5 +1,5 @@
1
1
  factory(:"to_factory/user") do
2
- birthday "2014-07-08T15:30Z"
2
+ birthday "2014-07-08T15:30 UTC"
3
3
  email "test@example.com"
4
4
  name "Jeff"
5
5
  some_attributes({:a => 1})
@@ -1,5 +1,5 @@
1
1
  factory(:"to_factory/user") do
2
- birthday "2014-07-08T15:30Z"
2
+ birthday "2014-07-08T15:30 UTC"
3
3
  email "test@example.com"
4
4
  name "Jeff"
5
5
  some_attributes({:a => 1})
@@ -7,7 +7,7 @@ factory(:"to_factory/user") do
7
7
  end
8
8
 
9
9
  factory(:admin, :parent => :"to_factory/user") do
10
- birthday "2014-07-08T15:30Z"
10
+ birthday "2014-07-08T15:30 UTC"
11
11
  email "admin@example.com"
12
12
  name "Admin"
13
13
  some_attributes({:a => 1})
@@ -4,7 +4,7 @@ FactoryGirl.define do
4
4
  end
5
5
 
6
6
  factory(:root, :parent => :"to_factory/user") do
7
- birthday "2014-07-08T15:30Z"
7
+ birthday "2014-07-08T15:30 UTC"
8
8
  email "test@example.com"
9
9
  name "Jeff"
10
10
  some_attributes({:a => 1})
@@ -1,6 +1,6 @@
1
1
  FactoryGirl.define do
2
2
  factory(:"to_factory/user") do
3
- birthday "2014-07-08T15:30Z"
3
+ birthday "2014-07-08T15:30 UTC"
4
4
  email "test@example.com"
5
5
  name "Jeff"
6
6
  some_attributes({:a => 1})
@@ -8,7 +8,7 @@ FactoryGirl.define do
8
8
  end
9
9
 
10
10
  factory(:admin, :parent => :"to_factory/user") do
11
- birthday "2014-07-08T15:30Z"
11
+ birthday "2014-07-08T15:30 UTC"
12
12
  email "admin@example.com"
13
13
  name "Admin"
14
14
  some_attributes({:a => 1})
@@ -1,6 +1,6 @@
1
1
  FactoryGirl.define do
2
2
  factory(:"to_factory/user") do
3
- birthday "2014-07-08T15:30Z"
3
+ birthday "2014-07-08T15:30 UTC"
4
4
  email "test@example.com"
5
5
  name "Jeff"
6
6
  some_attributes({:a => 1})
@@ -2,12 +2,12 @@ describe "FileSync" do
2
2
  let(:user) { create_user! }
3
3
  let(:admin) { create_admin! }
4
4
  let(:project) { create_project! }
5
- let(:version) { ToFactory.new_syntax? ? "new" : "old"}
6
- let(:expected_user_file) { File.read("./spec/example_factories/#{version}_syntax/user.rb") }
7
- let(:expected_user_with_header_file) { File.read("./spec/example_factories/#{version}_syntax/user_with_header.rb") }
8
- let(:expected_admin_file) { File.read("./spec/example_factories/#{version}_syntax/admin.rb") }
9
- let(:user_with_header) { File.read("./spec/example_factories/#{version}_syntax/user_with_header.rb") }
10
- let(:user_admin_with_header) { File.read("./spec/example_factories/#{version}_syntax/user_admin_with_header.rb") }
5
+ let(:version) { "new" }
6
+ let(:expected_user_file) { File.read("./spec/example_factories/user.rb") }
7
+ let(:expected_user_with_header_file) { File.read("./spec/example_factories/user_with_header.rb") }
8
+ let(:expected_admin_file) { File.read("./spec/example_factories/admin.rb") }
9
+ let(:user_with_header) { File.read("./spec/example_factories/user_with_header.rb") }
10
+ let(:user_admin_with_header) { File.read("./spec/example_factories/user_admin_with_header.rb") }
11
11
 
12
12
 
13
13
  before do
@@ -1,6 +1,6 @@
1
1
  describe ToFactory::FileWriter do
2
2
  let(:fw) { ToFactory::FileWriter.new }
3
- let(:expected) { File.read "./spec/example_factories/#{version}_syntax/user_with_header.rb"}
3
+ let(:expected) { File.read "./spec/example_factories/user_with_header.rb"}
4
4
  let(:user_file_contents) { File.read "./tmp/factories/to_factory/user.rb"}
5
5
  let!(:user) { create_user! }
6
6
  let!(:admin) { create_admin! }
@@ -4,13 +4,9 @@ context "full integration" do
4
4
  end
5
5
 
6
6
  it "#to_factory linting the output" do
7
- if ToFactory.new_syntax?
8
- ToFactory(user)
9
-
10
- load "./tmp/factories/to_factory/user.rb"
11
-
12
- FactoryGirl.lint
13
- end
7
+ ToFactory(user)
8
+ load "./tmp/factories/to_factory/user.rb"
9
+ FactoryGirl.lint
14
10
  end
15
11
  end
16
12
 
@@ -12,8 +12,8 @@ describe ToFactory do
12
12
  File.read("./tmp/factories/to_factory/project.rb") rescue nil
13
13
  end
14
14
 
15
- let(:expected_user_file) { File.read "./spec/example_factories/#{version}_syntax/user_with_header.rb"}
16
- let(:expected_project_file) { File.read "./spec/example_factories/#{version}_syntax/project_with_header.rb"}
15
+ let(:expected_user_file) { File.read "./spec/example_factories/user_with_header.rb"}
16
+ let(:expected_project_file) { File.read "./spec/example_factories/project_with_header.rb"}
17
17
 
18
18
  describe "ToFactory.definitions" do
19
19
  it do
@@ -24,7 +24,7 @@ describe ToFactory do
24
24
  end
25
25
 
26
26
  describe "ToFactory.definition_for" do
27
- let(:expected_user_file) { File.read "./spec/example_factories/#{version}_syntax/user.rb"}
27
+ let(:expected_user_file) { File.read "./spec/example_factories/user.rb"}
28
28
  it do
29
29
  expect(ToFactory.definition_for user).to match_sexp expected_user_file
30
30
  end
@@ -41,7 +41,7 @@ describe ToFactory do
41
41
 
42
42
  describe "Object#ToFactory" do
43
43
  context "with multiple levels of parent classes" do
44
- let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_admin_super_admin'}.rb"}
44
+ let(:filename) { "spec/example_factories/#{'user_admin_super_admin'}.rb"}
45
45
 
46
46
  it "gets the output order correct" do
47
47
  output = "./tmp/factories/to_factory/user.rb"
@@ -50,7 +50,7 @@ describe ToFactory do
50
50
 
51
51
  ToFactory(:root => user)
52
52
 
53
- expected = File.read "spec/example_factories/#{version}_syntax/#{'user_admin_root'}.rb"
53
+ expected = File.read "spec/example_factories/#{'user_admin_root'}.rb"
54
54
 
55
55
  #user, admin, super_admin, root
56
56
  expect(File.read(output)).to match_sexp expected
@@ -116,20 +116,9 @@ describe ToFactory do
116
116
 
117
117
  context "with a name for the factory" do
118
118
  it "appends to the file" do
119
- if ToFactory.new_syntax?
120
- user_file_includes('factory(:"to_factory/user"')
121
- else
122
- user_file_includes('Factory.define(:"to_factory/user"')
123
- end
124
-
119
+ user_file_includes('factory(:"to_factory/user"')
125
120
  ToFactory(:specific_user => user)
126
- if ToFactory.new_syntax?
127
- user_file_includes('factory(:specific_user, :parent => :"to_factory/user"')
128
- else
129
- user_file_includes('Factory.define(:specific_user, :parent => :"to_factory/user"')
130
- end
131
-
132
-
121
+ user_file_includes('factory(:specific_user, :parent => :"to_factory/user"')
133
122
  end
134
123
  end
135
124
 
data/spec/spec_helper.rb CHANGED
@@ -28,15 +28,8 @@ require "./spec/support/models/project"
28
28
  require "./spec/support/match_sexp"
29
29
  require "./spec/support/data_creation"
30
30
 
31
- module ToFactory::SpecSyntaxHelpers
32
- def version
33
- ToFactory.new_syntax? ? "new" : "old"
34
- end
35
- end
36
-
37
31
  RSpec.configure do |config|
38
32
  config.include ToFactory::DataCreation
39
- config.include ToFactory::SpecSyntaxHelpers
40
33
 
41
34
  config.before :suite do
42
35
  ActiveRecord::Base.tap do |base|
@@ -17,9 +17,7 @@ describe ToFactory::FileWriter do
17
17
  "to_factory/project" => [project_representation]
18
18
  })
19
19
 
20
- if ToFactory.new_syntax?
21
- expect(user_file).to match /FactoryGirl.define do/
22
- end
20
+ expect(user_file).to match /FactoryGirl.define do/
23
21
  expect(user_file).to include "factory a"
24
22
  expect(project_file).to include "factory b"
25
23
  end
@@ -2,12 +2,12 @@ describe ToFactory::Finders::Factory do
2
2
  describe "#call" do
3
3
  before do
4
4
  FileUtils.mkdir_p "./tmp/factories/to_factory"
5
- FileUtils.cp "./spec/example_factories/#{version}_syntax/user_admin_with_header.rb",
5
+ FileUtils.cp "./spec/example_factories/user_admin_with_header.rb",
6
6
  "./tmp/factories/to_factory/user.rb"
7
7
  end
8
8
 
9
- let(:user_file_contents) { File.read "./spec/example_factories/#{version}_syntax/user.rb"}
10
- let(:admin_file_contents){ File.read "./spec/example_factories/#{version}_syntax/admin.rb" }
9
+ let(:user_file_contents) { File.read "./spec/example_factories/user.rb"}
10
+ let(:admin_file_contents){ File.read "./spec/example_factories/admin.rb" }
11
11
 
12
12
  it "reads all the factories" do
13
13
  finder = ToFactory::Finders::Factory.new
@@ -7,12 +7,28 @@ describe ToFactory::Generation::Attribute do
7
7
  end
8
8
  end
9
9
 
10
+ describe "#format" do
11
+ it "formats Date, Time, DateTime" do
12
+ Time.zone= "UTC"
13
+ time_string ="2011-12-13T14:15 UTC"
14
+
15
+ expect(attribute.format(Time .parse(time_string))).to eq "2011-12-13T14:15 UTC".inspect
16
+ expect(attribute.format(Date .parse(time_string))).to eq "2011-12-13".inspect
17
+ expect(attribute.format(DateTime.parse(time_string))).to eq "2011-12-13T14:15 +00:00".inspect
18
+ end
19
+
20
+ it "formats Integer, Float"do
21
+ expect(attribute.format(123)) .to eq "123"
22
+ expect(attribute.format(123.0)).to eq "123.0"
23
+ end
24
+ end
25
+
26
+
10
27
  describe "#inspect_value" do
11
28
  it do
12
29
  expect(attribute.inspect_value({:a => 1})).to eq "({:a => 1})"
13
30
  end
14
-
15
- it do
31
+ it "formats hashes correctly" do
16
32
  hash = ActiveSupport::OrderedHash.new
17
33
  hash[{"with" => :hash}] = "keys"
18
34
  hash[2] = "integers"
@@ -0,0 +1,64 @@
1
+ describe ToFactory::Generation::Factory do
2
+ before(:each) do
3
+ ToFactory::User.destroy_all
4
+ ActiveRecord::Base.connection.execute "delete from sqlite_sequence where name = 'users'"
5
+ end
6
+
7
+ let(:birthday) do
8
+ Time.find_zone("UTC").parse("2014-07-08T15:30 UTC")
9
+ end
10
+
11
+ let!(:user) { create_user! }
12
+
13
+ let(:representation) { ToFactory::Representation.from(user) }
14
+ let(:generator) { ToFactory::Generation::Factory.new representation }
15
+
16
+
17
+
18
+ describe "#header" do
19
+ it do
20
+ expect(generator.header{}).to match_sexp <<-eof.strip_heredoc
21
+ factory(:"to_factory/user") do
22
+ end
23
+ eof
24
+ end
25
+ end
26
+
27
+ describe "#attributes" do
28
+ let(:representation) do
29
+ double(:attributes => {"something" => "something",
30
+ :id => 123,
31
+ :created_at => anything,
32
+ :created_on => anything,
33
+ :updated_at => anything,
34
+ :updated_on => anything,
35
+ nil => nil})
36
+ end
37
+ it "ignores blank keys, :id, :created_at, :updated_at, :created_on, :updated_on" do
38
+ expect(generator.attributes).to eq({"something" => "something"})
39
+ end
40
+ end
41
+ describe "#factory_attribute" do
42
+ it do
43
+ expect(generator.factory_attribute(:name, nil)) .to eq ' name nil'
44
+ expect(generator.factory_attribute(:name, "Jeff")).to eq ' name "Jeff"'
45
+ expect(generator.factory_attribute(:id, 8)) .to eq ' id 8'
46
+ end
47
+ it "generates usable datetime strings" do
48
+ output = generator.factory_attribute(:birthday, birthday)
49
+ expect(output).to eq ' birthday "2014-07-08T15:30 UTC"'
50
+ end
51
+ end
52
+
53
+ describe "#ToFactory" do
54
+ let(:expected) do
55
+ File.read "./spec/example_factories/user.rb"
56
+ end
57
+
58
+ it do
59
+ expect(generator.to_factory).to match_sexp expected
60
+ result = ToFactory(user).values.first.first
61
+ expect(result.definition).to match_sexp expected
62
+ end
63
+ end
64
+ end
@@ -1,31 +1,45 @@
1
1
  describe ToFactory::Parsing::File do
2
- let(:user_contents) { File.read "spec/example_factories/#{version}_syntax/user.rb" }
3
- let(:admin_contents) { File.read "spec/example_factories/#{version}_syntax/admin.rb"}
2
+ let(:user_contents) { File.read "spec/example_factories/user.rb" }
3
+ let(:admin_contents) { File.read "spec/example_factories/admin.rb"}
4
4
 
5
5
  let(:parser) { ToFactory::Parsing::File.from_file(filename) }
6
6
 
7
+ context "with non-parseable factories" do
8
+ let(:dynamic_content) do
9
+ <<-RUBY
10
+ [ 0, 1, 2, 3, 4].each do |i|
11
+ Factory.define(:"user_\#{i}", :parent => :"to_factory/user") do |o|
12
+ p.project_statuses = statuses
13
+ end
14
+ end
15
+ RUBY
16
+ end
17
+ let(:instance) { ToFactory::Parsing::File.new(dynamic_content) }
18
+
19
+ it do
20
+ expect(Kernel).to receive(:warn).with(/#{dynamic_content}/).at_least :once
21
+ expect(lambda{instance.parse}).not_to raise_error
22
+ result = instance.parse
23
+ expect(result).to be_a Array
24
+ expect(result[0]).to be_a ToFactory::NullRepresentation
25
+ expect(result[0].definition).to match_sexp dynamic_content
26
+ end
27
+ end
28
+
7
29
  describe "#multiple_factories? and #header?" do
8
30
  context "new syntax" do
9
- tests = if ToFactory.new_syntax?
10
-
11
- #file, multiple, header
31
+ tests = #file, multiple, header
12
32
  [
13
33
  ["user", false, false],
14
34
  ["user_with_header", false, true],
15
35
  ["user_admin", true, false],
16
36
  ["user_admin_with_header", true, true]
17
37
  ]
18
- else
19
- [
20
- ["user", false, false],
21
- ["user_admin", true, false],
22
- ]
23
- end
24
38
 
25
39
  tests.each do |file, multiple, header|
26
40
  context "with #{header ? 'header' : 'no header'} and #{multiple ? 'multiple factories' : 'one factory'}" do
27
41
  context "file: #{file}" do
28
- let(:filename) { "spec/example_factories/#{version}_syntax/#{file}.rb"}
42
+ let(:filename) { "spec/example_factories/#{file}.rb"}
29
43
 
30
44
  it { expect(parser.multiple_factories?).to eq multiple }
31
45
  it { expect(parser.header?).to eq header }
@@ -37,7 +51,7 @@ describe ToFactory::Parsing::File do
37
51
 
38
52
  describe "#parse" do
39
53
  context "with multiple levels of parent classes" do
40
- let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_admin_super_admin'}.rb"}
54
+ let(:filename) { "spec/example_factories/#{'user_admin_super_admin'}.rb"}
41
55
 
42
56
  it do
43
57
  result = parser.parse
@@ -47,7 +61,7 @@ describe ToFactory::Parsing::File do
47
61
  end
48
62
 
49
63
  context "file: user" do
50
- let(:filename) { "spec/example_factories/#{version}_syntax/#{'user'}.rb"}
64
+ let(:filename) { "spec/example_factories/#{'user'}.rb"}
51
65
 
52
66
  it do
53
67
  result = parser.parse
@@ -57,7 +71,7 @@ describe ToFactory::Parsing::File do
57
71
  end
58
72
 
59
73
  context "file: user_with_header" do
60
- let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_with_header'}.rb"}
74
+ let(:filename) { "spec/example_factories/#{'user_with_header'}.rb"}
61
75
 
62
76
  it do
63
77
  result = parser.parse
@@ -67,7 +81,7 @@ describe ToFactory::Parsing::File do
67
81
  end
68
82
 
69
83
  context "file: user_admin" do
70
- let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_admin'}.rb"}
84
+ let(:filename) { "spec/example_factories/#{'user_admin'}.rb"}
71
85
 
72
86
  it do
73
87
  result = parser.parse
@@ -80,7 +94,7 @@ describe ToFactory::Parsing::File do
80
94
  end
81
95
 
82
96
  context "file: user_admin_with_header" do
83
- let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_admin_with_header'}.rb"}
97
+ let(:filename) { "spec/example_factories/#{'user_admin_with_header'}.rb"}
84
98
 
85
99
  it do
86
100
  result = parser.parse
data/to_factory.gemspec CHANGED
@@ -19,31 +19,16 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "sqlite3" , "~> 1.3.6"
22
-
23
- if RUBY_VERSION =~ /^1\.8/
24
- spec.add_development_dependency "ruby-debug"
25
- spec.add_development_dependency "database_cleaner", "~> 0.3"
26
- else
27
- spec.add_development_dependency "database_cleaner", "~> 1.4.0"
28
- end
22
+ spec.add_development_dependency "database_cleaner", "~> 1.4.0"
29
23
 
30
24
  if RUBY_VERSION =~ /^2\.\d/
31
25
  spec.add_development_dependency "pry-byebug"
32
26
  end
33
27
 
34
- old_active_record = RUBY_VERSION =~ /^1\.8|^1.9\.[1|2]/
35
-
36
- spec.add_dependency "ruby2ruby"
37
-
38
- if old_active_record
39
- spec.add_dependency 'activerecord', ">2.0", "< 4.0"
40
- spec.add_dependency 'i18n', "< 0.7"
41
- spec.add_development_dependency "factory_girl", "< 2.0"
42
- else
43
- spec.add_dependency 'activerecord', ">3.0"
44
- spec.add_development_dependency "factory_girl", "~> 4.5"
45
- end
46
-
28
+ spec.add_development_dependency "factory_girl", "~> 4.5"
47
29
  spec.add_development_dependency "rspec", "~> 3.0"
48
30
  spec.add_development_dependency "rake", "~> 10.0"
31
+
32
+ spec.add_dependency "ruby2ruby"
33
+ spec.add_dependency "activerecord", "> 4.0"
49
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: to_factory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Burns
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-12 00:00:00.000000000 Z
11
+ date: 2015-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -53,75 +53,75 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: ruby2ruby
56
+ name: factory_girl
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
61
+ version: '4.5'
62
+ type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '4.5'
69
69
  - !ruby/object:Gem::Dependency
70
- name: activerecord
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">"
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '3.0'
76
- type: :runtime
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">"
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: factory_girl
84
+ name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '4.5'
89
+ version: '10.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '4.5'
96
+ version: '10.0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rspec
98
+ name: ruby2ruby
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '3.0'
104
- type: :development
103
+ version: '0'
104
+ type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '3.0'
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rake
112
+ name: activerecord
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">"
116
116
  - !ruby/object:Gem::Version
117
- version: '10.0'
118
- type: :development
117
+ version: '4.0'
118
+ type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">"
123
123
  - !ruby/object:Gem::Version
124
- version: '10.0'
124
+ version: '4.0'
125
125
  description: Autogenerate and append/create factory_girl definitions from the console
126
126
  email:
127
127
  - markthedeveloper@gmail.com
@@ -149,8 +149,7 @@ files:
149
149
  - lib/to_factory/klass_inference.rb
150
150
  - lib/to_factory/options_parser.rb
151
151
  - lib/to_factory/parsing/file.rb
152
- - lib/to_factory/parsing/new_syntax.rb
153
- - lib/to_factory/parsing/old_syntax.rb
152
+ - lib/to_factory/parsing/ruby_parsing_helpers.rb
154
153
  - lib/to_factory/parsing/syntax.rb
155
154
  - lib/to_factory/representation.rb
156
155
  - lib/to_factory/version.rb
@@ -159,23 +158,15 @@ files:
159
158
  - spec/db/migrate/3_create_not_namespaced.rb
160
159
  - spec/db/migrate/4_add_birthday_to_users.rb
161
160
  - spec/db/migrate/5_add_serialized_attributes_to_users.rb
162
- - spec/example_factories/new_syntax/admin.rb
163
- - spec/example_factories/new_syntax/admin_with_header.rb
164
- - spec/example_factories/new_syntax/project_with_header.rb
165
- - spec/example_factories/new_syntax/user.rb
166
- - spec/example_factories/new_syntax/user_admin.rb
167
- - spec/example_factories/new_syntax/user_admin_root.rb
168
- - spec/example_factories/new_syntax/user_admin_super_admin.rb
169
- - spec/example_factories/new_syntax/user_admin_with_header.rb
170
- - spec/example_factories/new_syntax/user_with_header.rb
171
- - spec/example_factories/old_syntax/admin.rb
172
- - spec/example_factories/old_syntax/project_with_header.rb
173
- - spec/example_factories/old_syntax/user.rb
174
- - spec/example_factories/old_syntax/user_admin.rb
175
- - spec/example_factories/old_syntax/user_admin_root.rb
176
- - spec/example_factories/old_syntax/user_admin_super_admin.rb
177
- - spec/example_factories/old_syntax/user_admin_with_header.rb
178
- - spec/example_factories/old_syntax/user_with_header.rb
161
+ - spec/example_factories/admin.rb
162
+ - spec/example_factories/admin_with_header.rb
163
+ - spec/example_factories/project_with_header.rb
164
+ - spec/example_factories/user.rb
165
+ - spec/example_factories/user_admin.rb
166
+ - spec/example_factories/user_admin_root.rb
167
+ - spec/example_factories/user_admin_super_admin.rb
168
+ - spec/example_factories/user_admin_with_header.rb
169
+ - spec/example_factories/user_with_header.rb
179
170
  - spec/integration/config_spec.rb
180
171
  - spec/integration/file_sync_spec.rb
181
172
  - spec/integration/file_writer_spec.rb
@@ -193,7 +184,7 @@ files:
193
184
  - spec/unit/finders/factory_spec.rb
194
185
  - spec/unit/finders/model_spec.rb
195
186
  - spec/unit/generation/attribute_spec.rb
196
- - spec/unit/generator_spec.rb
187
+ - spec/unit/generation/factory_spec.rb
197
188
  - spec/unit/parsing/file_spec.rb
198
189
  - spec/unit/parsing/klass_inference_spec.rb
199
190
  - tmp/.keep
@@ -228,23 +219,15 @@ test_files:
228
219
  - spec/db/migrate/3_create_not_namespaced.rb
229
220
  - spec/db/migrate/4_add_birthday_to_users.rb
230
221
  - spec/db/migrate/5_add_serialized_attributes_to_users.rb
231
- - spec/example_factories/new_syntax/admin.rb
232
- - spec/example_factories/new_syntax/admin_with_header.rb
233
- - spec/example_factories/new_syntax/project_with_header.rb
234
- - spec/example_factories/new_syntax/user.rb
235
- - spec/example_factories/new_syntax/user_admin.rb
236
- - spec/example_factories/new_syntax/user_admin_root.rb
237
- - spec/example_factories/new_syntax/user_admin_super_admin.rb
238
- - spec/example_factories/new_syntax/user_admin_with_header.rb
239
- - spec/example_factories/new_syntax/user_with_header.rb
240
- - spec/example_factories/old_syntax/admin.rb
241
- - spec/example_factories/old_syntax/project_with_header.rb
242
- - spec/example_factories/old_syntax/user.rb
243
- - spec/example_factories/old_syntax/user_admin.rb
244
- - spec/example_factories/old_syntax/user_admin_root.rb
245
- - spec/example_factories/old_syntax/user_admin_super_admin.rb
246
- - spec/example_factories/old_syntax/user_admin_with_header.rb
247
- - spec/example_factories/old_syntax/user_with_header.rb
222
+ - spec/example_factories/admin.rb
223
+ - spec/example_factories/admin_with_header.rb
224
+ - spec/example_factories/project_with_header.rb
225
+ - spec/example_factories/user.rb
226
+ - spec/example_factories/user_admin.rb
227
+ - spec/example_factories/user_admin_root.rb
228
+ - spec/example_factories/user_admin_super_admin.rb
229
+ - spec/example_factories/user_admin_with_header.rb
230
+ - spec/example_factories/user_with_header.rb
248
231
  - spec/integration/config_spec.rb
249
232
  - spec/integration/file_sync_spec.rb
250
233
  - spec/integration/file_writer_spec.rb
@@ -262,6 +245,7 @@ test_files:
262
245
  - spec/unit/finders/factory_spec.rb
263
246
  - spec/unit/finders/model_spec.rb
264
247
  - spec/unit/generation/attribute_spec.rb
265
- - spec/unit/generator_spec.rb
248
+ - spec/unit/generation/factory_spec.rb
266
249
  - spec/unit/parsing/file_spec.rb
267
250
  - spec/unit/parsing/klass_inference_spec.rb
251
+ has_rdoc:
@@ -1,19 +0,0 @@
1
- module ToFactory
2
- module Parsing
3
- class NewSyntax < Syntax
4
- def header?
5
- sexp[1][1][1] == :FactoryGirl rescue false
6
- end
7
-
8
- def parent_from(x)
9
- # e.g.
10
- #s(:call, nil, :factory, s(:lit, :admin), s(:hash, s(:lit, :parent), s(:lit, :"to_factory/user")))
11
- x[1][4][2][1]
12
- rescue NoMethodError
13
- # e.g.
14
- #s(:call, nil, :factory, s(:lit, :"to_factory/user"))
15
- x[1][3][1]
16
- end
17
- end
18
- end
19
- end
@@ -1,13 +0,0 @@
1
- module ToFactory
2
- module Parsing
3
- class OldSyntax < Syntax
4
- def header?
5
- false
6
- end
7
-
8
- def parent_from(x)
9
- x[1][-1][-1][-1] rescue name_from(x)
10
- end
11
- end
12
- end
13
- end
@@ -1,7 +0,0 @@
1
- Factory.define(:admin, :parent => :"to_factory/user") do |o|
2
- o.birthday "2014-07-08T15:30Z"
3
- o.email "admin@example.com"
4
- o.name "Admin"
5
- o.some_attributes({:a => 1})
6
- o.some_id 9
7
- end
@@ -1,5 +0,0 @@
1
- Factory.define(:"to_factory/project") do |o|
2
- o.name "My Project"
3
- o.objective "easy testing"
4
- o.some_id 9
5
- end
@@ -1,7 +0,0 @@
1
- Factory.define(:"to_factory/user") do |o|
2
- o.birthday "2014-07-08T15:30Z"
3
- o.email "test@example.com"
4
- o.name "Jeff"
5
- o.some_attributes({:a => 1})
6
- o.some_id 8
7
- end
@@ -1,15 +0,0 @@
1
- Factory.define(:"to_factory/user") do |o|
2
- o.birthday "2014-07-08T15:30Z"
3
- o.email "test@example.com"
4
- o.name "Jeff"
5
- o.some_attributes({:a => 1})
6
- o.some_id 8
7
- end
8
-
9
- Factory.define(:admin, :parent => :"to_factory/user") do |o|
10
- o.birthday "2014-07-08T15:30Z"
11
- o.email "admin@example.com"
12
- o.name "Admin"
13
- o.some_attributes({:a => 1})
14
- o.some_id 9
15
- end
@@ -1,21 +0,0 @@
1
- Factory.define(:"to_factory/user") do |o|
2
- o.name("User")
3
- end
4
-
5
- Factory.define(:root, :parent => :"to_factory/user") do |o|
6
- o.birthday "2014-07-08T15:30Z"
7
- o.email "test@example.com"
8
- o.name "Jeff"
9
- o.some_attributes({:a => 1})
10
- o.some_id 8
11
- end
12
-
13
-
14
- Factory.define(:admin, :parent => :"to_factory/user") do |o|
15
- o.name("Admin")
16
- end
17
-
18
- Factory.define(:super_admin, :parent => :admin) do |o|
19
- o.name("Super Admin")
20
- end
21
-
@@ -1,12 +0,0 @@
1
- Factory.define(:"to_factory/user") do |o|
2
- o.name "User"
3
- end
4
-
5
- Factory.define(:admin, :parent => :"to_factory/user") do |o|
6
- o.name "Admin"
7
- end
8
-
9
- Factory.define(:super_admin, :parent => :admin) do |o|
10
- o.name "Super Admin"
11
- end
12
-
@@ -1,15 +0,0 @@
1
- Factory.define(:"to_factory/user") do |o|
2
- o.birthday "2014-07-08T15:30Z"
3
- o.email "test@example.com"
4
- o.name "Jeff"
5
- o.some_attributes({:a => 1})
6
- o.some_id 8
7
- end
8
-
9
- Factory.define(:admin, :parent => :"to_factory/user") do |o|
10
- o.birthday "2014-07-08T15:30Z"
11
- o.email "admin@example.com"
12
- o.name "Admin"
13
- o.some_attributes({:a => 1})
14
- o.some_id 9
15
- end
@@ -1,7 +0,0 @@
1
- Factory.define(:"to_factory/user") do |o|
2
- o.birthday "2014-07-08T15:30Z"
3
- o.email "test@example.com"
4
- o.name "Jeff"
5
- o.some_attributes({:a => 1})
6
- o.some_id 8
7
- end
@@ -1,68 +0,0 @@
1
- describe ToFactory::Generation::Factory do
2
- before(:each) do
3
- ToFactory::User.destroy_all
4
- ActiveRecord::Base.connection.execute "delete from sqlite_sequence where name = 'users'"
5
- end
6
-
7
- let(:birthday) do
8
- Time.find_zone("UTC").parse("2014-07-08T15:30Z")
9
- end
10
-
11
- let!(:user) { create_user! }
12
-
13
- let(:representation) { ToFactory::Representation.from(user) }
14
- let(:generator) { ToFactory::Generation::Factory.new representation }
15
-
16
-
17
-
18
- describe "#header" do
19
- it do
20
- if ToFactory.new_syntax?
21
- expect(generator.header{}).to match_sexp <<-eof.strip_heredoc
22
- factory(:"to_factory/user") do
23
- end
24
- eof
25
- else
26
- expect(generator.header{}).to match_sexp <<-eof.strip_heredoc
27
- Factory.define(:"to_factory/user") do |o|
28
- end
29
- eof
30
- end
31
- end
32
- end
33
-
34
- describe "#factory_attribute" do
35
- it do
36
- if ToFactory.new_syntax?
37
- expect(generator.factory_attribute(:name, nil)) .to eq ' name nil'
38
- expect(generator.factory_attribute(:name, "Jeff")).to eq ' name "Jeff"'
39
- expect(generator.factory_attribute(:id, 8)) .to eq ' id 8'
40
-
41
- else
42
- expect(generator.factory_attribute(:name, nil)) .to eq ' o.name nil'
43
- expect(generator.factory_attribute(:name, "Jeff")).to eq ' o.name "Jeff"'
44
- expect(generator.factory_attribute(:id, 8)) .to eq ' o.id 8'
45
- end
46
- end
47
- it "generates usable datetime strings" do
48
- output = generator.factory_attribute(:birthday, birthday)
49
- if ToFactory.new_syntax?
50
- expect(output).to eq ' birthday "2014-07-08T15:30Z"'
51
- else
52
- expect(output).to eq ' o.birthday "2014-07-08T15:30Z"'
53
- end
54
- end
55
- end
56
-
57
- describe "#ToFactory" do
58
- let(:expected) do
59
- File.read "./spec/example_factories/#{version}_syntax/user.rb"
60
- end
61
-
62
- it do
63
- expect(generator.to_factory).to match_sexp expected
64
- result = ToFactory(user).values.first.first
65
- expect(result.definition).to match_sexp expected
66
- end
67
- end
68
- end