tests.rake 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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. unless Account.find_by(username: 'user', domain: nil).custom_filters.map { |filter| filter.keywords.pluck(:keyword) } == [['test'], ['take']]
  35. puts 'CustomFilterKeyword records not created as expected'
  36. exit(1)
  37. end
  38. end
  39. desc 'Populate the database with test data for 2.4.3'
  40. task populate_v2_4_3: :environment do # rubocop:disable Naming/VariableNumber
  41. ActiveRecord::Base.connection.execute(<<~SQL)
  42. INSERT INTO "custom_filters"
  43. (id, account_id, phrase, context, whole_word, irreversible, created_at, updated_at)
  44. VALUES
  45. (1, 2, 'test', '{ "home", "public" }', true, true, now(), now()),
  46. (2, 2, 'take', '{ "home" }', false, false, now(), now());
  47. -- Orphaned admin action logs
  48. INSERT INTO "admin_action_logs"
  49. (account_id, action, target_type, target_id, created_at, updated_at)
  50. VALUES
  51. (1, 'destroy', 'Account', 1312, now(), now()),
  52. (1, 'destroy', 'User', 1312, now(), now()),
  53. (1, 'destroy', 'Report', 1312, now(), now()),
  54. (1, 'destroy', 'DomainBlock', 1312, now(), now()),
  55. (1, 'destroy', 'EmailDomainBlock', 1312, now(), now()),
  56. (1, 'destroy', 'Status', 1312, now(), now()),
  57. (1, 'destroy', 'CustomEmoji', 1312, now(), now());
  58. -- Admin action logs with linked objects
  59. INSERT INTO "domain_blocks"
  60. (id, domain, created_at, updated_at)
  61. VALUES
  62. (1, 'example.org', now(), now());
  63. INSERT INTO "email_domain_blocks"
  64. (id, domain, created_at, updated_at)
  65. VALUES
  66. (1, 'example.org', now(), now());
  67. INSERT INTO "admin_action_logs"
  68. (account_id, action, target_type, target_id, created_at, updated_at)
  69. VALUES
  70. (1, 'destroy', 'Account', 1, now(), now()),
  71. (1, 'destroy', 'User', 1, now(), now()),
  72. (1, 'destroy', 'DomainBlock', 1312, now(), now()),
  73. (1, 'destroy', 'EmailDomainBlock', 1312, now(), now()),
  74. (1, 'destroy', 'Status', 1, now(), now()),
  75. (1, 'destroy', 'CustomEmoji', 3, now(), now());
  76. SQL
  77. end
  78. desc 'Populate the database with test data for 2.4.0'
  79. task populate_v2_4: :environment do # rubocop:disable Naming/VariableNumber
  80. ActiveRecord::Base.connection.execute(<<~SQL)
  81. INSERT INTO "settings"
  82. (id, thing_type, thing_id, var, value, created_at, updated_at)
  83. VALUES
  84. (1, 'User', 1, 'hide_network', E'--- false\n', now(), now()),
  85. (2, 'User', 2, 'hide_network', E'--- true\n', now(), now());
  86. SQL
  87. end
  88. desc 'Populate the database with test data for 2.0.0'
  89. task populate_v2: :environment do
  90. admin_key = OpenSSL::PKey::RSA.new(2048)
  91. user_key = OpenSSL::PKey::RSA.new(2048)
  92. remote_key = OpenSSL::PKey::RSA.new(2048)
  93. remote_key2 = OpenSSL::PKey::RSA.new(2048)
  94. remote_key3 = OpenSSL::PKey::RSA.new(2048)
  95. admin_private_key = ActiveRecord::Base.connection.quote(admin_key.to_pem)
  96. admin_public_key = ActiveRecord::Base.connection.quote(admin_key.public_key.to_pem)
  97. user_private_key = ActiveRecord::Base.connection.quote(user_key.to_pem)
  98. user_public_key = ActiveRecord::Base.connection.quote(user_key.public_key.to_pem)
  99. remote_public_key = ActiveRecord::Base.connection.quote(remote_key.public_key.to_pem)
  100. remote_public_key2 = ActiveRecord::Base.connection.quote(remote_key2.public_key.to_pem)
  101. remote_public_key_ap = ActiveRecord::Base.connection.quote(remote_key3.public_key.to_pem)
  102. local_domain = ActiveRecord::Base.connection.quote(Rails.configuration.x.local_domain)
  103. ActiveRecord::Base.connection.execute(<<~SQL)
  104. -- accounts
  105. INSERT INTO "accounts"
  106. (id, username, domain, private_key, public_key, created_at, updated_at)
  107. VALUES
  108. (1, 'admin', NULL, #{admin_private_key}, #{admin_public_key}, now(), now()),
  109. (2, 'user', NULL, #{user_private_key}, #{user_public_key}, now(), now());
  110. INSERT INTO "accounts"
  111. (id, username, domain, private_key, public_key, created_at, updated_at, remote_url, salmon_url)
  112. VALUES
  113. (3, 'remote', 'remote.com', NULL, #{remote_public_key}, now(), now(),
  114. 'https://remote.com/@remote', 'https://remote.com/salmon/1'),
  115. (4, 'Remote', 'remote.com', NULL, #{remote_public_key}, now(), now(),
  116. 'https://remote.com/@Remote', 'https://remote.com/salmon/1'),
  117. (5, 'REMOTE', 'Remote.com', NULL, #{remote_public_key2}, now() - interval '1 year', now() - interval '1 year',
  118. 'https://remote.com/stale/@REMOTE', 'https://remote.com/stale/salmon/1');
  119. INSERT INTO "accounts"
  120. (id, username, domain, private_key, public_key, created_at, updated_at, protocol, inbox_url, outbox_url, followers_url)
  121. VALUES
  122. (6, 'bob', 'activitypub.com', NULL, #{remote_public_key_ap}, now(), now(),
  123. 1, 'https://activitypub.com/users/bob/inbox', 'https://activitypub.com/users/bob/outbox', 'https://activitypub.com/users/bob/followers');
  124. INSERT INTO "accounts"
  125. (id, username, domain, private_key, public_key, created_at, updated_at)
  126. VALUES
  127. (7, 'user', #{local_domain}, #{user_private_key}, #{user_public_key}, now(), now()),
  128. (8, 'pt_user', NULL, #{user_private_key}, #{user_public_key}, now(), now());
  129. INSERT INTO "accounts"
  130. (id, username, domain, private_key, public_key, created_at, updated_at, protocol, inbox_url, outbox_url, followers_url, suspended)
  131. VALUES
  132. (9, 'evil', 'activitypub.com', NULL, #{remote_public_key_ap}, now(), now(),
  133. 1, 'https://activitypub.com/users/evil/inbox', 'https://activitypub.com/users/evil/outbox',
  134. 'https://activitypub.com/users/evil/followers', true);
  135. -- users
  136. INSERT INTO "users"
  137. (id, account_id, email, created_at, updated_at, admin)
  138. VALUES
  139. (1, 1, 'admin@localhost', now(), now(), true),
  140. (2, 2, 'user@localhost', now(), now(), false);
  141. INSERT INTO "users"
  142. (id, account_id, email, created_at, updated_at, admin, locale)
  143. VALUES
  144. (3, 7, 'ptuser@localhost', now(), now(), false, 'pt');
  145. -- conversations
  146. INSERT INTO "conversations" (id, created_at, updated_at) VALUES (1, now(), now());
  147. -- statuses
  148. INSERT INTO "statuses"
  149. (id, account_id, text, created_at, updated_at)
  150. VALUES
  151. (1, 1, 'test', now(), now()),
  152. (2, 1, '@remote@remote.com hello', now(), now()),
  153. (3, 1, '@Remote@remote.com hello', now(), now()),
  154. (4, 1, '@REMOTE@remote.com hello', now(), now());
  155. INSERT INTO "statuses"
  156. (id, account_id, text, created_at, updated_at, uri, local)
  157. VALUES
  158. (5, 1, 'activitypub status', now(), now(), 'https://localhost/users/admin/statuses/4', true);
  159. INSERT INTO "statuses"
  160. (id, account_id, text, created_at, updated_at)
  161. VALUES
  162. (6, 3, 'test', now(), now());
  163. INSERT INTO "statuses"
  164. (id, account_id, text, created_at, updated_at, in_reply_to_id, in_reply_to_account_id)
  165. VALUES
  166. (7, 4, '@admin hello', now(), now(), 3, 1);
  167. INSERT INTO "statuses"
  168. (id, account_id, text, created_at, updated_at)
  169. VALUES
  170. (8, 5, 'test', now(), now());
  171. INSERT INTO "statuses"
  172. (id, account_id, reblog_of_id, created_at, updated_at)
  173. VALUES
  174. (9, 1, 2, now(), now());
  175. INSERT INTO "statuses"
  176. (id, account_id, text, in_reply_to_id, conversation_id, visibility, created_at, updated_at)
  177. VALUES
  178. (10, 2, '@admin hey!', NULL, 1, 3, now(), now()),
  179. (11, 1, '@user hey!', 10, 1, 3, now(), now());
  180. -- mentions (from previous statuses)
  181. INSERT INTO "mentions"
  182. (id, status_id, account_id, created_at, updated_at)
  183. VALUES
  184. (1, 2, 3, now(), now()),
  185. (2, 3, 4, now(), now()),
  186. (3, 4, 5, now(), now()),
  187. (4, 10, 1, now(), now()),
  188. (5, 11, 2, now(), now());
  189. -- stream entries
  190. INSERT INTO "stream_entries"
  191. (activity_id, account_id, activity_type, created_at, updated_at)
  192. VALUES
  193. (1, 1, 'status', now(), now()),
  194. (2, 1, 'status', now(), now()),
  195. (3, 1, 'status', now(), now()),
  196. (4, 1, 'status', now(), now()),
  197. (5, 1, 'status', now(), now()),
  198. (6, 3, 'status', now(), now()),
  199. (7, 4, 'status', now(), now()),
  200. (8, 5, 'status', now(), now()),
  201. (9, 1, 'status', now(), now());
  202. -- custom emoji
  203. INSERT INTO "custom_emojis"
  204. (id, shortcode, created_at, updated_at)
  205. VALUES
  206. (1, 'test', now(), now()),
  207. (2, 'Test', now(), now()),
  208. (3, 'blobcat', now(), now());
  209. INSERT INTO "custom_emojis"
  210. (id, shortcode, domain, uri, created_at, updated_at)
  211. VALUES
  212. (4, 'blobcat', 'remote.org', 'https://remote.org/emoji/blobcat', now(), now()),
  213. (5, 'blobcat', 'Remote.org', 'https://remote.org/emoji/blobcat', now(), now()),
  214. (6, 'Blobcat', 'remote.org', 'https://remote.org/emoji/Blobcat', now(), now());
  215. -- favourites
  216. INSERT INTO "favourites"
  217. (account_id, status_id, created_at, updated_at)
  218. VALUES
  219. (1, 1, now(), now()),
  220. (1, 7, now(), now()),
  221. (4, 1, now(), now()),
  222. (3, 1, now(), now()),
  223. (5, 1, now(), now());
  224. -- pinned statuses
  225. INSERT INTO "status_pins"
  226. (account_id, status_id, created_at, updated_at)
  227. VALUES
  228. (1, 1, now(), now()),
  229. (3, 6, now(), now()),
  230. (4, 7, now(), now());
  231. -- follows
  232. INSERT INTO "follows"
  233. (id, account_id, target_account_id, created_at, updated_at)
  234. VALUES
  235. (1, 1, 5, now(), now()),
  236. (2, 6, 2, now(), now()),
  237. (3, 5, 2, now(), now()),
  238. (4, 6, 1, now(), now());
  239. -- follow requests
  240. INSERT INTO "follow_requests"
  241. (account_id, target_account_id, created_at, updated_at)
  242. VALUES
  243. (2, 5, now(), now()),
  244. (5, 1, now(), now());
  245. -- notifications
  246. INSERT INTO "notifications"
  247. (id, from_account_id, account_id, activity_type, activity_id, created_at, updated_at)
  248. VALUES
  249. (1, 6, 2, 'Follow', 2, now(), now()),
  250. (2, 2, 1, 'Mention', 4, now(), now()),
  251. (3, 1, 2, 'Mention', 5, now(), now());
  252. SQL
  253. end
  254. end
  255. end