modifier studentEnrolled() {
vm.startPrank(student_1);
usdc.approve(address(levelOneProxy), schoolFees);
levelOneProxy.enroll();
vm.stopPrank();
vm.startPrank(student_2);
usdc.approve(address(levelOneProxy), schoolFees);
levelOneProxy.enroll();
vm.stopPrank();
vm.startPrank(student_3);
usdc.approve(address(levelOneProxy), schoolFees);
levelOneProxy.enroll();
vm.stopPrank();
_;
}
modifier addTeachers() {
vm.startPrank(principal);
levelOneProxy.addTeacher(teacher_1);
levelOneProxy.addTeacher(teacher_2);
vm.stopPrank();
_;
}
modifier startSession() {
vm.startPrank(principal);
levelOneProxy.startSession(cutOffScore);
vm.stopPrank();
_;
}
...
function test_no_check_for_cutScore() public studentEnrolled addTeachers startSession {
assertEq(cutOffScore, 70);
vm.startPrank(teacher_1);
vm.warp(block.timestamp + 1 weeks);
for(uint256 i = 0; i < 4; i++) {
levelOneProxy.giveReview(student_1, false);
vm.warp(block.timestamp + 1 weeks);
}
vm.stopPrank();
assertEq(levelOneProxy.studentScore(student_1), 60);
vm.startPrank(principal);
LevelTwoEdit levelTwo = new LevelTwoEdit();
levelOneProxy.graduateAndUpgrade(address(levelTwo), abi.encodeWithSignature("graduate()"));
LevelTwoEdit levelTwoProxy = LevelTwoEdit(address(levelOneProxy));
assertTrue(levelTwoProxy.isStudent(student_1));
vm.stopPrank();
}
function graduateAndUpgrade(address _levelTwo, bytes memory) public onlyPrincipal {
...
+ uint256 totalStudents = listOfStudents.length;
+ for(uint256 n = 0; n < totalStudents; n++) {
+ address _student = listOfStudents[n];
+ if (studentScore[_student] < cutOffScore) {
+ expel(_student);
+ }
}
...
}