Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#11810] Remove archive courses feature #11896

Open
wants to merge 21 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
e266200
Remove archive feature from tests, api and frontend
daongochieu2810 Jul 11, 2022
2850ce2
Completely remove archive feature
daongochieu2810 Jul 11, 2022
0009246
Update old actions
daongochieu2810 Jul 11, 2022
25e201d
Add migration script to remove isArchived field for instructor
daongochieu2810 Jul 11, 2022
5781590
Merge branch 'master' into 11810-remove-archive-courses-feature
daongochieu2810 Jul 11, 2022
7213a14
Update migration script
daongochieu2810 Jul 12, 2022
d4a882f
Fix lint
daongochieu2810 Jul 13, 2022
c646fc9
Merge branch 'master' into 11810-remove-archive-courses-feature
daongochieu2810 Jul 14, 2022
80e1cd0
Update GetCoursesActionTest corresponding to test data changes
daongochieu2810 Jul 14, 2022
95bceae
Fix unit test for feedback session logic
daongochieu2810 Jul 14, 2022
c3287a3
Update student search test due to removal of students of archived cou…
daongochieu2810 Jul 14, 2022
449022d
Fix frontend unit tests
daongochieu2810 Jul 14, 2022
f9a682b
Update e2e tests related to archive course feature
daongochieu2810 Jul 21, 2022
820f95f
Merge with master
daongochieu2810 Jul 21, 2022
f469978
Update e2e test data for InstructorCoursesPage
daongochieu2810 Jul 30, 2022
9597a61
Merge branch 'master' into 11810-remove-archive-courses-feature
daongochieu2810 Jul 30, 2022
a35e16c
Merge with master
daongochieu2810 Aug 5, 2022
3c92d80
Fix e2e tests
daongochieu2810 Aug 6, 2022
31240af
Remove remaining archive course feature
daongochieu2810 Aug 7, 2022
877093f
Merge with master
daongochieu2810 Aug 10, 2022
4c02ca0
Fix lint
daongochieu2810 Aug 10, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import teammates.storage.entity.Instructor;

/**
* Script to change all null value to false in the isArchived field for Instructor entity.
* Script to remove the isArchived field for Instructor entity.
*/
public class DataMigrationForInstructorNullIsArchivedField extends DataMigrationEntitiesBaseScript<Instructor> {
public class DataMigrationToRemoveIsArchivedField extends DataMigrationEntitiesBaseScript<Instructor> {

public static void main(String[] args) {
new DataMigrationForInstructorNullIsArchivedField().doOperationRemotely();
new DataMigrationToRemoveIsArchivedField().doOperationRemotely();
}

@Override
Expand All @@ -30,17 +30,14 @@ protected boolean isMigrationNeeded(Instructor instructor) {
try {
Field isArchivedField = instructor.getClass().getDeclaredField("isArchived");
isArchivedField.setAccessible(true);
return isArchivedField.get(instructor) == null;
return isArchivedField.get(instructor) != null;
} catch (ReflectiveOperationException e) {
return true;
return false;
}
}

@Override
protected void migrateEntity(Instructor instructor) {
instructor.setIsArchived(instructor.getIsArchived());

saveEntityDeferred(instructor);
}

}
4 changes: 0 additions & 4 deletions src/e2e/java/teammates/e2e/cases/BaseE2ETestCase.java
Original file line number Diff line number Diff line change
Expand Up @@ -249,10 +249,6 @@ protected CourseAttributes getCourse(CourseAttributes course) {
return getCourse(course.getId());
}

CourseAttributes getArchivedCourse(String instructorId, String courseId) {
return BACKDOOR.getArchivedCourse(instructorId, courseId);
}

FeedbackQuestionAttributes getFeedbackQuestion(String courseId, String feedbackSessionName, int qnNumber) {
return BACKDOOR.getFeedbackQuestion(courseId, feedbackSessionName, qnNumber);
}
Expand Down
99 changes: 7 additions & 92 deletions src/e2e/java/teammates/e2e/cases/InstructorCoursesPageE2ETest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import teammates.common.util.AppUrl;
import teammates.common.util.Const;
import teammates.e2e.pageobjects.InstructorCoursesPage;
import teammates.test.ThreadHelper;

/**
* SUT: {@link Const.WebPageURIs#INSTRUCTOR_COURSES_PAGE}.
Expand Down Expand Up @@ -79,12 +78,10 @@ public void testAll() {
InstructorCoursesPage coursesPage = loginToPage(url, InstructorCoursesPage.class, instructorId);

______TS("verify loaded data");
CourseAttributes[] activeCourses = { courses[0], courses[3] };
CourseAttributes[] archivedCourses = { courses[1] };
CourseAttributes[] activeCourses = { courses[1], courses[0], courses[3] };
CourseAttributes[] deletedCourses = { courses[2] };

coursesPage.verifyActiveCoursesDetails(activeCourses);
coursesPage.verifyArchivedCoursesDetails(archivedCourses);
coursesPage.verifyDeletedCoursesDetails(deletedCourses);

______TS("verify statistics");
Expand All @@ -94,7 +91,7 @@ public void testAll() {
coursesPage.verifyNotModifiable(courses[0].getId());

______TS("add new course");
CourseAttributes[] activeCoursesWithNewCourse = { courses[0], courses[3], newCourse };
CourseAttributes[] activeCoursesWithNewCourse = { courses[0], courses[3], courses[1], newCourse };
coursesPage.addCourse(newCourse);

coursesPage.verifyStatusMessage("The course has been added.");
Expand All @@ -103,7 +100,7 @@ public void testAll() {
verifyPresentInDatabase(newCourse);

______TS("copy course");
CourseAttributes[] activeCoursesWithCopyCourse = { courses[0], courses[3], newCourse, copyCourse };
CourseAttributes[] activeCoursesWithCopyCourse = { courses[0], courses[3], courses[1], newCourse, copyCourse };
coursesPage.copyCourse(courses[3].getId(), copyCourse);

coursesPage.verifyStatusMessage("The course has been added.");
Expand All @@ -112,41 +109,21 @@ public void testAll() {
verifyPresentInDatabase(copyCourse);
verifyPresentInDatabase(copySession);

______TS("archive course");
CourseAttributes[] archivedCoursesWithNewCourse = { newCourse, courses[1] };
coursesPage.archiveCourse(newCourse.getId());

coursesPage.verifyStatusMessage("The course " + newCourse.getId() + " has been archived. "
+ "It will not appear on the home page anymore.");
coursesPage.verifyNumActiveCourses(3);
coursesPage.verifyArchivedCoursesDetails(archivedCoursesWithNewCourse);
verifyCourseArchivedInDatabase(instructorId, newCourse);

______TS("unarchive course");
CourseAttributes[] activeCoursesWithNewCourseSortedByName = { copyCourse, courses[3], newCourse, courses[0] };
coursesPage.unarchiveCourse(newCourse.getId());

coursesPage.verifyStatusMessage("The course has been unarchived.");
coursesPage.verifyNumArchivedCourses(1);
coursesPage.sortByCourseName();
coursesPage.verifyActiveCoursesDetails(activeCoursesWithNewCourseSortedByName);
verifyCourseNotArchivedInDatabase(instructorId, newCourse);

______TS("move active course to recycle bin");
newCourse.setDeletedAt(Instant.now());
CourseAttributes[] deletedCoursesWithNewCourse = { newCourse, courses[2] };
coursesPage.moveCourseToRecycleBin(newCourse.getId());

coursesPage.verifyStatusMessage("The course " + newCourse.getId() + " has been deleted. "
+ "You can restore it from the Recycle Bin manually.");
coursesPage.verifyNumActiveCourses(3);
coursesPage.verifyNumActiveCourses(4);
coursesPage.verifyDeletedCoursesDetails(deletedCoursesWithNewCourse);
assertTrue(BACKDOOR.isCourseInRecycleBin(newCourse.getId()));

______TS("restore active course");
newCourse.setDeletedAt(null);
CourseAttributes[] activeCoursesWithNewCourseSortedByCreationDate =
{ copyCourse, newCourse, courses[0], courses[3] };
{ copyCourse, newCourse, courses[1], courses[0], courses[3] };
coursesPage.restoreCourse(newCourse.getId());

coursesPage.verifyStatusMessage("The course " + newCourse.getId() + " has been restored.");
Expand All @@ -156,61 +133,21 @@ public void testAll() {
coursesPage.verifyActiveCoursesDetails(activeCoursesWithNewCourseSortedByCreationDate);
assertFalse(BACKDOOR.isCourseInRecycleBin(newCourse.getId()));

______TS("move archived course to recycle bin");
coursesPage.archiveCourse(newCourse.getId());
newCourse.setDeletedAt(Instant.now());
coursesPage.moveArchivedCourseToRecycleBin(newCourse.getId());

coursesPage.verifyStatusMessage("The course " + newCourse.getId() + " has been deleted. "
+ "You can restore it from the Recycle Bin manually.");
coursesPage.verifyNumArchivedCourses(1);
coursesPage.verifyDeletedCoursesDetails(deletedCoursesWithNewCourse);
assertTrue(BACKDOOR.isCourseInRecycleBin(newCourse.getId()));

______TS("restore archived course");
newCourse.setDeletedAt(null);
coursesPage.restoreCourse(newCourse.getId());

coursesPage.verifyStatusMessage("The course " + newCourse.getId() + " has been restored.");
coursesPage.waitForPageToLoad();
coursesPage.verifyNumDeletedCourses(1);
coursesPage.verifyArchivedCoursesDetails(archivedCoursesWithNewCourse);
assertFalse(BACKDOOR.isCourseInRecycleBin(newCourse.getId()));
verifyCourseArchivedInDatabase(instructorId, newCourse);

______TS("permanently delete course");
coursesPage.moveArchivedCourseToRecycleBin(newCourse.getId());
coursesPage.moveCourseToRecycleBin(newCourse.getId());
coursesPage.deleteCourse(newCourse.getId());

coursesPage.verifyStatusMessage("The course " + newCourse.getId()
+ " has been permanently deleted.");
coursesPage.verifyNumDeletedCourses(1);
verifyAbsentInDatabase(newCourse);

______TS("restore all");
coursesPage.moveArchivedCourseToRecycleBin(courses[1].getId());
CourseAttributes[] activeCoursesWithRestored = { courses[0], courses[3], courses[2], copyCourse };
coursesPage.restoreAllCourses();

coursesPage.verifyStatusMessage("All courses have been restored.");
coursesPage.waitForPageToLoad();
coursesPage.sortByCourseId();
coursesPage.verifyActiveCoursesDetails(activeCoursesWithRestored);
coursesPage.verifyArchivedCoursesDetails(archivedCourses);
coursesPage.verifyNumDeletedCourses(0);
assertFalse(BACKDOOR.isCourseInRecycleBin(courses[1].getId()));
assertFalse(BACKDOOR.isCourseInRecycleBin(courses[2].getId()));

______TS("permanently delete all");
coursesPage.moveArchivedCourseToRecycleBin(courses[1].getId());
coursesPage.moveCourseToRecycleBin(courses[2].getId());
coursesPage.deleteAllCourses();

coursesPage.verifyStatusMessage("All courses have been permanently deleted.");
coursesPage.verifyNumActiveCourses(3);
coursesPage.verifyNumArchivedCourses(0);
coursesPage.verifyNumActiveCourses(4);
coursesPage.verifyNumDeletedCourses(0);
verifyAbsentInDatabase(courses[1]);
verifyAbsentInDatabase(courses[2]);
}

Expand Down Expand Up @@ -242,26 +179,4 @@ private void verifyActiveCourseStatistics(InstructorCoursesPage coursesPage, Cou
coursesPage.verifyActiveCourseStatistics(course, Integer.toString(numSections), Integer.toString(numTeams),
Integer.toString(numStudents), Integer.toString(numUnregistered));
}

private void verifyCourseArchivedInDatabase(String instructorId, CourseAttributes course) {
int retryLimit = 5;
CourseAttributes actual = getArchivedCourse(instructorId, course.getId());
while (actual == null && retryLimit > 0) {
retryLimit--;
ThreadHelper.waitFor(1000);
actual = getArchivedCourse(instructorId, course.getId());
}
assertEquals(actual, course);
}

private void verifyCourseNotArchivedInDatabase(String instructorId, CourseAttributes course) {
int retryLimit = 5;
CourseAttributes actual = getArchivedCourse(instructorId, course.getId());
while (actual != null && retryLimit > 0) {
retryLimit--;
ThreadHelper.waitFor(1000);
actual = getArchivedCourse(instructorId, course.getId());
}
assertNull(actual);
}
}
22 changes: 1 addition & 21 deletions src/e2e/java/teammates/e2e/cases/InstructorHomePageE2ETest.java
Original file line number Diff line number Diff line change
Expand Up @@ -176,27 +176,18 @@ public void testAll() {
homePage.verifyStatusMessage("The feedback session has been deleted. "
+ "You can restore it from the 'Sessions' tab.");
homePage.sortCoursesByCreationDate();
courseIndex = 1;
otherCourseIndex = 0;
homePage.verifyCourseTabDetails(otherCourseIndex, otherCourse, otherCourseSessions);
assertNotNull(getSoftDeletedSession(copiedSession.getFeedbackSessionName(),
instructor.getGoogleId()));

______TS("archive course");
homePage.archiveCourse(courseIndex);

homePage.verifyStatusMessage("The course " + course.getId() + " has been archived. "
+ "You can retrieve it from the Courses page.");
homePage.verifyNumCourses(1);
verifyCourseArchivedInDatabase(instructor.getGoogleId(), course);

______TS("delete course");
otherCourseIndex = 0;
homePage.deleteCourse(otherCourseIndex);

homePage.verifyStatusMessage("The course " + otherCourse.getId() + " has been deleted. "
+ "You can restore it from the Recycle Bin manually.");
homePage.verifyNumCourses(0);
homePage.verifyNumCourses(1);
assertTrue(BACKDOOR.isCourseInRecycleBin(otherCourse.getId()));
}

Expand Down Expand Up @@ -237,15 +228,4 @@ private void verifySessionPublishedState(FeedbackSessionAttributes feedbackSessi
}
assertEquals(actual.isPublished(), state);
}

private void verifyCourseArchivedInDatabase(String instructorId, CourseAttributes course) {
int retryLimit = 5;
CourseAttributes actual = getArchivedCourse(instructorId, course.getId());
while (actual == null && retryLimit > 0) {
retryLimit--;
ThreadHelper.waitFor(1000);
actual = getArchivedCourse(instructorId, course.getId());
}
assertEquals(actual, course);
}
}
Loading