From ecc9379d7e2ee4eaf20df85f709bb435e9f5df4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Thu, 14 Mar 2024 16:35:51 +0300 Subject: [PATCH] refactor: remove get-roles GQL query --- .../src/graphql/queries/get-roles.ee.js | 9 -- .../src/graphql/queries/get-roles.ee.test.js | 134 ------------------ .../backend/src/graphql/query-resolvers.js | 2 - packages/backend/src/graphql/schema.graphql | 1 - .../components/DeleteRoleButton/index.ee.jsx | 16 ++- .../web/src/graphql/queries/get-roles.ee.js | 12 -- packages/web/src/hooks/useRoles.ee.js | 1 + 7 files changed, 12 insertions(+), 163 deletions(-) delete mode 100644 packages/backend/src/graphql/queries/get-roles.ee.js delete mode 100644 packages/backend/src/graphql/queries/get-roles.ee.test.js delete mode 100644 packages/web/src/graphql/queries/get-roles.ee.js diff --git a/packages/backend/src/graphql/queries/get-roles.ee.js b/packages/backend/src/graphql/queries/get-roles.ee.js deleted file mode 100644 index 900af081..00000000 --- a/packages/backend/src/graphql/queries/get-roles.ee.js +++ /dev/null @@ -1,9 +0,0 @@ -import Role from '../../models/role.js'; - -const getRoles = async (_parent, params, context) => { - context.currentUser.can('read', 'Role'); - - return await Role.query().orderBy('name'); -}; - -export default getRoles; diff --git a/packages/backend/src/graphql/queries/get-roles.ee.test.js b/packages/backend/src/graphql/queries/get-roles.ee.test.js deleted file mode 100644 index 143ecc6c..00000000 --- a/packages/backend/src/graphql/queries/get-roles.ee.test.js +++ /dev/null @@ -1,134 +0,0 @@ -import { vi, describe, it, expect, beforeEach } from 'vitest'; -import request from 'supertest'; -import app from '../../app'; -import createAuthTokenByUserId from '../../helpers/create-auth-token-by-user-id'; -import { createRole } from '../../../test/factories/role'; -import { createPermission } from '../../../test/factories/permission'; -import { createUser } from '../../../test/factories/user'; -import * as license from '../../helpers/license.ee'; - -describe('graphQL getRoles query', () => { - let currentUserRole, - roleOne, - roleSecond, - query, - userWithPermissions, - userWithoutPermissions, - tokenWithPermissions, - tokenWithoutPermissions; - - beforeEach(async () => { - currentUserRole = await createRole({ name: 'Current user role' }); - roleOne = await createRole({ name: 'Role one' }); - roleSecond = await createRole({ name: 'Role second' }); - - query = ` - query { - getRoles { - id - key - name - description - isAdmin - } - } - `; - - await createPermission({ - action: 'read', - subject: 'Role', - roleId: currentUserRole.id, - }); - - userWithPermissions = await createUser({ - roleId: currentUserRole.id, - }); - - userWithoutPermissions = await createUser({ - roleId: roleOne.id, - }); - - tokenWithPermissions = createAuthTokenByUserId(userWithPermissions.id); - tokenWithoutPermissions = createAuthTokenByUserId( - userWithoutPermissions.id - ); - }); - - describe('and with valid license', () => { - beforeEach(async () => { - vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); - }); - - describe('and without permissions', () => { - it('should throw not authorized error', async () => { - const response = await request(app) - .post('/graphql') - .set('Authorization', tokenWithoutPermissions) - .send({ query }) - .expect(200); - - expect(response.body.errors).toBeDefined(); - expect(response.body.errors[0].message).toEqual('Not authorized!'); - }); - }); - - describe('and correct permissions', () => { - it('should return roles data', async () => { - const response = await request(app) - .post('/graphql') - .set('Authorization', tokenWithPermissions) - .send({ query }) - .expect(200); - - const expectedResponsePayload = { - data: { - getRoles: [ - { - description: currentUserRole.description, - id: currentUserRole.id, - isAdmin: currentUserRole.key === 'admin', - key: currentUserRole.key, - name: currentUserRole.name, - }, - { - description: roleOne.description, - id: roleOne.id, - isAdmin: roleOne.key === 'admin', - key: roleOne.key, - name: roleOne.name, - }, - { - description: roleSecond.description, - id: roleSecond.id, - isAdmin: roleSecond.key === 'admin', - key: roleSecond.key, - name: roleSecond.name, - }, - ], - }, - }; - - expect(response.body).toEqual(expectedResponsePayload); - }); - }); - }); - - describe('and without valid license', () => { - beforeEach(async () => { - vi.spyOn(license, 'hasValidLicense').mockResolvedValue(false); - }); - - describe('and correct permissions', () => { - it('should throw not authorized error', async () => { - const response = await request(app) - .post('/graphql') - .set('Authorization', tokenWithPermissions) - .send({ query }) - .expect(200); - - expect(response.body.errors).toBeDefined(); - expect(response.body.errors[0].message).toEqual('Not authorized!'); - }); - }); - }); -}); diff --git a/packages/backend/src/graphql/query-resolvers.js b/packages/backend/src/graphql/query-resolvers.js index 60dadee9..45db8770 100644 --- a/packages/backend/src/graphql/query-resolvers.js +++ b/packages/backend/src/graphql/query-resolvers.js @@ -13,7 +13,6 @@ import getInvoices from './queries/get-invoices.ee.js'; import getNotifications from './queries/get-notifications.js'; import getPermissionCatalog from './queries/get-permission-catalog.ee.js'; import getRole from './queries/get-role.ee.js'; -import getRoles from './queries/get-roles.ee.js'; import getSamlAuthProviderRoleMappings from './queries/get-saml-auth-provider-role-mappings.ee.js'; import getSamlAuthProvider from './queries/get-saml-auth-provider.ee.js'; import getStepWithTestExecutions from './queries/get-step-with-test-executions.js'; @@ -40,7 +39,6 @@ const queryResolvers = { getNotifications, getPermissionCatalog, getRole, - getRoles, getSamlAuthProvider, getSamlAuthProviderRoleMappings, getStepWithTestExecutions, diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql index da091e00..7dcb13fd 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -29,7 +29,6 @@ type Query { getInvoices: [Invoice] getPermissionCatalog: PermissionCatalog getRole(id: String!): Role - getRoles: [Role] getNotifications: [Notification] getSamlAuthProvider: SamlAuthProvider getSamlAuthProviderRoleMappings(id: String!): [SamlAuthProvidersRoleMapping] diff --git a/packages/web/src/components/DeleteRoleButton/index.ee.jsx b/packages/web/src/components/DeleteRoleButton/index.ee.jsx index 69dec7e0..e55ee021 100644 --- a/packages/web/src/components/DeleteRoleButton/index.ee.jsx +++ b/packages/web/src/components/DeleteRoleButton/index.ee.jsx @@ -4,6 +4,8 @@ import DeleteIcon from '@mui/icons-material/Delete'; import IconButton from '@mui/material/IconButton'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import * as React from 'react'; +import { useQueryClient } from '@tanstack/react-query'; + import Can from 'components/Can'; import ConfirmationDialog from 'components/ConfirmationDialog'; import { DELETE_ROLE } from 'graphql/mutations/delete-role.ee'; @@ -12,15 +14,18 @@ import useFormatMessage from 'hooks/useFormatMessage'; function DeleteRoleButton(props) { const { disabled, roleId } = props; const [showConfirmation, setShowConfirmation] = React.useState(false); - const [deleteRole] = useMutation(DELETE_ROLE, { - variables: { input: { id: roleId } }, - refetchQueries: ['GetRoles'], - }); const formatMessage = useFormatMessage(); const enqueueSnackbar = useEnqueueSnackbar(); + const queryClient = useQueryClient(); + + const [deleteRole] = useMutation(DELETE_ROLE, { + variables: { input: { id: roleId } }, + }); + const handleConfirm = React.useCallback(async () => { try { await deleteRole(); + queryClient.invalidateQueries({ queryKey: ['roles'] }); setShowConfirmation(false); enqueueSnackbar(formatMessage('deleteRoleButton.successfullyDeleted'), { variant: 'success', @@ -31,7 +36,8 @@ function DeleteRoleButton(props) { } catch (error) { throw new Error('Failed while deleting!'); } - }, [deleteRole]); + }, [deleteRole, enqueueSnackbar, formatMessage, queryClient]); + return ( <> diff --git a/packages/web/src/graphql/queries/get-roles.ee.js b/packages/web/src/graphql/queries/get-roles.ee.js deleted file mode 100644 index e6846ea9..00000000 --- a/packages/web/src/graphql/queries/get-roles.ee.js +++ /dev/null @@ -1,12 +0,0 @@ -import { gql } from '@apollo/client'; -export const GET_ROLES = gql` - query GetRoles { - getRoles { - id - key - name - description - isAdmin - } - } -`; diff --git a/packages/web/src/hooks/useRoles.ee.js b/packages/web/src/hooks/useRoles.ee.js index 0d4923cc..835f8170 100644 --- a/packages/web/src/hooks/useRoles.ee.js +++ b/packages/web/src/hooks/useRoles.ee.js @@ -3,6 +3,7 @@ import api from 'helpers/api'; export default function useRoles() { const query = useQuery({ + staleTime: 0, queryKey: ['roles'], queryFn: async ({ signal }) => { const { data } = await api.get('/v1/admin/roles', {