continue on test data instance restoration
This commit is contained in:
parent
253e14dc9c
commit
9872f6073e
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
|
|
@ -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…
Reference in a new issue