< Summary - Frontend Coverage Report (Windows)

Information
Class: src\components\LoginPage.js
Assembly: Default
File(s): src\components\LoginPage.js
Line coverage
100%
Covered lines: 78
Uncovered lines: 0
Coverable lines: 78
Total lines: 78
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

src\components\LoginPage.js

#LineLine coverage
 11import React, { useState } from 'react';
 12import './LoginPage.css';
 13
 14const LoginPage = ({ onLogin }) => {
 245    const [username, setUsername] = useState('');
 246    const [password, setPassword] = useState('');
 247    const [error, setError] = useState('');
 248    const [loading, setLoading] = useState(false);
 249
 2410    const handleSubmit = async (e) => {
 311        e.preventDefault();
 312        setError('');
 313        setLoading(true);
 314
 315        try {
 316            // Backend'deki yeni API'mize istek atıyoruz
 317            // Not: Basitlik için GET kullanıyoruz, gerçekte POST olmalı
 318            const response = await fetch(`http://localhost:8080/api/login?u=${username}&p=${password}`);
 219            const data = await response.json();
 220
 321            if (data.success) {
 122                // Giriş başarılı! Token ve kullanıcı bilgisini locale kaydediyoruz
 123                localStorage.setItem('auth_token', data.token);
 124                localStorage.setItem('user_role', data.role);
 125                localStorage.setItem('username', data.username);
 126
 127                onLogin(data); // App.js'e giriş yapıldığını haber ver
 128            } else {
 129                setError('Hatalı kullanıcı adı veya şifre');
 130            }
 331        } catch (err) {
 132            setError('Sunucuya bağlanılamadı. Backend çalışıyor mu?');
 333        } finally {
 334            setLoading(false);
 335        }
 336    };
 2437
 2438    return (
 2439        <div className="login-container">
 2440            <div className="login-card">
 2441                <h1>Smart HMS</h1>
 2442                <p>Industrial Intelligence Gateway</p>
 2443
 2444                <form onSubmit={handleSubmit}>
 2445                    <div className="input-group">
 2446                        <label>Kullanıcı Adı</label>
 2447                        <input
 2448                            type="text"
 2449                            value={username}
 2450                            onChange={(e) => setUsername(e.target.value)}
 2451                            placeholder="admin"
 2452                            required
 2453                        />
 2454                    </div>
 2455
 2456                    <div className="input-group">
 2457                        <label>Şifre</label>
 2458                        <input
 2459                            type="password"
 2460                            value={password}
 2461                            onChange={(e) => setPassword(e.target.value)}
 2462                            placeholder="••••••••"
 2463                            required
 2464                        />
 2465                    </div>
 2466
 2467                    <button type="submit" className="login-button" disabled={loading}>
 2468                        {loading ? 'SİSTEME GİRİLİYOR...' : 'SİSTEME GİRİŞ YAP'}
 2469                    </button>
 2470
 2471                    {error && <div className="error-message">{error}</div>}
 2472                </form>
 2473            </div>
 2474        </div>
 2475    );
 2476};
 177
 178export default LoginPage;