theforeman/foreman_ansible

View on GitHub
webpack/components/AnsibleHostDetail/components/RolesTab/__test__/RolesTab.fixtures.js

Summary

Maintainability
A
2 hrs
Test Coverage
import {
  mockFactory,
  advancedMockFactory,
  admin,
  intruder,
  userFactory,
} from '../../../../../testHelper';
import ansibleRolesQuery from '../../../../../graphql/queries/hostAnsibleRoles.gql';
import allAnsibleRolesQuery from '../../../../../graphql/queries/allAnsibleRoles.gql';
import availableAnsibleRolesQuery from '../../../../../graphql/queries/hostAvailableAnsibleRoles.gql';
import assignAnsibleRolesMutation from '../../../../../graphql/mutations/assignAnsibleRoles.gql';
import { decodeModelId } from '../../../../../globalIdHelper';

export const hostId = 3;
const hostGlobalId = 'MDE6SG9zdC0z';

const ansibleRolesMockFactory = mockFactory('host', ansibleRolesQuery);
const allAnsibleRolesMockFactory = mockFactory('host', allAnsibleRolesQuery);
const assignRolesMockFactory = mockFactory(
  'assignAnsibleRoles',
  assignAnsibleRolesMutation
);
const editModalDataFactory = advancedMockFactory(availableAnsibleRolesQuery);

const viewer = userFactory('roles_viewer', [
  {
    __typename: 'Permission',
    id: 'MDE6UGVybWlzc2lvbi0x',
    name: 'view_ansible_roles',
  },
]);

const role1 = {
  __typename: 'AnsibleRole',
  id: 'MDE6QW5zaWJsZVJvbGUtMw==',
  name: 'aardvaark.cube',
  path: '/ansible/ansible_roles/search="name = aardvaark.cube"',
  ansibleVariables: {
    totalCount: 1,
  },
};

const role2 = {
  __typename: 'AnsibleRole',
  id: 'MDE6QW5zaWJsZVJvbGUtNQ==',
  name: 'aardvaark.sphere',
  path: '/ansible/ansible_roles/search="name = aardvaark.sphere"',
  ansibleVariables: {
    totalCount: 2,
  },
};

const role3 = {
  __typename: 'AnsibleRole',
  id: 'MDE6QW5zaWJsZVJvbGUtMzA=',
  name: 'another.role',
  path: '/ansible/ansible_roles/search="name = another.role"',
  ansibleVariables: {
    totalCount: 3,
  },
};

const role4 = {
  __typename: 'AnsibleRole',
  id: 'MDE6QW5zaWJsZVJvbGUtMzk=',
  name: 'geerlingguy.ceylon',
  path: '/ansible/ansible_roles/search="name = geerlingguy.ceylon"',
  ansibleVariables: {
    totalCount: 4,
  },
};

const ansibleRolesMock = {
  totalCount: 3,
  nodes: [role1, role2, role3],
};

const ansibleRolesUpdatedMock = {
  totalCount: 3,
  nodes: [role1, role2, role4],
};

const availableRoles = {
  nodes: [
    role4,
    {
      __typename: 'AnsibleRole',
      id: 'MDE6QW5zaWJsZVJvbGUtMQ==',
      name: 'theforeman.foreman_scap_client',
      path:
        '/ansible/ansible_roles/search="name = theforeman.foreman_scap_client"',
      ansibleVariables: {
        totalCount: 23,
      },
    },
    {
      __typename: 'AnsibleRole',
      id: 'MDE6QW5zaWJsZVJvbGUtMg==',
      name: 'adriagalin.motd',
      path: '/ansible/ansible_roles/search="name = adriagalin.motd"',
      ansibleVariables: {
        totalCount: 23,
      },
    },
    {
      __typename: 'AnsibleRole',
      id: 'MDE6QW5zaWJsZVJvbGUtMjI=',
      name: 'geerlingguy.php',
      path: '/ansible/ansible_roles/search="name = geerlingguy.php"',
      ansibleVariables: {
        totalCount: 23,
      },
    },
    {
      __typename: 'AnsibleRole',
      id: 'MDE6QW5zaWJsZVJvbGUtNTc=',
      name: 'robertdebock.epel',
      path: '/ansible/ansible_roles/search="name = robertdebock.epel"',
      ansibleVariables: {
        totalCount: 23,
      },
    },
    {
      __typename: 'AnsibleRole',
      id: 'MDE6QW5zaWJsZVJvbGUtNTg=',
      name: 'geerlingguy.nfs',
      path: '/ansible/ansible_roles/search="name = geerlingguy.nfs"',
      ansibleVariables: {
        totalCount: 23,
      },
    },
  ],
};

export const allRolesMocks = allAnsibleRolesMockFactory(
  { id: hostGlobalId, first: 20, last: 20 },
  {
    __typename: 'Host',
    id: hostGlobalId,
    allAnsibleRoles: {
      totalCount: 4,
      nodes: [
        {
          id: 'MDE6QW5zaWJsZVJvbGUtMg==',
          name: 'adriagalin.motd',
          path: '/ansible/ansible_roles/search="name = adriagalin.motd"',
          inherited: true,
          ansibleVariables: {
            totalCount: 23,
          },
        },
        { ...role1, inherited: false },
        { ...role2, inherited: false },
        { ...role3, inherited: false },
      ],
    },
  }
);

const editModalData = {
  host: {
    __typename: 'Host',
    id: hostGlobalId,
    availableAnsibleRoles: availableRoles,
  },
};

export const mocks = ansibleRolesMockFactory(
  { id: hostGlobalId, first: 20, last: 20 },
  { __typename: 'Host', id: hostGlobalId, ownAnsibleRoles: ansibleRolesMock },
  { currentUser: admin }
);

export const unauthorizedMocks = ansibleRolesMockFactory(
  { id: hostGlobalId, first: 20, last: 20 },
  { __typename: 'Host', id: hostGlobalId, ownAnsibleRoles: ansibleRolesMock },
  { currentUser: intruder }
);

export const authorizedMocks = ansibleRolesMockFactory(
  { id: hostGlobalId, first: 20, last: 20 },
  { __typename: 'Host', id: hostGlobalId, ownAnsibleRoles: ansibleRolesMock },
  { currentUser: viewer }
);

export const editModalOpenMocks = editModalDataFactory(
  {
    id: hostGlobalId,
  },
  editModalData
);

export const assignRolesSuccessMock = assignRolesMockFactory(
  {
    id: hostGlobalId,
    ansibleRoleIds: [role1, role2, role4].map(decodeModelId),
  },
  {
    host: {
      __typename: 'Host',
      id: hostGlobalId,
      ownAnsibleRoles: ansibleRolesUpdatedMock,
    },
    errors: [],
  }
);

export const assignRolesErrorMock = assignRolesMockFactory(
  {
    id: hostGlobalId,
    ansibleRoleIds: [role1, role2, role4].map(decodeModelId),
  },
  {
    host: {
      __typename: 'Host',
      id: hostGlobalId,
      ownAnsibleRoles: ansibleRolesMock,
    },
    errors: [{ path: ['attributes', 'base'], message: 'is invalid' }],
  }
);