import axios from 'axios'; import _ from 'lodash'; import { Task, TaskRunner } from './task'; interface SearchTestDataSetupOptions { count: number; } const client = axios.create({ baseURL: 'http://localhost:3000/api', auth: { username: 'admin', password: 'admin2', }, }); export async function getUser(user): Promise { console.log('Creating user ' + user.name); const search = await client.get('/users/search', { params: { query: user.login }, }); if (search.data.totalCount === 1) { user.id = search.data.users[0].id; return user; } const rsp = await client.post('/admin/users', user); user.id = rsp.data.id; return user; } export async function getTeam(team: any): Promise { // delete if exists const teams = await client.get('/teams/search'); for (const existing of teams.data.teams) { if (existing.name === team.name) { console.log('Team exists, deleting'); await client.delete('/teams/' + existing.id); } } console.log('Creating team ' + team.name); const teamRsp = await client.post(`/teams`, team); team.id = teamRsp.data.teamId; return team; } export async function addToTeam(team: any, user: any): Promise { const members = await client.get(`/teams/${team.id}/members`); console.log(`Adding user ${user.name} to team ${team.name}`); await client.post(`/teams/${team.id}/members`, { userId: user.id }); } export async function setDashboardAcl(dashboardId: any, aclList: any) { console.log('Setting Dashboard ACL ' + dashboardId); await client.post(`/dashboards/id/${dashboardId}/permissions`, { items: aclList }); } const searchTestDataSetupRunnner: TaskRunner = async ({ count }) => { const user1 = await getUser({ name: 'searchTestUser1', email: 'searchTestUser@team.com', login: 'searchTestUser1', password: '12345', }); const team1 = await getTeam({ name: 'searchTestTeam1', email: 'searchtestdata@team.com' }); addToTeam(team1, user1); // create or update folder const folder: any = { uid: 'search-test-data', title: 'Search test data folder', version: 1, }; try { await client.delete(`/folders/${folder.uid}`); } catch (err) {} console.log('Creating folder'); const rsp = await client.post(`/folders`, folder); folder.id = rsp.data.id; folder.url = rsp.data.url; await setDashboardAcl(folder.id, []); console.log('Creating dashboards'); const dashboards: any = []; for (let i = 0; i < count; i++) { const dashboard: any = { uid: 'search-test-dash-' + i.toString().padStart(5, '0'), title: 'Search test dash ' + i.toString().padStart(5, '0'), }; const rsp = await client.post(`/dashboards/db`, { dashboard: dashboard, folderId: folder.id, overwrite: true, }); dashboard.id = rsp.data.id; dashboard.url = rsp.data.url; console.log('Created dashboard ' + dashboard.title); dashboards.push(dashboard); await setDashboardAcl(dashboard.id, [{ userId: 0, teamId: team1.id, permission: 4 }]); } }; export const searchTestDataSetupTask = new Task(); searchTestDataSetupTask.setName('Search test data setup'); searchTestDataSetupTask.setRunner(searchTestDataSetupRunnner);