forked from cybrespace/pinafore
77 lines
2.9 KiB
JavaScript
77 lines
2.9 KiB
JavaScript
|
import { lockedAccountRole } from '../roles'
|
||
|
import { followAs, unfollowAs } from '../serverActions'
|
||
|
import {
|
||
|
communityNavButton, followersButton, getNthSearchResult, getSearchResultByHref, getUrl, goBack,
|
||
|
homeNavButton, sleep
|
||
|
} from '../utils'
|
||
|
import { users } from '../users'
|
||
|
import { Selector as $ } from 'testcafe'
|
||
|
|
||
|
fixture`116-follow-requests.js`
|
||
|
.page`http://localhost:4002`
|
||
|
|
||
|
const timeout = 30000
|
||
|
|
||
|
test('Can approve and reject follow requests', async t => {
|
||
|
await t.useRole(lockedAccountRole)
|
||
|
|
||
|
// necessary for re-running this test in local testing
|
||
|
await Promise.all([
|
||
|
unfollowAs('admin', 'LockedAccount'),
|
||
|
unfollowAs('baz', 'LockedAccount'),
|
||
|
unfollowAs('quux', 'LockedAccount')
|
||
|
])
|
||
|
|
||
|
await Promise.all([
|
||
|
followAs('admin', 'LockedAccount'),
|
||
|
followAs('baz', 'LockedAccount'),
|
||
|
followAs('quux', 'LockedAccount')
|
||
|
])
|
||
|
|
||
|
await sleep(2000)
|
||
|
|
||
|
const approveAdminButton = () => getSearchResultByHref(`/accounts/${users.admin.id}`).find('button:nth-child(1)')
|
||
|
const rejectBazButton = () => getSearchResultByHref(`/accounts/${users.baz.id}`).find('button:nth-child(2)')
|
||
|
const approveQuuxButton = () => getSearchResultByHref(`/accounts/${users.quux.id}`).find('button:nth-child(1)')
|
||
|
|
||
|
await t.click(communityNavButton)
|
||
|
.click($('a[href="/requests"]'))
|
||
|
// no guaranteed order on these
|
||
|
.expect(getNthSearchResult(1).innerText).match(/(@admin|@baz|@quux)/)
|
||
|
.expect(getNthSearchResult(2).innerText).match(/(@admin|@baz|@quux)/)
|
||
|
.expect(getNthSearchResult(3).innerText).match(/(@admin|@baz|@quux)/)
|
||
|
.expect(getNthSearchResult(4).exists).notOk()
|
||
|
// approve admin
|
||
|
.expect(approveAdminButton().getAttribute('aria-label')).eql('Approve')
|
||
|
.hover(approveAdminButton())
|
||
|
.click(approveAdminButton())
|
||
|
.expect(getNthSearchResult(1).innerText).match(/(@baz|@quux)/, {timeout})
|
||
|
.expect(getNthSearchResult(2).innerText).match(/(@baz|@quux)/)
|
||
|
.expect(getNthSearchResult(3).exists).notOk()
|
||
|
await goBack()
|
||
|
await t
|
||
|
.click($('a[href="/requests"]'))
|
||
|
// reject baz
|
||
|
.expect(rejectBazButton().getAttribute('aria-label')).eql('Reject')
|
||
|
.hover(rejectBazButton())
|
||
|
.click(rejectBazButton())
|
||
|
.expect(getNthSearchResult(1).innerText).contains('@quux', {timeout})
|
||
|
.expect(getNthSearchResult(2).exists).notOk()
|
||
|
await goBack()
|
||
|
await t
|
||
|
.click($('a[href="/requests"]'))
|
||
|
// approve quux
|
||
|
.expect(approveQuuxButton().getAttribute('aria-label')).eql('Approve')
|
||
|
.hover(approveQuuxButton())
|
||
|
.click(approveQuuxButton())
|
||
|
.expect(getNthSearchResult(1).exists).notOk({timeout})
|
||
|
// check our follow list to make sure they follow us
|
||
|
.click(homeNavButton)
|
||
|
.click($('.compose-box-avatar'))
|
||
|
.expect(getUrl()).contains(`/accounts/${users.LockedAccount.id}`)
|
||
|
.click(followersButton)
|
||
|
.expect(getNthSearchResult(1).innerText).match(/(@admin|@quux)/)
|
||
|
.expect(getNthSearchResult(2).innerText).match(/(@admin|@quux)/)
|
||
|
.expect(getNthSearchResult(3).exists).notOk()
|
||
|
})
|