cli-testing-library
Version:
Simple and complete CLI testing utilities that encourage good testing practices.
74 lines (73 loc) • 2.28 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const suggestions = require("./suggestions.cjs");
const waitFor = require("./wait-for.cjs");
const config = require("./config.cjs");
function getInstanceError(message, instance) {
return config.getConfig().getInstanceError(message, instance);
}
function getSuggestionError(suggestion, container) {
return config.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 config.getConfig().getInstanceError(
getMissingError(instance, ...args),
instance
);
}
return el;
};
}
function makeFindQuery(getter) {
return (instance, text, options, waitForOptions) => {
return waitFor.waitFor(
() => {
return getter(instance, text, options);
},
{ instance, ...waitForOptions }
);
};
}
const wrapSingleQueryWithSuggestion = (query, queryByName, variant) => (container, ...args) => {
const instance = query(container, ...args);
const [{ suggest = config.getConfig().throwSuggestions } = {}] = args.slice(
-1
);
if (instance && suggest) {
const suggestion = suggestions.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];
}
exports.buildQueries = buildQueries;
exports.getInstanceError = getInstanceError;
exports.makeFindQuery = makeFindQuery;
exports.wrapSingleQueryWithSuggestion = wrapSingleQueryWithSuggestion;
//# sourceMappingURL=query-helpers.cjs.map