cli-testing-library
Version:
Simple and complete CLI testing utilities that encourage good testing practices.
74 lines (73 loc) • 2.08 kB
JavaScript
import { getSuggestedQuery } from "./suggestions.js";
import { waitFor as waitForWrapper } from "./wait-for.js";
import { getConfig } from "./config.js";
function getInstanceError(message, instance) {
return getConfig().getInstanceError(message, instance);
}
function getSuggestionError(suggestion, container) {
return getConfig().getInstanceError(
`A better query is available, try this:
${suggestion.toString()}
`,
container
);
}
function makeGetQuery(queryBy, getMissingError) {
return (instance, ...args) => {
const el = queryBy(instance, ...args);
if (!el) {
throw getConfig().getInstanceError(
getMissingError(instance, ...args),
instance
);
}
return el;
};
}
function makeFindQuery(getter) {
return (instance, text, options, waitForOptions) => {
return waitForWrapper(
() => {
return getter(instance, text, options);
},
{ instance, ...waitForOptions }
);
};
}
const wrapSingleQueryWithSuggestion = (query, queryByName, variant) => (container, ...args) => {
const instance = query(container, ...args);
const [{ suggest = getConfig().throwSuggestions } = {}] = args.slice(
-1
);
if (instance && suggest) {
const suggestion = getSuggestedQuery(instance, variant);
if (suggestion && !queryByName.endsWith(suggestion.queryName)) {
throw getSuggestionError(suggestion.toString(), container);
}
}
return instance;
};
function buildQueries(queryBy, getMissingError) {
const getBy = makeGetQuery(queryBy, getMissingError);
const queryByWithSuggestions = wrapSingleQueryWithSuggestion(
queryBy,
queryBy.name,
"get"
);
const getByWithSuggestions = wrapSingleQueryWithSuggestion(
getBy,
queryBy.name,
"get"
);
const findBy = makeFindQuery(
wrapSingleQueryWithSuggestion(getBy, queryBy.name, "find")
);
return [queryByWithSuggestions, getByWithSuggestions, findBy];
}
export {
buildQueries,
getInstanceError,
makeFindQuery,
wrapSingleQueryWithSuggestion
};
//# sourceMappingURL=query-helpers.js.map