From ab3cd5b0b019f0f2144618c3b8c6fd67222b30d7 Mon Sep 17 00:00:00 2001 From: balzack Date: Thu, 12 Jan 2023 04:40:22 -0800 Subject: [PATCH] adding web viewport context test --- .../src/context/useViewportContext.hook.js | 7 ++- net/web/test/Viewport.test.js | 44 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 net/web/test/Viewport.test.js diff --git a/net/web/src/context/useViewportContext.hook.js b/net/web/src/context/useViewportContext.hook.js index 316c3517..2cfdf9c2 100644 --- a/net/web/src/context/useViewportContext.hook.js +++ b/net/web/src/context/useViewportContext.hook.js @@ -2,7 +2,12 @@ import { useEffect, useState } from 'react'; export function useViewportContext() { - const [state, setState] = useState({ }); + const [state, setState] = useState({ + display: null, + width: null, + height: null, + }); + const SMALL_MEDIUM = 650; const MEDIUM_LARGE = 1000; const LARGE_XLARGE = 1400; diff --git a/net/web/test/Viewport.test.js b/net/web/test/Viewport.test.js new file mode 100644 index 00000000..7657f6b5 --- /dev/null +++ b/net/web/test/Viewport.test.js @@ -0,0 +1,44 @@ +import React, { useState, useEffect, useContext } from 'react'; +import {render, act, screen, waitFor, fireEvent} from '@testing-library/react' + +import { ViewportContext, ViewportContextProvider } from 'context/ViewportContext'; + +function ViewportView() { + const [renderCount, setRenderCount] = useState(0); + const viewport = useContext(ViewportContext); + + useEffect(() => { + setRenderCount(renderCount + 1); + }, [viewport.state]); + + return ( +
+ { renderCount } + { viewport.state.display } + { viewport.state.width } + { viewport.state.height } +
+ ); +} + +function ViewportTestApp() { + return ( + + + + ); +} + +test('get, set and clear', async () => { + render(); + + await waitFor(async () => { + expect(screen.getByTestId('display').textContent).toBe('large'); + expect(screen.getByTestId('width').textContent).toBe('1024'); + expect(screen.getByTestId('height').textContent).toBe('768'); + }); + +}); + + +