mirror of https://github.com/status-im/consul.git
212 lines
6.8 KiB
JavaScript
212 lines
6.8 KiB
JavaScript
|
/* eslint no-console: "off" */
|
||
|
import yadda from './helpers/yadda';
|
||
|
import { currentURL, click, triggerKeyEvent } from '@ember/test-helpers';
|
||
|
import getDictionary from '@johncowen/ember-cli-api-double/dictionary';
|
||
|
import pages from 'consul-ui/tests/pages';
|
||
|
import api from 'consul-ui/tests/helpers/api';
|
||
|
|
||
|
const create = function(number, name, value) {
|
||
|
// don't return a promise here as
|
||
|
// I don't need it to wait
|
||
|
api.server.createList(name, number, value);
|
||
|
};
|
||
|
var currentPage;
|
||
|
export default function(assert) {
|
||
|
return (
|
||
|
yadda.localisation.English.library(
|
||
|
getDictionary(function(model, cb) {
|
||
|
switch (model) {
|
||
|
case 'datacenter':
|
||
|
case 'datacenters':
|
||
|
case 'dcs':
|
||
|
model = 'dc';
|
||
|
break;
|
||
|
case 'services':
|
||
|
model = 'service';
|
||
|
break;
|
||
|
case 'nodes':
|
||
|
model = 'node';
|
||
|
break;
|
||
|
case 'kvs':
|
||
|
model = 'kv';
|
||
|
break;
|
||
|
case 'acls':
|
||
|
model = 'acl';
|
||
|
break;
|
||
|
}
|
||
|
cb(null, model);
|
||
|
}, yadda)
|
||
|
)
|
||
|
// doubles
|
||
|
.given(['$number $model model', '$number $model models'], function(number, model) {
|
||
|
return create(number, model);
|
||
|
})
|
||
|
.given(['$number $model model with the value "$value"'], function(number, model, value) {
|
||
|
return create(number, model, value);
|
||
|
})
|
||
|
.given(
|
||
|
['$number $model model[s]? from yaml\n$yaml', '$number $model model from json\n$json'],
|
||
|
function(number, model, data) {
|
||
|
return create(number, model, data);
|
||
|
}
|
||
|
)
|
||
|
// interactions
|
||
|
.when('I visit the $name page', function(name) {
|
||
|
currentPage = pages[name];
|
||
|
return currentPage.visit();
|
||
|
})
|
||
|
.when('I visit the $name page for the "$id" $model', function(name, id, model) {
|
||
|
currentPage = pages[name];
|
||
|
return currentPage.visit({
|
||
|
[model]: id,
|
||
|
});
|
||
|
})
|
||
|
.when(
|
||
|
['I visit the $name page for yaml\n$yaml', 'I visit the $name page for json\n$json'],
|
||
|
function(name, data) {
|
||
|
currentPage = pages[name];
|
||
|
return pages[name].visit(data);
|
||
|
}
|
||
|
)
|
||
|
.when('I click "$selector"', function(selector) {
|
||
|
return click(selector);
|
||
|
})
|
||
|
.when('I click $prop on the $component', function(prop, component) {
|
||
|
// Collection
|
||
|
if (typeof currentPage[component].objectAt === 'function') {
|
||
|
return currentPage[component].objectAt(0)[prop]();
|
||
|
} else {
|
||
|
return currentPage[component][prop]();
|
||
|
}
|
||
|
})
|
||
|
.when('I submit', function(selector) {
|
||
|
return currentPage.submit();
|
||
|
})
|
||
|
.then('I fill in "$name" with "$value"', function(name, value) {
|
||
|
return currentPage.fillIn(name, value);
|
||
|
})
|
||
|
.then(['I fill in with yaml\n$yaml', 'I fill in with json\n$json'], function(data) {
|
||
|
return Object.keys(data).reduce(function(prev, item, i, arr) {
|
||
|
return prev.fillIn(item, data[item]);
|
||
|
}, currentPage);
|
||
|
})
|
||
|
.then(['I type with yaml\n$yaml'], function(data) {
|
||
|
const keys = Object.keys(data);
|
||
|
return keys
|
||
|
.reduce(function(prev, item, i, arr) {
|
||
|
return prev.fillIn(item, data[item]);
|
||
|
}, currentPage)
|
||
|
.then(function() {
|
||
|
return Promise.all(
|
||
|
keys.map(function(item) {
|
||
|
return triggerKeyEvent(`[name="${item}"]`, 'keyup', 83);
|
||
|
})
|
||
|
);
|
||
|
});
|
||
|
})
|
||
|
// debugging helpers
|
||
|
.then('print the current url', function(url) {
|
||
|
console.log(currentURL());
|
||
|
return Promise.resolve();
|
||
|
})
|
||
|
.then('log the "$text"', function(text) {
|
||
|
console.log(text);
|
||
|
return Promise.resolve();
|
||
|
})
|
||
|
.then('pause for $milliseconds', function(milliseconds) {
|
||
|
return new Promise(function(resolve) {
|
||
|
setTimeout(resolve, milliseconds);
|
||
|
});
|
||
|
})
|
||
|
// assertions
|
||
|
.then('a $method request is made to "$url" with the body from yaml\n$yaml', function(
|
||
|
method,
|
||
|
url,
|
||
|
data
|
||
|
) {
|
||
|
const request = api.server.history[api.server.history.length - 2];
|
||
|
assert.equal(
|
||
|
request.method,
|
||
|
method,
|
||
|
`Expected the request method to be ${method} but was ${request.method}`
|
||
|
);
|
||
|
assert.equal(
|
||
|
request.url,
|
||
|
url,
|
||
|
`Expected the request url to be ${url} but was ${request.url}`
|
||
|
);
|
||
|
const body = JSON.parse(request.requestBody);
|
||
|
Object.keys(data).forEach(function(key, i, arr) {
|
||
|
assert.equal(
|
||
|
body[key],
|
||
|
data[key],
|
||
|
`Expected the payload to contain ${key} to equal ${body[key]} but ${key} was ${
|
||
|
data[key]
|
||
|
}`
|
||
|
);
|
||
|
});
|
||
|
})
|
||
|
.then('a $method request is made to "$url" with the body "$body"', function(
|
||
|
method,
|
||
|
url,
|
||
|
data
|
||
|
) {
|
||
|
const request = api.server.history[api.server.history.length - 2];
|
||
|
assert.equal(
|
||
|
request.method,
|
||
|
method,
|
||
|
`Expected the request method to be ${method} but was ${request.method}`
|
||
|
);
|
||
|
assert.equal(
|
||
|
request.url,
|
||
|
url,
|
||
|
`Expected the request url to be ${url} but was ${request.url}`
|
||
|
);
|
||
|
const body = request.requestBody;
|
||
|
assert.equal(
|
||
|
body,
|
||
|
data,
|
||
|
`Expected the request body to be ${body} but was ${request.requestBody}`
|
||
|
);
|
||
|
})
|
||
|
.then('the url should be $url', function(url) {
|
||
|
const current = currentURL();
|
||
|
assert.equal(current, url, `Expected the url to be ${url} but was ${current}`);
|
||
|
})
|
||
|
.then(['I see $num $model', 'I see $num $model model', 'I see $num $model models'], function(
|
||
|
num,
|
||
|
model
|
||
|
) {
|
||
|
const len = currentPage[`${model}s`].filter(function(item) {
|
||
|
return item.isVisible;
|
||
|
}).length;
|
||
|
|
||
|
assert.equal(len, num, `Expected ${num} ${model}s but saw ${len}`);
|
||
|
})
|
||
|
.then(['I see $num $model model with the $property "$value"'], function(
|
||
|
num,
|
||
|
model,
|
||
|
property,
|
||
|
value
|
||
|
) {
|
||
|
const len = currentPage[`${model}s`].filter(function(item) {
|
||
|
return item.isVisible && item[property] == value;
|
||
|
}).length;
|
||
|
assert.equal(
|
||
|
len,
|
||
|
num,
|
||
|
`Expected ${num} ${model}s with ${property} set to "${value}" but saw ${len}`
|
||
|
);
|
||
|
})
|
||
|
.then(['I see $property on the $component'], function(property, component) {
|
||
|
assert.ok(currentPage[component][property], `Expected to see ${property} on ${component}`);
|
||
|
})
|
||
|
.then(['I see $property'], function(property, component) {
|
||
|
assert.ok(currentPage[property], `Expected to see ${property}`);
|
||
|
})
|
||
|
.then('ok', function() {
|
||
|
assert.ok(true);
|
||
|
})
|
||
|
);
|
||
|
}
|