diff --git a/src/features/auth/model/selectors/index.ts b/src/features/auth/model/selectors/index.ts new file mode 100644 index 0000000..f81592d --- /dev/null +++ b/src/features/auth/model/selectors/index.ts @@ -0,0 +1,2 @@ +export * from "./selectFormValid/selectFormValid"; +export * from "./selectAuthData/selectAuthData"; diff --git a/src/features/auth/model/selectors/selectAuthData/selectAuthData.spec.ts b/src/features/auth/model/selectors/selectAuthData/selectAuthData.spec.ts new file mode 100644 index 0000000..4fce0b1 --- /dev/null +++ b/src/features/auth/model/selectors/selectAuthData/selectAuthData.spec.ts @@ -0,0 +1,14 @@ +import { useAuthStore } from "../../stores/authStore/authStore"; +import { selectAuthData } from "./selectAuthData"; +import { MOCK_EMAIL, MOCK_PASSWORD } from "../../../api/calls/mocks"; + +describe("selectAuthData", () => { + it("should return the correct auth data", () => { + useAuthStore.getState().setEmail(MOCK_EMAIL); + useAuthStore.getState().setPassword(MOCK_PASSWORD); + expect(selectAuthData(useAuthStore.getState())).toEqual({ + email: MOCK_EMAIL, + password: MOCK_PASSWORD, + }); + }); +}); diff --git a/src/features/auth/model/selectors/selectAuthData/selectAuthData.ts b/src/features/auth/model/selectors/selectAuthData/selectAuthData.ts new file mode 100644 index 0000000..a4a7f02 --- /dev/null +++ b/src/features/auth/model/selectors/selectAuthData/selectAuthData.ts @@ -0,0 +1,7 @@ +import type { AuthData } from "../../types/service"; +import type { AuthStore } from "../../types/store"; + +export const selectAuthData = (state: AuthStore): AuthData => ({ + email: state.formData.email.value, + password: state.formData.password.value, +}); diff --git a/src/features/auth/model/selectors/selectFormValid/selectFormValid.spec.ts b/src/features/auth/model/selectors/selectFormValid/selectFormValid.spec.ts new file mode 100644 index 0000000..f6d85c1 --- /dev/null +++ b/src/features/auth/model/selectors/selectFormValid/selectFormValid.spec.ts @@ -0,0 +1,25 @@ +import { MOCK_EMAIL, MOCK_PASSWORD } from "../../../api/calls/mocks"; +import { useAuthStore } from "../../stores/authStore/authStore"; +import { selectFormValid } from "./selectFormValid"; + +describe("selectFormValid", () => { + afterEach(() => { + useAuthStore.getState().reset(); + }); + + it("should be false when email is invalid", () => { + useAuthStore.getState().setEmail(""); + expect(selectFormValid(useAuthStore.getState())).toBe(false); + }); + + it("should be false when password is invalid", () => { + useAuthStore.getState().setPassword(""); + expect(selectFormValid(useAuthStore.getState())).toBe(false); + }); + + it("should be true when email and password are valid", () => { + useAuthStore.getState().setEmail(MOCK_EMAIL); + useAuthStore.getState().setPassword(MOCK_PASSWORD); + expect(selectFormValid(useAuthStore.getState())).toBe(true); + }); +}); diff --git a/src/features/auth/model/selectors/selectFormValid/selectFormValid.ts b/src/features/auth/model/selectors/selectFormValid/selectFormValid.ts new file mode 100644 index 0000000..05d4c4a --- /dev/null +++ b/src/features/auth/model/selectors/selectFormValid/selectFormValid.ts @@ -0,0 +1,4 @@ +import type { AuthStore } from "../../types/store"; + +export const selectFormValid = (state: AuthStore) => + Object.values(state.formData).every((field) => field.valid);