Skip to content

Commit 684cf3c

Browse files
author
Grant Petersen-Speelman
committed
fix SmartFactoryWrapper to handle deleted factory files
1 parent 84f1f53 commit 684cf3c

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

lib/cypress_dev/smart_factory_wrapper.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,20 @@ def self.create_list(*args)
2929
end
3030

3131
# @return [Array]
32-
attr_accessor :files
3332
attr_accessor :factory
3433
attr_accessor :always_reload
3534

3635
def initialize(files:, factory:, always_reload: false,
37-
factory_cleaner: FactoryCleaner, kernel: Kernel, file_system: File)
36+
factory_cleaner: FactoryCleaner, kernel: Kernel, file_system: File,
37+
dir_system: Dir)
3838
self.files = files
3939
self.factory = factory
4040
self.always_reload = always_reload
4141
@kernel = kernel
4242
@file_system = file_system
4343
@factory_cleaner = factory_cleaner
4444
@latest_mtime = nil
45+
@dir_system = dir_system
4546
end
4647

4748
def create(*args)
@@ -56,6 +57,17 @@ def create_list(*args)
5657

5758
private
5859

60+
# @param [String,Array] arg
61+
def files=(array)
62+
array = [array] if array.is_a?(String)
63+
@dir_array = array
64+
end
65+
66+
# @return [Array<String>]
67+
def files
68+
Dir[*@dir_array]
69+
end
70+
5971
def logger
6072
CypressDev.configuration.logger
6173
end

lib/generators/cypress_dev/templates/spec/cypress/cypress_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@
2626
CypressDev::SmartFactoryWrapper.configure(
2727
always_reload: !Rails.configuration.cache_classes,
2828
factory: factory,
29-
files: Dir['./spec/factories/**/*.rb']
29+
files: %w(spec/factories.rb ./spec/factories/**/*.rb)
3030
)

spec/cypress_dev/smart_factory_wrapper_spec.rb

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ def mtime(filename)
1414
let(:factory_cleaner) { class_double(CypressDev::SmartFactoryWrapper::FactoryCleaner, clean: true) }
1515
let(:kernel_double) { class_double(Kernel, load: true) }
1616
let(:file_double) { FileSystemDummy.new(mtime_hash) }
17+
let(:dir_double) { class_double(Dir) }
18+
19+
before do
20+
allow(Dir).to receive(:[]).with(*files) { mtime_hash.keys }
21+
end
1722

1823
subject do
1924
described_class.new(files: files,
2025
factory: factory_double,
2126
kernel: kernel_double,
2227
file_system: file_double,
28+
dir_system: dir_double,
2329
factory_cleaner: factory_cleaner)
2430
end
2531

@@ -52,7 +58,7 @@ def mtime(filename)
5258
expect(kernel_double).to have_received(:load).with('file2.rb').once
5359
end
5460

55-
it 'will reload the files if a has changed' do
61+
it 'will reload the files if any have changed' do
5662
subject.create(:user)
5763
expect(kernel_double).to have_received(:load).with('file1.rb').once
5864
expect(kernel_double).to have_received(:load).with('file2.rb').once
@@ -63,6 +69,18 @@ def mtime(filename)
6369
expect(kernel_double).to have_received(:load).with('file2.rb').twice
6470
end
6571

72+
it 'will reload only the files that exist' do
73+
subject.always_reload = true
74+
subject.create(:user)
75+
expect(kernel_double).to have_received(:load).with('file1.rb').once
76+
expect(kernel_double).to have_received(:load).with('file2.rb').once
77+
78+
mtime_hash.delete('file1.rb')
79+
subject.create_list(:user)
80+
expect(kernel_double).to have_received(:load).with('file1.rb').once
81+
expect(kernel_double).to have_received(:load).with('file2.rb').twice
82+
end
83+
6684
it 'will reset factory if a has changed' do
6785
subject.create(:user)
6886
expect(factory_cleaner).to have_received(:clean).with(factory_double)
@@ -80,4 +98,18 @@ def mtime(filename)
8098
expect(kernel_double).to have_received(:load).with('file1.rb').twice
8199
expect(kernel_double).to have_received(:load).with('file2.rb').twice
82100
end
101+
102+
context 'files is a string' do
103+
let(:files) { 'file*.rb' }
104+
105+
before do
106+
allow(Dir).to receive(:[]).with('file*.rb') { mtime_hash.keys }
107+
end
108+
109+
it 'loads all the files on first create it' do
110+
subject.create(:user)
111+
expect(kernel_double).to have_received(:load).with('file1.rb')
112+
expect(kernel_double).to have_received(:load).with('file2.rb')
113+
end
114+
end
83115
end

0 commit comments

Comments
 (0)