Tenho um plugin que precisa popular alguns grupos.
Seguindo Add new webhooks and customize webhook payload, no plugin.rb eu tenho:
SeedFu.fixture_paths << Rails.root.join("plugins", "discourse-pfaffmanager", "db", "fixtures").to_s
Tenho algo assim em 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
Se eu executo ./bin/rake db:migrate, ele faz o que eu espero, mas quando executo os testes (specs), recebo:
# ERROR: duplicate key value violates unique constraint "index_groups_on_name"
Parece que os testes querem executar e reexecutar esses seeds? Isso não faz sentido, pois se eu reexecutar a migração, eles não causam erros.
Talvez eu devesse mover esses testes para spec/fixtures e fazer o plugin criar esses grupos na inicialização? Isso seria a melhor prática? Acredito que prefiro a ideia de criar esses grupos na migração em vez de verificá-los com Group.find_or_create_by a cada inicialização do plugin, mas isso está funcionando.
Além disso, ./bin/rake db:drop db:create db:migrate parece criar o banco de dados de teste, mas não está executando as migrações a menos que eu faça RAILS_DB=test ./bin/rake db:migrate. Isso é esperado? Eu achava que ele executaria essas migrações.
Agora estou ainda mais confuso. Mesmo após a migração acima do banco de dados de teste, recebo:
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "groups" does not exist
LINE 8: WHERE a.attrelid = '"groups"'::regclass
E vejo coisas assim ao executar a migração:
-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube-play' OR flair_icon = 'fa-youtube-play'\n")
Bem, eu fiz:
./bin/rake db:test:prepare
e isso corrigiu o problema, mas não me lembro de ter que fazer isso antes.