mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			144 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import * as request from 'supertest'
 | |
| import { ServerInfo } from './servers'
 | |
| import { waitJobs } from './jobs'
 | |
| import { makePostBodyRequest } from '../requests/requests'
 | |
| import { ActivityPubActorType, FollowState } from '@shared/models'
 | |
| import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
 | |
| 
 | |
| function getFollowersListPaginationAndSort (options: {
 | |
|   url: string
 | |
|   start: number
 | |
|   count: number
 | |
|   sort: string
 | |
|   search?: string
 | |
|   actorType?: ActivityPubActorType
 | |
|   state?: FollowState
 | |
| }) {
 | |
|   const { url, start, count, sort, search, state, actorType } = options
 | |
|   const path = '/api/v1/server/followers'
 | |
| 
 | |
|   const query = {
 | |
|     start,
 | |
|     count,
 | |
|     sort,
 | |
|     search,
 | |
|     state,
 | |
|     actorType
 | |
|   }
 | |
| 
 | |
|   return request(url)
 | |
|     .get(path)
 | |
|     .query(query)
 | |
|     .set('Accept', 'application/json')
 | |
|     .expect(HttpStatusCode.OK_200)
 | |
|     .expect('Content-Type', /json/)
 | |
| }
 | |
| 
 | |
| function acceptFollower (url: string, token: string, follower: string, statusCodeExpected = HttpStatusCode.NO_CONTENT_204) {
 | |
|   const path = '/api/v1/server/followers/' + follower + '/accept'
 | |
| 
 | |
|   return makePostBodyRequest({
 | |
|     url,
 | |
|     token,
 | |
|     path,
 | |
|     statusCodeExpected
 | |
|   })
 | |
| }
 | |
| 
 | |
| function rejectFollower (url: string, token: string, follower: string, statusCodeExpected = HttpStatusCode.NO_CONTENT_204) {
 | |
|   const path = '/api/v1/server/followers/' + follower + '/reject'
 | |
| 
 | |
|   return makePostBodyRequest({
 | |
|     url,
 | |
|     token,
 | |
|     path,
 | |
|     statusCodeExpected
 | |
|   })
 | |
| }
 | |
| 
 | |
| function getFollowingListPaginationAndSort (options: {
 | |
|   url: string
 | |
|   start: number
 | |
|   count: number
 | |
|   sort: string
 | |
|   search?: string
 | |
|   actorType?: ActivityPubActorType
 | |
|   state?: FollowState
 | |
| }) {
 | |
|   const { url, start, count, sort, search, state, actorType } = options
 | |
|   const path = '/api/v1/server/following'
 | |
| 
 | |
|   const query = {
 | |
|     start,
 | |
|     count,
 | |
|     sort,
 | |
|     search,
 | |
|     state,
 | |
|     actorType
 | |
|   }
 | |
| 
 | |
|   return request(url)
 | |
|     .get(path)
 | |
|     .query(query)
 | |
|     .set('Accept', 'application/json')
 | |
|     .expect(HttpStatusCode.OK_200)
 | |
|     .expect('Content-Type', /json/)
 | |
| }
 | |
| 
 | |
| function follow (follower: string, following: string[], accessToken: string, expectedStatus = HttpStatusCode.NO_CONTENT_204) {
 | |
|   const path = '/api/v1/server/following'
 | |
| 
 | |
|   const followingHosts = following.map(f => f.replace(/^http:\/\//, ''))
 | |
|   return request(follower)
 | |
|     .post(path)
 | |
|     .set('Accept', 'application/json')
 | |
|     .set('Authorization', 'Bearer ' + accessToken)
 | |
|     .send({ hosts: followingHosts })
 | |
|     .expect(expectedStatus)
 | |
| }
 | |
| 
 | |
| async function unfollow (url: string, accessToken: string, target: ServerInfo, expectedStatus = HttpStatusCode.NO_CONTENT_204) {
 | |
|   const path = '/api/v1/server/following/' + target.host
 | |
| 
 | |
|   return request(url)
 | |
|     .delete(path)
 | |
|     .set('Accept', 'application/json')
 | |
|     .set('Authorization', 'Bearer ' + accessToken)
 | |
|     .expect(expectedStatus)
 | |
| }
 | |
| 
 | |
| function removeFollower (url: string, accessToken: string, follower: ServerInfo, expectedStatus = HttpStatusCode.NO_CONTENT_204) {
 | |
|   const path = '/api/v1/server/followers/peertube@' + follower.host
 | |
| 
 | |
|   return request(url)
 | |
|     .delete(path)
 | |
|     .set('Accept', 'application/json')
 | |
|     .set('Authorization', 'Bearer ' + accessToken)
 | |
|     .expect(expectedStatus)
 | |
| }
 | |
| 
 | |
| async function doubleFollow (server1: ServerInfo, server2: ServerInfo) {
 | |
|   await Promise.all([
 | |
|     follow(server1.url, [ server2.url ], server1.accessToken),
 | |
|     follow(server2.url, [ server1.url ], server2.accessToken)
 | |
|   ])
 | |
| 
 | |
|   // Wait request propagation
 | |
|   await waitJobs([ server1, server2 ])
 | |
| 
 | |
|   return true
 | |
| }
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| export {
 | |
|   getFollowersListPaginationAndSort,
 | |
|   getFollowingListPaginationAndSort,
 | |
|   unfollow,
 | |
|   removeFollower,
 | |
|   follow,
 | |
|   doubleFollow,
 | |
|   acceptFollower,
 | |
|   rejectFollower
 | |
| }
 |