diff --git a/__tests__/assignment/createAssignment.test.tsx b/__tests__/assignment/createAssignment.test.tsx
new file mode 100644
index 0000000..bbfe945
--- /dev/null
+++ b/__tests__/assignment/createAssignment.test.tsx
@@ -0,0 +1,73 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import CreateAssignment from "../../app/assignment/createAssignment";
+
+const mockSingle = jest.fn();
+const mockSelect = jest.fn(() => ({ single: mockSingle, }));
+const mockInsert = jest.fn(() => ({ select: mockSelect, }));
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ sId: null,
+ }),
+}));
+
+jest.mock("@/lib/progress", () => ({
+ CheckAssignmentCompletion: jest.fn(),
+}));
+
+jest.mock("@/lib/asyncStorage", () => ({
+ SaveAssignmentNotificationId: jest.fn(),
+}));
+
+jest.mock("expo-notifications", () => ({
+ scheduleNotificationAsync: jest.fn(() => Promise.resolve("notification-123")),
+ SchedulableTriggerInputTypes: {
+ DATE: "date",
+ },
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { id: "user-123" } },
+ error: null,
+ })
+ ),
+ },
+ from: jest.fn(() => ({
+ insert: mockInsert,
+ })),
+ },
+ };
+});
+
+test("creates an assignment and navigates back", async () => {
+ mockSingle.mockResolvedValue({
+ data: {
+ aId: "assignment-123", title: "create a simple test", deadline: "",
+ },
+ error: null,
+ });
+
+ const screen = render();
+ fireEvent.changeText(screen.getByTestId("assignment-title-input"), "create a simple test");
+ fireEvent.press(screen.getByTestId("create-assignment-button"));
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("assignments");
+ expect(mockInsert).toHaveBeenCalled();
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/assignment/deleteAssignment.test.tsx b/__tests__/assignment/deleteAssignment.test.tsx
new file mode 100644
index 0000000..02de5a3
--- /dev/null
+++ b/__tests__/assignment/deleteAssignment.test.tsx
@@ -0,0 +1,110 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import { Alert } from "react-native";
+import ViewDetailsAssignment from "../../app/assignment/viewDetailsAssignment";
+
+const mockSingleAssignment = jest.fn();
+const mockSelectAssignmentEq = jest.fn(() => ({ single: mockSingleAssignment, }));
+const mockSelectAssignment = jest.fn(() => ({ eq: mockSelectAssignmentEq, }));
+const mockSelectTasksEq = jest.fn();
+const mockSelectTasks = jest.fn(() => ({ eq: mockSelectTasksEq }));
+const mockDeleteAssignmentEq = jest.fn();
+const mockDeleteAssignment = jest.fn(() => ({ eq: mockDeleteAssignmentEq, }));
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ aId: "assignment-123",
+ }),
+ useFocusEffect: (callback: () => void) => callback(),
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { uId: "user-123" } },
+ error: null,
+ })
+ ),
+ getSession: jest.fn(() =>
+ Promise.resolve({
+ data: {
+ session: {
+ user: { uId: "user-123" },
+ },
+ },
+ })
+ ),
+ onAuthStateChange: jest.fn(() => ({
+ data: {
+ subscription: {
+ unsubscribe: jest.fn(),
+ },
+ },
+ })),
+ },
+ from: jest.fn((table) => {
+ if (table === "assignments") {
+ return {
+ select: mockSelectAssignment,
+ delete: mockDeleteAssignment,
+ };
+ }
+
+ if (table === "tasks") {
+ return {
+ select: mockSelectTasks,
+ };
+ }
+
+ return {};
+ }),
+ },
+ };
+});
+
+const alertSpy = jest.spyOn(Alert, "alert");
+
+test("deletes a task and navigates back", async () => {
+ mockSingleAssignment.mockResolvedValue({
+ data: {
+ aId: "assignment-123",
+ title: "create a simple test",
+ uId: "user-123",
+ },
+ error: null,
+ });
+ mockSelectTasksEq.mockResolvedValue({ data: [], error: null, })
+ mockDeleteAssignmentEq.mockResolvedValue({ error: null, });
+
+ const screen = render();
+ fireEvent.press(await screen.findByTestId("delete-assignment-button"));
+
+ expect(alertSpy).toHaveBeenCalledWith(
+ "Delete Assignment",
+ "Are you sure you want to delete this assignment?",
+ expect.any(Array),
+ );
+
+ const alertButtons = alertSpy.mock.calls[0][2];
+ const confirmDeleteButton = alertButtons[1];
+
+ await confirmDeleteButton.onPress();
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("assignments");
+ expect(mockDeleteAssignment).toHaveBeenCalled();
+ expect(mockDeleteAssignmentEq).toHaveBeenCalledWith("aId", "assignment-123");
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/assignment/editAssignment.test.tsx b/__tests__/assignment/editAssignment.test.tsx
new file mode 100644
index 0000000..6a9e577
--- /dev/null
+++ b/__tests__/assignment/editAssignment.test.tsx
@@ -0,0 +1,99 @@
+import EditAssignment from "@/app/assignment/editAssignment";
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+
+const mockUpdateSingle = jest.fn();
+const mockUpdateSelect = jest.fn(() => ({ single: mockUpdateSingle, }));
+const mockUpdateEq = jest.fn(() => ({ select: mockUpdateSelect, }));
+const mockUpdate = jest.fn(() => ({ eq: mockUpdateEq, }));
+const mockSingle = jest.fn();
+const mockSelectEq = jest.fn(() => ({ single: mockSingle, }));
+const mockSelect = jest.fn(() => ({ eq: mockSelectEq, }));
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ aId: "assignment-123",
+ }),
+ useFocusEffect: (callback: () => void) => callback(),
+}));
+
+jest.mock("@/lib/progress", () => ({
+ CheckAssignmentCompletion: jest.fn(),
+}));
+
+jest.mock("@/lib/asyncStorage", () => ({
+ GetAssignmentNotificationId: jest.fn(() => Promise.resolve(null)),
+}));
+
+jest.mock("expo-notifications", () => ({
+ scheduleNotificationAsync: jest.fn(() => Promise.resolve("notification-123")),
+ SchedulableTriggerInputTypes: {
+ DATE: "date",
+ },
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { id: "user-123" } },
+ error: null,
+ })
+ ),
+ },
+ from: jest.fn(() => ({
+ select: mockSelect,
+ update: mockUpdate,
+ })),
+ },
+ };
+});
+
+test("updates an assignment and navigates back", async () => {
+ mockSingle.mockResolvedValue({
+ data: {
+ aId: "assignment-123",
+ title: "create a simple test",
+ uId: "user-123",
+ deadline: "2026-04-25",
+ },
+ error: null,
+ });
+ mockUpdateSingle.mockResolvedValue({
+ data: {
+ aId: "assignment-123",
+ title: "create a harder test",
+ uId: "user-123",
+ deadline: "2026-04-25",
+ },
+ error: null,
+ });
+
+ const screen = render();
+ fireEvent.changeText(await screen.findByTestId("assignment-title-input"), "create a harder test");
+ fireEvent.press(screen.getByTestId("edit-assignment-button"));
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("assignments");
+ expect(mockSelect).toHaveBeenCalled();
+ expect(mockUpdate).toHaveBeenCalledWith(
+ expect.objectContaining({
+ title: "create a harder test",
+ uId: "user-123",
+ deadline: "2026-04-25",
+ })
+ );
+ expect(mockUpdateSingle).toHaveBeenCalled();
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/subject/createSubject.test.tsx b/__tests__/subject/createSubject.test.tsx
new file mode 100644
index 0000000..a375ec5
--- /dev/null
+++ b/__tests__/subject/createSubject.test.tsx
@@ -0,0 +1,48 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import CreateSubject from "../../app/subject/createSubject";
+
+const mockInsert = jest.fn();
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { id: "user-123" } },
+ error: null,
+ })
+ ),
+ },
+ from: jest.fn(() => ({
+ insert: mockInsert,
+ })),
+ },
+ };
+});
+
+test("creates a subject and navigates back", async () => {
+ mockInsert.mockResolvedValue({ error: null });
+
+ const screen = render();
+ fireEvent.changeText(screen.getByTestId("subject-title-input"), "ikt205g26v");
+ fireEvent.press(screen.getByTestId("create-subject-button"));
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("subjects");
+ expect(mockInsert).toHaveBeenCalled();
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/subject/deleteSubject.test.tsx b/__tests__/subject/deleteSubject.test.tsx
new file mode 100644
index 0000000..a184c76
--- /dev/null
+++ b/__tests__/subject/deleteSubject.test.tsx
@@ -0,0 +1,111 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import { Alert } from "react-native";
+import ViewDetailsSubject from "../../app/subject/viewDetailsSubject";
+
+const mockSingleSubject = jest.fn();
+const mockSelectSubjectEq = jest.fn(() => ({ single: mockSingleSubject, }));
+const mockSelectSubject = jest.fn(() => ({ eq: mockSelectSubjectEq, }));
+const mockOrderAssignments = jest.fn();
+const mockSelectAssignmentsEq = jest.fn(() => ({ order: mockOrderAssignments }));
+const mockSelectAssignments = jest.fn(() => ({ eq: mockSelectAssignmentsEq }));
+const mockDeleteSubjectEq = jest.fn();
+const mockDeleteSubject = jest.fn(() => ({ eq: mockDeleteSubjectEq, }));
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ sId: "subject-123",
+ }),
+ useFocusEffect: (callback: () => void) => callback(),
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { uId: "user-123" } },
+ error: null,
+ })
+ ),
+ getSession: jest.fn(() =>
+ Promise.resolve({
+ data: {
+ session: {
+ user: { uId: "user-123" },
+ },
+ },
+ })
+ ),
+ onAuthStateChange: jest.fn(() => ({
+ data: {
+ subscription: {
+ unsubscribe: jest.fn(),
+ },
+ },
+ })),
+ },
+ from: jest.fn((table) => {
+ if (table === "subjects") {
+ return {
+ select: mockSelectSubject,
+ delete: mockDeleteSubject,
+ };
+ }
+
+ if (table === "assignments") {
+ return {
+ select: mockSelectAssignments,
+ };
+ }
+
+ return {};
+ }),
+ },
+ };
+});
+
+const alertSpy = jest.spyOn(Alert, "alert");
+
+test("deletes a subject and navigates back", async () => {
+ mockSingleSubject.mockResolvedValue({
+ data: {
+ sId: "subject-123",
+ title: "ikt205g26v",
+ uId: "user-123",
+ },
+ error: null,
+ });
+ mockOrderAssignments.mockResolvedValue({ data: [], error: null, })
+ mockDeleteSubjectEq.mockResolvedValue({ error: null, });
+
+ const screen = render();
+ fireEvent.press(await screen.findByTestId("delete-subject-button"));
+
+ expect(alertSpy).toHaveBeenCalledWith(
+ "Delete Subject",
+ "Are you sure you want to delete this subject?",
+ expect.any(Array),
+ );
+
+ const alertButtons = alertSpy.mock.calls[0][2];
+ const confirmDeleteButton = alertButtons[1];
+
+ await confirmDeleteButton.onPress();
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("subjects");
+ expect(mockDeleteSubject).toHaveBeenCalled();
+ expect(mockDeleteSubjectEq).toHaveBeenCalledWith("sId", "subject-123");
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/subject/editSubject.test.tsx b/__tests__/subject/editSubject.test.tsx
new file mode 100644
index 0000000..f1c1790
--- /dev/null
+++ b/__tests__/subject/editSubject.test.tsx
@@ -0,0 +1,72 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import EditSubject from "../../app/subject/editSubject";
+
+const mockUpdateEq = jest.fn();
+const mockUpdate = jest.fn(() => ({ eq: mockUpdateEq, }));
+const mockSingle = jest.fn();
+const mockSelectEq = jest.fn(() => ({ single: mockSingle, }));
+const mockSelect = jest.fn(() => ({ eq: mockSelectEq, }));
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ sId: "subject-123",
+ }),
+ useFocusEffect: (callback: () => void) => callback(),
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { id: "user-123" } },
+ error: null,
+ })
+ ),
+ },
+ from: jest.fn(() => ({
+ select: mockSelect,
+ update: mockUpdate,
+ })),
+ },
+ };
+});
+
+test("updates a subject and navigates back", async () => {
+ mockSingle.mockResolvedValue({
+ data: {
+ sId: "subject-123",
+ title: "ikt205g26v",
+ uId: "user-123",
+ },
+ error: null,
+ });
+ mockUpdateEq.mockResolvedValue({ error: null, });
+
+ const screen = render();
+ fireEvent.changeText(await screen.findByTestId("subject-title-input"), "ikt206g26v");
+ fireEvent.press(screen.getByTestId("edit-subject-button"));
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("subjects");
+ expect(mockSelect).toHaveBeenCalled();
+ expect(mockUpdate).toHaveBeenCalledWith(
+ expect.objectContaining({
+ title: "ikt206g26v",
+ uId: "user-123",
+ })
+ );
+ expect(mockUpdateEq).toHaveBeenCalledWith("sId", "subject-123");
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/task/createTask.test.tsx b/__tests__/task/createTask.test.tsx
new file mode 100644
index 0000000..61bd198
--- /dev/null
+++ b/__tests__/task/createTask.test.tsx
@@ -0,0 +1,55 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import CreateTask from "../../app/task/createTask";
+
+const mockInsert = jest.fn();
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ aId: null,
+ }),
+}));
+
+jest.mock("@/lib/progress", () => ({
+ CheckAssignmentCompletion: jest.fn(),
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { id: "user-123" } },
+ error: null,
+ })
+ ),
+ },
+ from: jest.fn(() => ({
+ insert: mockInsert,
+ })),
+ },
+ };
+});
+
+test("creates a task and navigates back", async () => {
+ mockInsert.mockResolvedValue({ error: null });
+
+ const screen = render();
+ fireEvent.changeText(screen.getByTestId("task-title-input"), "Read chapter 4");
+ fireEvent.press(screen.getByTestId("create-task-button"));
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("tasks");
+ expect(mockInsert).toHaveBeenCalled();
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/task/deleteTask.test.tsx b/__tests__/task/deleteTask.test.tsx
new file mode 100644
index 0000000..dc6d162
--- /dev/null
+++ b/__tests__/task/deleteTask.test.tsx
@@ -0,0 +1,97 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import { Alert } from "react-native";
+import ViewDetailsTask from "../../app/task/viewDetailsTask";
+
+const mockSingleTask = jest.fn();
+const mockSelectTaskEq = jest.fn(() => ({ single: mockSingleTask, }));
+const mockSelectTask = jest.fn(() => ({ eq: mockSelectTaskEq, }));
+const mockDeleteTaskEq = jest.fn();
+const mockDeleteTask = jest.fn(() => ({ eq: mockDeleteTaskEq, }));
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ tId: "task-123",
+ }),
+ useFocusEffect: (callback: () => void) => callback(),
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { uId: "user-123" } },
+ error: null,
+ })
+ ),
+ getSession: jest.fn(() =>
+ Promise.resolve({
+ data: {
+ session: {
+ user: { uId: "user-123" },
+ },
+ },
+ })
+ ),
+ onAuthStateChange: jest.fn(() => ({
+ data: {
+ subscription: {
+ unsubscribe: jest.fn(),
+ },
+ },
+ })),
+ },
+ from: jest.fn(() => {
+ return {
+ select: mockSelectTask,
+ delete: mockDeleteTask,
+ };
+ }),
+ },
+ };
+});
+
+const alertSpy = jest.spyOn(Alert, "alert");
+
+test("deletes a task and navigates back", async () => {
+ mockSingleTask.mockResolvedValue({
+ data: {
+ tId: "task-123",
+ title: "Read chapter 4",
+ uId: "user-123",
+ },
+ error: null,
+ });
+ mockDeleteTaskEq.mockResolvedValue({ error: null, });
+
+ const screen = render();
+ fireEvent.press(await screen.findByTestId("delete-task-button"));
+
+ expect(alertSpy).toHaveBeenCalledWith(
+ "Delete Task",
+ "Are you sure you want to delete this task?",
+ expect.any(Array),
+ );
+
+ const alertButtons = alertSpy.mock.calls[0][2];
+ const confirmDeleteButton = alertButtons[1];
+
+ await confirmDeleteButton.onPress();
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("tasks");
+ expect(mockDeleteTask).toHaveBeenCalled();
+ expect(mockDeleteTaskEq).toHaveBeenCalledWith("tId", "task-123");
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/__tests__/task/editTask.test.tsx b/__tests__/task/editTask.test.tsx
new file mode 100644
index 0000000..fcff96c
--- /dev/null
+++ b/__tests__/task/editTask.test.tsx
@@ -0,0 +1,76 @@
+import { supabase } from "@/lib/supabase";
+import { fireEvent, render, waitFor } from "@testing-library/react-native";
+import { router } from "expo-router";
+import EditTask from "../../app/task/editTask";
+
+const mockUpdateEq = jest.fn();
+const mockUpdate = jest.fn(() => ({ eq: mockUpdateEq, }));
+const mockSingle = jest.fn();
+const mockSelectEq = jest.fn(() => ({ single: mockSingle, }));
+const mockSelect = jest.fn(() => ({ eq: mockSelectEq, }));
+
+jest.mock("expo-router", () => ({
+ router: {
+ back: jest.fn(),
+ replace: jest.fn(),
+ },
+ Stack: {
+ Screen: () => null,
+ },
+ useLocalSearchParams: () => ({
+ tId: "task-123",
+ }),
+ useFocusEffect: (callback: () => void) => callback(),
+}));
+
+jest.mock("@/lib/progress", () => ({
+ CheckAssignmentCompletion: jest.fn(),
+}));
+
+jest.mock("@/lib/supabase", () => {
+ return {
+ supabase: {
+ auth: {
+ getUser: jest.fn(() =>
+ Promise.resolve({
+ data: { user: { id: "user-123" } },
+ error: null,
+ })
+ ),
+ },
+ from: jest.fn(() => ({
+ select: mockSelect,
+ update: mockUpdate,
+ })),
+ },
+ };
+});
+
+test("updates a task and navigates back", async () => {
+ mockSingle.mockResolvedValue({
+ data: {
+ tId: "task-123",
+ title: "Read chapter 4",
+ uId: "user-123",
+ },
+ error: null,
+ });
+ mockUpdateEq.mockResolvedValue({ error: null, });
+
+ const screen = render();
+ fireEvent.changeText(await screen.findByTestId("task-title-input"), "Read chapter 5");
+ fireEvent.press(screen.getByTestId("edit-task-button"));
+
+ await waitFor(() => {
+ expect(supabase.from).toHaveBeenCalledWith("tasks");
+ expect(mockSelect).toHaveBeenCalled();
+ expect(mockUpdate).toHaveBeenCalledWith(
+ expect.objectContaining({
+ title: "Read chapter 5",
+ uId: "user-123",
+ })
+ );
+ expect(mockUpdateEq).toHaveBeenCalledWith("tId", "task-123");
+ expect(router.back).toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/app.json b/app.json
index f4860ed..38def58 100644
--- a/app.json
+++ b/app.json
@@ -1,7 +1,7 @@
{
"expo": {
"name": "Study-Sprint",
- "slug": "Study-Sprint",
+ "slug": "study-sprint",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/images/icon.png",
@@ -49,8 +49,9 @@
"extra": {
"router": {},
"eas": {
- "projectId": "25652385-934a-4a29-8fa7-deff3281e03e"
+ "projectId": "d9e26d91-0f0c-4b97-b11a-20be2916e9f3"
}
- }
+ },
+ "owner": "ikt205g26v-g18"
}
}
diff --git a/app/assignment/createAssignment.tsx b/app/assignment/createAssignment.tsx
index f377cb0..2eb879f 100644
--- a/app/assignment/createAssignment.tsx
+++ b/app/assignment/createAssignment.tsx
@@ -153,6 +153,7 @@ export default function CreateAssignment() {
Title
{assignment.isCompleted ? 'Completed' : 'Not Completed'}
-
+
{isSaving && (
)}
diff --git a/app/assignment/viewDetailsAssignment.tsx b/app/assignment/viewDetailsAssignment.tsx
index e7dc364..b329659 100644
--- a/app/assignment/viewDetailsAssignment.tsx
+++ b/app/assignment/viewDetailsAssignment.tsx
@@ -198,7 +198,7 @@ export default function ViewDetailsAssignment() {