@@ -7,6 +7,7 @@ import { saveFixtures } from '../../helpers';
77import { User } from '../../../src/entity/user/User' ;
88import { ContributionAction } from '../../../src/entity/contribution/ContributionAction' ;
99import { ContributionActionCategory } from '../../../src/entity/contribution/ContributionActionCategory' ;
10+ import { ContributionActionLink } from '../../../src/entity/contribution/ContributionActionLink' ;
1011import { ContributionBlockedUser } from '../../../src/entity/contribution/ContributionBlockedUser' ;
1112import { ContributionCause } from '../../../src/entity/contribution/ContributionCause' ;
1213import {
@@ -280,6 +281,63 @@ describe('private contribution routes', () => {
280281 ) . resolves . toBeNull ( ) ;
281282 } ) ;
282283
284+ it ( 'manages action links individually and in bulk' , async ( ) => {
285+ await seedContributionConfig ( ) ;
286+
287+ const { body : link } = await request ( app . server )
288+ . post ( `/p/contributions/actions/${ actionId } /links` )
289+ . set ( serviceHeaders )
290+ . send ( { url : 'https://stackoverflow.com/q/1' , label : 'Question 1' } )
291+ . expect ( 201 ) ;
292+
293+ const { body : bulk } = await request ( app . server )
294+ . post ( `/p/contributions/actions/${ actionId } /links/bulk` )
295+ . set ( serviceHeaders )
296+ . send ( {
297+ links : [
298+ { url : 'https://stackoverflow.com/q/2' } ,
299+ { url : 'https://stackoverflow.com/q/3' , sortOrder : 5 } ,
300+ ] ,
301+ } )
302+ . expect ( 201 ) ;
303+
304+ expect ( bulk . count ) . toBe ( 2 ) ;
305+
306+ await request ( app . server )
307+ . patch ( `/p/contributions/links/${ link . id } ` )
308+ . set ( serviceHeaders )
309+ . send ( { label : 'Updated' , active : false } )
310+ . expect ( 200 ) ;
311+
312+ await request ( app . server )
313+ . delete ( `/p/contributions/links/${ bulk . links [ 0 ] . id } ` )
314+ . set ( serviceAuthHeaders )
315+ . expect ( 200 ) ;
316+
317+ const links = await con
318+ . getRepository ( ContributionActionLink )
319+ . find ( { where : { actionId } , order : { url : 'ASC' } } ) ;
320+
321+ expect ( links ) . toHaveLength ( 2 ) ;
322+ expect ( links ) . toMatchObject ( [
323+ { url : 'https://stackoverflow.com/q/1' , label : 'Updated' , active : false } ,
324+ { url : 'https://stackoverflow.com/q/3' , sortOrder : 5 } ,
325+ ] ) ;
326+ } ) ;
327+
328+ it ( 'returns 404 when updating or deleting a missing link' , async ( ) => {
329+ await request ( app . server )
330+ . patch ( `/p/contributions/links/${ actionId } ` )
331+ . set ( serviceHeaders )
332+ . send ( { label : 'Updated' } )
333+ . expect ( 404 ) ;
334+
335+ await request ( app . server )
336+ . delete ( `/p/contributions/links/${ actionId } ` )
337+ . set ( serviceAuthHeaders )
338+ . expect ( 404 ) ;
339+ } ) ;
340+
283341 it ( 'reviews submissions, fulfills rewards, and blocks users' , async ( ) => {
284342 await seedContributionConfig ( ) ;
285343 await saveFixtures ( con , ContributionPayment , [
0 commit comments