/**
 * TestIt API
 */
import { CaseInfo, IBuild, IGetSuggestTestCasesResponseDTO, IProject, IProjectInfo, IProjectKeyword, ISectionInfo, ISuite, ITestCase, ITestExecution, ITestPlan, IVersion } from "./dto";
import { IGlobalData } from "./dto";
import { Scope } from "./constants";
import { SearchOptions } from "./dto";
export default class TestItSDK {
    private endpoint;
    private userName;
    private accessToken;
    private cache;
    private httpClient;
    constructor(endpoint: string);
    /**
     * Return true if client is authorized.
     */
    getAutorized(): boolean;
    /**
     * Login to TestIt. Save cookies if login successfully.
     * @param username
     * @param password
     */
    login(username: string | undefined, password: string | undefined): Promise<void>;
    /**
     * Logout Testit, delete cookies.
     */
    logout(): void;
    /**
     * Initialize sdk,fetch global data.
     * @return {Promise<void>}
     */
    init(): Promise<void>;
    /**
     * Fetch fields information by project id for further using.
     * @param projectId
     */
    fetchFieldsInfoById(projectId: number): Promise<any>;
    /**
     * Get search elements map from fields by name.
     * @param response
     * @param name (like Keywords Subtype...)
     */
    private getFieldsInfoMapByName;
    /**
     * Get field's response values map (name -> index).
     * @param response
     */
    private getFieldsIndexMap;
    /**
     * Get field's response values map (name -> id).
     * @param response
     */
    private getFieldsIdMap;
    /**
     * Get projects.
     * @return {Promise<IProject[]>}
     */
    getProjects(): Promise<IProject[]>;
    /**
     * Generate prefix project map.
     */
    private genPrefixProjectMap;
    /**
     * Get project by name.
     * @param projectName
     */
    getProjectByName(projectName: string): Promise<IProject | undefined>;
    /**
     * Get project id by name.
     * @param projectName
     */
    private getProjectIdByName;
    /**
     * Get project by project id.
     * @param projectId
     */
    getProjectById(projectId: number): Promise<IProjectInfo>;
    /**
     * Get keywords by project id.
     * 【Error】Project doesn't include keywords!Not really go.
     * @param projectId
     */
    getKeywordsByProjectId(projectId: number): Promise<IProjectKeyword[]>;
    /**
     * Get project tree by project id.
     * @param projectId
     */
    getProjectTreeById(projectId: number): Promise<ISuite[]>;
    /**
     * Get section by section id.
     * @param sectionId
     */
    getSectionById(sectionId: number): Promise<ISectionInfo>;
    /**
     * Get test case by test case id. - 17
     * @param testCaseId
     */
    getTestCaseById(testCaseId: number): Promise<ITestCase>;
    /**
     * Get many test cases by test case ids.
     * @param testCaseIds
     */
    getTestCasesByIds(testCaseIds: number[]): Promise<ITestCase[]>;
    /**
     * Get test plans from test case by test case id.
     * @param testCaseId
     */
    getTestPlansByTestCaseId(testCaseId: number): Promise<ITestPlan[]>;
    /**
     * Get test plans by project ids.
     * @param projectIds
     */
    getTestPlansByProjectIds(projectIds: number[]): Promise<ITestPlan[]>;
    /**
     * Get execution-history by test case id.
     * @param testCaseId
     */
    getExecutionHistoryByTestCaseId(testCaseId: number): Promise<ITestExecution>;
    /**
     * Get test case version by version id.
     * @param versionId
     */
    getCaseVersionByVersionId(versionId: number): Promise<IVersion>;
    /**
     * Get test case by key.
     * 【Example】key = JPT-3166
     * @param key
     */
    getTestCaseByKey(key: string): Promise<ITestCase>;
    /**
     * Get builds by test plan id.
     * @param testPlanId
     */
    getBuildsByTestPlanId(testPlanId: number): Promise<IBuild[]>;
    /**
     * Get test plan by test plan id.
     * @param testPlanId
     */
    getTestPlanById(testPlanId: number): Promise<ITestPlan>;
    /**
     * Get tree by test plan id.
     * @param testPlanId
     */
    getTreeByTestPlanId(testPlanId: number): Promise<ITestPlan>;
    /**
     * Get execution progress by test plan id.
     * @param testPlanId
     */
    getExecutionProgressByTestPlanId(testPlanId: number): Promise<ITestExecution>;
    /**
     * Get build by build id.
     * @param buildId
     */
    getBuildById(buildId: number): Promise<IBuild>;
    /**
     * Get suite by suite id.
     * @param suiteId
     */
    getSuiteById(suiteId: number): Promise<ISuite>;
    /**
     * Get suite tree by suite id.
     * @param suiteId
     */
    getSuiteTreeById(suiteId: number): Promise<ISuite[]>;
    /**
     * Search test cases by json query.
     * @param query
     * @param scope
     */
    private searchTestCasesByJsonQuery;
    /**
     * Flatten response data.
     * @param root
     */
    private flat;
    /**
     * Search and generate template info by search Option.
     * @param searchOption
     */
    generateTemplateInfoByOptions(searchOption: SearchOptions): Promise<any>;
    /**
     * Store template file by search options.
     * @param searchOption
     * @param path
     */
    storeTemplateFileByOptions(searchOption: SearchOptions, path: string): Promise<any>;
    /**
     * Store files in tree by search options.
     * [Abandon]Please replace with the API of [storeFilesBySearchOptions]
     * @param searchOption
     * @param path
     */
    private storeFilesInTreeByOptions;
    /**
     * Store files by search option(use template render engine)
     * @param searchOption
     * @param path
     * @param templatePath
     */
    storeFilesBySearchOptions(searchOption: SearchOptions, path: string, templatePath?: string): Promise<any>;
    /**
     * Handle search response to generate case info map
     * @param response
     */
    handleResponse(response: any): Promise<CaseInfo[]>;
    /**
     * Fill case info map
     * @param tempKey
     * @param caseResponse
     */
    private fillCaseInfoMap;
    /**
     * Search test cases by query.
     * 【Query Example】const query = `version eq "active" and project_id in "[1311]" and field.5371560 in "[6234174]" and field.224 in "[11949947]"`;
     * @param query
     * @param scope
     * @param suiteName use suite name to filter
     */
    searchTestCasesByQuery(query: string, scope?: Scope, suiteName?: string): Promise<any>;
    /**
     * Search suite by suite name in response
     * @param response
     * @param suiteName
     */
    private SearchSuiteBlkInResponse;
    /**
     * Convert search query to json.
     * @param query
     */
    private generateSearchJson;
    /**
     * Search testCases by search options(projectName,keywords,subtype).
     * @param projectName
     * @param keywords
     * @param subtype
     */
    searchCasesBySearchOptions(searchOption: SearchOptions): Promise<any>;
    /**
     * Print search result info
     * @param flatResponse
     */
    private printSearchInfo;
    /**
     * Get suite id by name.
     * @param suiteName
     * @param projectId
     */
    private getSuiteIdByName;
    /**
     * Search cases by suite name.
     * [Abandon]
     * @param suiteName
     * @param projectName
     */
    private searchCasesBySuiteName;
    /**
     * Store cases by suite name.
     * [Abandon]
     * @param suiteName
     * @param projectName
     * @param path
     */
    private storeCasesBySuiteName;
    /**
     * Generate search query by project name、keywords and suite.
     * @param projectName
     * @param keywords
     * @param subtype
     */
    generateQuery(searchOption: SearchOptions): Promise<string>;
    /**
     * Get sync projects.
     */
    getSyncProjects(): Promise<any>;
    /**
     * Get sync cases.
     */
    getSyncCases(): Promise<any>;
    /**
     * Get store project by project id.
     * @param projectId
     */
    getStoreProjectById(projectId: number): Promise<any>;
    /**
     * Get global data.
     * @return {Promise<IGlobalData>}
     */
    getGlobalData(): Promise<IGlobalData>;
    /**
     * Search for suggest cases by query.
     * @param pattern
     * @param limit
     */
    getSuggestTestCases(pattern: string, limit?: number): Promise<IGetSuggestTestCasesResponseDTO>;
    generateInfosByKey(key: string): Promise<any>;
    /**
     * Generate template info by key according to giving template
     * @param key
     * @param templatePath
     */
    generateInfoByKeyInTemplate(key: string, templatePath: string): Promise<string>;
    getTestStepsInfo(): Promise<void>;
    /**
     * Fetch template field information by field name
     * To fill template
     * @param responseData
     * @param field
     */
    fetchTemplateFieldInfo(responseData: any, field: string): Promise<any>;
    /**
     * Convert original array to string
     * @param original
     */
    private convertoString;
    /**
     * Generate template information by key.
     * @param key Case key
     */
    generateTemplatesInfoByKey(key: string): Promise<string>;
    /**
     * Write info to ouputstream and storage to file path.
     * @param info
     * @param filePath
     */
    writeTemplateInfo(info: string, filePath: string): Promise<any>;
    /**
     * Store a template file to file path by case key.
     * @param key
     * @param filePath
     */
    storeTemplateInfoByCaseKey(key: string, filePath: string): Promise<void>;
    /**
     * Store template info for file tree by case key.
     * @param key
     * @param filePath
     */
    private storeFileInTreeByCaseKey;
    /**
     * Store file by case key
     * @param key
     * @param filePath
     * @param templatePath
     */
    storeFileByCaseKey(key: string, filePath: string, templatePath?: string): Promise<void>;
    /**
     * Store and fill templateInfo
     * @param caseInfo
     * @param filePath
     * @param templateInfo
     */
    storeFileInTree(caseInfo: CaseInfo, filePath: string, templateInfo: string): Promise<any>;
    /**
     * Write info by create dir.
     * @param info
     * @param filePath
     */
    private writeInfoByCreateDir;
    private writeInfo;
    /**
     * Make directory.
     * @param dir
     */
    private mkdir;
    /**
     * Filter string with special character.
     * @param str
     */
    private stringFilter;
    private htmlDecodeByRegExp;
}
