Skip to content

Commit

Permalink
Merge branch 'djeck1432:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
WillNovus authored Feb 25, 2025
2 parents a9b8497 + 33676d6 commit 5d5777b
Show file tree
Hide file tree
Showing 7 changed files with 1,094 additions and 6,421 deletions.
6,400 changes: 0 additions & 6,400 deletions frontend/yarn.lock

This file was deleted.

70 changes: 70 additions & 0 deletions margin_app/app/tests/liquidation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
"""Tests for LiquidationCRUD in spotnet/margin_app/app/crud/liquidation.py"""
# pylint: disable=redefined-outer-name

import pytest
from app.crud.liquidation import LiquidationCRUD
from app.models.liquidation import Liquidation

@pytest.fixture
def session_fixture():
"""Fixture providing a mock database session."""
class MockSession:
"""Mock session to simulate database operations."""
def __init__(self):
self.data = []

def add(self, obj):
"""Simulate adding an object to the database."""
self.data.append(obj)

def commit(self):
"""Simulate committing a transaction (no operation)."""

def query(self, _):
"""Return a mock query object."""
class Query:
"""Mock Query class to filter and retrieve data."""
def __init__(self, data):
self.data = data

def filter_by(self, **kwargs):
"""Filter data based on provided keyword arguments."""
filtered = [
item for item in self.data
if all(getattr(item, key, None) == value for key, value in kwargs.items())
]
return Query(filtered)

def first(self):
"""Return the first element in the filtered data, or None if empty."""
return self.data[0] if self.data else None

return Query(self.data)

return MockSession()

def test_create_liquidation_success(session_fixture):
"""Test creating a liquidation record with valid data."""
liquidation_data = {"id": 1, "amount": 1000, "status": "pending"}
liquidation = LiquidationCRUD().create(session_fixture, liquidation_data) # pylint: disable=no-member
assert liquidation is not None
assert liquidation.id == 1

def test_create_liquidation_failure(session_fixture):
"""Test that creating a liquidation record with invalid data raises an error."""
liquidation_data = {"amount": -500} # Invalid data: negative amount
with pytest.raises(ValueError):
LiquidationCRUD().create(session_fixture, liquidation_data) # pylint: disable=no-member

def test_get_liquidation_success(session_fixture):
"""Test retrieving an existing liquidation record."""
liquidation_instance = Liquidation(id=1, amount=1000, status="pending")
session_fixture.add(liquidation_instance)
liquidation = LiquidationCRUD().get(session_fixture, 1) # pylint: disable=no-member
assert liquidation is not None
assert liquidation.id == 1

def test_get_liquidation_not_found(session_fixture):
"""Test retrieving a non-existent liquidation record returns None."""
liquidation = LiquidationCRUD().get(session_fixture, 999) # pylint: disable=no-member
assert liquidation is None
13 changes: 13 additions & 0 deletions margin_frontend/components/HelloWorld.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { useState } from "react";

export default function HelloWorld({ name }) {
const [count, setCount] = useState(1);
return (
<div>
<h1>
Hello {name} x{count}!
</h1>
<button onClick={() => setCount((c) => c + 1)}>Increment</button>
</div>
);
}
12 changes: 9 additions & 3 deletions margin_frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview"
"preview": "vite preview",
"test": "vitest"
},
"dependencies": {
"@tailwindcss/vite": "^4.0.8",
Expand All @@ -16,20 +17,25 @@
"react": "^19.0.0",
"react-dom": "^19.0.0",
"tailwind-merge": "^3.0.1",
"tailwindcss": "^4.0.8"
"tailwindcss": "^4.0.8",
"vitest-browser-react": "^0.1.1"
},
"devDependencies": {
"@eslint/js": "^9.19.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.3",
"@vitejs/plugin-react": "^4.3.4",
"@vitejs/plugin-react-swc": "^3.8.0",
"@vitest/browser": "^3.0.6",
"eslint": "^9.19.0",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.18",
"globals": "^15.14.0",
"jsdom": "^26.0.0",
"playwright": "^1.50.1",
"typescript": "~5.7.2",
"typescript-eslint": "^8.22.0",
"vite": "^6.1.0"
"vite": "^6.1.1",
"vitest": "^3.0.6"
}
}
12 changes: 12 additions & 0 deletions margin_frontend/test/HelloWorld.spec.test.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { expect, test } from "vitest";
import { render } from "vitest-browser-react";
import HelloWorld from "../components/HelloWorld";

test("renders name", async () => {
const { getByText, getByRole } = render(<HelloWorld name="Vitest" />);

await expect.element(getByText("Hello Vitest x1!")).toBeInTheDocument();
await getByRole("button", { name: "Increment " }).click();

await expect.element(getByText("Hello Vitest x2!")).toBeInTheDocument();
});
22 changes: 13 additions & 9 deletions margin_frontend/vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import tailwindcss from '@tailwindcss/vite'
import { defineConfig } from "vitest/config";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";

// https://vite.dev/config/
export default defineConfig({
plugins: [
react(),
tailwindcss()
],
})
plugins: [react(), tailwindcss()],
test: {
name: "react",
browser: {
enabled: true,
name: "chromium",
provider: "playwright",
},
},
});
Loading

0 comments on commit 5d5777b

Please sign in to comment.