Tengo un plugin que necesita inicializar algunos grupos.
Siguiendo Add new webhooks and customize webhook payload , en plugin.rb tengo:
SeedFu.fixture_paths << Rails.root.join("plugins", "discourse-pfaffmanager", "db", "fixtures").to_s
En db/fixtures/001_create_pfaffmanager_groups tengo algo como esto:
Group.seed do |g|
g.name = SiteSetting.pfaffmanager_ec2_pro_server_group
g.visibility_level = Group.visibility_levels[:owners]
end
Si ejecuto ./bin/rake db:migrate, hace lo que espero, pero al ejecutar las pruebas obtengo:
# ERROR: duplicate key value violates unique constraint "index_groups_on_name"
Parece que las pruebas quieren ejecutar y re-ejecutar estas semillas. Eso no tiene sentido, ya que si vuelvo a ejecutar la migración, no causan errores.
¿Debería mover esas pruebas a spec/fixtures y hacer que el plugin cree esos grupos al iniciar? ¿Es esa la mejor práctica? Me gusta más la idea de que esos grupos se creen durante la migración en lugar de verificarlos con Group.find_or_create_by en cada inicio del plugin, aunque esto último está funcionando.
Además, ./bin/rake db:drop db:create db:migrate parece crear la base de datos de prueba, pero no ejecuta las migraciones a menos que haga RAILS_DB=test ./bin/rake db:migrate. ¿Es eso esperado? Pensé que ejecutaría esas migraciones.
Ahora estoy aún más confundido. Incluso después de la migración anterior de la base de datos de prueba, obtengo:
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "groups" does not exist
LINE 8: WHERE a.attrelid = '"groups"'::regclass
Y veo cosas como esta en la salida cuando ejecuté la migración:
-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube-play' OR flair_icon = 'fa-youtube-play'\n")
Bueno, ejecuté:
./bin/rake db:test:prepare
y eso lo solucionó, pero no recuerdo haber tenido que hacerlo antes.