forked from cybrespace/pinafore
		
	getting closer
This commit is contained in:
		
							parent
							
								
									32e47a0bb7
								
							
						
					
					
						commit
						8eeb7da186
					
				
					 7 changed files with 69 additions and 39 deletions
				
			
		| 
						 | 
				
			
			@ -12,6 +12,10 @@ export const actions = times(30, i => ({
 | 
			
		|||
      text: 'hello world'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    follow: 'foobar'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    post: {
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +23,10 @@ export const actions = times(30, i => ({
 | 
			
		|||
      privacy: 'unlisted'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'quux',
 | 
			
		||||
    follow: 'foobar'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    post: {
 | 
			
		||||
| 
						 | 
				
			
			@ -93,29 +101,18 @@ export const actions = times(30, i => ({
 | 
			
		|||
      spoiler: 'kitten CW'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  // notifications for foobar
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    follow: 'foobar'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    post: {
 | 
			
		||||
      text: '@foobar direct',
 | 
			
		||||
      internalId: 11,
 | 
			
		||||
      text: 'direct',
 | 
			
		||||
      privacy: 'direct'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'quux',
 | 
			
		||||
    follow: 'foobar'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    follow: 'quux'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    post: {
 | 
			
		||||
      internalId: 10,
 | 
			
		||||
      text: 'this is followers-only',
 | 
			
		||||
      privacy: 'private'
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -128,6 +125,10 @@ export const actions = times(30, i => ({
 | 
			
		|||
      privacy: 'unlisted'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    follow: 'quux'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    post: {
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +172,16 @@ export const actions = times(30, i => ({
 | 
			
		|||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    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',
 | 
			
		||||
    post: {
 | 
			
		||||
| 
						 | 
				
			
			@ -187,16 +197,7 @@ export const actions = times(30, i => ({
 | 
			
		|||
      text: 'pinned toot 2',
 | 
			
		||||
      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',
 | 
			
		||||
    pin: 5
 | 
			
		||||
| 
						 | 
				
			
			@ -213,13 +214,29 @@ export const actions = times(30, i => ({
 | 
			
		|||
    user: 'admin',
 | 
			
		||||
    favorite: 5
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    favorite: 6
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    favorite: 5
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'admin',
 | 
			
		||||
    favorite: 6
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    favorite: 2
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    favorite: 10
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    favorite: 3
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'foobar',
 | 
			
		||||
    pin: 2
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    user: 'ExternalLinks',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
import { actions } from './mastodon-data'
 | 
			
		||||
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 { followAccount } from '../routes/_api/follow'
 | 
			
		||||
import { favoriteStatus } from '../routes/_api/favorite'
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ export async function restoreMastodonData () {
 | 
			
		|||
          type: type,
 | 
			
		||||
          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
 | 
			
		||||
      }))
 | 
			
		||||
      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])
 | 
			
		||||
    } else if (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')
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,10 @@
 | 
			
		|||
import { auth, basename } from './utils'
 | 
			
		||||
import { postWithTimeout } from '../_utils/ajax'
 | 
			
		||||
 | 
			
		||||
export async function uploadMedia (instanceName, accessToken, file) {
 | 
			
		||||
export async function uploadMedia (instanceName, accessToken, file, description) {
 | 
			
		||||
  let formData = new FormData()
 | 
			
		||||
  formData.append('file', file)
 | 
			
		||||
  formData.append('description', description)
 | 
			
		||||
  let url = `${basename(instanceName)}/api/v1/media`
 | 
			
		||||
  return postWithTimeout(url, formData, auth(accessToken))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,3 +23,13 @@ export async function postStatus (instanceName, accessToken, text, inReplyToId,
 | 
			
		|||
 | 
			
		||||
  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 t
 | 
			
		||||
    .click(getNthStatus(26))
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/99549257018049016')
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/')
 | 
			
		||||
 | 
			
		||||
  await validateTimeline(t, quuxThread)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ test('Scrolls to proper point in thread', async t => {
 | 
			
		|||
    .hover(getNthStatus(8))
 | 
			
		||||
    .hover(getNthStatus(10))
 | 
			
		||||
    .click(getNthStatus(10))
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/99549263341916700')
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/')
 | 
			
		||||
    .expect(getNthStatus(16).innerText).contains('unlisted thread 17')
 | 
			
		||||
    .expect(Math.round(getNthStatus(16).boundingClientRect.top))
 | 
			
		||||
      .eql(Math.round($('.container').boundingClientRect.top))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ test('modal preserves focus', async t => {
 | 
			
		|||
test('timeline preserves focus', async t => {
 | 
			
		||||
  await t.useRole(foobarRole)
 | 
			
		||||
    .click(getNthStatus(0))
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/99549266679020981')
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/')
 | 
			
		||||
 | 
			
		||||
  await goBack()
 | 
			
		||||
  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 => {
 | 
			
		||||
  await t.useRole(foobarRole)
 | 
			
		||||
    .click(getNthStatus(0))
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/99549266679020981')
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/')
 | 
			
		||||
    .expect(getFavoritesCount()).eql(2)
 | 
			
		||||
    .expect($('.icon-button[aria-label="Favorite"]').getAttribute('aria-pressed')).eql('true')
 | 
			
		||||
    .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-username').nth(0).innerText).eql('@foobar')
 | 
			
		||||
    .expect($('.search-result-account-name').nth(1).innerText).eql('admin')
 | 
			
		||||
| 
						 | 
				
			
			@ -22,11 +22,11 @@ test('shows favorites', async t => {
 | 
			
		|||
test('shows boosts', async t => {
 | 
			
		||||
  await t.useRole(foobarRole)
 | 
			
		||||
    .click(getNthStatus(0))
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/99549266679020981')
 | 
			
		||||
    .expect(getUrl()).contains('/statuses/')
 | 
			
		||||
    .expect(getReblogsCount()).eql(1)
 | 
			
		||||
    .expect($('.icon-button[aria-label="Boost"]').getAttribute('aria-pressed')).eql('false')
 | 
			
		||||
    .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-username').nth(0).innerText).eql('@admin')
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue