consul/ui/packages/consul-ui/tests/steps/assertions/model.js

89 lines
2.6 KiB
JavaScript

export default function (scenario, assert, find, currentPage, pauseUntil, pluralize) {
function getModelItems(model, component) {
let obj;
if (component) {
obj = find(component);
} else {
obj = currentPage();
}
let found = obj[pluralize(model)];
if (typeof found === 'function') {
found = found();
}
return found;
}
scenario
.then('pause until I see $number $model model[s]?', function (num, model) {
return pauseUntil(function (resolve, reject, retry) {
const len = getModelItems(model).filter(function (item) {
return item.isVisible;
}).length;
if (len === num) {
return resolve();
}
return retry();
}, `Expected ${num} ${model}s`);
})
.then(
'pause until I see $number $model model[s]? on the $component component',
function (num, model, component) {
return pauseUntil(function (resolve, reject, retry) {
const len = getModelItems(model, component).filter(function (item) {
return item.isVisible;
}).length;
if (len === num) {
return resolve();
}
return retry();
}, `Expected ${num} ${model}s`);
}
)
.then(['I see $num $model model[s]?'], function (num, model) {
const len = getModelItems(model).filter(function (item) {
return item.isVisible;
}).length;
assert.equal(len, num, `Expected ${num} ${pluralize(model)}, saw ${len}`);
})
.then(
['I see $num $model model[s]? on the $component component'],
function (num, model, component) {
const len = getModelItems(model, component).filter(function (item) {
return item.isVisible;
}).length;
assert.equal(len, num, `Expected ${num} ${pluralize(model)}, saw ${len}`);
}
)
.then(
[`I see $num $model model[s]? with the $property "$value"`],
function (
// negate,
num,
model,
property,
value
) {
const len = getModelItems(model).filter(function (item) {
if (item.isVisible) {
let prop = item[property];
// cope with pageObjects that can have a multiple: true
if (!Array.isArray(prop)) {
prop = [prop];
}
return prop.includes(value);
}
return false;
}).length;
assert.equal(
len,
num,
`Expected ${num} ${pluralize(model)} with ${property} set to "${value}", saw ${len}`
);
}
);
}