Add more migration tests (#17710)
* Add migration tests for hide_network settings migration * Add tests about suspended/suspended_at * Add more tests regarding the results of migrations * Fix migration test regarding stale conflicting remote account * Add migration tests about AccountConversation
This commit is contained in:
parent
dba4be1038
commit
61ae6b3535
2 changed files with 101 additions and 11 deletions
|
@ -127,9 +127,18 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
command: ./bin/rails tests:migrations:populate_v2
|
command: ./bin/rails tests:migrations:populate_v2
|
||||||
name: Populate database with test data
|
name: Populate database with test data
|
||||||
|
- run:
|
||||||
|
command: ./bin/rails db:migrate VERSION=20180514140000
|
||||||
|
name: Run migrations up to v2.4.0
|
||||||
|
- run:
|
||||||
|
command: ./bin/rails tests:migrations:populate_v2_4
|
||||||
|
name: Populate database with test data
|
||||||
- run:
|
- run:
|
||||||
command: ./bin/rails db:migrate
|
command: ./bin/rails db:migrate
|
||||||
name: Run all remaining migrations
|
name: Run all remaining migrations
|
||||||
|
- run:
|
||||||
|
command: ./bin/rails tests:migrations:check_database
|
||||||
|
name: Check migration result
|
||||||
|
|
||||||
test-two-step-migrations:
|
test-two-step-migrations:
|
||||||
executor:
|
executor:
|
||||||
|
@ -150,6 +159,14 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
command: ./bin/rails tests:migrations:populate_v2
|
command: ./bin/rails tests:migrations:populate_v2
|
||||||
name: Populate database with test data
|
name: Populate database with test data
|
||||||
|
- run:
|
||||||
|
command: ./bin/rails db:migrate VERSION=20180514140000
|
||||||
|
name: Run pre-deployment migrations up to v2.4.0
|
||||||
|
environment:
|
||||||
|
SKIP_POST_DEPLOYMENT_MIGRATIONS: true
|
||||||
|
- run:
|
||||||
|
command: ./bin/rails tests:migrations:populate_v2_4
|
||||||
|
name: Populate database with test data
|
||||||
- run:
|
- run:
|
||||||
command: ./bin/rails db:migrate
|
command: ./bin/rails db:migrate
|
||||||
name: Run all pre-deployment migrations
|
name: Run all pre-deployment migrations
|
||||||
|
@ -158,6 +175,9 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
command: ./bin/rails db:migrate
|
command: ./bin/rails db:migrate
|
||||||
name: Run all post-deployment remaining migrations
|
name: Run all post-deployment remaining migrations
|
||||||
|
- run:
|
||||||
|
command: ./bin/rails tests:migrations:check_database
|
||||||
|
name: Check migration result
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
|
|
|
@ -2,6 +2,50 @@
|
||||||
|
|
||||||
namespace :tests do
|
namespace :tests do
|
||||||
namespace :migrations do
|
namespace :migrations do
|
||||||
|
desc 'Check that database state is consistent with a successful migration from populated data'
|
||||||
|
task check_database: :environment do
|
||||||
|
unless Account.find_by(username: 'admin', domain: nil)&.hide_collections? == false
|
||||||
|
puts 'Unexpected value for Account#hide_collections? for user @admin'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Account.find_by(username: 'user', domain: nil)&.hide_collections? == true
|
||||||
|
puts 'Unexpected value for Account#hide_collections? for user @user'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Account.find_by(username: 'evil', domain: 'activitypub.com')&.suspended?
|
||||||
|
puts 'Unexpected value for Account#suspended? for user @evil@activitypub.com'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Status.find(6).account_id == Status.find(7).account_id
|
||||||
|
puts 'Users @remote@remote.com and @Remote@remote.com not properly merged'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
if Account.where(domain: Rails.configuration.x.local_domain).exists?
|
||||||
|
puts 'Faux remote accounts not properly claned up'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless AccountConversation.first&.last_status_id == 11
|
||||||
|
puts 'AccountConversation records not created as expected'
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Populate the database with test data for 2.4.0'
|
||||||
|
task populate_v2_4: :environment do
|
||||||
|
ActiveRecord::Base.connection.execute(<<~SQL)
|
||||||
|
INSERT INTO "settings"
|
||||||
|
(id, thing_type, thing_id, var, value, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(1, 'User', 1, 'hide_network', E'--- false\n', now(), now()),
|
||||||
|
(2, 'User', 2, 'hide_network', E'--- true\n', now(), now());
|
||||||
|
SQL
|
||||||
|
end
|
||||||
|
|
||||||
desc 'Populate the database with test data for 2.0.0'
|
desc 'Populate the database with test data for 2.0.0'
|
||||||
task populate_v2: :environment do
|
task populate_v2: :environment do
|
||||||
admin_key = OpenSSL::PKey::RSA.new(2048)
|
admin_key = OpenSSL::PKey::RSA.new(2048)
|
||||||
|
@ -34,7 +78,7 @@ namespace :tests do
|
||||||
'https://remote.com/@remote', 'https://remote.com/salmon/1'),
|
'https://remote.com/@remote', 'https://remote.com/salmon/1'),
|
||||||
(4, 'Remote', 'remote.com', NULL, #{remote_public_key}, now(), now(),
|
(4, 'Remote', 'remote.com', NULL, #{remote_public_key}, now(), now(),
|
||||||
'https://remote.com/@Remote', 'https://remote.com/salmon/1'),
|
'https://remote.com/@Remote', 'https://remote.com/salmon/1'),
|
||||||
(5, 'REMOTE', 'Remote.com', NULL, #{remote_public_key2}, now(), now(),
|
(5, 'REMOTE', 'Remote.com', NULL, #{remote_public_key2}, now() - interval '1 year', now() - interval '1 year',
|
||||||
'https://remote.com/stale/@REMOTE', 'https://remote.com/stale/salmon/1');
|
'https://remote.com/stale/@REMOTE', 'https://remote.com/stale/salmon/1');
|
||||||
|
|
||||||
INSERT INTO "accounts"
|
INSERT INTO "accounts"
|
||||||
|
@ -49,6 +93,13 @@ namespace :tests do
|
||||||
(7, 'user', #{local_domain}, #{user_private_key}, #{user_public_key}, now(), now()),
|
(7, 'user', #{local_domain}, #{user_private_key}, #{user_public_key}, now(), now()),
|
||||||
(8, 'pt_user', NULL, #{user_private_key}, #{user_public_key}, now(), now());
|
(8, 'pt_user', NULL, #{user_private_key}, #{user_public_key}, now(), now());
|
||||||
|
|
||||||
|
INSERT INTO "accounts"
|
||||||
|
(id, username, domain, private_key, public_key, created_at, updated_at, protocol, inbox_url, outbox_url, followers_url, suspended)
|
||||||
|
VALUES
|
||||||
|
(9, 'evil', 'activitypub.com', NULL, #{remote_public_key_ap}, now(), now(),
|
||||||
|
1, 'https://activitypub.com/users/evil/inbox', 'https://activitypub.com/users/evil/outbox',
|
||||||
|
'https://activitypub.com/users/evil/followers', true);
|
||||||
|
|
||||||
-- users
|
-- users
|
||||||
|
|
||||||
INSERT INTO "users"
|
INSERT INTO "users"
|
||||||
|
@ -62,6 +113,9 @@ namespace :tests do
|
||||||
VALUES
|
VALUES
|
||||||
(3, 7, 'ptuser@localhost', now(), now(), false, 'pt');
|
(3, 7, 'ptuser@localhost', now(), now(), false, 'pt');
|
||||||
|
|
||||||
|
-- conversations
|
||||||
|
INSERT INTO "conversations" (id, created_at, updated_at) VALUES (1, now(), now());
|
||||||
|
|
||||||
-- statuses
|
-- statuses
|
||||||
|
|
||||||
INSERT INTO "statuses"
|
INSERT INTO "statuses"
|
||||||
|
@ -97,14 +151,22 @@ namespace :tests do
|
||||||
VALUES
|
VALUES
|
||||||
(9, 1, 2, now(), now());
|
(9, 1, 2, now(), now());
|
||||||
|
|
||||||
|
INSERT INTO "statuses"
|
||||||
|
(id, account_id, text, in_reply_to_id, conversation_id, visibility, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(10, 2, '@admin hey!', NULL, 1, 3, now(), now()),
|
||||||
|
(11, 1, '@user hey!', 10, 1, 3, now(), now());
|
||||||
|
|
||||||
-- mentions (from previous statuses)
|
-- mentions (from previous statuses)
|
||||||
|
|
||||||
INSERT INTO "mentions"
|
INSERT INTO "mentions"
|
||||||
(status_id, account_id, created_at, updated_at)
|
(id, status_id, account_id, created_at, updated_at)
|
||||||
VALUES
|
VALUES
|
||||||
(2, 3, now(), now()),
|
(1, 2, 3, now(), now()),
|
||||||
(3, 4, now(), now()),
|
(2, 3, 4, now(), now()),
|
||||||
(4, 5, now(), now());
|
(3, 4, 5, now(), now()),
|
||||||
|
(4, 10, 1, now(), now()),
|
||||||
|
(5, 11, 2, now(), now());
|
||||||
|
|
||||||
-- stream entries
|
-- stream entries
|
||||||
|
|
||||||
|
@ -121,7 +183,6 @@ namespace :tests do
|
||||||
(8, 5, 'status', now(), now()),
|
(8, 5, 'status', now(), now()),
|
||||||
(9, 1, 'status', now(), now());
|
(9, 1, 'status', now(), now());
|
||||||
|
|
||||||
|
|
||||||
-- custom emoji
|
-- custom emoji
|
||||||
|
|
||||||
INSERT INTO "custom_emojis"
|
INSERT INTO "custom_emojis"
|
||||||
|
@ -161,12 +222,12 @@ namespace :tests do
|
||||||
-- follows
|
-- follows
|
||||||
|
|
||||||
INSERT INTO "follows"
|
INSERT INTO "follows"
|
||||||
(account_id, target_account_id, created_at, updated_at)
|
(id, account_id, target_account_id, created_at, updated_at)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 5, now(), now()),
|
(1, 1, 5, now(), now()),
|
||||||
(6, 2, now(), now()),
|
(2, 6, 2, now(), now()),
|
||||||
(5, 2, now(), now()),
|
(3, 5, 2, now(), now()),
|
||||||
(6, 1, now(), now());
|
(4, 6, 1, now(), now());
|
||||||
|
|
||||||
-- follow requests
|
-- follow requests
|
||||||
|
|
||||||
|
@ -175,6 +236,15 @@ namespace :tests do
|
||||||
VALUES
|
VALUES
|
||||||
(2, 5, now(), now()),
|
(2, 5, now(), now()),
|
||||||
(5, 1, now(), now());
|
(5, 1, now(), now());
|
||||||
|
|
||||||
|
-- notifications
|
||||||
|
|
||||||
|
INSERT INTO "notifications"
|
||||||
|
(id, from_account_id, account_id, activity_type, activity_id, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(1, 6, 2, 'Follow', 2, now(), now()),
|
||||||
|
(2, 2, 1, 'Mention', 4, now(), now()),
|
||||||
|
(3, 1, 2, 'Mention', 5, now(), now());
|
||||||
SQL
|
SQL
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue