tests.rake 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. # frozen_string_literal: true
  2. namespace :tests do
  3. namespace :migrations do
  4. desc 'Check that database state is consistent with a successful migration from populated data'
  5. task check_database: :environment do
  6. unless Account.find_by(username: 'admin', domain: nil)&.hide_collections? == false
  7. puts 'Unexpected value for Account#hide_collections? for user @admin'
  8. exit(1)
  9. end
  10. unless Account.find_by(username: 'user', domain: nil)&.hide_collections? == true
  11. puts 'Unexpected value for Account#hide_collections? for user @user'
  12. exit(1)
  13. end
  14. unless Account.find_by(username: 'evil', domain: 'activitypub.com')&.suspended?
  15. puts 'Unexpected value for Account#suspended? for user @evil@activitypub.com'
  16. exit(1)
  17. end
  18. unless Status.find(6).account_id == Status.find(7).account_id
  19. puts 'Users @remote@remote.com and @Remote@remote.com not properly merged'
  20. exit(1)
  21. end
  22. if Account.where(domain: Rails.configuration.x.local_domain).exists?
  23. puts 'Faux remote accounts not properly claned up'
  24. exit(1)
  25. end
  26. unless AccountConversation.first&.last_status_id == 11
  27. puts 'AccountConversation records not created as expected'
  28. exit(1)
  29. end
  30. if Account.find(-99).private_key.blank?
  31. puts 'Instance actor does not have a private key'
  32. exit(1)
  33. end
  34. end
  35. desc 'Populate the database with test data for 2.4.0'
  36. task populate_v2_4: :environment do
  37. ActiveRecord::Base.connection.execute(<<~SQL)
  38. INSERT INTO "settings"
  39. (id, thing_type, thing_id, var, value, created_at, updated_at)
  40. VALUES
  41. (1, 'User', 1, 'hide_network', E'--- false\n', now(), now()),
  42. (2, 'User', 2, 'hide_network', E'--- true\n', now(), now());
  43. SQL
  44. end
  45. desc 'Populate the database with test data for 2.0.0'
  46. task populate_v2: :environment do
  47. admin_key = OpenSSL::PKey::RSA.new(2048)
  48. user_key = OpenSSL::PKey::RSA.new(2048)
  49. remote_key = OpenSSL::PKey::RSA.new(2048)
  50. remote_key2 = OpenSSL::PKey::RSA.new(2048)
  51. remote_key3 = OpenSSL::PKey::RSA.new(2048)
  52. admin_private_key = ActiveRecord::Base.connection.quote(admin_key.to_pem)
  53. admin_public_key = ActiveRecord::Base.connection.quote(admin_key.public_key.to_pem)
  54. user_private_key = ActiveRecord::Base.connection.quote(user_key.to_pem)
  55. user_public_key = ActiveRecord::Base.connection.quote(user_key.public_key.to_pem)
  56. remote_public_key = ActiveRecord::Base.connection.quote(remote_key.public_key.to_pem)
  57. remote_public_key2 = ActiveRecord::Base.connection.quote(remote_key2.public_key.to_pem)
  58. remote_public_key_ap = ActiveRecord::Base.connection.quote(remote_key3.public_key.to_pem)
  59. local_domain = ActiveRecord::Base.connection.quote(Rails.configuration.x.local_domain)
  60. ActiveRecord::Base.connection.execute(<<~SQL)
  61. -- accounts
  62. INSERT INTO "accounts"
  63. (id, username, domain, private_key, public_key, created_at, updated_at)
  64. VALUES
  65. (1, 'admin', NULL, #{admin_private_key}, #{admin_public_key}, now(), now()),
  66. (2, 'user', NULL, #{user_private_key}, #{user_public_key}, now(), now());
  67. INSERT INTO "accounts"
  68. (id, username, domain, private_key, public_key, created_at, updated_at, remote_url, salmon_url)
  69. VALUES
  70. (3, 'remote', 'remote.com', NULL, #{remote_public_key}, now(), now(),
  71. 'https://remote.com/@remote', 'https://remote.com/salmon/1'),
  72. (4, 'Remote', 'remote.com', NULL, #{remote_public_key}, now(), now(),
  73. 'https://remote.com/@Remote', 'https://remote.com/salmon/1'),
  74. (5, 'REMOTE', 'Remote.com', NULL, #{remote_public_key2}, now() - interval '1 year', now() - interval '1 year',
  75. 'https://remote.com/stale/@REMOTE', 'https://remote.com/stale/salmon/1');
  76. INSERT INTO "accounts"
  77. (id, username, domain, private_key, public_key, created_at, updated_at, protocol, inbox_url, outbox_url, followers_url)
  78. VALUES
  79. (6, 'bob', 'activitypub.com', NULL, #{remote_public_key_ap}, now(), now(),
  80. 1, 'https://activitypub.com/users/bob/inbox', 'https://activitypub.com/users/bob/outbox', 'https://activitypub.com/users/bob/followers');
  81. INSERT INTO "accounts"
  82. (id, username, domain, private_key, public_key, created_at, updated_at)
  83. VALUES
  84. (7, 'user', #{local_domain}, #{user_private_key}, #{user_public_key}, now(), now()),
  85. (8, 'pt_user', NULL, #{user_private_key}, #{user_public_key}, now(), now());
  86. INSERT INTO "accounts"
  87. (id, username, domain, private_key, public_key, created_at, updated_at, protocol, inbox_url, outbox_url, followers_url, suspended)
  88. VALUES
  89. (9, 'evil', 'activitypub.com', NULL, #{remote_public_key_ap}, now(), now(),
  90. 1, 'https://activitypub.com/users/evil/inbox', 'https://activitypub.com/users/evil/outbox',
  91. 'https://activitypub.com/users/evil/followers', true);
  92. -- users
  93. INSERT INTO "users"
  94. (id, account_id, email, created_at, updated_at, admin)
  95. VALUES
  96. (1, 1, 'admin@localhost', now(), now(), true),
  97. (2, 2, 'user@localhost', now(), now(), false);
  98. INSERT INTO "users"
  99. (id, account_id, email, created_at, updated_at, admin, locale)
  100. VALUES
  101. (3, 7, 'ptuser@localhost', now(), now(), false, 'pt');
  102. -- conversations
  103. INSERT INTO "conversations" (id, created_at, updated_at) VALUES (1, now(), now());
  104. -- statuses
  105. INSERT INTO "statuses"
  106. (id, account_id, text, created_at, updated_at)
  107. VALUES
  108. (1, 1, 'test', now(), now()),
  109. (2, 1, '@remote@remote.com hello', now(), now()),
  110. (3, 1, '@Remote@remote.com hello', now(), now()),
  111. (4, 1, '@REMOTE@remote.com hello', now(), now());
  112. INSERT INTO "statuses"
  113. (id, account_id, text, created_at, updated_at, uri, local)
  114. VALUES
  115. (5, 1, 'activitypub status', now(), now(), 'https://localhost/users/admin/statuses/4', true);
  116. INSERT INTO "statuses"
  117. (id, account_id, text, created_at, updated_at)
  118. VALUES
  119. (6, 3, 'test', now(), now());
  120. INSERT INTO "statuses"
  121. (id, account_id, text, created_at, updated_at, in_reply_to_id, in_reply_to_account_id)
  122. VALUES
  123. (7, 4, '@admin hello', now(), now(), 3, 1);
  124. INSERT INTO "statuses"
  125. (id, account_id, text, created_at, updated_at)
  126. VALUES
  127. (8, 5, 'test', now(), now());
  128. INSERT INTO "statuses"
  129. (id, account_id, reblog_of_id, created_at, updated_at)
  130. VALUES
  131. (9, 1, 2, now(), now());
  132. INSERT INTO "statuses"
  133. (id, account_id, text, in_reply_to_id, conversation_id, visibility, created_at, updated_at)
  134. VALUES
  135. (10, 2, '@admin hey!', NULL, 1, 3, now(), now()),
  136. (11, 1, '@user hey!', 10, 1, 3, now(), now());
  137. -- mentions (from previous statuses)
  138. INSERT INTO "mentions"
  139. (id, status_id, account_id, created_at, updated_at)
  140. VALUES
  141. (1, 2, 3, now(), now()),
  142. (2, 3, 4, now(), now()),
  143. (3, 4, 5, now(), now()),
  144. (4, 10, 1, now(), now()),
  145. (5, 11, 2, now(), now());
  146. -- stream entries
  147. INSERT INTO "stream_entries"
  148. (activity_id, account_id, activity_type, created_at, updated_at)
  149. VALUES
  150. (1, 1, 'status', now(), now()),
  151. (2, 1, 'status', now(), now()),
  152. (3, 1, 'status', now(), now()),
  153. (4, 1, 'status', now(), now()),
  154. (5, 1, 'status', now(), now()),
  155. (6, 3, 'status', now(), now()),
  156. (7, 4, 'status', now(), now()),
  157. (8, 5, 'status', now(), now()),
  158. (9, 1, 'status', now(), now());
  159. -- custom emoji
  160. INSERT INTO "custom_emojis"
  161. (shortcode, created_at, updated_at)
  162. VALUES
  163. ('test', now(), now()),
  164. ('Test', now(), now()),
  165. ('blobcat', now(), now());
  166. INSERT INTO "custom_emojis"
  167. (shortcode, domain, uri, created_at, updated_at)
  168. VALUES
  169. ('blobcat', 'remote.org', 'https://remote.org/emoji/blobcat', now(), now()),
  170. ('blobcat', 'Remote.org', 'https://remote.org/emoji/blobcat', now(), now()),
  171. ('Blobcat', 'remote.org', 'https://remote.org/emoji/Blobcat', now(), now());
  172. -- favourites
  173. INSERT INTO "favourites"
  174. (account_id, status_id, created_at, updated_at)
  175. VALUES
  176. (1, 1, now(), now()),
  177. (1, 7, now(), now()),
  178. (4, 1, now(), now()),
  179. (3, 1, now(), now()),
  180. (5, 1, now(), now());
  181. -- pinned statuses
  182. INSERT INTO "status_pins"
  183. (account_id, status_id, created_at, updated_at)
  184. VALUES
  185. (1, 1, now(), now()),
  186. (3, 6, now(), now()),
  187. (4, 7, now(), now());
  188. -- follows
  189. INSERT INTO "follows"
  190. (id, account_id, target_account_id, created_at, updated_at)
  191. VALUES
  192. (1, 1, 5, now(), now()),
  193. (2, 6, 2, now(), now()),
  194. (3, 5, 2, now(), now()),
  195. (4, 6, 1, now(), now());
  196. -- follow requests
  197. INSERT INTO "follow_requests"
  198. (account_id, target_account_id, created_at, updated_at)
  199. VALUES
  200. (2, 5, now(), now()),
  201. (5, 1, now(), now());
  202. -- notifications
  203. INSERT INTO "notifications"
  204. (id, from_account_id, account_id, activity_type, activity_id, created_at, updated_at)
  205. VALUES
  206. (1, 6, 2, 'Follow', 2, now(), now()),
  207. (2, 2, 1, 'Mention', 4, now(), now()),
  208. (3, 1, 2, 'Mention', 5, now(), now());
  209. SQL
  210. end
  211. end
  212. end