(Feat): Initial Commit
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled

This commit is contained in:
2026-07-03 19:41:31 +05:30
commit 7e940c83a7
461 changed files with 45002 additions and 0 deletions

View File

@@ -0,0 +1,169 @@
package push_test
import (
"database/sql"
"net/http"
"testing"
"allaboutapps.dev/aw/go-starter/internal/api"
"allaboutapps.dev/aw/go-starter/internal/api/httperrors"
"allaboutapps.dev/aw/go-starter/internal/models"
"allaboutapps.dev/aw/go-starter/internal/test"
"allaboutapps.dev/aw/go-starter/internal/test/fixtures"
"github.com/aarondl/sqlboiler/v4/boil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestPutUpdatePushTokenSuccess(t *testing.T) {
test.WithTestServer(t, func(s *api.Server) {
ctx := t.Context()
fix := fixtures.Fixtures()
//nolint:gosec
testToken := "869f6deb-73e6-4691-9d40-2a2a794006cf"
testProvider := models.ProviderTypeFCM
payload := test.GenericPayload{
"newToken": testToken,
"provider": testProvider,
}
res := test.PerformRequest(t, s, "PUT", "/api/v1/push/token", payload, test.HeadersWithAuth(t, fix.User1AccessToken1.Token))
assert.Equal(t, http.StatusOK, res.Result().StatusCode)
newToken, err := models.PushTokens(models.PushTokenWhere.Token.EQ(testToken)).One(ctx, s.DB)
require.NoError(t, err)
assert.NotEmpty(t, newToken.ID)
assert.Equal(t, testToken, newToken.Token)
assert.Equal(t, testProvider, newToken.Provider)
assert.Equal(t, fix.User1.ID, newToken.UserID)
})
}
func TestPutUpdatePushTokenSuccessWithOldToken(t *testing.T) {
test.WithTestServer(t, func(s *api.Server) {
ctx := t.Context()
fix := fixtures.Fixtures()
//nolint:gosec
oldToken := "6803ccb4-c91d-47b2-960e-291afa5e29cd"
oldPushToken := models.PushToken{
Token: oldToken,
Provider: models.ProviderTypeFCM,
UserID: fix.User1.ID,
}
err := oldPushToken.Insert(ctx, s.DB, boil.Infer())
require.NoError(t, err)
//nolint:gosec
testToken := "af55b6cf-1fb0-4bb7-960c-25268a5ce7c3"
testProvider := models.ProviderTypeFCM
payload := test.GenericPayload{
"newToken": testToken,
"provider": testProvider,
"oldToken": oldToken,
}
res := test.PerformRequest(t, s, "PUT", "/api/v1/push/token", payload, test.HeadersWithAuth(t, fix.User1AccessToken1.Token))
assert.Equal(t, http.StatusOK, res.Result().StatusCode)
newToken, err := models.PushTokens(models.PushTokenWhere.Token.EQ(testToken)).One(ctx, s.DB)
require.NoError(t, err)
assert.NotEmpty(t, newToken.ID)
assert.Equal(t, testToken, newToken.Token)
assert.Equal(t, testProvider, newToken.Provider)
assert.Equal(t, fix.User1.ID, newToken.UserID)
err = oldPushToken.Reload(ctx, s.DB)
require.ErrorIs(t, err, sql.ErrNoRows)
})
}
func TestPutUpdatePushTokenWithDuplicateToken(t *testing.T) {
test.WithTestServer(t, func(s *api.Server) {
ctx := t.Context()
fix := fixtures.Fixtures()
//nolint:gosec
oldToken := "6803ccb4-c91d-47b2-960e-291afa5e29cd"
oldPushToken := models.PushToken{
Token: oldToken,
Provider: models.ProviderTypeFCM,
UserID: fix.User1.ID,
}
err := oldPushToken.Insert(ctx, s.DB, boil.Infer())
require.NoError(t, err)
testProvider := models.ProviderTypeFCM
payload := test.GenericPayload{
"newToken": oldToken,
"provider": testProvider,
"oldToken": oldToken,
}
oldCnt, err := fix.User1.PushTokens().Count(ctx, s.DB)
require.NoError(t, err)
res := test.PerformRequest(t, s, "PUT", "/api/v1/push/token", payload, test.HeadersWithAuth(t, fix.User1AccessToken1.Token))
test.RequireHTTPError(t, res, httperrors.ErrConflictPushToken)
err = oldPushToken.Reload(ctx, s.DB)
require.NoError(t, err)
cnt, err := fix.User1.PushTokens().Count(ctx, s.DB)
require.NoError(t, err)
assert.Equal(t, oldCnt, cnt)
})
}
func TestPutUpdatePushTokenWithOldTokenNotfound(t *testing.T) {
test.WithTestServer(t, func(s *api.Server) {
ctx := t.Context()
fix := fixtures.Fixtures()
//nolint:gosec
oldToken := "cc08624a-b40d-4b8e-bbfe-f62aabb47592"
oldPushToken := models.PushToken{
Token: oldToken,
Provider: models.ProviderTypeFCM,
UserID: fix.User1.ID,
}
err := oldPushToken.Insert(ctx, s.DB, boil.Infer())
require.NoError(t, err)
oldCnt, err := fix.User1.PushTokens().Count(ctx, s.DB)
require.NoError(t, err)
//nolint:gosec
testToken := "8e4ad85f-cbb6-4ef3-a455-d9d8bd8917b3"
testProvider := models.ProviderTypeFCM
payload := test.GenericPayload{
"newToken": testToken,
"provider": testProvider,
"oldToken": "3199aa21-eb41-47dd-9287-338e9e88a5ae",
}
res := test.PerformRequest(t, s, "PUT", "/api/v1/push/token", payload, test.HeadersWithAuth(t, fix.User1AccessToken1.Token))
test.RequireHTTPError(t, res, httperrors.ErrNotFoundOldPushToken)
newToken, err := models.PushTokens(models.PushTokenWhere.Token.EQ(testToken)).One(ctx, s.DB)
require.NoError(t, err)
assert.NotEmpty(t, newToken.ID)
assert.Equal(t, testToken, newToken.Token)
assert.Equal(t, testProvider, newToken.Provider)
assert.Equal(t, fix.User1.ID, newToken.UserID)
err = oldPushToken.Reload(ctx, s.DB)
require.NoError(t, err)
cnt, err := fix.User1.PushTokens().Count(ctx, s.DB)
require.NoError(t, err)
assert.Equal(t, oldCnt+1, cnt)
})
}