webpack/JobWizard/__tests__/fixtures.js
/* eslint-disable max-lines */
import configureMockStore from 'redux-mock-store';
import hostsQuery from '../steps/HostsAndInputs/hosts.gql';
import hostgroupsQuery from '../steps/HostsAndInputs/hostgroups.gql';
export const jobTemplate = {
id: 178,
name: 'template1',
template:
"---\n- hosts: all\n tasks:\n - shell:\n cmd: |\n<%= indent(10) { input('command') } %>\n register: out\n - debug: var=out",
snippet: false,
default: true,
job_category: 'Ansible Commands',
provider_type: 'Ansible',
execution_timeout_interval: 2,
description: null,
};
export const pupptetJobTemplate = {
id: 163,
name: 'Puppet Agent Disable - Script Default',
template:
'<% if @host.operatingsystem.family == \'Debian\' -%>\nexport PATH=/opt/puppetlabs/bin:$PATH\n<% end -%>\npuppet agent --disable "<%= input("comment").present? ? input("comment") : "Disabled using Foreman Remote Execution" %> - <%= current_user %> - $(date "+%d/%m/%Y %H:%M")"',
snippet: false,
default: true,
job_category: 'Puppet',
provider_type: 'script',
execution_timeout_interval: 2,
description: null,
};
export const jobTemplates = [jobTemplate];
export const jobTemplateResponse = {
job_template: jobTemplate,
effective_user: {
id: null,
job_template_id: 178,
value: 'default effective user',
overridable: true,
current_user: false,
},
advanced_template_inputs: [
{
name: 'adv plain hidden',
required: true,
input_type: 'user',
description: 'some Description',
advanced: true,
value_type: 'plain',
resource_type: 'ansible_roles',
default: 'Default val',
hidden_value: true,
},
{
name: 'adv plain select',
required: false,
input_type: 'user',
options: 'option 1\r\noption 2\r\noption 3\r\noption 4',
advanced: true,
value_type: 'plain',
resource_type: 'ansible_roles',
default: '',
hidden_value: false,
},
{
name: 'adv resource select',
required: false,
input_type: 'user',
value_type: 'resource',
advanced: true,
resource_type: 'ForemanTasks::Task',
default: '',
hidden_value: false,
},
{
name: 'adv search',
required: false,
options: '',
advanced: true,
value_type: 'search',
resource_type: 'foreman_tasks/tasks',
default: '',
hidden_value: false,
url: 'foreman_tasks/tasks',
resource_type_tableize: 'hosts',
},
{
name: 'adv date',
required: false,
options: '',
advanced: true,
value_type: 'date',
resource_type: 'ansible_roles',
default: '',
hidden_value: false,
},
],
template_inputs: [
{
name: 'plain hidden',
required: true,
input_type: 'user',
description: 'some Description',
advanced: false,
value_type: 'plain',
resource_type: 'ansible_roles',
default: 'Default val',
hidden_value: true,
},
],
};
export const jobCategories = ['Services', 'Ansible Commands', 'Puppet'];
export const testSetup = (selectors, api) => {
jest.spyOn(api, 'get');
jest.spyOn(selectors, 'selectRerunJobInvocationResponse');
jest.spyOn(selectors, 'selectRerunJobInvocationStatus');
jest.spyOn(selectors, 'selectJobTemplate');
jest.spyOn(selectors, 'selectJobTemplates');
jest.spyOn(selectors, 'selectJobCategories');
jest.spyOn(selectors, 'selectJobCategoriesStatus');
jest.spyOn(selectors, 'selectWithKatello');
jest.spyOn(selectors, 'selectEffectiveUser');
jest.spyOn(selectors, 'selectTemplateInputs');
jest.spyOn(selectors, 'selectAdvancedTemplateInputs');
selectors.selectRerunJobInvocationResponse.mockImplementation(
() => jobInvocation
);
selectors.selectRerunJobInvocationStatus.mockImplementation(() => 'RESOLVED');
selectors.selectWithKatello.mockImplementation(() => true);
selectors.selectTemplateInputs.mockImplementation(
() => jobTemplateResponse.template_inputs
);
selectors.selectAdvancedTemplateInputs.mockImplementation(
() => jobTemplateResponse.advanced_template_inputs
);
selectors.selectJobCategories.mockImplementation(() => jobCategories);
selectors.selectJobTemplates.mockImplementation(() => [
jobTemplate,
pupptetJobTemplate,
{ ...jobTemplate, id: 2, name: 'template2' },
]);
selectors.selectJobTemplate.mockImplementation(() => jobTemplateResponse);
selectors.selectEffectiveUser.mockImplementation(
() => jobTemplateResponse.effective_user
);
const mockStore = configureMockStore([]);
const store = mockStore({
ForemanTasksTask: {
response: {
subtotal: 10,
results: [
{ id: '1', name: 'resource1' },
{ id: '2', name: 'resource2' },
],
},
},
HOST_COLLECTIONS: {
response: {
subtotal: 3,
results: [
{ id: '74', name: 'host_collection1' },
{ id: '43', name: 'host_collection2' },
],
},
},
HOSTS_API: {
response: {
subtotal: 3,
},
},
});
return store;
};
export const mockApi = api => {
api.get.mockImplementation(({ handleSuccess, ...action }) => {
if (action.key === 'JOB_CATEGORIES') {
handleSuccess &&
handleSuccess({
data: {
job_categories: jobCategories,
default_category: 'Ansible Commands',
},
});
} else if (action.key === 'JOB_TEMPLATE') {
handleSuccess &&
handleSuccess({
data:
action.url === '/ui_job_wizard/template/163'
? { ...jobTemplateResponse, job_template: pupptetJobTemplate }
: jobTemplateResponse,
});
} else if (action.key === 'JOB_TEMPLATES') {
handleSuccess &&
handleSuccess({
data: {
results:
action.url.search() ===
'?search=job_category%3D%22Puppet%22&per_page=all'
? [pupptetJobTemplate]
: [jobTemplate],
},
});
} else if (action.key === 'HOST_IDS') {
handleSuccess &&
handleSuccess({
data: { results: [{ name: 'host1' }, { name: 'host3' }] },
});
} else if (action.key === 'REX_FEATURE') {
handleSuccess &&
handleSuccess({
data: { job_template_id: 178 },
});
}
return { type: 'get', ...action };
});
};
export const gqlMock = [
{
request: {
query: hostsQuery,
variables: {
search: 'name~"" and organization_id=1 and location_id=2',
},
},
result: {
data: {
hosts: {
totalCount: 3,
nodes: [
{ id: 'MDE6SG9zdC0x', name: 'host1', displayName: 'host1' },
{ id: 'MDE6SG9zdC0y', name: 'host2', displayName: 'host2' },
{ id: 'MDE6SG9zdC0z', name: 'host3', displayName: 'host3' },
],
},
},
},
},
{
request: {
query: hostgroupsQuery,
variables: {
search: 'name~"" and organization_id=1 and location_id=2',
},
},
result: {
data: {
hostgroups: {
totalCount: 3,
nodes: [
{ id: 'MDE6SG9zdGdyb3VwLTE=', name: 'host_group1' },
{ id: 'MDE6SG9zdGdyb3VwLTI=', name: 'host_group2' },
{ id: 'MDE6SG9zdGdyb3VwLTM=', name: 'host_group3' },
],
},
},
},
},
];
export const jobInvocation = {
job: {
job_category: 'Ansible Commands',
targeting: {
user_id: 4,
search_query: 'name ~ *',
bookmark_id: null,
targeting_type: 'static_query',
randomized_ordering: true,
},
triggering: {
mode: 'immediate',
start_at: null,
start_before: null,
},
ssh_user: 'ssh user',
description_format: null,
concurrency_control: {
level: 6,
},
execution_timeout_interval: 1,
time_to_pickup: 25,
remote_execution_feature_id: null,
template_invocations: [
{
template_id: 263,
effective_user: 'Effective user',
input_values: [
{
template_input_id: 162,
value: 'test command',
},
],
},
],
reruns: 57,
},
job_organization: {
id: 5,
name: 'ana-praley',
created_at: '2021-08-26T13:47:35.655+02:00',
updated_at: '2021-08-26T13:48:21.435+02:00',
ignore_types: [],
description: null,
label: 'ana-praley',
ancestry: null,
title: 'ana-praley',
manifest_refreshed_at: null,
created_in_katello: true,
},
job_location: {
id: 2,
name: 'Default Location',
created_at: '2021-08-24T15:32:18.830+02:00',
updated_at: '2021-08-24T15:32:18.830+02:00',
ignore_types: ['ProvisioningTemplate', 'Hostgroup'],
description: null,
label: null,
ancestry: null,
title: 'Default Location',
manifest_refreshed_at: null,
created_in_katello: false,
},
inputs: {
'inputs[adv plain hidden]': {
advanced: true,
value: 'adv_test_command',
},
'inputs[plain hidden]': {
advanced: false,
value: 'test command',
},
},
};