J’ai un plugin qui doit initialiser certains groupes.
En suivant Add new webhooks and customize webhook payload, j’ai dans plugin.rb :
SeedFu.fixture_paths << Rails.root.join("plugins", "discourse-pfaffmanager", "db", "fixtures").to_s
J’ai des choses comme ceci dans db/fixtures/001_create_pfaffmanager_groups :
Group.seed do |g|
g.name = SiteSetting.pfaffmanager_ec2_pro_server_group
g.visibility_level = Group.visibility_levels[:owners]
end
Si j’exécute ./bin/rake db:migrate, cela fait ce que j’attends, mais quand j’exécute les tests, j’obtiens :
# ERROR: duplicate key value violates unique constraint "index_groups_on_name"
Il semble donc que les tests veuillent exécuter et réexécuter ces seeds ? Cela n’a pas de sens, car si je relance la migration, cela ne provoque pas d’erreurs.
Devrais-je déplacer ces tests dans spec/fixtures et faire en sorte que le plugin crée ces groupes au démarrage ? Est-ce la meilleure pratique ? Je pense que j’apprécie l’idée de créer ces groupes lors de la migration plutôt que de les vérifier avec Group.find_or_create_by à chaque démarrage du plugin, mais cela fonctionne.
De plus, ./bin/rake db:drop db:create db:migrate semble créer la base de données de test, mais n’exécute pas les migrations à moins que je ne fasse RAILS_DB=test ./bin/rake db:migrate. Est-ce normal ? Je pensais que cela exécuterait ces migrations.
Maintenant, je suis encore plus confus : même après la migration ci-dessus de la base de données de test, j’obtiens :
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "groups" does not exist
LINE 8: WHERE a.attrelid = '"groups"'::regclass
Et je vois des choses comme ceci dans les logs lors de l’exécution de la migration :
-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube-play' OR flair_icon = 'fa-youtube-play'\n")
Eh bien, j’ai fait :
./bin/rake db:test:prepare
et cela a résolu le problème, mais je ne me souviens pas avoir eu à le faire auparavant.