forked from mirrors/akkoma-fe
fix tests, removed one unused function, fix real problem that tests helped to
surface
This commit is contained in:
parent
48e811e6ed
commit
b18e27c6d4
5 changed files with 62 additions and 81 deletions
|
@ -100,10 +100,6 @@ export const statusType = (status) => {
|
|||
return 'unknown'
|
||||
}
|
||||
|
||||
export const findMaxId = (...args) => {
|
||||
return (maxBy(flatten(args), 'id') || {}).id
|
||||
}
|
||||
|
||||
const mergeOrAdd = (arr, obj, item) => {
|
||||
// For sequential IDs BE passes numbers as numbers, we want them as strings.
|
||||
item.id = String(item.id)
|
||||
|
|
|
@ -11,7 +11,7 @@ export const visibleTypes = store => ([
|
|||
|
||||
export const visibleNotificationsFromStore = store => {
|
||||
// map is just to clone the array since sort mutates it and it causes some issues
|
||||
let sortedNotifications = notificationsFromStore(store).map(_ => _).sort((a, b) => a.id > b.id ? -1 : 1)
|
||||
let sortedNotifications = notificationsFromStore(store).map(_ => _).sort((a, b) => a.action.id > b.action.id ? -1 : 1)
|
||||
sortedNotifications = sortBy(sortedNotifications, 'seen')
|
||||
return sortedNotifications.filter((notification) => visibleTypes(store).includes(notification.type))
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import { cloneDeep } from 'lodash'
|
||||
import { defaultState, mutations, findMaxId, prepareStatus, statusType } from '../../../../src/modules/statuses.js'
|
||||
import { defaultState, mutations, prepareStatus, statusType } from '../../../../src/modules/statuses.js'
|
||||
|
||||
// eslint-disable-next-line camelcase
|
||||
const makeMockStatus = ({id, text, is_post_verb = true}) => {
|
||||
return {
|
||||
id,
|
||||
user: {id: 0},
|
||||
user: {id: '0'},
|
||||
name: 'status',
|
||||
text: text || `Text number ${id}`,
|
||||
fave_num: 0,
|
||||
|
@ -32,45 +32,30 @@ describe('Statuses.statusType', () => {
|
|||
|
||||
describe('Statuses.prepareStatus', () => {
|
||||
it('sets nsfw for statuses with the #nsfw tag', () => {
|
||||
const safe = makeMockStatus({id: 1, text: 'Hello oniichan'})
|
||||
const nsfw = makeMockStatus({id: 1, text: 'Hello oniichan #nsfw'})
|
||||
const safe = makeMockStatus({id: '1', text: 'Hello oniichan'})
|
||||
const nsfw = makeMockStatus({id: '1', text: 'Hello oniichan #nsfw'})
|
||||
|
||||
expect(prepareStatus(safe).nsfw).to.eq(false)
|
||||
expect(prepareStatus(nsfw).nsfw).to.eq(true)
|
||||
})
|
||||
|
||||
it('leaves existing nsfw settings alone', () => {
|
||||
const nsfw = makeMockStatus({id: 1, text: 'Hello oniichan #nsfw'})
|
||||
const nsfw = makeMockStatus({id: '1', text: 'Hello oniichan #nsfw'})
|
||||
nsfw.nsfw = false
|
||||
|
||||
expect(prepareStatus(nsfw).nsfw).to.eq(false)
|
||||
})
|
||||
|
||||
it('sets deleted flag to false', () => {
|
||||
const aStatus = makeMockStatus({id: 1, text: 'Hello oniichan'})
|
||||
const aStatus = makeMockStatus({id: '1', text: 'Hello oniichan'})
|
||||
expect(prepareStatus(aStatus).deleted).to.eq(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe('Statuses.findMaxId', () => {
|
||||
it('returns the largest id in any of the given arrays', () => {
|
||||
const statusesOne = [{ id: 100 }, { id: 2 }]
|
||||
const statusesTwo = [{ id: 3 }]
|
||||
|
||||
const maxId = findMaxId(statusesOne, statusesTwo)
|
||||
expect(maxId).to.eq(100)
|
||||
})
|
||||
|
||||
it('returns undefined for empty arrays', () => {
|
||||
const maxId = findMaxId([], [])
|
||||
expect(maxId).to.eq(undefined)
|
||||
})
|
||||
})
|
||||
|
||||
describe('The Statuses module', () => {
|
||||
it('adds the status to allStatuses and to the given timeline', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [status], timeline: 'public' })
|
||||
|
||||
|
@ -82,7 +67,7 @@ describe('The Statuses module', () => {
|
|||
|
||||
it('counts the status as new if it has not been seen on this timeline', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [status], timeline: 'public' })
|
||||
mutations.addNewStatuses(state, { statuses: [status], timeline: 'friends' })
|
||||
|
@ -100,7 +85,7 @@ describe('The Statuses module', () => {
|
|||
|
||||
it('add the statuses to allStatuses if no timeline is given', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [status] })
|
||||
|
||||
|
@ -112,7 +97,7 @@ describe('The Statuses module', () => {
|
|||
|
||||
it('adds the status to allStatuses and to the given timeline, directly visible', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [status], showImmediately: true, timeline: 'public' })
|
||||
|
||||
|
@ -124,10 +109,10 @@ describe('The Statuses module', () => {
|
|||
|
||||
it('removes statuses by tag on deletion', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const otherStatus = makeMockStatus({id: 3})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
const otherStatus = makeMockStatus({id: '3'})
|
||||
status.uri = 'xxx'
|
||||
const deletion = makeMockStatus({id: 2, is_post_verb: false})
|
||||
const deletion = makeMockStatus({id: '2', is_post_verb: false})
|
||||
deletion.text = 'Dolus deleted notice {{tag:gs.smuglo.li,2016-11-18:noticeId=1038007:objectType=note}}.'
|
||||
deletion.uri = 'xxx'
|
||||
|
||||
|
@ -137,36 +122,36 @@ describe('The Statuses module', () => {
|
|||
expect(state.allStatuses).to.eql([otherStatus])
|
||||
expect(state.timelines.public.statuses).to.eql([otherStatus])
|
||||
expect(state.timelines.public.visibleStatuses).to.eql([otherStatus])
|
||||
expect(state.timelines.public.maxId).to.eql(3)
|
||||
expect(state.timelines.public.maxId).to.eql('3')
|
||||
})
|
||||
|
||||
it('does not update the maxId when the noIdUpdate flag is set', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const secondStatus = makeMockStatus({id: 2})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
const secondStatus = makeMockStatus({id: '2'})
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [status], showImmediately: true, timeline: 'public' })
|
||||
expect(state.timelines.public.maxId).to.eql(1)
|
||||
expect(state.timelines.public.maxId).to.eql('1')
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [secondStatus], showImmediately: true, timeline: 'public', noIdUpdate: true })
|
||||
expect(state.timelines.public.statuses).to.eql([secondStatus, status])
|
||||
expect(state.timelines.public.visibleStatuses).to.eql([secondStatus, status])
|
||||
expect(state.timelines.public.maxId).to.eql(1)
|
||||
expect(state.timelines.public.maxId).to.eql('1')
|
||||
})
|
||||
|
||||
it('keeps a descending by id order in timeline.visibleStatuses and timeline.statuses', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const nonVisibleStatus = makeMockStatus({id: 1})
|
||||
const status = makeMockStatus({id: 3})
|
||||
const statusTwo = makeMockStatus({id: 2})
|
||||
const statusThree = makeMockStatus({id: 4})
|
||||
const nonVisibleStatus = makeMockStatus({id: '1'})
|
||||
const status = makeMockStatus({id: '3'})
|
||||
const statusTwo = makeMockStatus({id: '2'})
|
||||
const statusThree = makeMockStatus({id: '4'})
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [nonVisibleStatus], showImmediately: false, timeline: 'public' })
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [status], showImmediately: true, timeline: 'public' })
|
||||
mutations.addNewStatuses(state, { statuses: [statusTwo], showImmediately: true, timeline: 'public' })
|
||||
|
||||
expect(state.timelines.public.minVisibleId).to.equal(2)
|
||||
expect(state.timelines.public.minVisibleId).to.equal('2')
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [statusThree], showImmediately: true, timeline: 'public' })
|
||||
|
||||
|
@ -176,9 +161,9 @@ describe('The Statuses module', () => {
|
|||
|
||||
it('splits retweets from their status and links them', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const retweet = makeMockStatus({id: 2, is_post_verb: false})
|
||||
const modStatus = makeMockStatus({id: 1, text: 'something else'})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
const retweet = makeMockStatus({id: '2', is_post_verb: false})
|
||||
const modStatus = makeMockStatus({id: '1', text: 'something else'})
|
||||
|
||||
retweet.retweeted_status = status
|
||||
|
||||
|
@ -187,22 +172,22 @@ describe('The Statuses module', () => {
|
|||
expect(state.timelines.public.visibleStatuses).to.have.length(1)
|
||||
expect(state.timelines.public.statuses).to.have.length(1)
|
||||
expect(state.allStatuses).to.have.length(2)
|
||||
expect(state.allStatuses[0].id).to.equal(1)
|
||||
expect(state.allStatuses[1].id).to.equal(2)
|
||||
expect(state.allStatuses[0].id).to.equal('1')
|
||||
expect(state.allStatuses[1].id).to.equal('2')
|
||||
|
||||
// It refers to the modified status.
|
||||
mutations.addNewStatuses(state, { statuses: [modStatus], timeline: 'public' })
|
||||
expect(state.allStatuses).to.have.length(2)
|
||||
expect(state.allStatuses[0].id).to.equal(1)
|
||||
expect(state.allStatuses[0].id).to.equal('1')
|
||||
expect(state.allStatuses[0].text).to.equal(modStatus.text)
|
||||
expect(state.allStatuses[1].id).to.equal(2)
|
||||
expect(state.allStatuses[1].id).to.equal('2')
|
||||
expect(retweet.retweeted_status.text).to.eql(modStatus.text)
|
||||
})
|
||||
|
||||
it('replaces existing statuses with the same id', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const modStatus = makeMockStatus({id: 1, text: 'something else'})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
const modStatus = makeMockStatus({id: '1', text: 'something else'})
|
||||
|
||||
// Add original status
|
||||
mutations.addNewStatuses(state, { statuses: [status], showImmediately: true, timeline: 'public' })
|
||||
|
@ -218,9 +203,9 @@ describe('The Statuses module', () => {
|
|||
|
||||
it('replaces existing statuses with the same id, coming from a retweet', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const modStatus = makeMockStatus({id: 1, text: 'something else'})
|
||||
const retweet = makeMockStatus({id: 2, is_post_verb: false})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
const modStatus = makeMockStatus({id: '1', text: 'something else'})
|
||||
const retweet = makeMockStatus({id: '2', is_post_verb: false})
|
||||
retweet.retweeted_status = modStatus
|
||||
|
||||
// Add original status
|
||||
|
@ -239,15 +224,15 @@ describe('The Statuses module', () => {
|
|||
|
||||
it('handles favorite actions', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
|
||||
const favorite = {
|
||||
id: 2,
|
||||
id: '2',
|
||||
is_post_verb: false,
|
||||
in_reply_to_status_id: '1', // The API uses strings here...
|
||||
uri: 'tag:shitposter.club,2016-08-21:fave:3895:note:773501:2016-08-21T16:52:15+00:00',
|
||||
text: 'a favorited something by b',
|
||||
user: { id: 99 }
|
||||
user: { id: '99' }
|
||||
}
|
||||
|
||||
mutations.addNewStatuses(state, { statuses: [status], showImmediately: true, timeline: 'public' })
|
||||
|
@ -266,11 +251,11 @@ describe('The Statuses module', () => {
|
|||
|
||||
// If something is favorited by the current user, it also sets the 'favorited' property but does not increment counter to avoid over-counting. Counter is incremented (updated, really) via response to the favorite request.
|
||||
const user = {
|
||||
id: 1
|
||||
id: '1'
|
||||
}
|
||||
|
||||
const ownFavorite = {
|
||||
id: 3,
|
||||
id: '3',
|
||||
is_post_verb: false,
|
||||
in_reply_to_status_id: '1', // The API uses strings here...
|
||||
uri: 'tag:shitposter.club,2016-08-21:fave:3895:note:773501:2016-08-21T16:52:15+00:00',
|
||||
|
@ -287,16 +272,16 @@ describe('The Statuses module', () => {
|
|||
|
||||
describe('notifications', () => {
|
||||
it('removes a notification when the notice gets removed', () => {
|
||||
const user = { id: 1 }
|
||||
const user = { id: '1' }
|
||||
const state = cloneDeep(defaultState)
|
||||
const status = makeMockStatus({id: 1})
|
||||
const otherStatus = makeMockStatus({id: 3})
|
||||
const mentionedStatus = makeMockStatus({id: 2})
|
||||
const status = makeMockStatus({id: '1'})
|
||||
const otherStatus = makeMockStatus({id: '3'})
|
||||
const mentionedStatus = makeMockStatus({id: '2'})
|
||||
mentionedStatus.attentions = [user]
|
||||
mentionedStatus.uri = 'xxx'
|
||||
otherStatus.attentions = [user]
|
||||
|
||||
const deletion = makeMockStatus({id: 4, is_post_verb: false})
|
||||
const deletion = makeMockStatus({id: '4', is_post_verb: false})
|
||||
deletion.text = 'Dolus deleted notice {{tag:gs.smuglo.li,2016-11-18:noticeId=1038007:objectType=note}}.'
|
||||
deletion.uri = 'xxx'
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@ describe('The users module', () => {
|
|||
describe('mutations', () => {
|
||||
it('adds new users to the set, merging in new information for old users', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const user = { id: 1, name: 'Guy' }
|
||||
const modUser = { id: 1, name: 'Dude' }
|
||||
const user = { id: '1', name: 'Guy' }
|
||||
const modUser = { id: '1', name: 'Dude' }
|
||||
|
||||
mutations.addNewUsers(state, [user])
|
||||
expect(state.users).to.have.length(1)
|
||||
|
@ -21,7 +21,7 @@ describe('The users module', () => {
|
|||
|
||||
it('sets a mute bit on users', () => {
|
||||
const state = cloneDeep(defaultState)
|
||||
const user = { id: 1, name: 'Guy' }
|
||||
const user = { id: '1', name: 'Guy' }
|
||||
|
||||
mutations.addNewUsers(state, [user])
|
||||
mutations.setMuted(state, {user, muted: true})
|
||||
|
@ -38,11 +38,11 @@ describe('The users module', () => {
|
|||
it('returns user with matching screen_name', () => {
|
||||
const state = {
|
||||
users: [
|
||||
{ screen_name: 'Guy', id: 1 }
|
||||
{ screen_name: 'Guy', id: '1' }
|
||||
]
|
||||
}
|
||||
const name = 'Guy'
|
||||
const expected = { screen_name: 'Guy', id: 1 }
|
||||
const expected = { screen_name: 'Guy', id: '1' }
|
||||
expect(getters.userByName(state)(name)).to.eql(expected)
|
||||
})
|
||||
})
|
||||
|
@ -51,11 +51,11 @@ describe('The users module', () => {
|
|||
it('returns user with matching id', () => {
|
||||
const state = {
|
||||
users: [
|
||||
{ screen_name: 'Guy', id: 1 }
|
||||
{ screen_name: 'Guy', id: '1' }
|
||||
]
|
||||
}
|
||||
const id = 1
|
||||
const expected = { screen_name: 'Guy', id: 1 }
|
||||
const id = '1'
|
||||
const expected = { screen_name: 'Guy', id: '1' }
|
||||
expect(getters.userById(state)(id)).to.eql(expected)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -9,15 +9,15 @@ describe('NotificationUtils', () => {
|
|||
notifications: {
|
||||
data: [
|
||||
{
|
||||
action: { id: 1 },
|
||||
action: { id: '1' },
|
||||
type: 'like'
|
||||
},
|
||||
{
|
||||
action: { id: 2 },
|
||||
action: { id: '2' },
|
||||
type: 'mention'
|
||||
},
|
||||
{
|
||||
action: { id: 3 },
|
||||
action: { id: '3' },
|
||||
type: 'repeat'
|
||||
}
|
||||
]
|
||||
|
@ -34,11 +34,11 @@ describe('NotificationUtils', () => {
|
|||
}
|
||||
const expected = [
|
||||
{
|
||||
action: { id: 3 },
|
||||
action: { id: '3' },
|
||||
type: 'repeat'
|
||||
},
|
||||
{
|
||||
action: { id: 1 },
|
||||
action: { id: '1' },
|
||||
type: 'like'
|
||||
}
|
||||
]
|
||||
|
@ -54,12 +54,12 @@ describe('NotificationUtils', () => {
|
|||
notifications: {
|
||||
data: [
|
||||
{
|
||||
action: { id: 1 },
|
||||
action: { id: '1' },
|
||||
type: 'like',
|
||||
seen: false
|
||||
},
|
||||
{
|
||||
action: { id: 2 },
|
||||
action: { id: '2' },
|
||||
type: 'mention',
|
||||
seen: true
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ describe('NotificationUtils', () => {
|
|||
}
|
||||
const expected = [
|
||||
{
|
||||
action: { id: 1 },
|
||||
action: { id: '1' },
|
||||
type: 'like',
|
||||
seen: false
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue