import * as rest from './firebase-rest';
export declare type SuiteFunction = (fn: TestFunction) => void;
export interface TestFunction {
    (name: string, fnTest: (rules: RulesTest) => void): void;
    rules: (path: string) => void;
    database: (appName: string, secret: string) => void;
    uid: (username: string) => string;
    TIMESTAMP: Object;
}
export declare function rulesSuite(suiteName: string, fnSuite: SuiteFunction): void;
export declare class RulesSuite {
    suiteName: string;
    private fnSuite;
    debug: boolean;
    private users;
    private tests;
    private rulesPath;
    private rulesPathResolve;
    private databaseReady;
    private ready;
    private adminClient;
    private appName;
    private appSecret;
    constructor(suiteName: string, fnSuite: SuiteFunction);
    setDebug(debug?: boolean): this;
    run(): void;
    getInterface(): any;
    onRulesReady(prereq: [Object, any]): Promise<string>;
    runTests(): Promise<{}>;
    test(testName: string, fnTest: (rules: RulesTest) => void): void;
    rules(rulesPath: string): void;
    database(appName: string, appSecret: string): void;
    uid(username: string): string | undefined;
    ensureUser(username: string): rest.Client;
}
export declare class RulesTest {
    private testName;
    private suite;
    private fnTest;
    private lastError;
    private steps;
    private failed;
    private path;
    private client;
    private status;
    constructor(testName: string, suite: RulesSuite, fnTest: (rules: RulesTest) => void);
    run(): Promise<never>;
    queue(op: string, args: ArrayLike<any>, fn: () => Promise<any>): void;
    executeQueue(): Promise<boolean>;
    debug(debug?: boolean): RulesTest;
    as(username: string): RulesTest;
    at(opPath: string | undefined): RulesTest;
    write(obj: any): RulesTest;
    push(obj: any): RulesTest;
    read(): RulesTest;
    succeeds(message: string): RulesTest;
    fails(message: string): RulesTest;
    private good;
    private log;
    messageFormat(message: string): string;
}
