getting closer
This commit is contained in:
parent
32e47a0bb7
commit
8eeb7da186
|
@ -12,6 +12,10 @@ export const actions = times(30, i => ({
|
||||||
text: 'hello world'
|
text: 'hello world'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
user: 'admin',
|
||||||
|
follow: 'foobar'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
user: 'admin',
|
user: 'admin',
|
||||||
post: {
|
post: {
|
||||||
|
@ -19,6 +23,10 @@ export const actions = times(30, i => ({
|
||||||
privacy: 'unlisted'
|
privacy: 'unlisted'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
user: 'quux',
|
||||||
|
follow: 'foobar'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
user: 'foobar',
|
user: 'foobar',
|
||||||
post: {
|
post: {
|
||||||
|
@ -93,29 +101,18 @@ export const actions = times(30, i => ({
|
||||||
spoiler: 'kitten CW'
|
spoiler: 'kitten CW'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// notifications for foobar
|
|
||||||
{
|
{
|
||||||
user: 'admin',
|
user: 'foobar',
|
||||||
follow: 'foobar'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
user: 'admin',
|
|
||||||
post: {
|
post: {
|
||||||
text: '@foobar direct',
|
internalId: 11,
|
||||||
|
text: 'direct',
|
||||||
privacy: 'direct'
|
privacy: 'direct'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
user: 'quux',
|
|
||||||
follow: 'foobar'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
user: 'admin',
|
|
||||||
follow: 'quux'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
user: 'foobar',
|
user: 'foobar',
|
||||||
post: {
|
post: {
|
||||||
|
internalId: 10,
|
||||||
text: 'this is followers-only',
|
text: 'this is followers-only',
|
||||||
privacy: 'private'
|
privacy: 'private'
|
||||||
}
|
}
|
||||||
|
@ -128,6 +125,10 @@ export const actions = times(30, i => ({
|
||||||
privacy: 'unlisted'
|
privacy: 'unlisted'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
user: 'admin',
|
||||||
|
follow: 'quux'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
user: 'admin',
|
user: 'admin',
|
||||||
post: {
|
post: {
|
||||||
|
@ -171,7 +172,16 @@ export const actions = times(30, i => ({
|
||||||
{
|
{
|
||||||
user: 'admin',
|
user: 'admin',
|
||||||
favorite: 2
|
favorite: 2
|
||||||
},
|
}
|
||||||
|
]).concat(times(25, i => ({
|
||||||
|
user: 'quux',
|
||||||
|
post: {
|
||||||
|
internalId: 100 + i,
|
||||||
|
text: 'unlisted thread ' + (i + 1),
|
||||||
|
privacy: 'unlisted',
|
||||||
|
inReplyTo: i > 0 && (100 + i)
|
||||||
|
}
|
||||||
|
}))).concat([
|
||||||
{
|
{
|
||||||
user: 'quux',
|
user: 'quux',
|
||||||
post: {
|
post: {
|
||||||
|
@ -187,16 +197,7 @@ export const actions = times(30, i => ({
|
||||||
text: 'pinned toot 2',
|
text: 'pinned toot 2',
|
||||||
privacy: 'unlisted'
|
privacy: 'unlisted'
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
]).concat(times(25, i => ({
|
|
||||||
user: 'quux',
|
|
||||||
post: {
|
|
||||||
internalId: 100 + i,
|
|
||||||
text: 'unlisted thread ' + (i + 1),
|
|
||||||
privacy: 'unlisted',
|
|
||||||
inReplyTo: i > 0 && (100 + i)
|
|
||||||
}
|
|
||||||
}))).concat([
|
|
||||||
{
|
{
|
||||||
user: 'quux',
|
user: 'quux',
|
||||||
pin: 5
|
pin: 5
|
||||||
|
@ -213,13 +214,29 @@ export const actions = times(30, i => ({
|
||||||
user: 'admin',
|
user: 'admin',
|
||||||
favorite: 5
|
favorite: 5
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
user: 'admin',
|
||||||
|
favorite: 6
|
||||||
|
},
|
||||||
{
|
{
|
||||||
user: 'foobar',
|
user: 'foobar',
|
||||||
favorite: 5
|
favorite: 5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
user: 'admin',
|
user: 'foobar',
|
||||||
favorite: 6
|
favorite: 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
user: 'foobar',
|
||||||
|
favorite: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
user: 'foobar',
|
||||||
|
favorite: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
user: 'foobar',
|
||||||
|
pin: 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
user: 'ExternalLinks',
|
user: 'ExternalLinks',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { actions } from './mastodon-data'
|
import { actions } from './mastodon-data'
|
||||||
import { users } from '../tests/users'
|
import { users } from '../tests/users'
|
||||||
import { postStatus } from '../routes/_api/statuses'
|
import { pinStatus, postStatus } from '../routes/_api/statuses'
|
||||||
import { uploadMedia } from '../routes/_api/media'
|
import { uploadMedia } from '../routes/_api/media'
|
||||||
import { followAccount } from '../routes/_api/follow'
|
import { followAccount } from '../routes/_api/follow'
|
||||||
import { favoriteStatus } from '../routes/_api/favorite'
|
import { favoriteStatus } from '../routes/_api/favorite'
|
||||||
|
@ -37,7 +37,7 @@ export async function restoreMastodonData () {
|
||||||
type: type,
|
type: type,
|
||||||
buffer: await readFile(path.join(__dirname, '../tests/images/' + mediaItem))
|
buffer: await readFile(path.join(__dirname, '../tests/images/' + mediaItem))
|
||||||
})
|
})
|
||||||
let mediaResponse = await uploadMedia('localhost:3000', accessToken, file)
|
let mediaResponse = await uploadMedia('localhost:3000', accessToken, file, 'kitten')
|
||||||
return mediaResponse.id
|
return mediaResponse.id
|
||||||
}))
|
}))
|
||||||
let status = await postStatus('localhost:3000', accessToken, text, inReplyTo, mediaIds,
|
let status = await postStatus('localhost:3000', accessToken, text, inReplyTo, mediaIds,
|
||||||
|
@ -51,8 +51,10 @@ export async function restoreMastodonData () {
|
||||||
await favoriteStatus('localhost:3000', accessToken, internalIdsToIds[action.favorite])
|
await favoriteStatus('localhost:3000', accessToken, internalIdsToIds[action.favorite])
|
||||||
} else if (action.boost) {
|
} else if (action.boost) {
|
||||||
await reblogStatus('localhost:3000', accessToken, internalIdsToIds[action.boost])
|
await reblogStatus('localhost:3000', accessToken, internalIdsToIds[action.boost])
|
||||||
|
} else if (action.pin) {
|
||||||
|
await pinStatus('localhost:3000', accessToken, internalIdsToIds[action.pin])
|
||||||
}
|
}
|
||||||
await new Promise(resolve => setTimeout(resolve, 2000))
|
await new Promise(resolve => setTimeout(resolve, 1500))
|
||||||
}
|
}
|
||||||
console.log('Restored mastodon data')
|
console.log('Restored mastodon data')
|
||||||
}
|
}
|
|
@ -1,9 +1,10 @@
|
||||||
import { auth, basename } from './utils'
|
import { auth, basename } from './utils'
|
||||||
import { postWithTimeout } from '../_utils/ajax'
|
import { postWithTimeout } from '../_utils/ajax'
|
||||||
|
|
||||||
export async function uploadMedia (instanceName, accessToken, file) {
|
export async function uploadMedia (instanceName, accessToken, file, description) {
|
||||||
let formData = new FormData()
|
let formData = new FormData()
|
||||||
formData.append('file', file)
|
formData.append('file', file)
|
||||||
|
formData.append('description', description)
|
||||||
let url = `${basename(instanceName)}/api/v1/media`
|
let url = `${basename(instanceName)}/api/v1/media`
|
||||||
return postWithTimeout(url, formData, auth(accessToken))
|
return postWithTimeout(url, formData, auth(accessToken))
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,3 +23,13 @@ export async function postStatus (instanceName, accessToken, text, inReplyToId,
|
||||||
|
|
||||||
return postWithTimeout(url, body, auth(accessToken))
|
return postWithTimeout(url, body, auth(accessToken))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function pinStatus (instanceName, accessToken, statusId) {
|
||||||
|
let url = `${basename(instanceName)}/api/v1/statuses/${statusId}/pin`
|
||||||
|
return postWithTimeout(url, null, auth(accessToken))
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function unpinStatus (instanceName, accessToken, statusId) {
|
||||||
|
let url = `${basename(instanceName)}/api/v1/statuses/${statusId}/unpin`
|
||||||
|
return postWithTimeout(url, null, auth(accessToken))
|
||||||
|
}
|
|
@ -13,7 +13,7 @@ test('Shows a thread', async t => {
|
||||||
await scrollToBottomOfTimeline(t)
|
await scrollToBottomOfTimeline(t)
|
||||||
await t
|
await t
|
||||||
.click(getNthStatus(26))
|
.click(getNthStatus(26))
|
||||||
.expect(getUrl()).contains('/statuses/99549257018049016')
|
.expect(getUrl()).contains('/statuses/')
|
||||||
|
|
||||||
await validateTimeline(t, quuxThread)
|
await validateTimeline(t, quuxThread)
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ test('Scrolls to proper point in thread', async t => {
|
||||||
.hover(getNthStatus(8))
|
.hover(getNthStatus(8))
|
||||||
.hover(getNthStatus(10))
|
.hover(getNthStatus(10))
|
||||||
.click(getNthStatus(10))
|
.click(getNthStatus(10))
|
||||||
.expect(getUrl()).contains('/statuses/99549263341916700')
|
.expect(getUrl()).contains('/statuses/')
|
||||||
.expect(getNthStatus(16).innerText).contains('unlisted thread 17')
|
.expect(getNthStatus(16).innerText).contains('unlisted thread 17')
|
||||||
.expect(Math.round(getNthStatus(16).boundingClientRect.top))
|
.expect(Math.round(getNthStatus(16).boundingClientRect.top))
|
||||||
.eql(Math.round($('.container').boundingClientRect.top))
|
.eql(Math.round($('.container').boundingClientRect.top))
|
||||||
|
|
|
@ -18,7 +18,7 @@ test('modal preserves focus', async t => {
|
||||||
test('timeline preserves focus', async t => {
|
test('timeline preserves focus', async t => {
|
||||||
await t.useRole(foobarRole)
|
await t.useRole(foobarRole)
|
||||||
.click(getNthStatus(0))
|
.click(getNthStatus(0))
|
||||||
.expect(getUrl()).contains('/statuses/99549266679020981')
|
.expect(getUrl()).contains('/statuses/')
|
||||||
|
|
||||||
await goBack()
|
await goBack()
|
||||||
await t.expect(getActiveElementClass()).eql('status-article status-in-timeline')
|
await t.expect(getActiveElementClass()).eql('status-article status-in-timeline')
|
||||||
|
|
|
@ -8,11 +8,11 @@ fixture`11-reblog-favorites-count.js`
|
||||||
test('shows favorites', async t => {
|
test('shows favorites', async t => {
|
||||||
await t.useRole(foobarRole)
|
await t.useRole(foobarRole)
|
||||||
.click(getNthStatus(0))
|
.click(getNthStatus(0))
|
||||||
.expect(getUrl()).contains('/statuses/99549266679020981')
|
.expect(getUrl()).contains('/statuses/')
|
||||||
.expect(getFavoritesCount()).eql(2)
|
.expect(getFavoritesCount()).eql(2)
|
||||||
.expect($('.icon-button[aria-label="Favorite"]').getAttribute('aria-pressed')).eql('true')
|
.expect($('.icon-button[aria-label="Favorite"]').getAttribute('aria-pressed')).eql('true')
|
||||||
.click($('.status-favs-reblogs').nth(1))
|
.click($('.status-favs-reblogs').nth(1))
|
||||||
.expect(getUrl()).contains('/statuses/99549266679020981/favorites')
|
.expect(getUrl()).match(/\/statuses\/[^\/]+\/favorites/)
|
||||||
.expect($('.search-result-account-name').nth(0).innerText).eql('foobar')
|
.expect($('.search-result-account-name').nth(0).innerText).eql('foobar')
|
||||||
.expect($('.search-result-account-username').nth(0).innerText).eql('@foobar')
|
.expect($('.search-result-account-username').nth(0).innerText).eql('@foobar')
|
||||||
.expect($('.search-result-account-name').nth(1).innerText).eql('admin')
|
.expect($('.search-result-account-name').nth(1).innerText).eql('admin')
|
||||||
|
@ -22,11 +22,11 @@ test('shows favorites', async t => {
|
||||||
test('shows boosts', async t => {
|
test('shows boosts', async t => {
|
||||||
await t.useRole(foobarRole)
|
await t.useRole(foobarRole)
|
||||||
.click(getNthStatus(0))
|
.click(getNthStatus(0))
|
||||||
.expect(getUrl()).contains('/statuses/99549266679020981')
|
.expect(getUrl()).contains('/statuses/')
|
||||||
.expect(getReblogsCount()).eql(1)
|
.expect(getReblogsCount()).eql(1)
|
||||||
.expect($('.icon-button[aria-label="Boost"]').getAttribute('aria-pressed')).eql('false')
|
.expect($('.icon-button[aria-label="Boost"]').getAttribute('aria-pressed')).eql('false')
|
||||||
.click($('.status-favs-reblogs').nth(0))
|
.click($('.status-favs-reblogs').nth(0))
|
||||||
.expect(getUrl()).contains('/statuses/99549266679020981/reblogs')
|
.expect(getUrl()).match(/\/statuses\/[^\/]+\/reblogs/)
|
||||||
.expect($('.search-result-account-name').nth(0).innerText).eql('admin')
|
.expect($('.search-result-account-name').nth(0).innerText).eql('admin')
|
||||||
.expect($('.search-result-account-username').nth(0).innerText).eql('@admin')
|
.expect($('.search-result-account-username').nth(0).innerText).eql('@admin')
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue