Comprensione di specifiche e fixture

Ho un plugin che deve popolare alcuni gruppi.

Seguendo Add new webhooks and customize webhook payload, in plugin.rb ho:

  SeedFu.fixture_paths << Rails.root.join("plugins", "discourse-pfaffmanager", "db", "fixtures").to_s

Nel file db/fixtures/001_create_pfaffmanager_groups ho qualcosa del genere:

Group.seed do |g|
  g.name = SiteSetting.pfaffmanager_ec2_pro_server_group
  g.visibility_level = Group.visibility_levels[:owners]
end

Se eseguo ./bin/rake db:migrate, funziona come previsto, ma quando eseguo gli spec ricevo:

#   ERROR:  duplicate key value violates unique constraint "index_groups_on_name"

Quindi sembra che gli spec vogliano eseguire e rieseguire questi seed? Non ha molto senso, perché se rieseguo la migrazione non si verificano errori.

Forse dovrei spostare quegli spec in spec/fixtures e far sì che il plugin crei quei gruppi all’avvio? È una buona pratica? Penso che mi piaccia di più l’idea di creare quei gruppi durante la migrazione piuttosto che verificarli con Group.find_or_create_by ad ogni avvio del plugin, ma attualmente funziona.

Inoltre, ./bin/rake db:drop db:create db:migrate sembra creare il database di test, ma non esegue le migrazioni a meno che non specifichi RAILS_DB=test ./bin/rake db:migrate. È questo il comportamento atteso? Pensavo che avrebbe eseguito quelle migrazioni.

Ora sono ancora più confuso: anche dopo la migrazione del database di test descritta sopra, ricevo:

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERROR:  relation "groups" does not exist
  LINE 8:  WHERE a.attrelid = '"groups"'::regclass

E vedo cose del genere nei log quando ho eseguito la migrazione:

-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube-play' OR flair_icon = 'fa-youtube-play'\n")

Allora ho eseguito:

./bin/rake db:test:prepare

e questo ha risolto il problema, ma non ricordo di aver dovuto farlo in passato.

2 Mi Piace