diff --git a/src/TuitioProvider.tsx b/src/TuitioProvider.tsx index 4a36c02..5959ff8 100644 --- a/src/TuitioProvider.tsx +++ b/src/TuitioProvider.tsx @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import React, { useReducer, useMemo, ReactNode } from "react"; import { TuitioContext, TuitioDispatchContext } from "./contexts"; import { initialState } from "./initialState"; diff --git a/src/contexts.ts b/src/contexts.ts index 6ffe48a..3f30c48 100644 --- a/src/contexts.ts +++ b/src/contexts.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import React from "react"; import { initialState, initialDispatchActions } from "./initialState"; diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 19c35b9..dea7e96 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + export * from "./useTuitioClient"; export * from "./useTuitioToken"; export * from "./useTuitioUser"; diff --git a/src/hooks/useTuitioClient.ts b/src/hooks/useTuitioClient.ts index b50f81c..8d6908f 100644 --- a/src/hooks/useTuitioClient.ts +++ b/src/hooks/useTuitioClient.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { useContext } from "react"; import { TuitioContext, TuitioDispatchContext } from "../contexts"; import { TuitioClient } from "@flare/tuitio-client"; diff --git a/src/hooks/useTuitioToken.ts b/src/hooks/useTuitioToken.ts index 2bb25e5..ec7f2af 100644 --- a/src/hooks/useTuitioToken.ts +++ b/src/hooks/useTuitioToken.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { useContext } from "react"; import { TuitioContext } from "../contexts"; diff --git a/src/hooks/useTuitioUser.ts b/src/hooks/useTuitioUser.ts index dcd97e4..2f3b18b 100644 --- a/src/hooks/useTuitioUser.ts +++ b/src/hooks/useTuitioUser.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { useContext } from "react"; import { TuitioContext } from "../contexts"; diff --git a/src/index.ts b/src/index.ts index 1e58f45..30c727c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import TuitioProvider from "./TuitioProvider"; export * from "./hooks"; diff --git a/src/initialState.ts b/src/initialState.ts index f133749..8686fee 100644 --- a/src/initialState.ts +++ b/src/initialState.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { fetch } from "@flare/tuitio-client"; import type { TuitioReactState, TuitioDispatchActions } from "./types"; diff --git a/src/reducer.ts b/src/reducer.ts index 344d794..173c168 100644 --- a/src/reducer.ts +++ b/src/reducer.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { initialState } from "./initialState"; import type { TuitioReactState, TuitioDispatchActions } from "./types"; import { Dispatch } from "react"; diff --git a/src/types.ts b/src/types.ts index dac2b18..5906222 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + export type TuitioConfiguration = { tuitioUrl: string | null }; export type TuitioReactState = { auth: { diff --git a/tests/TuitioProvider.test.tsx b/tests/TuitioProvider.test.tsx index cfa4e12..0dd2cb5 100644 --- a/tests/TuitioProvider.test.tsx +++ b/tests/TuitioProvider.test.tsx @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import * as React from "react"; import { render } from "@testing-library/react"; import "jest-canvas-mock"; diff --git a/tests/hooks/useTuitioClient.test.ts b/tests/hooks/useTuitioClient.test.ts index 2973856..05a870d 100644 --- a/tests/hooks/useTuitioClient.test.ts +++ b/tests/hooks/useTuitioClient.test.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { renderHook, act } from "@testing-library/react-hooks"; import { TuitioClient } from "@flare/tuitio-client"; import { useTuitioClient } from "../../src/hooks"; diff --git a/tests/hooks/useTuitioClient.test.tsx b/tests/hooks/useTuitioClient.test.tsx index 871a3c9..bd7d398 100644 --- a/tests/hooks/useTuitioClient.test.tsx +++ b/tests/hooks/useTuitioClient.test.tsx @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import React from "react"; import { renderHook } from "@testing-library/react-hooks"; import { TuitioContext, TuitioDispatchContext } from "../../src/contexts"; @@ -62,14 +64,14 @@ describe("useTuitioClient: dispatchActions", () => { ); - const optionMock = { + const optionsMock = { onLoginSuccess: jest.fn(), onLoginFailed: jest.fn(), onLoginError: jest.fn() }; it("onLoginSuccess should be called when user logs in", async () => { - const { result } = renderHook(() => useTuitioClient(optionMock), { wrapper }); + const { result } = renderHook(() => useTuitioClient(optionsMock), { wrapper }); const userName = "user"; const password = "password"; @@ -79,7 +81,7 @@ describe("useTuitioClient: dispatchActions", () => { }); it("onLogoutSuccess should be called when user logs out", async () => { - const { result } = renderHook(() => useTuitioClient(optionMock), { wrapper }); + const { result } = renderHook(() => useTuitioClient(optionsMock), { wrapper }); await result.current.logout(); expect(spyOnLogoutSuccess).toHaveBeenCalled(); }); diff --git a/tests/hooks/useTuitioClientAxiosMock.test.tsx b/tests/hooks/useTuitioClientAxiosMock.test.tsx new file mode 100644 index 0000000..011e09b --- /dev/null +++ b/tests/hooks/useTuitioClientAxiosMock.test.tsx @@ -0,0 +1,62 @@ +// Copyright (c) 2023 Tudor Stanciu + +import React from "react"; +import { renderHook } from "@testing-library/react-hooks"; +import { TuitioContext, TuitioDispatchContext } from "../../src/contexts"; +import { useTuitioClient } from "../../src/hooks"; +import axios from "axios"; + +jest.mock("axios"); + +describe("useTuitioClient: dispatchActions", () => { + let spyOnLoginSuccess: (token: string, validUntil: Date, userName: string) => void; + let spyOnLogoutSuccess: () => void; + + beforeEach(() => { + spyOnLoginSuccess = jest.fn(); + spyOnLogoutSuccess = jest.fn(); + }); + + afterEach(() => { + (spyOnLoginSuccess as jest.Mock).mockReset(); + (spyOnLogoutSuccess as jest.Mock).mockReset(); + }); + + const tuitioContextState = { + auth: { + userName: null, + token: null, + validUntil: null + }, + configuration: { tuitioUrl: "http://localhost:5063/" } + }; + + const wrapper = ({ children }: { children: React.ReactNode }) => ( + + + {children} + + + ); + + const optionsMock = { + onLogoutFailed: jest.fn() + }; + + it("onLogoutFailed should be called if logout is called before login", async () => { + (axios.request as jest.Mock).mockResolvedValue({ + data: { + result: { userId: 0, userName: "tuitio.user", logoutDate: new Date() }, + error: null + } + }); + + const { result } = renderHook(() => useTuitioClient(optionsMock), { wrapper }); + const response = await result.current.logout(); + expect(response.result).toBeNull(); + expect(response.error).toBe("UNAUTHENTICATED"); + expect(optionsMock.onLogoutFailed).toHaveBeenCalledWith("UNAUTHENTICATED"); + }); +}); diff --git a/tests/hooks/useTuitioToken.test.tsx b/tests/hooks/useTuitioToken.test.tsx index 58ae9a5..2bfd139 100644 --- a/tests/hooks/useTuitioToken.test.tsx +++ b/tests/hooks/useTuitioToken.test.tsx @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import React from "react"; import { renderHook } from "@testing-library/react-hooks"; import { TuitioContext } from "../../src/contexts"; diff --git a/tests/hooks/useTuitioUser.test.tsx b/tests/hooks/useTuitioUser.test.tsx index fac03d2..12b0f3f 100644 --- a/tests/hooks/useTuitioUser.test.tsx +++ b/tests/hooks/useTuitioUser.test.tsx @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import React from "react"; import { renderHook } from "@testing-library/react-hooks"; import { TuitioContext } from "../../src/contexts"; diff --git a/tests/initialState.test.ts b/tests/initialState.test.ts index 9605ef3..c4b3573 100644 --- a/tests/initialState.test.ts +++ b/tests/initialState.test.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { initialDispatchActions } from "../src/initialState"; describe("Initial dispatch actions", () => { diff --git a/tests/reducer.test.ts b/tests/reducer.test.ts index f139cac..51cd142 100644 --- a/tests/reducer.test.ts +++ b/tests/reducer.test.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2023 Tudor Stanciu + import { reducer, dispatchActions } from "../src/reducer"; import { TuitioReactState, TuitioDispatchActions } from "../src/types"; import { initialState } from "../src/initialState";