File size: 4,746 Bytes
03549e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.cs102.attendance;

import com.cs102.attendance.entity.*;
import com.cs102.attendance.enums.Method;
import com.cs102.attendance.enums.Status;
import com.cs102.attendance.repository.*;
import com.cs102.attendance.service.*;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalTime;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class DatabaseIntegrationTest {

    @Autowired private StudentRepository studentRepository;
    @Autowired private SessionRepository sessionRepository;
    @Autowired private AttendanceRepository attendanceRepository;
    @Autowired private FaceDataRepository faceDataRepository;
    
    @Autowired private StudentService studentService;
    @Autowired private SessionService sessionService;
    
    @Test
    @Transactional
    public void testCompleteWorkflow() {
        System.out.println("Testing complete database workflow...");
        
        // 1. Test Student Creation
        System.out.println("1. Creating student...");
        Student student = studentService.enrol("CS001", "John Doe", "CS102", "Group A", "john@example.com", "123-456-7890");
        assertNotNull(student.getId());
        assertEquals("CS001", student.getCode());
        System.out.println("Student created: " + student.getName());
        
        // 2. Test Session Creation
        System.out.println("2. Creating session...");
        Session session = sessionService.createSession("Morning Lecture", LocalDate.now(), LocalTime.of(9, 0), LocalTime.of(11, 0));
        assertNotNull(session.getId());
        assertEquals("Morning Lecture", session.getName());
        System.out.println("Session created: " + session.getName());
        
        // 3. Test Face Data Upload
        System.out.println("3. Uploading face data...");
        FaceData faceData = studentService.uploadFaceImage(student.getId(), "http://example.com/face.jpg");
        assertNotNull(faceData.getId());
        assertEquals(student.getId(), faceData.getStudent().getId());
        System.out.println("Face data uploaded");
        
        // 4. Test Attendance Record
        System.out.println("4. Creating attendance record...");
        AttendanceRecord record = new AttendanceRecord(student, session, Status.PRESENT, Method.MANUAL);
        record = attendanceRepository.save(record);
        assertNotNull(record.getId());
        assertEquals(Status.PRESENT, record.getStatus());
        System.out.println("Attendance record created");
        
        // 5. Test Repository Queries
        System.out.println("5. Testing repository queries...");
        var foundRecord = attendanceRepository.findBySessionAndStudent(session, student);
        assertTrue(foundRecord.isPresent());
        
        long presentCount = attendanceRepository.countBySessionAndStatus(session, Status.PRESENT);
        assertEquals(1, presentCount);
        System.out.println("Repository queries working");
        
        // 6. Test Relationships
        System.out.println("6. Testing entity relationships...");
        Student savedStudent = studentRepository.findById(student.getId()).orElse(null);
        assertNotNull(savedStudent);
        assertEquals(1, savedStudent.getFaceData().size());
        assertEquals(1, savedStudent.getAttendanceRecords().size());
        System.out.println("Entity relationships working");
        
        System.out.println("All database tests passed.");
    }
    
    @Test
    public void testRepositoryBasicOperations() {
        System.out.println("Testing basic repository operations...");
        
        // Test counts
        long studentCount = studentRepository.count();
        long sessionCount = sessionRepository.count();
        long attendanceCount = attendanceRepository.count();
        long faceDataCount = faceDataRepository.count();
        
        System.out.println("Current counts:");
        System.out.println("   Students: " + studentCount);
        System.out.println("   Sessions: " + sessionCount);
        System.out.println("   Attendance Records: " + attendanceCount);
        System.out.println("   Face Data: " + faceDataCount);
        
        assertTrue(studentCount >= 0);
        assertTrue(sessionCount >= 0);
        assertTrue(attendanceCount >= 0);
        assertTrue(faceDataCount >= 0);
        
        System.out.println("Repository basic operations working");
    }
}