1import axios from 'axios'; 2import { Task, TaskRunner } from './task'; 3 4interface SearchTestDataSetupOptions { 5 count: number; 6} 7 8const client = axios.create({ 9 baseURL: 'http://localhost:3000/api', 10 auth: { 11 username: 'admin', 12 password: 'admin2', 13 }, 14}); 15 16export async function getUser(user: any): Promise<any> { 17 console.log('Creating user ' + user.name); 18 const search = await client.get('/users/search', { 19 params: { query: user.login }, 20 }); 21 22 if (search.data.totalCount === 1) { 23 user.id = search.data.users[0].id; 24 return user; 25 } 26 27 const rsp = await client.post('/admin/users', user); 28 user.id = rsp.data.id; 29 return user; 30} 31 32export async function getTeam(team: any): Promise<any> { 33 // delete if exists 34 const teams = await client.get('/teams/search'); 35 for (const existing of teams.data.teams) { 36 if (existing.name === team.name) { 37 console.log('Team exists, deleting'); 38 await client.delete('/teams/' + existing.id); 39 } 40 } 41 42 console.log('Creating team ' + team.name); 43 const teamRsp = await client.post(`/teams`, team); 44 team.id = teamRsp.data.teamId; 45 return team; 46} 47 48export async function addToTeam(team: any, user: any): Promise<any> { 49 console.log(`Adding user ${user.name} to team ${team.name}`); 50 await client.post(`/teams/${team.id}/members`, { userId: user.id }); 51} 52 53export async function setDashboardAcl(dashboardId: any, aclList: any) { 54 console.log('Setting Dashboard ACL ' + dashboardId); 55 await client.post(`/dashboards/id/${dashboardId}/permissions`, { items: aclList }); 56} 57 58const searchTestDataSetupRunner: TaskRunner<SearchTestDataSetupOptions> = async ({ count }) => { 59 const user1 = await getUser({ 60 name: 'searchTestUser1', 61 email: 'searchTestUser@team.com', 62 login: 'searchTestUser1', 63 password: '12345', 64 }); 65 66 const team1 = await getTeam({ name: 'searchTestTeam1', email: 'searchtestdata@team.com' }); 67 addToTeam(team1, user1); 68 69 // create or update folder 70 const folder: any = { 71 uid: 'search-test-data', 72 title: 'Search test data folder', 73 version: 1, 74 }; 75 76 try { 77 await client.delete(`/folders/${folder.uid}`); 78 } catch (err) {} 79 80 console.log('Creating folder'); 81 82 const rsp = await client.post(`/folders`, folder); 83 folder.id = rsp.data.id; 84 folder.url = rsp.data.url; 85 86 await setDashboardAcl(folder.id, []); 87 88 console.log('Creating dashboards'); 89 90 const dashboards: any = []; 91 92 for (let i = 0; i < count; i++) { 93 const dashboard: any = { 94 uid: 'search-test-dash-' + i.toString().padStart(5, '0'), 95 title: 'Search test dash ' + i.toString().padStart(5, '0'), 96 }; 97 98 const rsp = await client.post(`/dashboards/db`, { 99 dashboard: dashboard, 100 folderId: folder.id, 101 overwrite: true, 102 }); 103 104 dashboard.id = rsp.data.id; 105 dashboard.url = rsp.data.url; 106 107 console.log('Created dashboard ' + dashboard.title); 108 dashboards.push(dashboard); 109 await setDashboardAcl(dashboard.id, [{ userId: 0, teamId: team1.id, permission: 4 }]); 110 } 111}; 112 113export const searchTestDataSetupTask = new Task<SearchTestDataSetupOptions>( 114 'Search test data setup', 115 searchTestDataSetupRunner 116); 117