From 52582124f9e9ade9100b3e02b1ee849e7e4ea1e7 Mon Sep 17 00:00:00 2001 From: Lucas Bordeau Date: Thu, 1 Jun 2023 12:01:27 +0200 Subject: [PATCH] Removed borders on workspace container (#171) * Wip * Added mocks on main App story and fixed small mock bugs * Removed borders on WorkspaceContainer --- front/src/__stories__/App.stories.tsx | 27 ++---- .../src/layout/navbar/WorkspaceContainer.tsx | 2 - front/src/services/api/users/index.tsx | 2 +- front/src/testing/graphqlMocks.ts | 84 +++++++++++++++++++ front/src/testing/mock-data/companies.ts | 2 +- front/src/testing/mock-data/index.ts | 19 +++-- front/src/testing/mock-data/jwt.ts | 2 + front/src/testing/mock-data/users.ts | 22 +++++ 8 files changed, 133 insertions(+), 27 deletions(-) create mode 100644 front/src/testing/graphqlMocks.ts create mode 100644 front/src/testing/mock-data/jwt.ts diff --git a/front/src/__stories__/App.stories.tsx b/front/src/__stories__/App.stories.tsx index 3b7faf191..310be4db3 100644 --- a/front/src/__stories__/App.stories.tsx +++ b/front/src/__stories__/App.stories.tsx @@ -2,32 +2,20 @@ import type { Meta, StoryObj } from '@storybook/react'; import { RecoilRoot } from 'recoil'; import { ThemeProvider } from '@emotion/react'; import { MemoryRouter } from 'react-router-dom'; -import { ApolloClient, ApolloProvider, InMemoryCache } from '@apollo/client'; +import { ApolloProvider } from '@apollo/client'; import App from '../App'; import { FullHeightStorybookLayout } from '../testing/FullHeightStorybookLayout'; import { lightTheme } from '../layout/styles/themes'; +import { mockedClient } from '../testing/mockedClient'; +import { graphqlMocks } from '../testing/graphqlMocks'; +import { mockedUserJWT } from '../testing/mock-data/jwt'; const meta: Meta = { title: 'App/App', component: App, }; -const mockedClient = new ApolloClient({ - uri: process.env.REACT_APP_API_URL, - cache: new InMemoryCache(), - defaultOptions: { - watchQuery: { - fetchPolicy: 'no-cache', - errorPolicy: 'all', - }, - query: { - fetchPolicy: 'no-cache', - errorPolicy: 'all', - }, - }, -}); - export default meta; type Story = StoryObj; @@ -49,10 +37,13 @@ export const Default: Story = { render, loaders: [ async () => ({ - accessTokenStored: await window.localStorage.setItem( + accessTokenStored: window.localStorage.setItem( 'accessToken', - 'test-token', + mockedUserJWT, ), }), ], + parameters: { + msw: graphqlMocks, + }, }; diff --git a/front/src/layout/navbar/WorkspaceContainer.tsx b/front/src/layout/navbar/WorkspaceContainer.tsx index fe9ba1e7d..590e22d72 100644 --- a/front/src/layout/navbar/WorkspaceContainer.tsx +++ b/front/src/layout/navbar/WorkspaceContainer.tsx @@ -13,8 +13,6 @@ const StyledContainer = styled.button` user-select: none; border: 0; background: inherit; - border: 1px solid ${(props) => props.theme.primaryBorder}; - border-radius: ${(props) => props.theme.spacing(1)}; padding: ${(props) => props.theme.spacing(2)}; margin-left: ${(props) => props.theme.spacing(1)}; align-self: flex-start; diff --git a/front/src/services/api/users/index.tsx b/front/src/services/api/users/index.tsx index 081db2cf1..b56b0c968 100644 --- a/front/src/services/api/users/index.tsx +++ b/front/src/services/api/users/index.tsx @@ -2,7 +2,7 @@ import { QueryResult, gql, useQuery } from '@apollo/client'; import { GraphqlQueryUser } from '../../../interfaces/entities/user.interface'; export const GET_CURRENT_USER = gql` - query getCurrentUser($uuid: String) { + query GetCurrentUser($uuid: String) { users: findManyUser(where: { id: { equals: $uuid } }) { id email diff --git a/front/src/testing/graphqlMocks.ts b/front/src/testing/graphqlMocks.ts new file mode 100644 index 000000000..421cd5dc6 --- /dev/null +++ b/front/src/testing/graphqlMocks.ts @@ -0,0 +1,84 @@ +import { graphql } from 'msw'; +import { filterAndSortData } from './mock-data'; +import { GraphqlQueryCompany } from '../interfaces/entities/company.interface'; +import { mockedCompaniesData } from './mock-data/companies'; +import { GraphqlQueryUser } from '../interfaces/entities/user.interface'; +import { mockedUsersData } from './mock-data/users'; +import { mockedPeopleData } from './mock-data/people'; +import { GraphqlQueryPerson } from '../interfaces/entities/person.interface'; + +export const graphqlMocks = [ + graphql.query('GetCompanies', (req, res, ctx) => { + const returnedMockedData = filterAndSortData( + mockedCompaniesData, + req.variables.where, + req.variables.orderBy, + req.variables.limit, + ); + return res( + ctx.data({ + companies: returnedMockedData, + }), + ); + }), + graphql.query('SearchCompanyQuery', (req, res, ctx) => { + const returnedMockedData = filterAndSortData( + mockedCompaniesData, + req.variables.where, + req.variables.orderBy, + req.variables.limit, + ); + return res( + ctx.data({ + searchResults: returnedMockedData, + }), + ); + }), + graphql.query('SearchUserQuery', (req, res, ctx) => { + const returnedMockedData = filterAndSortData( + mockedUsersData, + req.variables.where, + req.variables.orderBy, + req.variables.limit, + ); + return res( + ctx.data({ + searchResults: returnedMockedData, + }), + ); + }), + graphql.query('GetCurrentUser', (req, res, ctx) => { + const customWhere = { + ...req.variables.where, + id: { + equals: req.variables.uuid, + }, + }; + + const returnedMockedData = filterAndSortData( + mockedUsersData, + customWhere, + req.variables.orderBy, + req.variables.limit, + ); + console.log({ returnedMockedData }); + return res( + ctx.data({ + users: returnedMockedData, + }), + ); + }), + graphql.query('GetPeople', (req, res, ctx) => { + const returnedMockedData = filterAndSortData( + mockedPeopleData, + req.variables.where, + req.variables.orderBy, + req.variables.limit, + ); + return res( + ctx.data({ + people: returnedMockedData, + }), + ); + }), +]; diff --git a/front/src/testing/mock-data/companies.ts b/front/src/testing/mock-data/companies.ts index 261c8879b..baba7e1ab 100644 --- a/front/src/testing/mock-data/companies.ts +++ b/front/src/testing/mock-data/companies.ts @@ -67,7 +67,7 @@ export const mockedCompaniesData: Array = [ __typename: 'companies', }, { - id: '9d162de6-cfbf-4156-a790-e39854dcd4eb', + id: '9d162de6-cfbf-4156-a790-e39854dcd4ef', domainName: 'sequoia.com', name: 'Sequoia', createdAt: '2023-04-26T10:09:25.656555+00:00', diff --git a/front/src/testing/mock-data/index.ts b/front/src/testing/mock-data/index.ts index 92b0be28e..a728a813c 100644 --- a/front/src/testing/mock-data/index.ts +++ b/front/src/testing/mock-data/index.ts @@ -2,10 +2,12 @@ import { CompanyOrderByWithRelationInput, PersonOrderByWithRelationInput, StringFilter, + UserOrderByWithRelationInput, } from '../../generated/graphql'; import { Company } from '../../interfaces/entities/company.interface'; import { BoolExpType } from '../../interfaces/entities/generic.interface'; import { Person } from '../../interfaces/entities/person.interface'; +import { User } from '../../interfaces/entities/user.interface'; function filterData( data: Array, @@ -67,13 +69,19 @@ function filterData( export function filterAndSortData( data: Array, - where: BoolExpType | BoolExpType, - orderBy: Array< - PersonOrderByWithRelationInput & CompanyOrderByWithRelationInput + where?: BoolExpType | BoolExpType | BoolExpType, + orderBy?: Array< + PersonOrderByWithRelationInput & + CompanyOrderByWithRelationInput & + UserOrderByWithRelationInput >, - limit: number, + limit?: number, ): Array { - let filteredData = filterData(data, where); + let filteredData = data; + + if (where) { + filteredData = filterData(data, where); + } if (orderBy) { const firstOrderBy = orderBy[0]; @@ -101,5 +109,6 @@ export function filterAndSortData( if (limit) { filteredData = filteredData.slice(0, limit); } + return filteredData; } diff --git a/front/src/testing/mock-data/jwt.ts b/front/src/testing/mock-data/jwt.ts new file mode 100644 index 000000000..3cd4aefd6 --- /dev/null +++ b/front/src/testing/mock-data/jwt.ts @@ -0,0 +1,2 @@ +export const mockedUserJWT = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhc2QiLCJuYW1lIjoiSm9obiBEb2UiLCJpYXQiOjE1MTYyMzkwMjIsInVzZXJJZCI6IjdkZmJjM2Y3LTZlNWUtNDEyOC05NTdlLThkODY4MDhjZGY2YiJ9.eLVZXaaAsOWUUeVybvuig--0ClsTxBp3lfkD7USxEQk'; diff --git a/front/src/testing/mock-data/users.ts b/front/src/testing/mock-data/users.ts index e4c44db0c..afcf624dd 100644 --- a/front/src/testing/mock-data/users.ts +++ b/front/src/testing/mock-data/users.ts @@ -6,11 +6,33 @@ export const mockedUsersData: Array = [ __typename: 'User', email: 'charles@test.com', displayName: 'Charles Test', + workspaceMember: { + __typename: 'WorkspaceMember', + id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6b', + workspace: { + __typename: 'Workspace', + id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6b', + displayName: 'Twenty', + domainName: 'twenty.com', + logo: 'data:image/png;base64,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', + }, + }, }, { id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6c', __typename: 'User', email: 'felix@test.com', displayName: 'Felix Test', + workspaceMember: { + __typename: 'WorkspaceMember', + id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6b', + workspace: { + __typename: 'Workspace', + id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6b', + displayName: 'Twenty', + domainName: 'twenty.com', + logo: 'data:image/png;base64,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', + }, + }, }, ];