namespace :tests 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'
task populate_v2: :environment do
admin_key = OpenSSL::PKey::RSA.new(2048)
'https://remote.com/@remote', 'https://remote.com/salmon/1'),
(4, 'Remote', 'remote.com', NULL, #{remote_public_key}, now(), now(),
'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');
INSERT INTO "accounts"
(7, 'user', #{local_domain}, #{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
INSERT INTO "users"
VALUES
(3, 7, 'ptuser@localhost', now(), now(), false, 'pt');
+ -- conversations
+ INSERT INTO "conversations" (id, created_at, updated_at) VALUES (1, now(), now());
+
-- statuses
INSERT INTO "statuses"
VALUES
(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)
INSERT INTO "mentions"
- (status_id, account_id, created_at, updated_at)
+ (id, status_id, account_id, created_at, updated_at)
VALUES
- (2, 3, now(), now()),
- (3, 4, now(), now()),
- (4, 5, now(), now());
+ (1, 2, 3, now(), now()),
+ (2, 3, 4, now(), now()),
+ (3, 4, 5, now(), now()),
+ (4, 10, 1, now(), now()),
+ (5, 11, 2, now(), now());
-- stream entries
(8, 5, 'status', now(), now()),
(9, 1, 'status', now(), now());
-
-- custom emoji
INSERT INTO "custom_emojis"
-- follows
INSERT INTO "follows"
- (account_id, target_account_id, created_at, updated_at)
+ (id, account_id, target_account_id, created_at, updated_at)
VALUES
- (1, 5, now(), now()),
- (6, 2, now(), now()),
- (5, 2, now(), now()),
- (6, 1, now(), now());
+ (1, 1, 5, now(), now()),
+ (2, 6, 2, now(), now()),
+ (3, 5, 2, now(), now()),
+ (4, 6, 1, now(), now());
-- follow requests
VALUES
(2, 5, 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
end
end