tests.rake 12 KB

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