forked from wangziqi/ruoyi-vue-pro
fix(education): fail closed on unsafe question data
This commit is contained in:
@@ -298,12 +298,12 @@ class QuestionCatalogServiceImplTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAllowAllPublishedAndActiveItems() {
|
||||
// Mixed types but all published and status != hidden/inactive → all pass
|
||||
void shouldAllowPublishedItemsWithPublishedOrAbsentStatus() {
|
||||
// Providers may omit status, but any explicit student-visible status must be PUBLISHED.
|
||||
CatalogQuestionDTO q1 = questionDto("q1", "Q1", "fill", "easy", true, null, null, null, null, null);
|
||||
CatalogQuestionDTO q2 = CatalogQuestionDTO.builder()
|
||||
.id("q2").stem("Q2").type("fill").difficulty("medium")
|
||||
.isPublished(true).status("active").build();
|
||||
.isPublished(true).status("PUBLISHED").build();
|
||||
CatalogQuestionDTO q3 = CatalogQuestionDTO.builder()
|
||||
.id("q3").stem("Q3").type("short_answer").difficulty("hard")
|
||||
.isPublished(true).status(null).build();
|
||||
|
||||
@@ -14,6 +14,20 @@ import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class QuestionContentSafetyTest {
|
||||
|
||||
@Test
|
||||
void shouldAllowOnlyPublishedProviderStatusWhenPresent() {
|
||||
CatalogQuestionDTO published = CatalogQuestionDTO.builder().isPublished(true).status("PUBLISHED").build();
|
||||
assertDoesNotThrow(() -> QuestionContentSafety.validateVisibleProviderQuestion(
|
||||
published, UNSAFE_PROVIDER_PAYLOAD));
|
||||
|
||||
for (String status : List.of("DRAFT", "DISABLED", "UNKNOWN", "HIDDEN", "INACTIVE")) {
|
||||
CatalogQuestionDTO unsafe = CatalogQuestionDTO.builder().isPublished(true).status(status).build();
|
||||
ServiceException ex = assertThrows(ServiceException.class,
|
||||
() -> QuestionContentSafety.validateVisibleProviderQuestion(unsafe, UNSAFE_PROVIDER_PAYLOAD));
|
||||
assertEquals(UNSAFE_PROVIDER_PAYLOAD.getCode(), ex.getCode());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAcceptAndOrderValidOptionBackedQuestion() {
|
||||
List<SafeOption> options = QuestionContentSafety.validateProviderOptions(" choice ", List.of(
|
||||
|
||||
Reference in New Issue
Block a user