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:
		@@ -127,9 +127,18 @@ jobs:
 | 
			
		||||
      - run:
 | 
			
		||||
          command: ./bin/rails tests:migrations:populate_v2
 | 
			
		||||
          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:
 | 
			
		||||
          command: ./bin/rails db:migrate
 | 
			
		||||
          name: Run all remaining migrations
 | 
			
		||||
      - run:
 | 
			
		||||
          command: ./bin/rails tests:migrations:check_database
 | 
			
		||||
          name: Check migration result
 | 
			
		||||
 | 
			
		||||
  test-two-step-migrations:
 | 
			
		||||
    executor:
 | 
			
		||||
@@ -150,6 +159,14 @@ jobs:
 | 
			
		||||
      - run:
 | 
			
		||||
          command: ./bin/rails tests:migrations:populate_v2
 | 
			
		||||
          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:
 | 
			
		||||
          command: ./bin/rails db:migrate
 | 
			
		||||
          name: Run all pre-deployment migrations
 | 
			
		||||
@@ -158,6 +175,9 @@ jobs:
 | 
			
		||||
      - run:
 | 
			
		||||
          command: ./bin/rails db:migrate
 | 
			
		||||
          name: Run all post-deployment remaining migrations
 | 
			
		||||
      - run:
 | 
			
		||||
          command: ./bin/rails tests:migrations:check_database
 | 
			
		||||
          name: Check migration result
 | 
			
		||||
 | 
			
		||||
workflows:
 | 
			
		||||
  version: 2
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,50 @@
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
@@ -34,7 +78,7 @@ namespace :tests do
 | 
			
		||||
           '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"
 | 
			
		||||
@@ -49,6 +93,13 @@ namespace :tests do
 | 
			
		||||
          (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"
 | 
			
		||||
@@ -62,6 +113,9 @@ namespace :tests do
 | 
			
		||||
        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"
 | 
			
		||||
@@ -97,14 +151,22 @@ namespace :tests do
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
@@ -121,7 +183,6 @@ namespace :tests do
 | 
			
		||||
          (8, 5, 'status', now(), now()),
 | 
			
		||||
          (9, 1, 'status', now(), now());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        -- custom emoji
 | 
			
		||||
 | 
			
		||||
        INSERT INTO "custom_emojis"
 | 
			
		||||
@@ -161,12 +222,12 @@ namespace :tests do
 | 
			
		||||
        -- 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
 | 
			
		||||
 | 
			
		||||
@@ -175,6 +236,15 @@ namespace :tests do
 | 
			
		||||
        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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user