File: factory_default_spec.rb

package info (click to toggle)
ruby-test-prof 1.6.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 15,448 kB
  • sloc: ruby: 13,093; sh: 4; makefile: 4
file content (107 lines) | stat: -rw-r--r-- 3,503 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# frozen_string_literal: true

# Init FactoryDefault
require "test_prof/factory_default"

TestProf::FactoryDefault.init
TestProf::FactoryDefault.disable!

describe TestProf::FactoryDefault, :transactional do
  let(:preserve_traits) { false }
  let(:preserve_attributes) { false }

  before do
    described_class.enable!
    described_class.preserve_traits = preserve_traits
    described_class.preserve_attributes = preserve_attributes
  end

  after do
    described_class.reset
    described_class.disable!
  end

  let!(:user) { TestProf::FactoryBot.create_default(:user) }

  it "re-uses the same default record" do
    post = TestProf::FactoryBot.create(:post)

    expect(TestProf::FactoryBot.get_factory_default(:user)).to eq user
    expect(post.user).to eq user
  end

  it "re-uses default record independently of traits" do
    post = TestProf::FactoryBot.create(:post, :with_traited_user)

    expect(TestProf::FactoryBot.get_factory_default(:user)).to eq user
    expect(post.user).to eq user
    expect(TestProf::FactoryBot.get_factory_default(:user, :traited)).to eq user
  end

  it "re-uses default record independently of attributes" do
    post = TestProf::FactoryBot.create(:post, :with_tagged_user)

    expect(TestProf::FactoryBot.get_factory_default(:user)).to eq user
    expect(post.user).to eq user
  end

  specify ".disable!(&block)" do
    post = TestProf::FactoryBot.skip_factory_default { TestProf::FactoryBot.create(:post) }

    # get_factory_default should ignore disabled
    expect(TestProf::FactoryBot.get_factory_default(:user)).to eq user
    expect(post.user).not_to eq(user)
  end

  context "when preserve_traits = true" do
    let(:preserve_traits) { true }

    it "ignores default when trait is specified" do
      post = TestProf::FactoryBot.create_default(:post)
      post_traited = TestProf::FactoryBot.create(:post, :with_traited_user)

      expect(TestProf::FactoryBot.get_factory_default(:post).user).to eq user
      expect(post.user).to eq user

      expect(TestProf::FactoryBot.get_factory_default(:post, :with_traited_user)).to eq nil
      expect(post_traited.user).not_to eq user
    end

    context "when has default with the trait" do
      let!(:traited_user) do
        user = TestProf::FactoryBot.create(:user, :traited)
        TestProf::FactoryBot.set_factory_default(:user, :traited, user)
      end

      it "re-uses default record for this trait" do
        post = TestProf::FactoryBot.create_default(:post)
        post_traited = TestProf::FactoryBot.create(:post, :with_traited_user)

        expect(TestProf::FactoryBot.get_factory_default(:post).user).to eq user
        expect(post.user).to eq user
        expect(TestProf::FactoryBot.get_factory_default(:user, :traited)).to eq traited_user
        expect(post_traited.user).to eq traited_user
      end
    end
  end

  context "when preserve_attributes = true" do
    let(:preserve_attributes) { true }

    it "ignores default when explicit attributes don't match" do
      post = TestProf::FactoryBot.create(:post, :with_tagged_user)

      expect(TestProf::FactoryBot.get_factory_default(:user, tag: "some tag")).to eq nil
      expect(post.user).not_to eq user
    end

    it "re-uses default when attributes match" do
      user.update!(tag: "some tag")

      post = TestProf::FactoryBot.create(:post, :with_tagged_user)

      expect(TestProf::FactoryBot.get_factory_default(:user, tag: "some tag")).to eq user
      expect(post.user).to eq user
    end
  end
end