register_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package routes
  2. import (
  3. "net/http/httptest"
  4. "testing"
  5. "git.aetherial.dev/aeth/keiji/pkg/auth"
  6. "git.aetherial.dev/aeth/keiji/pkg/storage"
  7. "git.aetherial.dev/aeth/keiji/pkg/webpages"
  8. "github.com/gin-gonic/gin"
  9. )
  10. func TestRegister(t *testing.T) {
  11. e := gin.Default()
  12. Register(e, "localhost", &storage.SQLiteRepo{}, webpages.FilesystemWebpages{}, auth.EnvAuth{})
  13. }
  14. func TestDigitalArtRoutesRequireAuthentication(t *testing.T) {
  15. gin.SetMode(gin.TestMode)
  16. e := gin.New()
  17. Register(e, "localhost", &storage.SQLiteRepo{}, webpages.FilesystemWebpages{}, auth.EnvAuth{})
  18. for _, tc := range []struct{ method, path string }{{"GET", "/admin/digital"}, {"GET", "/admin/digital/123"}, {"POST", "/admin/digital/123"}, {"DELETE", "/admin/digital/123"}} {
  19. rec := httptest.NewRecorder()
  20. e.ServeHTTP(rec, httptest.NewRequest(tc.method, tc.path, nil))
  21. if rec.Code != 401 && (rec.Code < 300 || rec.Code >= 400) {
  22. t.Fatalf("%s %s: expected redirect or unauthorized, got %d", tc.method, tc.path, rec.Code)
  23. }
  24. }
  25. }
  26. func TestLoginSecurityMiddlewareWired(t *testing.T) {
  27. t.Setenv("KEIJI_INSECURE_COOKIE", "")
  28. t.Setenv("KEIJI_TRUSTED_PROXIES", "")
  29. gin.SetMode(gin.TestMode)
  30. e := gin.New()
  31. Register(e, "localhost", &storage.SQLiteRepo{}, webpages.FilesystemWebpages{}, auth.EnvAuth{})
  32. for i := 0; i < 11; i++ {
  33. req := httptest.NewRequest("POST", "https://example.com/login", nil)
  34. rec := httptest.NewRecorder()
  35. e.ServeHTTP(rec, req)
  36. want := 403
  37. if i == 10 {
  38. want = 429
  39. }
  40. if rec.Code != want {
  41. t.Fatalf("attempt %d: got %d, want %d", i+1, rec.Code, want)
  42. }
  43. }
  44. }