diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 54b2fb3..927925f 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -382,7 +382,7 @@ jobs: test: name: Tests (${{ matrix.label }}) - needs: [go-vet-dev, go-vet-prod, go-lint, go-staticcheck-dev, go-staticcheck-prod, go-gosec-dev, go-gosec-prod, go-mod-tidy, vulns] + needs: [secrets-scan, go-vet-dev, go-vet-prod, go-lint, go-staticcheck-dev, go-staticcheck-prod, go-gosec-dev, go-gosec-prod, go-mod-tidy, vulns] runs-on: ubuntu-latest defaults: run: @@ -449,7 +449,7 @@ jobs: - name: Run tests working-directory: backend - run: go test -tags "${{ matrix.gotags }}" -count=1 -timeout 300s ${{ matrix.verbose }} ${{ matrix.coverflags }} ./... + run: go test -tags "${{ matrix.gotags }}" -count=1 -timeout 1800s ${{ matrix.verbose }} ${{ matrix.coverflags }} ./... env: GO_TESTING: "1" POSTGRES_HOST: postgres @@ -466,9 +466,17 @@ jobs: echo "No coverage file generated" fi + - name: Upload coverage artifact + if: matrix.label == 'dev' + uses: actions/upload-artifact@v4 + with: + name: coverage-${{ matrix.label }}-${{ github.run_id }} + path: backend/coverage.out + if-no-files-found: warn + race: name: Race (${{ matrix.label }}) - needs: [go-vet-dev, go-vet-prod, go-lint, go-staticcheck-dev, go-staticcheck-prod, go-gosec-dev, go-gosec-prod, go-mod-tidy, vulns] + needs: [secrets-scan, go-vet-dev, go-vet-prod, go-lint, go-staticcheck-dev, go-staticcheck-prod, go-gosec-dev, go-gosec-prod, go-mod-tidy, vulns] runs-on: ubuntu-latest defaults: run: @@ -531,7 +539,7 @@ jobs: - name: Run race detector working-directory: backend - run: go test -tags "${{ matrix.gotags }}" -race -count=1 -timeout 480s ./... + run: go test -tags "${{ matrix.gotags }}" -race -count=1 -timeout 1800s ./... env: GO_TESTING: "1" POSTGRES_HOST: postgres diff --git a/backend/handlers/auth/local.go b/backend/handlers/auth/local.go index 1ee6ae5..f1d215f 100644 --- a/backend/handlers/auth/local.go +++ b/backend/handlers/auth/local.go @@ -455,18 +455,9 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) { return } - // Generate refresh token for token rotation - refreshToken, err := auth.GenerateRefreshToken(r.Context(), userID, role) - if err != nil { - log.Printf("Failed to generate refresh token: %v", err) - http.Error(w, "could not generate refresh token", http.StatusInternalServerError) - return - } - _ = json.NewEncoder(w).Encode(auth.AuthResponse{ - Token: tokenString, - JTI: jti, - RefreshToken: refreshToken, + Token: tokenString, + JTI: jti, }) } @@ -504,18 +495,9 @@ func RefreshTokenHandler(w http.ResponseWriter, r *http.Request) { return } - // Also issue a refresh token (opaque, stored in DB) - refreshToken, err := auth.GenerateRefreshToken(r.Context(), userID, currentRole) - if err != nil { - log.Printf("Failed to generate refresh token: %v", err) - http.Error(w, "could not generate refresh token", http.StatusInternalServerError) - return - } - _ = json.NewEncoder(w).Encode(auth.AuthResponse{ - Token: newToken, - JTI: jti, - RefreshToken: refreshToken, + Token: newToken, + JTI: jti, }) } diff --git a/backend/internal/square/square_dev_prod_test.go b/backend/internal/square/square_dev_prod_test.go deleted file mode 100644 index 72924c3..0000000 --- a/backend/internal/square/square_dev_prod_test.go +++ /dev/null @@ -1,91 +0,0 @@ -//go:build test && dev - -package square - -import ( - "context" - "os" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestDevProdClient_CreatePayment(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - _, err := client.CreatePayment(context.Background(), CreatePaymentReq{}) - assert.Error(t, err) -} - -func TestDevProdClient_CreateCheckout(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - _, err := client.CreateCheckout(context.Background(), CreateCheckoutReq{}) - assert.Error(t, err) -} - -func TestDevProdClient_GetCheckout(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - _, err := client.GetCheckout(context.Background(), "") - assert.Error(t, err) -} - -func TestDevProdClient_RefundPayment(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - _, err := client.RefundPayment(context.Background(), RefundPaymentReq{}) - assert.Error(t, err) -} - -func TestDevProdClient_CreateCardOnFile(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - _, err := client.CreateCardOnFile(context.Background(), "", "") - assert.Error(t, err) -} - -func TestDevProdClient_CreateCardOnFileRaw(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - _, err := client.CreateCardOnFileRaw(context.Background(), "", "", 0, 0, "") - assert.Error(t, err) -} - -func TestDevProdClient_GetCardsOnFile(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - _, err := client.GetCardsOnFile(context.Background(), "") - assert.Error(t, err) -} - -func TestDevProdClient_DeleteCardOnFile(t *testing.T) { - saved := os.Getenv("SQUARE_ENVIRONMENT") - os.Setenv("SQUARE_ENVIRONMENT", "sandbox") - defer os.Setenv("SQUARE_ENVIRONMENT", saved) - - client := NewDevClient() - err := client.DeleteCardOnFile(context.Background(), "") - assert.Error(t, err) -} diff --git a/frontend/eslint.a11y.config.js b/frontend/eslint.a11y.config.js index 38120e2..27f5775 100644 --- a/frontend/eslint.a11y.config.js +++ b/frontend/eslint.a11y.config.js @@ -14,6 +14,7 @@ export default defineConfig( js.configs.recommended, ...ts.configs.recommended, ...svelte.configs.recommended, + ...svelte.configs.a11y, { languageOptions: { globals: { ...globals.browser, ...globals.node } @@ -29,10 +30,5 @@ export default defineConfig( svelteConfig } } - }, - { - rules: { - 'svelte/valid-compile': 'error' - } } );