forked from cybrespace/pinafore
		
	continue on test data instance restoration
This commit is contained in:
		
							parent
							
								
									253e14dc9c
								
							
						
					
					
						commit
						9872f6073e
					
				
					 16 changed files with 379 additions and 224 deletions
				
			
		
							
								
								
									
										220
									
								
								bin/mastodon-data.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								bin/mastodon-data.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,220 @@ | ||||||
|  | const times = require('lodash/times') | ||||||
|  | 
 | ||||||
|  | export const actions = times(30, i => ({ | ||||||
|  |   post: { | ||||||
|  |     text: (i + 1) | ||||||
|  |   }, | ||||||
|  |   user: 'admin' | ||||||
|  | })).concat([ | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: 'hello world' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's a kitten", | ||||||
|  |       media: ['kitten1.jpg'] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's a secret kitten", | ||||||
|  |       media: ['kitten2.jpg'], | ||||||
|  |       sensitive: true | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's 2 kitten photos", | ||||||
|  |       media: ['kitten3.jpg', 'kitten4.jpg'] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's an animated kitten gif", | ||||||
|  |       media: ['kitten1.gif'] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's a secret animated kitten gif", | ||||||
|  |       media: ['kitten2.gif'], | ||||||
|  |       sensitive: true | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "content warning", | ||||||
|  |       spoiler: 'CW' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's a video", | ||||||
|  |       media: ['kitten1.mp4'] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's a secret video", | ||||||
|  |       media: ['kitten2.mp4'] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       text: "here's a kitten with a CW", | ||||||
|  |       media: ['kitten5.jpg'], | ||||||
|  |       sensitive: true, | ||||||
|  |       spoiler: 'kitten CW' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   // notifications for foobar
 | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     follow: 'foobar' | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     post: { | ||||||
|  |       text: '@foobar hello foobar', | ||||||
|  |       privacy: 'unlisted' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'quux', | ||||||
|  |     follow: 'foobar' | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     post: { | ||||||
|  |       internalId: 3, | ||||||
|  |       text: '@foobar notification of direct message', | ||||||
|  |       privacy: 'direct' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     favorite: 3 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     post: { | ||||||
|  |       internalId: 4, | ||||||
|  |       text: '@foobar notification of followers-only message', | ||||||
|  |       privacy: 'private' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     favorite: 4 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     post: { | ||||||
|  |       internalId: 1, | ||||||
|  |       text: '@foobar notification of unlisted message', | ||||||
|  |       privacy: 'unlisted' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     boost: 1 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     post: { | ||||||
|  |       internalId: 2, | ||||||
|  |       text: 'this is unlisted', | ||||||
|  |       privacy: 'private' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     boost: 2 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     favorite: 2 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'quux', | ||||||
|  |     post: { | ||||||
|  |       internalId: 5, | ||||||
|  |       text: 'pinned toot 1', | ||||||
|  |       privacy: 'private' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'quux', | ||||||
|  |     post: { | ||||||
|  |       internalId: 6, | ||||||
|  |       text: 'pinned toot 2', | ||||||
|  |       privacy: 'private' | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | ]).concat(times(25, i => ({ | ||||||
|  |   user: 'quux', | ||||||
|  |   post: { | ||||||
|  |     internalId: 100 + i, | ||||||
|  |     text: 'unlisted thread ' + (i + 1), | ||||||
|  |     privacy: 'private', | ||||||
|  |     inReplyTo: i > 0 && (100 + i) | ||||||
|  |   } | ||||||
|  | }))).concat([ | ||||||
|  |   { | ||||||
|  |     user: 'quux', | ||||||
|  |     pin: 5 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'quux', | ||||||
|  |     pin: 6 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     boost: 5 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     favorite: 5 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'foobar', | ||||||
|  |     favorite: 5 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'admin', | ||||||
|  |     favorite: 6 | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'ExternalLinks', | ||||||
|  |     post: { | ||||||
|  |       text: 'here are some hashtags: #kitten #kitties', | ||||||
|  |       privacy: 'private' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'ExternalLinks', | ||||||
|  |     post: { | ||||||
|  |       text: 'here are some external links: https://joinmastodon.org https://github.com/tootsuite/mastodon', | ||||||
|  |       privacy: 'private' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     user: 'ExternalLinks', | ||||||
|  |     post: { | ||||||
|  |       text: 'here are some users: @admin @quux', | ||||||
|  |       privacy: 'private' | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | ]) | ||||||
|  | @ -1,226 +1,44 @@ | ||||||
| const times = require('lodash/times') | import { actions } from './mastodon-data' | ||||||
|  | import { users } from '../tests/users' | ||||||
|  | import { postStatus } from '../routes/_api/statuses' | ||||||
|  | import { uploadMedia } from '../routes/_api/media' | ||||||
|  | import { followAccount } from '../routes/_api/follow' | ||||||
|  | import { favoriteStatus } from '../routes/_api/favorite' | ||||||
|  | import { reblogStatus } from '../routes/_api/reblog' | ||||||
| 
 | 
 | ||||||
| const actions = times(30, i => ({ | import path from 'path' | ||||||
|   post: { | global.File = require('file-api').File | ||||||
|     text: (i + 1) | global.FormData = require('file-api').FormData | ||||||
|   }, | global.fetch = require('node-fetch') | ||||||
|   user: 'admin' |  | ||||||
| })).concat([ |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: 'hello world' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's a kitten", |  | ||||||
|       media: ['kitten1.jpg'] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's a secret kitten", |  | ||||||
|       media: ['kitten2.jpg'], |  | ||||||
|       sensitive: true |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's 2 kitten photos", |  | ||||||
|       media: ['kitten3.jpg', 'kitten4.jpg'] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's an animated kitten gif", |  | ||||||
|       media: ['kitten1.gif'] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's a secret animated kitten gif", |  | ||||||
|       media: ['kitten2.gif'], |  | ||||||
|       sensitive: true |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "content warning", |  | ||||||
|       spoiler: 'CW' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's a video", |  | ||||||
|       media: ['kitten1.mp4'] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's a secret video", |  | ||||||
|       media: ['kitten2.mp4'] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       text: "here's a kitten with a CW", |  | ||||||
|       media: ['kitten5.jpg'], |  | ||||||
|       sensitive: true, |  | ||||||
|       spoiler: 'kitten CW' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   // notifications for foobar
 |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     follow: 'foobar' |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     post: { |  | ||||||
|       text: '@foobar hello foobar', |  | ||||||
|       privacy: 'unlisted' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'quux', |  | ||||||
|     follow: 'foobar' |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     post: { |  | ||||||
|       internalId: 3, |  | ||||||
|       text: '@foobar notification of direct message', |  | ||||||
|       privacy: 'direct' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     favorite: 3 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     post: { |  | ||||||
|       internalId: 4, |  | ||||||
|       text: '@foobar notification of followers-only message', |  | ||||||
|       privacy: 'private' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     favorite: 4 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     post: { |  | ||||||
|       internalId: 1, |  | ||||||
|       text: '@foobar notification of unlisted message', |  | ||||||
|       privacy: 'unlisted' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     boost: 1 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     post: { |  | ||||||
|       internalId: 2, |  | ||||||
|       text: 'this is unlisted', |  | ||||||
|       privacy: 'private' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     boost: 2 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     favorite: 2 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'quux', |  | ||||||
|     post: { |  | ||||||
|       internalId: 5, |  | ||||||
|       text: 'pinned toot 1', |  | ||||||
|       privacy: 'private' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'quux', |  | ||||||
|     post: { |  | ||||||
|       internalId: 6, |  | ||||||
|       text: 'pinned toot 2', |  | ||||||
|       privacy: 'private' |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| ]).concat(times(25, i => ({ |  | ||||||
|   user: 'quux', |  | ||||||
|   post: { |  | ||||||
|     internalId: 100 + i, |  | ||||||
|     text: 'unlisted thread ' + (i + 1), |  | ||||||
|     privacy: 'private', |  | ||||||
|     inReplyTo: i > 0 && (100 + i) |  | ||||||
|   } |  | ||||||
| }))).concat([ |  | ||||||
|   { |  | ||||||
|     user: 'quux', |  | ||||||
|     pin: 5 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'quux', |  | ||||||
|     pin: 6 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     boost: 5 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     favorite: 5 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'foobar', |  | ||||||
|     favorite: 5 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'admin', |  | ||||||
|     favorite: 6 |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'ExternalLinks', |  | ||||||
|     post: { |  | ||||||
|       text: 'here are some hashtags: #kitten #kitties', |  | ||||||
|       privacy: 'private' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'ExternalLinks', |  | ||||||
|     post: { |  | ||||||
|       text: 'here are some external links: https://joinmastodon.org https://github.com/tootsuite/mastodon', |  | ||||||
|       privacy: 'private' |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     user: 'ExternalLinks', |  | ||||||
|     post: { |  | ||||||
|       text: 'here are some users: @admin @quux', |  | ||||||
|       privacy: 'private' |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| ]) |  | ||||||
| 
 | 
 | ||||||
| async function restoreMastodonData () { | async function restoreMastodonData () { | ||||||
|   console.log('Restoring mastodon data...') |   console.log('Restoring mastodon data...') | ||||||
|  |   let internalIdsToIds = {} | ||||||
|  |   for (let action of actions) { | ||||||
|  |     let accessToken = users[action.user].accessToken | ||||||
|  |     if (action.post) { | ||||||
|  |       let { text, media, sensitive, spoiler, privacy, inReplyTo, internalId } = action.post | ||||||
|  |       if (typeof inReplyTo !== 'undefined') { | ||||||
|  |         inReplyTo = internalIdsToIds[inReplyTo] | ||||||
|  |       } | ||||||
|  |       let mediaIds = media && await Promise.all(media.map(async mediaItem => { | ||||||
|  |         let file = new File(path.join(__dirname, '../tests/images/' + mediaItem)) | ||||||
|  |         let mediaResponse = await uploadMedia('localhost:3000', accessToken, file) | ||||||
|  |         return mediaResponse.id | ||||||
|  |       })) | ||||||
|  |       let status = await postStatus('localhost:3000', accessToken, text, inReplyTo, mediaIds, | ||||||
|  |         sensitive, spoiler, privacy || 'public') | ||||||
|  |       if (typeof internalId !== 'undefined') { | ||||||
|  |         internalIdsToIds[internalId] = status.id | ||||||
|  |       } | ||||||
|  |     } else if (action.follow) { | ||||||
|  |       await followAccount('localhost:3000', accessToken, action.follow) | ||||||
|  |     } else if (action.favorite) { | ||||||
|  |       await favoriteStatus('localhost:3000', accessToken, internalIdsToIds[action.favorite]) | ||||||
|  |     } else if (action.boost) { | ||||||
|  |       await reblogStatus('localhost:3000', accessToken, internalIdsToIds[action.favorite]) | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| module.exports = restoreMastodonData | module.exports = restoreMastodonData | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| const restoreMastodonData = require ('./restore-mastodon-data') | const restoreMastodonData = require('./restore-mastodon-data') | ||||||
| const pify = require('pify') | const pify = require('pify') | ||||||
| const exec = require('child-process-promise').exec | const exec = require('child-process-promise').exec | ||||||
| const spawn = require('child-process-promise').spawn | const spawn = require('child-process-promise').spawn | ||||||
|  | @ -71,7 +71,7 @@ async function runMastodon () { | ||||||
| 
 | 
 | ||||||
| async function main () { | async function main () { | ||||||
|   await cloneMastodon() |   await cloneMastodon() | ||||||
|   await setupMastodonDatabase() |   //await setupMastodonDatabase()
 | ||||||
|   await runMastodon() |   await runMastodon() | ||||||
|   //await restoreMastodonData()
 |   //await restoreMastodonData()
 | ||||||
| } | } | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										78
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										78
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -9,6 +9,11 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/@gamestdio/websocket/-/websocket-0.2.2.tgz", |       "resolved": "https://registry.npmjs.org/@gamestdio/websocket/-/websocket-0.2.2.tgz", | ||||||
|       "integrity": "sha512-ptWTKBq6IliC7lNhfAI/YI5WBjhPClflZV61V7In/qxGbgrWrlny6/Df4NtrUs7QUeNccv8yqQwjjw+f0veGjQ==" |       "integrity": "sha512-ptWTKBq6IliC7lNhfAI/YI5WBjhPClflZV61V7In/qxGbgrWrlny6/Df4NtrUs7QUeNccv8yqQwjjw+f0veGjQ==" | ||||||
|     }, |     }, | ||||||
|  |     "@std/esm": { | ||||||
|  |       "version": "0.25.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@std/esm/-/esm-0.25.0.tgz", | ||||||
|  |       "integrity": "sha512-htyUY4TrUSMYLdtmk2RPrNJJGZPAhliYcjf5vIh+RMVEI6Yy88Jl98cWcJY8McPcrizkXdbzOGFtp6pf8qd45w==" | ||||||
|  |     }, | ||||||
|     "@types/chalk": { |     "@types/chalk": { | ||||||
|       "version": "0.4.31", |       "version": "0.4.31", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", |       "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", | ||||||
|  | @ -34,6 +39,19 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz", |       "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz", | ||||||
|       "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==" |       "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==" | ||||||
|     }, |     }, | ||||||
|  |     "File": { | ||||||
|  |       "version": "0.10.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/File/-/File-0.10.2.tgz", | ||||||
|  |       "integrity": "sha1-6Jn3dtJz4iQ7qGEFuzsFbQ+5VgQ=", | ||||||
|  |       "requires": { | ||||||
|  |         "mime": "1.4.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "FileList": { | ||||||
|  |       "version": "0.10.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/FileList/-/FileList-0.10.2.tgz", | ||||||
|  |       "integrity": "sha1-YAOxqXFZNBZLZ8Q0rWqHQaHNFHo=" | ||||||
|  |     }, | ||||||
|     "a11y-dialog": { |     "a11y-dialog": { | ||||||
|       "version": "4.0.1", |       "version": "4.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/a11y-dialog/-/a11y-dialog-4.0.1.tgz", |       "resolved": "https://registry.npmjs.org/a11y-dialog/-/a11y-dialog-4.0.1.tgz", | ||||||
|  | @ -1351,6 +1369,11 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", |       "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", | ||||||
|       "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" |       "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" | ||||||
|     }, |     }, | ||||||
|  |     "bufferjs": { | ||||||
|  |       "version": "3.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/bufferjs/-/bufferjs-3.0.1.tgz", | ||||||
|  |       "integrity": "sha1-BpLoKcsQoQVQ5kc5CwNesGw46O8=" | ||||||
|  |     }, | ||||||
|     "builtin-modules": { |     "builtin-modules": { | ||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", |       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", | ||||||
|  | @ -3261,6 +3284,21 @@ | ||||||
|         "object-assign": "4.1.1" |         "object-assign": "4.1.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "file-api": { | ||||||
|  |       "version": "0.10.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/file-api/-/file-api-0.10.4.tgz", | ||||||
|  |       "integrity": "sha1-LxASJttyfMAXKg3WiPL2iD1SiD0=", | ||||||
|  |       "requires": { | ||||||
|  |         "File": "0.10.2", | ||||||
|  |         "FileList": "0.10.2", | ||||||
|  |         "bufferjs": "3.0.1", | ||||||
|  |         "file-error": "0.10.2", | ||||||
|  |         "filereader": "0.10.3", | ||||||
|  |         "formdata": "0.10.4", | ||||||
|  |         "mime": "1.4.1", | ||||||
|  |         "remedial": "1.0.7" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "file-entry-cache": { |     "file-entry-cache": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", | ||||||
|  | @ -3270,11 +3308,21 @@ | ||||||
|         "object-assign": "4.1.1" |         "object-assign": "4.1.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "file-error": { | ||||||
|  |       "version": "0.10.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/file-error/-/file-error-0.10.2.tgz", | ||||||
|  |       "integrity": "sha1-ljtIuSc7PUuEtADuVxvHixc5cko=" | ||||||
|  |     }, | ||||||
|     "filename-regex": { |     "filename-regex": { | ||||||
|       "version": "2.0.1", |       "version": "2.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", |       "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", | ||||||
|       "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" |       "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" | ||||||
|     }, |     }, | ||||||
|  |     "filereader": { | ||||||
|  |       "version": "0.10.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/filereader/-/filereader-0.10.3.tgz", | ||||||
|  |       "integrity": "sha1-x0fUos2PYeVBinwH/hJXpD8KzbE=" | ||||||
|  |     }, | ||||||
|     "filesize": { |     "filesize": { | ||||||
|       "version": "3.6.0", |       "version": "3.6.0", | ||||||
|       "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.0.tgz", |       "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.0.tgz", | ||||||
|  | @ -3467,6 +3515,11 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", |       "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", | ||||||
|       "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" |       "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" | ||||||
|     }, |     }, | ||||||
|  |     "foreachasync": { | ||||||
|  |       "version": "3.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", | ||||||
|  |       "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" | ||||||
|  |     }, | ||||||
|     "forever-agent": { |     "forever-agent": { | ||||||
|       "version": "0.6.1", |       "version": "0.6.1", | ||||||
|       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", |       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", | ||||||
|  | @ -3482,6 +3535,26 @@ | ||||||
|         "mime-types": "2.1.17" |         "mime-types": "2.1.17" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "formdata": { | ||||||
|  |       "version": "0.10.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/formdata/-/formdata-0.10.4.tgz", | ||||||
|  |       "integrity": "sha1-liH9wMw2H0oBEd5dJbNfanjcVaA=", | ||||||
|  |       "requires": { | ||||||
|  |         "File": "0.10.2", | ||||||
|  |         "FileList": "0.10.2", | ||||||
|  |         "bufferjs": "2.0.0", | ||||||
|  |         "filereader": "0.10.3", | ||||||
|  |         "foreachasync": "3.0.0", | ||||||
|  |         "remedial": "1.0.7" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "bufferjs": { | ||||||
|  |           "version": "2.0.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/bufferjs/-/bufferjs-2.0.0.tgz", | ||||||
|  |           "integrity": "sha1-aF5x7VwGAOPXA/+b0BK7MnCjnig=" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "forwarded": { |     "forwarded": { | ||||||
|       "version": "0.1.2", |       "version": "0.1.2", | ||||||
|       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", |       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", | ||||||
|  | @ -7805,6 +7878,11 @@ | ||||||
|         "isobject": "2.1.0" |         "isobject": "2.1.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "remedial": { | ||||||
|  |       "version": "1.0.7", | ||||||
|  |       "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.7.tgz", | ||||||
|  |       "integrity": "sha1-1mdEE6ZWdgB74A3UAJgJh7LDAME=" | ||||||
|  |     }, | ||||||
|     "remove-trailing-separator": { |     "remove-trailing-separator": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", |       "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ | ||||||
|     "build-svg": "node ./bin/build-svg.js", |     "build-svg": "node ./bin/build-svg.js", | ||||||
|     "build-sass": "node ./bin/build-sass.js", |     "build-sass": "node ./bin/build-sass.js", | ||||||
|     "build-sass-watch": "node ./bin/build-sass.js --watch", |     "build-sass-watch": "node ./bin/build-sass.js --watch", | ||||||
|     "run-mastodon": "node ./bin/run-mastodon", |     "run-mastodon": "node -r @std/esm ./bin/run-mastodon", | ||||||
|     "run-testcafe": "cross-env-shell testcafe --hostname localhost --skip-js-errors $BROWSER tests/spec", |     "run-testcafe": "cross-env-shell testcafe --hostname localhost --skip-js-errors $BROWSER tests/spec", | ||||||
|     "test": "cross-env BROWSER=chrome:headless npm run test-browser", |     "test": "cross-env BROWSER=chrome:headless npm run test-browser", | ||||||
|     "test-browser": "run-p --race run-mastodon dev test-mastodon", |     "test-browser": "run-p --race run-mastodon dev test-mastodon", | ||||||
|  | @ -24,6 +24,7 @@ | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@gamestdio/websocket": "^0.2.2", |     "@gamestdio/websocket": "^0.2.2", | ||||||
|  |     "@std/esm": "^0.25.0", | ||||||
|     "a11y-dialog": "^4.0.1", |     "a11y-dialog": "^4.0.1", | ||||||
|     "cheerio": "^1.0.0-rc.2", |     "cheerio": "^1.0.0-rc.2", | ||||||
|     "child-process-promise": "^2.2.1", |     "child-process-promise": "^2.2.1", | ||||||
|  | @ -34,6 +35,7 @@ | ||||||
|     "express": "^4.16.2", |     "express": "^4.16.2", | ||||||
|     "extract-text-webpack-plugin": "^3.0.2", |     "extract-text-webpack-plugin": "^3.0.2", | ||||||
|     "fg-loadcss": "^2.0.1", |     "fg-loadcss": "^2.0.1", | ||||||
|  |     "file-api": "^0.10.4", | ||||||
|     "font-awesome-svg-png": "^1.2.2", |     "font-awesome-svg-png": "^1.2.2", | ||||||
|     "glob": "^7.1.2", |     "glob": "^7.1.2", | ||||||
|     "idb-keyval": "^2.3.0", |     "idb-keyval": "^2.3.0", | ||||||
|  | @ -105,5 +107,8 @@ | ||||||
|       "dist", |       "dist", | ||||||
|       "routes/_utils/asyncModules.js" |       "routes/_utils/asyncModules.js" | ||||||
|     ] |     ] | ||||||
|  |   }, | ||||||
|  |   "@std/esm": { | ||||||
|  |     "mode": "js" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								routes/_api/follow.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								routes/_api/follow.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | import { postWithTimeout } from '../_utils/ajax' | ||||||
|  | import { auth, basename } from './utils' | ||||||
|  | 
 | ||||||
|  | export async function followAccount(instanceName, accessToken, accountId) { | ||||||
|  |   let url = `${basename(instanceName)}/api/v1/accounts/${accountId}/follow` | ||||||
|  |   return postWithTimeout(url, null, auth(accessToken)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export async function unfollowAccount(instanceName, accessToken, accountId) { | ||||||
|  |   let url = `${basename(instanceName)}/api/v1/accounts/${accountId}/unfollow` | ||||||
|  |   return postWithTimeout(url, null, auth(accessToken)) | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								tests/images/kitten1.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests/images/kitten1.gif
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1 MiB | 
							
								
								
									
										
											BIN
										
									
								
								tests/images/kitten1.mp4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests/images/kitten1.mp4
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								tests/images/kitten2.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests/images/kitten2.gif
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.1 MiB | 
							
								
								
									
										
											BIN
										
									
								
								tests/images/kitten2.mp4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests/images/kitten2.mp4
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.6 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.2 KiB | 
|  | @ -2,8 +2,8 @@ import { favoriteStatus } from '../routes/_api/favorite' | ||||||
| import fetch from 'node-fetch' | import fetch from 'node-fetch' | ||||||
| global.fetch = fetch | global.fetch = fetch | ||||||
| 
 | 
 | ||||||
| const accessToken = 'a306d698185db24b12385a5432817551d7ac94bdcbe23233d4e5eff70f6408c4' | import { users } from './users' | ||||||
| 
 | 
 | ||||||
| export async function favoriteStatusAsAdmin (statusId) { | export async function favoriteStatusAsAdmin (statusId) { | ||||||
|   return favoriteStatus('localhost:3000', accessToken, statusId) |   return favoriteStatus('localhost:3000', users.admin.accessToken, statusId) | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								tests/users.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								tests/users.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | export const users = { | ||||||
|  |   admin: { | ||||||
|  |     username: 'admin', | ||||||
|  |     password: 'mastodonadmin', | ||||||
|  |     accessToken: '1a62cc93aa6ccdad5a1048bd37b627c9df72f68c7f4b87d2daaeb83010ff44ab' | ||||||
|  |   }, | ||||||
|  |   foobar: { | ||||||
|  |     username: 'foobar', | ||||||
|  |     password: 'foobarfoobar', | ||||||
|  |     accessToken: '67868cd5b1f1279697ffffdb44c144b0ae427d74f4540717b67bf4a9c5c5c346' | ||||||
|  |   }, | ||||||
|  |   quux: { | ||||||
|  |     username: 'quux', | ||||||
|  |     password: 'quuxquuxquux', | ||||||
|  |     accessToken: 'd100083c1749392da7e1c12e63a6fba75f15ea1fbce93361d722889abf418464' | ||||||
|  |   }, | ||||||
|  |   ExternalLinks: { | ||||||
|  |     username: 'ExternalLinks', | ||||||
|  |     password: 'ExternalLinksExternalLink', | ||||||
|  |     accessToken: 'e9a463ba1729ae0049a97a312af702cb3d08d84de1cc8d6da3fad90af068117b' | ||||||
|  |   } | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue