mirror of
https://github.com/PrivateCaptcha/PrivateCaptcha.git
synced 2026-05-12 07:50:47 -05:00
Cosmetic improvements
This commit is contained in:
@@ -32,6 +32,12 @@
|
||||
- handlers and routes for Portal part of the server are setup in `pkg/portal/server.go` and `pkg/portal/server_enterprise.go`
|
||||
- maintenance jobs are defined in `pkg/maintenance/` package and scheduled in `cmd/server/main.go`
|
||||
|
||||
### Frontend
|
||||
|
||||
- All frontend code (HTML, CSS, JavaScript) for Portal is in `web/` directory
|
||||
- We use htmx and Alpine.js libraries for frontend. For styles we use Tailwind CSS v3.4 (config is in `web/tailwind.config.js`)
|
||||
- Frontend code is formatted using Golang templates (with our additional functions) with entrypoint in `web/portal/templates.go`. Our templates use a similar system to Hugo static site generator where custom pages always get used with "base" templates in `web/layouts/_default` for rendering, so we can reuse functionality.
|
||||
|
||||
## Environment setup
|
||||
|
||||
- Use `make init` to initialize everything for development
|
||||
@@ -44,7 +50,7 @@
|
||||
|
||||
## Testing instructions
|
||||
|
||||
- To run all Go unit tests, run `make test-unit`
|
||||
- To run all Go unit tests, run `make test-unit` (unit tests always run with "enterprise" tag)
|
||||
- To run JS widget tests, run `make test-widget-unit`
|
||||
- To run a single Go integration test, run `make test-docker-light TEST_NAME=<your-test-name>` (prefer running a single test for debugging). Docker is required.
|
||||
- To run all Go integration tests, run `make test-docker-light`. Docker is required.
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
//go:build enterprise
|
||||
|
||||
package portal
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAuditLogsDaysFromParam(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
tests := []struct {
|
||||
input string
|
||||
expected int
|
||||
}{
|
||||
{"14", 14},
|
||||
{"30", 30},
|
||||
{"90", 90},
|
||||
{"180", 180},
|
||||
{"365", 365},
|
||||
{"", 14},
|
||||
{"invalid", 14},
|
||||
{"7", 14},
|
||||
{"100", 14},
|
||||
{"-1", 14},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.input, func(t *testing.T) {
|
||||
result := auditLogsDaysFromParam(ctx, tc.input)
|
||||
if result != tc.expected {
|
||||
t.Errorf("auditLogsDaysFromParam(%q) = %d, want %d", tc.input, result, tc.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestMaxAuditLogsForDays(t *testing.T) {
|
||||
tests := []struct {
|
||||
days int
|
||||
expected int
|
||||
}{
|
||||
{14, 1400},
|
||||
{30, 3000},
|
||||
{90, 9000},
|
||||
{180, 18000},
|
||||
{365, 36500},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
result := maxAuditLogsForDays(tc.days)
|
||||
if result != tc.expected {
|
||||
t.Errorf("maxAuditLogsForDays(%d) = %d, want %d", tc.days, result, tc.expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -90,7 +90,7 @@ func TestUserAuditLogInitFromOrg(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "org creation",
|
||||
name: "org creation",
|
||||
oldValue: nil,
|
||||
newValue: &db.AuditLogOrg{
|
||||
ID: 1,
|
||||
@@ -142,7 +142,7 @@ func TestUserAuditLogInitFromSubscription(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "subscription creation",
|
||||
name: "subscription creation",
|
||||
oldValue: nil,
|
||||
newValue: &db.AuditLogSubscription{
|
||||
Source: "external",
|
||||
@@ -176,7 +176,7 @@ func TestUserAuditLogInitFromOrgUser(t *testing.T) {
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "org user creation",
|
||||
name: "org user creation",
|
||||
oldValue: nil,
|
||||
newValue: &db.AuditLogOrgUser{
|
||||
OrgName: "Test Org",
|
||||
@@ -249,7 +249,7 @@ func TestUserAuditLogInitFromProperty(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "property creation",
|
||||
name: "property creation",
|
||||
oldValue: nil,
|
||||
newValue: &db.AuditLogProperty{
|
||||
Name: "New Property",
|
||||
@@ -294,7 +294,7 @@ func TestUserAuditLogInitFromAPIKey(t *testing.T) {
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "api key creation",
|
||||
name: "api key creation",
|
||||
oldValue: nil,
|
||||
newValue: &db.AuditLogAPIKey{
|
||||
Name: "New Key",
|
||||
@@ -787,3 +787,52 @@ func TestInitFromAPIKeyPeriodChange(t *testing.T) {
|
||||
t.Errorf("Expected Property to be 'Period', got '%s'", ul.Property)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuditLogsDaysFromParam(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
tests := []struct {
|
||||
input string
|
||||
expected int
|
||||
}{
|
||||
{"14", 14},
|
||||
{"30", 30},
|
||||
{"90", 90},
|
||||
{"180", 180},
|
||||
{"365", 365},
|
||||
{"", 14},
|
||||
{"invalid", 14},
|
||||
{"7", 14},
|
||||
{"100", 14},
|
||||
{"-1", 14},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.input, func(t *testing.T) {
|
||||
result := auditLogsDaysFromParam(ctx, tc.input)
|
||||
if result != tc.expected {
|
||||
t.Errorf("auditLogsDaysFromParam(%q) = %d, want %d", tc.input, result, tc.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestMaxAuditLogsForDays(t *testing.T) {
|
||||
tests := []struct {
|
||||
days int
|
||||
expected int
|
||||
}{
|
||||
{14, 1400},
|
||||
{30, 3000},
|
||||
{90, 9000},
|
||||
{180, 18000},
|
||||
{365, 36500},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
result := maxAuditLogsForDays(tc.days)
|
||||
if result != tc.expected {
|
||||
t.Errorf("maxAuditLogsForDays(%d) = %d, want %d", tc.days, result, tc.expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user