summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-06-01 23:21:30 +0200
committerArmand Philippot <git@armandphilippot.com>2022-06-02 19:10:28 +0200
commitf7cc48495b085fe8f6cfa37e80e968d5b47639df (patch)
tree1e43ee0095979a0009b521ef7cc2a0f069b132b3 /tests
parenta8af53c118478e6ed68975c32cc1202b7c7b798e (diff)
test: install and configure cypress
I also configure Jest to avoid conflicts between Cypress and Jest.
Diffstat (limited to 'tests')
-rw-r--r--tests/cypress/fixtures/example.json5
-rw-r--r--tests/cypress/plugins/index.ts22
-rw-r--r--tests/cypress/support/commands.ts6
-rw-r--r--tests/cypress/support/e2e.ts20
-rw-r--r--tests/cypress/tsconfig.json10
-rw-r--r--tests/jest/__mocks__/matchMedia.mock.js15
-rw-r--r--tests/utils/index.tsx43
7 files changed, 121 insertions, 0 deletions
diff --git a/tests/cypress/fixtures/example.json b/tests/cypress/fixtures/example.json
new file mode 100644
index 0000000..02e4254
--- /dev/null
+++ b/tests/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/tests/cypress/plugins/index.ts b/tests/cypress/plugins/index.ts
new file mode 100644
index 0000000..8229063
--- /dev/null
+++ b/tests/cypress/plugins/index.ts
@@ -0,0 +1,22 @@
+/// <reference types="cypress" />
+// ***********************************************************
+// This example plugins/index.js can be used to load plugins
+//
+// You can change the location of this file or turn off loading
+// the plugins file with the 'pluginsFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/plugins-guide
+// ***********************************************************
+
+// This function is called when a project is opened or re-opened (e.g. due to
+// the project's config changing)
+
+/**
+ * @type {Cypress.PluginConfig}
+ */
+// eslint-disable-next-line no-unused-vars
+module.exports = (on, config) => {
+ // `on` is used to hook into various events Cypress emits
+ // `config` is the resolved Cypress config
+};
diff --git a/tests/cypress/support/commands.ts b/tests/cypress/support/commands.ts
new file mode 100644
index 0000000..a88e131
--- /dev/null
+++ b/tests/cypress/support/commands.ts
@@ -0,0 +1,6 @@
+// ***********************************************
+// For examples of custom commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+
+import '@testing-library/cypress/add-commands';
diff --git a/tests/cypress/support/e2e.ts b/tests/cypress/support/e2e.ts
new file mode 100644
index 0000000..37a498f
--- /dev/null
+++ b/tests/cypress/support/e2e.ts
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands';
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/tests/cypress/tsconfig.json b/tests/cypress/tsconfig.json
new file mode 100644
index 0000000..66b725c
--- /dev/null
+++ b/tests/cypress/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "isolatedModules": false,
+ "noEmit": true,
+ "types": ["cypress", "@testing-library/cypress"]
+ },
+ "include": ["../../node_modules/cypress", "**/*.ts", "**/*.tsx"],
+ "exclude": ["**/*.test.ts", "**/*.test.tsx"]
+}
diff --git a/tests/jest/__mocks__/matchMedia.mock.js b/tests/jest/__mocks__/matchMedia.mock.js
new file mode 100644
index 0000000..a983ad3
--- /dev/null
+++ b/tests/jest/__mocks__/matchMedia.mock.js
@@ -0,0 +1,15 @@
+Object.defineProperty(window, 'matchMedia', {
+ writable: true,
+ value: jest.fn().mockImplementation((query) => ({
+ matches: false,
+ media: query,
+ onchange: null,
+ addListener: jest.fn(), // deprecated
+ removeListener: jest.fn(), // deprecated
+ addEventListener: jest.fn(),
+ removeEventListener: jest.fn(),
+ dispatchEvent: jest.fn(),
+ })),
+});
+
+export {};
diff --git a/tests/utils/index.tsx b/tests/utils/index.tsx
new file mode 100644
index 0000000..1bcea8e
--- /dev/null
+++ b/tests/utils/index.tsx
@@ -0,0 +1,43 @@
+import { render, RenderOptions } from '@testing-library/react';
+import { ThemeProvider } from 'next-themes';
+import { FC, ReactElement, ReactNode } from 'react';
+import { IntlProvider } from 'react-intl';
+
+type ProvidersConfig = {
+ children: ReactNode;
+ locale?: 'en' | 'fr';
+};
+
+type CustomRenderOptions = {
+ providers?: ProvidersConfig;
+ testingLibrary?: Omit<RenderOptions, 'wrapper'>;
+};
+
+/**
+ * Return a component wrapped with Intl and Theme Provider.
+ *
+ * @returns A component wrapped Intl and Theme providers.
+ */
+const AllTheProviders: FC<ProvidersConfig> = ({ children, locale = 'en' }) => {
+ return (
+ <IntlProvider locale={locale}>
+ <ThemeProvider>{children}</ThemeProvider>
+ </IntlProvider>
+ );
+};
+
+/**
+ * Render a component with all the providers.
+ *
+ * @param {ReactElement} ui - A React component.
+ * @param {CustomRenderOptions} [options] - An object of render options and providers options.
+ * @returns A React component wrapped with all the providers.
+ */
+const customRender = (ui: ReactElement, options?: CustomRenderOptions) =>
+ render(ui, {
+ wrapper: (props) => <AllTheProviders {...props} {...options?.providers} />,
+ ...options?.testingLibrary,
+ });
+
+export * from '@testing-library/react';
+export { customRender as render };