2023-03-14 13:18:55 +00:00
|
|
|
/**
|
|
|
|
* Copyright (c) HashiCorp, Inc.
|
2023-08-11 13:12:13 +00:00
|
|
|
* SPDX-License-Identifier: BUSL-1.1
|
2023-03-14 13:18:55 +00:00
|
|
|
*/
|
|
|
|
|
2022-09-15 08:43:17 +00:00
|
|
|
export default function (scenario, assert, find, currentPage, pauseUntil, pluralize) {
|
2022-10-14 00:45:15 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2019-02-21 13:05:05 +00:00
|
|
|
scenario
|
2022-09-15 08:43:17 +00:00
|
|
|
.then('pause until I see $number $model model[s]?', function (num, model) {
|
|
|
|
return pauseUntil(function (resolve, reject, retry) {
|
2022-10-14 00:45:15 +00:00
|
|
|
const len = getModelItems(model).filter(function (item) {
|
2019-03-22 17:24:40 +00:00
|
|
|
return item.isVisible;
|
|
|
|
}).length;
|
|
|
|
if (len === num) {
|
2020-03-19 10:28:21 +00:00
|
|
|
return resolve();
|
2019-03-22 17:24:40 +00:00
|
|
|
}
|
2020-03-19 10:28:21 +00:00
|
|
|
return retry();
|
|
|
|
}, `Expected ${num} ${model}s`);
|
2019-02-21 13:05:05 +00:00
|
|
|
})
|
2022-09-15 08:43:17 +00:00
|
|
|
.then(
|
|
|
|
'pause until I see $number $model model[s]? on the $component component',
|
|
|
|
function (num, model, component) {
|
|
|
|
return pauseUntil(function (resolve, reject, retry) {
|
2022-10-14 00:45:15 +00:00
|
|
|
const len = getModelItems(model, component).filter(function (item) {
|
2022-09-15 08:43:17 +00:00
|
|
|
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) {
|
2022-10-14 00:45:15 +00:00
|
|
|
const len = getModelItems(model).filter(function (item) {
|
2019-02-21 13:05:05 +00:00
|
|
|
return item.isVisible;
|
|
|
|
}).length;
|
|
|
|
assert.equal(len, num, `Expected ${num} ${pluralize(model)}, saw ${len}`);
|
|
|
|
})
|
2022-09-15 08:43:17 +00:00
|
|
|
.then(
|
|
|
|
['I see $num $model model[s]? on the $component component'],
|
|
|
|
function (num, model, component) {
|
2022-10-14 00:45:15 +00:00
|
|
|
const len = getModelItems(model, component).filter(function (item) {
|
2022-09-15 08:43:17 +00:00
|
|
|
return item.isVisible;
|
|
|
|
}).length;
|
2019-05-01 18:09:29 +00:00
|
|
|
|
2022-09-15 08:43:17 +00:00
|
|
|
assert.equal(len, num, `Expected ${num} ${pluralize(model)}, saw ${len}`);
|
|
|
|
}
|
|
|
|
)
|
|
|
|
.then(
|
|
|
|
[`I see $num $model model[s]? with the $property "$value"`],
|
|
|
|
function (
|
|
|
|
// negate,
|
2019-02-21 13:05:05 +00:00
|
|
|
num,
|
2022-09-15 08:43:17 +00:00
|
|
|
model,
|
|
|
|
property,
|
|
|
|
value
|
|
|
|
) {
|
2022-10-14 00:45:15 +00:00
|
|
|
const len = getModelItems(model).filter(function (item) {
|
2022-09-15 08:43:17 +00:00
|
|
|
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}`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
2019-02-21 13:05:05 +00:00
|
|
|
}
|