Просмотр исходного кода

Prevent CI failure caused by factories using duplicate #name attributes

Ryan Lue 6 лет назад
Родитель
Сommit
db69e55158
3 измененных файлов с 41 добавлено и 3 удалено
  1. 13 1
      spec/factories/history/type.rb
  2. 14 1
      spec/factories/ticket/state.rb
  3. 14 1
      spec/factories/ticket/state_type.rb

+ 13 - 1
spec/factories/history/type.rb

@@ -1,5 +1,17 @@
 FactoryBot.define do
   factory :'history/type', aliases: %i[history_type] do
-    name { Faker::Verb.past_participle }
+    name do
+      # The following line ensures that the name generated by Faker
+      # does not conflict with any existing names in the DB.
+      # There's a special syntax for this
+      # (Faker::Verb.unique.exclude(:past_participle, [], History::Type.pluck(:name)),
+      # but it's not available yet in the current release of Faker (1.9.1).
+      Faker::Verb.unique
+                 .instance_variable_get(:@previous_results)
+                 .dig([:past_participle, []])
+                 .merge(History::Type.pluck(:name))
+
+      Faker::Verb.unique.past_participle
+    end
   end
 end

+ 14 - 1
spec/factories/ticket/state.rb

@@ -1,6 +1,19 @@
 FactoryBot.define do
   factory :'ticket/state', aliases: %i[ticket_state] do
-    name { Faker::Verb.past_participle }
+    name do
+      # The following line ensures that the name generated by Faker
+      # does not conflict with any existing names in the DB.
+      # There's a special syntax for this
+      # (Faker::Verb.unique.exclude(:past_participle, [], Ticket::State.pluck(:name)),
+      # but it's not available yet in the current release of Faker (1.9.1).
+      Faker::Verb.unique
+                 .instance_variable_get(:@previous_results)
+                 .dig([:past_participle, []])
+                 .merge(Ticket::State.pluck(:name))
+
+      Faker::Verb.unique.past_participle
+    end
+
     association :state_type, factory: :'ticket/state_type'
     updated_by_id { 1 }
     created_by_id { 1 }

+ 14 - 1
spec/factories/ticket/state_type.rb

@@ -1,6 +1,19 @@
 FactoryBot.define do
   factory :'ticket/state_type', aliases: %i[ticket_state_type] do
-    name { Faker::Verb.past_participle }
+    name do
+      # The following line ensures that the name generated by Faker
+      # does not conflict with any existing names in the DB.
+      # There's a special syntax for this
+      # (Faker::Verb.unique.exclude(:past_participle, [], Ticket::StateType.pluck(:name)),
+      # but it's not available yet in the current release of Faker (1.9.1).
+      Faker::Verb.unique
+                 .instance_variable_get(:@previous_results)
+                 .dig([:past_participle, []])
+                 .merge(Ticket::StateType.pluck(:name))
+
+      Faker::Verb.unique.past_participle
+    end
+
     updated_by_id { 1 }
     created_by_id { 1 }
   end