- mode, navigation and max_attempts columns with Go-side defaults - classes.Withheld gates every solution field of the answer feedback and the attempt result while a test attempt is open - a test's quiz detail lists no questions before the attempt starts - admin fields and lang keys for the three settings
40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
package classes_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"git.golem15.com/golem15/sm-quizzes-plugin/classes"
|
|
"git.golem15.com/golem15/sm-quizzes-plugin/models"
|
|
)
|
|
|
|
func TestIsTestAndWithheld(t *testing.T) {
|
|
if classes.IsTest(nil) {
|
|
t.Error("IsTest(nil) = true")
|
|
}
|
|
for mode, want := range map[string]bool{"": false, models.ModeLearning: false, "exam": false, models.ModeTest: true} {
|
|
if got := classes.IsTest(&models.Quiz{Mode: mode}); got != want {
|
|
t.Errorf("IsTest(mode %q) = %v, want %v", mode, got, want)
|
|
}
|
|
}
|
|
done := time.Now()
|
|
test, learning := &models.Quiz{Mode: models.ModeTest}, &models.Quiz{Mode: models.ModeLearning}
|
|
cases := []struct {
|
|
name string
|
|
a *models.Attempt
|
|
want bool
|
|
}{
|
|
{"open test", &models.Attempt{Quiz: test}, true},
|
|
{"completed test", &models.Attempt{Quiz: test, CompletedAt: &done}, false},
|
|
{"open learning", &models.Attempt{Quiz: learning}, false},
|
|
{"zero mode", &models.Attempt{Quiz: &models.Quiz{}}, false},
|
|
{"nil attempt", nil, false},
|
|
{"nil quiz", &models.Attempt{}, false},
|
|
}
|
|
for _, tc := range cases {
|
|
if got := classes.Withheld(tc.a); got != tc.want {
|
|
t.Errorf("Withheld(%s) = %v, want %v", tc.name, got, tc.want)
|
|
}
|
|
}
|
|
}
|