Fix tests

This commit is contained in:
2026-01-19 18:25:44 +01:00
parent a7a2474e2a
commit 08fd34632a
4 changed files with 49 additions and 45 deletions

View File

@@ -1,13 +1,14 @@
package test package test
import ( import (
"blackforestbytes.com/simplecloudnotifier/push"
tt "blackforestbytes.com/simplecloudnotifier/test/util"
"fmt" "fmt"
"github.com/gin-gonic/gin"
"net/url" "net/url"
"testing" "testing"
"time" "time"
"blackforestbytes.com/simplecloudnotifier/push"
tt "blackforestbytes.com/simplecloudnotifier/test/util"
"github.com/gin-gonic/gin"
) )
func TestSendCompatWithOldUser(t *testing.T) { func TestSendCompatWithOldUser(t *testing.T) {
@@ -309,7 +310,7 @@ func TestCompatRegister(t *testing.T) {
tt.AssertEqual(t, "success", true, r0["success"]) tt.AssertEqual(t, "success", true, r0["success"])
tt.AssertEqual(t, "message", "New user registered", r0["message"]) tt.AssertEqual(t, "message", "New user registered", r0["message"])
tt.AssertEqual(t, "quota", 0, r0["quota"]) tt.AssertEqual(t, "quota", 0, r0["quota"])
tt.AssertEqual(t, "quota_max", 50, r0["quota_max"]) tt.AssertEqual(t, "quota_max", 500, r0["quota_max"])
tt.AssertEqual(t, "is_pro", false, r0["is_pro"]) tt.AssertEqual(t, "is_pro", false, r0["is_pro"])
} }
@@ -321,7 +322,7 @@ func TestCompatRegisterPro(t *testing.T) {
tt.AssertEqual(t, "success", true, r0["success"]) tt.AssertEqual(t, "success", true, r0["success"])
tt.AssertEqual(t, "message", "New user registered", r0["message"]) tt.AssertEqual(t, "message", "New user registered", r0["message"])
tt.AssertEqual(t, "quota", 0, r0["quota"]) tt.AssertEqual(t, "quota", 0, r0["quota"])
tt.AssertEqual(t, "quota_max", 5000, r0["quota_max"]) tt.AssertEqual(t, "quota_max", 15000, r0["quota_max"])
tt.AssertEqual(t, "is_pro", true, r0["is_pro"]) tt.AssertEqual(t, "is_pro", true, r0["is_pro"])
r1 := tt.RequestGet[gin.H](t, baseUrl, fmt.Sprintf("/api/register.php?fcm_token=%s&pro=%s&pro_token=%s", "DUMMY_FCM", "true", url.QueryEscape("INVALID"))) r1 := tt.RequestGet[gin.H](t, baseUrl, fmt.Sprintf("/api/register.php?fcm_token=%s&pro=%s&pro_token=%s", "DUMMY_FCM", "true", url.QueryEscape("INVALID")))
@@ -345,7 +346,7 @@ func TestCompatInfo(t *testing.T) {
tt.AssertEqual(t, "is_pro", 0, r1["is_pro"]) tt.AssertEqual(t, "is_pro", 0, r1["is_pro"])
tt.AssertEqual(t, "message", "ok", r1["message"]) tt.AssertEqual(t, "message", "ok", r1["message"])
tt.AssertEqual(t, "quota", 0, r1["quota"]) tt.AssertEqual(t, "quota", 0, r1["quota"])
tt.AssertEqual(t, "quota_max", 50, r1["quota_max"]) tt.AssertEqual(t, "quota_max", 500, r1["quota_max"])
tt.AssertEqual(t, "unack_count", 0, r1["unack_count"]) tt.AssertEqual(t, "unack_count", 0, r1["unack_count"])
tt.AssertEqual(t, "user_id", userid, r1["user_id"]) tt.AssertEqual(t, "user_id", userid, r1["user_id"])
tt.AssertEqual(t, "user_key", userkey, r1["user_key"]) tt.AssertEqual(t, "user_key", userkey, r1["user_key"])
@@ -363,7 +364,7 @@ func TestCompatInfo(t *testing.T) {
tt.AssertEqual(t, "is_pro", 0, r2["is_pro"]) tt.AssertEqual(t, "is_pro", 0, r2["is_pro"])
tt.AssertEqual(t, "message", "ok", r2["message"]) tt.AssertEqual(t, "message", "ok", r2["message"])
tt.AssertEqual(t, "quota", 1, r2["quota"]) tt.AssertEqual(t, "quota", 1, r2["quota"])
tt.AssertEqual(t, "quota_max", 50, r2["quota_max"]) tt.AssertEqual(t, "quota_max", 500, r2["quota_max"])
tt.AssertEqual(t, "unack_count", 1, r2["unack_count"]) tt.AssertEqual(t, "unack_count", 1, r2["unack_count"])
tt.AssertEqual(t, "user_id", userid, r2["user_id"]) tt.AssertEqual(t, "user_id", userid, r2["user_id"])
tt.AssertEqual(t, "user_key", userkey, r2["user_key"]) tt.AssertEqual(t, "user_key", userkey, r2["user_key"])
@@ -490,7 +491,7 @@ func TestCompatUpdateUserKey(t *testing.T) {
tt.AssertEqual(t, "is_pro", 0, r1["is_pro"]) tt.AssertEqual(t, "is_pro", 0, r1["is_pro"])
tt.AssertEqual(t, "message", "ok", r1["message"]) tt.AssertEqual(t, "message", "ok", r1["message"])
tt.AssertEqual(t, "quota", 1, r1["quota"]) tt.AssertEqual(t, "quota", 1, r1["quota"])
tt.AssertEqual(t, "quota_max", 50, r1["quota_max"]) tt.AssertEqual(t, "quota_max", 500, r1["quota_max"])
tt.AssertEqual(t, "unack_count", 1, r1["unack_count"]) tt.AssertEqual(t, "unack_count", 1, r1["unack_count"])
tt.AssertEqual(t, "user_id", userid, r1["user_id"]) tt.AssertEqual(t, "user_id", userid, r1["user_id"])
tt.AssertEqual(t, "user_key", newkey, r1["user_key"]) tt.AssertEqual(t, "user_key", newkey, r1["user_key"])
@@ -527,7 +528,7 @@ func TestCompatUpdateFCM(t *testing.T) {
tt.AssertEqual(t, "is_pro", 0, r1["is_pro"]) tt.AssertEqual(t, "is_pro", 0, r1["is_pro"])
tt.AssertEqual(t, "message", "ok", r1["message"]) tt.AssertEqual(t, "message", "ok", r1["message"])
tt.AssertEqual(t, "quota", 1, r1["quota"]) tt.AssertEqual(t, "quota", 1, r1["quota"])
tt.AssertEqual(t, "quota_max", 50, r1["quota_max"]) tt.AssertEqual(t, "quota_max", 500, r1["quota_max"])
tt.AssertEqual(t, "unack_count", 1, r1["unack_count"]) tt.AssertEqual(t, "unack_count", 1, r1["unack_count"])
tt.AssertEqual(t, "user_id", userid, r1["user_id"]) tt.AssertEqual(t, "user_id", userid, r1["user_id"])
tt.AssertEqual(t, "user_key", newkey, r1["user_key"]) tt.AssertEqual(t, "user_key", newkey, r1["user_key"])
@@ -554,7 +555,7 @@ func TestCompatUpgrade(t *testing.T) {
tt.AssertEqual(t, "success", true, r0["success"]) tt.AssertEqual(t, "success", true, r0["success"])
tt.AssertEqual(t, "message", "New user registered", r0["message"]) tt.AssertEqual(t, "message", "New user registered", r0["message"])
tt.AssertEqual(t, "quota", 0, r0["quota"]) tt.AssertEqual(t, "quota", 0, r0["quota"])
tt.AssertEqual(t, "quota_max", 50, r0["quota_max"]) tt.AssertEqual(t, "quota_max", 500, r0["quota_max"])
tt.AssertEqual(t, "is_pro", false, r0["is_pro"]) tt.AssertEqual(t, "is_pro", false, r0["is_pro"])
userid := int64(r0["user_id"].(float64)) userid := int64(r0["user_id"].(float64))
@@ -564,7 +565,7 @@ func TestCompatUpgrade(t *testing.T) {
tt.AssertEqual(t, "success", true, r1["success"]) tt.AssertEqual(t, "success", true, r1["success"])
tt.AssertEqual(t, "message", "user updated", r1["message"]) tt.AssertEqual(t, "message", "user updated", r1["message"])
tt.AssertEqual(t, "quota", 0, r1["quota"]) tt.AssertEqual(t, "quota", 0, r1["quota"])
tt.AssertEqual(t, "quota_max", 5000, r1["quota_max"]) tt.AssertEqual(t, "quota_max", 15000, r1["quota_max"])
tt.AssertEqual(t, "is_pro", true, r1["is_pro"]) tt.AssertEqual(t, "is_pro", true, r1["is_pro"])
} }

View File

@@ -1174,8 +1174,8 @@ func TestQuotaExceededNoPro(t *testing.T) {
sendtok := r0["send_key"].(string) sendtok := r0["send_key"].(string)
tt.AssertStrRepEqual(t, "quota.0", 0, r0["quota_used"]) tt.AssertStrRepEqual(t, "quota.0", 0, r0["quota_used"])
tt.AssertStrRepEqual(t, "quota.0", 50, r0["quota_max"]) tt.AssertStrRepEqual(t, "quota.0", 500, r0["quota_max"])
tt.AssertStrRepEqual(t, "quota.0", 50, r0["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.0", 500, r0["quota_remaining"])
{ {
msg1 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{ msg1 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
@@ -1184,18 +1184,18 @@ func TestQuotaExceededNoPro(t *testing.T) {
"title": tt.ShortLipsum0(2), "title": tt.ShortLipsum0(2),
}) })
tt.AssertStrRepEqual(t, "quota.msg.1", 1, msg1["quota"]) tt.AssertStrRepEqual(t, "quota.msg.1", 1, msg1["quota"])
tt.AssertStrRepEqual(t, "quota.msg.1", 50, msg1["quota_max"]) tt.AssertStrRepEqual(t, "quota.msg.1", 500, msg1["quota_max"])
} }
{ {
usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid)) usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid))
tt.AssertStrRepEqual(t, "quota.1", 1, usr["quota_used"]) tt.AssertStrRepEqual(t, "quota.1", 1, usr["quota_used"])
tt.AssertStrRepEqual(t, "quota.1", 50, usr["quota_max"]) tt.AssertStrRepEqual(t, "quota.1", 500, usr["quota_max"])
tt.AssertStrRepEqual(t, "quota.1", 49, usr["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.1", 499, usr["quota_remaining"])
} }
for i := 0; i < 48; i++ { for i := 0; i < 498; i++ {
tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{ tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
"key": sendtok, "key": sendtok,
@@ -1207,24 +1207,24 @@ func TestQuotaExceededNoPro(t *testing.T) {
{ {
usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid)) usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid))
tt.AssertStrRepEqual(t, "quota.49", 49, usr["quota_used"]) tt.AssertStrRepEqual(t, "quota.49", 499, usr["quota_used"])
tt.AssertStrRepEqual(t, "quota.49", 50, usr["quota_max"]) tt.AssertStrRepEqual(t, "quota.49", 500, usr["quota_max"])
tt.AssertStrRepEqual(t, "quota.49", 1, usr["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.49", 1, usr["quota_remaining"])
} }
msg50 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{ msg500 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
"key": sendtok, "key": sendtok,
"user_id": uid, "user_id": uid,
"title": tt.ShortLipsum0(2), "title": tt.ShortLipsum0(2),
}) })
tt.AssertStrRepEqual(t, "quota.msg.50", 50, msg50["quota"]) tt.AssertStrRepEqual(t, "quota.msg.50", 500, msg500["quota"])
tt.AssertStrRepEqual(t, "quota.msg.50", 50, msg50["quota_max"]) tt.AssertStrRepEqual(t, "quota.msg.50", 500, msg500["quota_max"])
{ {
usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid)) usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid))
tt.AssertStrRepEqual(t, "quota.50", 50, usr["quota_used"]) tt.AssertStrRepEqual(t, "quota.50", 500, usr["quota_used"])
tt.AssertStrRepEqual(t, "quota.50", 50, usr["quota_max"]) tt.AssertStrRepEqual(t, "quota.50", 500, usr["quota_max"])
tt.AssertStrRepEqual(t, "quota.50", 0, usr["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.50", 0, usr["quota_remaining"])
} }
@@ -1252,8 +1252,8 @@ func TestQuotaExceededPro(t *testing.T) {
sendtok := r0["send_key"].(string) sendtok := r0["send_key"].(string)
tt.AssertStrRepEqual(t, "quota.0", 0, r0["quota_used"]) tt.AssertStrRepEqual(t, "quota.0", 0, r0["quota_used"])
tt.AssertStrRepEqual(t, "quota.0", 5000, r0["quota_max"]) tt.AssertStrRepEqual(t, "quota.0", 15000, r0["quota_max"])
tt.AssertStrRepEqual(t, "quota.0", 5000, r0["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.0", 15000, r0["quota_remaining"])
{ {
msg1 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{ msg1 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
@@ -1262,18 +1262,18 @@ func TestQuotaExceededPro(t *testing.T) {
"title": tt.ShortLipsum0(2), "title": tt.ShortLipsum0(2),
}) })
tt.AssertStrRepEqual(t, "quota.msg.1", 1, msg1["quota"]) tt.AssertStrRepEqual(t, "quota.msg.1", 1, msg1["quota"])
tt.AssertStrRepEqual(t, "quota.msg.1", 5000, msg1["quota_max"]) tt.AssertStrRepEqual(t, "quota.msg.1", 15000, msg1["quota_max"])
} }
{ {
usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid)) usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid))
tt.AssertStrRepEqual(t, "quota.1", 1, usr["quota_used"]) tt.AssertStrRepEqual(t, "quota.1", 1, usr["quota_used"])
tt.AssertStrRepEqual(t, "quota.1", 5000, usr["quota_max"]) tt.AssertStrRepEqual(t, "quota.1", 15000, usr["quota_max"])
tt.AssertStrRepEqual(t, "quota.1", 4999, usr["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.1", 14999, usr["quota_remaining"])
} }
for i := 0; i < 4998; i++ { for i := 0; i < 14998; i++ {
tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{ tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
"key": sendtok, "key": sendtok,
@@ -1285,9 +1285,9 @@ func TestQuotaExceededPro(t *testing.T) {
{ {
usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid)) usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid))
tt.AssertStrRepEqual(t, "quota.999", 4999, usr["quota_used"]) tt.AssertStrRepEqual(t, "quota.14999", 14999, usr["quota_used"])
tt.AssertStrRepEqual(t, "quota.999", 5000, usr["quota_max"]) tt.AssertStrRepEqual(t, "quota.14999", 15000, usr["quota_max"])
tt.AssertStrRepEqual(t, "quota.999", 1, usr["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.14999", 1, usr["quota_remaining"])
} }
msg50 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{ msg50 := tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
@@ -1295,14 +1295,14 @@ func TestQuotaExceededPro(t *testing.T) {
"user_id": uid, "user_id": uid,
"title": tt.ShortLipsum0(2), "title": tt.ShortLipsum0(2),
}) })
tt.AssertStrRepEqual(t, "quota.msg.5000", 5000, msg50["quota"]) tt.AssertStrRepEqual(t, "quota.msg.5000", 15000, msg50["quota"])
tt.AssertStrRepEqual(t, "quota.msg.5000", 5000, msg50["quota_max"]) tt.AssertStrRepEqual(t, "quota.msg.5000", 15000, msg50["quota_max"])
{ {
usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid)) usr := tt.RequestAuthGet[gin.H](t, admintok, baseUrl, fmt.Sprintf("/api/v2/users/%s", uid))
tt.AssertStrRepEqual(t, "quota.5000", 5000, usr["quota_used"]) tt.AssertStrRepEqual(t, "quota.5000", 15000, usr["quota_used"])
tt.AssertStrRepEqual(t, "quota.5000", 5000, usr["quota_max"]) tt.AssertStrRepEqual(t, "quota.5000", 15000, usr["quota_max"])
tt.AssertStrRepEqual(t, "quota.5000", 0, usr["quota_remaining"]) tt.AssertStrRepEqual(t, "quota.5000", 0, usr["quota_remaining"])
} }

View File

@@ -1,11 +1,12 @@
package test package test
import ( import (
"fmt"
"testing"
"blackforestbytes.com/simplecloudnotifier/api/apierr" "blackforestbytes.com/simplecloudnotifier/api/apierr"
tt "blackforestbytes.com/simplecloudnotifier/test/util" tt "blackforestbytes.com/simplecloudnotifier/test/util"
"fmt"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"testing"
) )
func TestCreateUserNoClient(t *testing.T) { func TestCreateUserNoClient(t *testing.T) {
@@ -451,8 +452,8 @@ func TestGetUserNoPro(t *testing.T) {
tt.AssertEqual(t, "timestamp_lastsent", nil, r1["timestamp_lastsent"]) tt.AssertEqual(t, "timestamp_lastsent", nil, r1["timestamp_lastsent"])
tt.AssertEqual(t, "messages_sent", "0", fmt.Sprintf("%v", r1["messages_sent"])) tt.AssertEqual(t, "messages_sent", "0", fmt.Sprintf("%v", r1["messages_sent"]))
tt.AssertEqual(t, "quota_used", "0", fmt.Sprintf("%v", r1["quota_used"])) tt.AssertEqual(t, "quota_used", "0", fmt.Sprintf("%v", r1["quota_used"]))
tt.AssertEqual(t, "quota_remaining", "50", fmt.Sprintf("%v", r1["quota_remaining"])) tt.AssertEqual(t, "quota_remaining", "500", fmt.Sprintf("%v", r1["quota_remaining"]))
tt.AssertEqual(t, "quota_max", "50", fmt.Sprintf("%v", r1["quota_max"])) tt.AssertEqual(t, "quota_max", "500", fmt.Sprintf("%v", r1["quota_max"]))
tt.AssertEqual(t, "is_pro", "false", fmt.Sprintf("%v", r1["is_pro"])) tt.AssertEqual(t, "is_pro", "false", fmt.Sprintf("%v", r1["is_pro"]))
tt.AssertEqual(t, "default_channel", "main", fmt.Sprintf("%v", r1["default_channel"])) tt.AssertEqual(t, "default_channel", "main", fmt.Sprintf("%v", r1["default_channel"]))
tt.AssertEqual(t, "max_body_size", "2048", fmt.Sprintf("%v", r1["max_body_size"])) tt.AssertEqual(t, "max_body_size", "2048", fmt.Sprintf("%v", r1["max_body_size"]))
@@ -485,8 +486,8 @@ func TestGetUserPro(t *testing.T) {
tt.AssertEqual(t, "timestamp_lastsent", nil, r1["timestamp_lastsent"]) tt.AssertEqual(t, "timestamp_lastsent", nil, r1["timestamp_lastsent"])
tt.AssertEqual(t, "messages_sent", "0", fmt.Sprintf("%v", r1["messages_sent"])) tt.AssertEqual(t, "messages_sent", "0", fmt.Sprintf("%v", r1["messages_sent"]))
tt.AssertEqual(t, "quota_used", "0", fmt.Sprintf("%v", r1["quota_used"])) tt.AssertEqual(t, "quota_used", "0", fmt.Sprintf("%v", r1["quota_used"]))
tt.AssertEqual(t, "quota_remaining", "5000", fmt.Sprintf("%v", r1["quota_remaining"])) tt.AssertEqual(t, "quota_remaining", "15000", fmt.Sprintf("%v", r1["quota_remaining"]))
tt.AssertEqual(t, "quota_max", "5000", fmt.Sprintf("%v", r1["quota_max"])) tt.AssertEqual(t, "quota_max", "15000", fmt.Sprintf("%v", r1["quota_max"]))
tt.AssertEqual(t, "is_pro", "true", fmt.Sprintf("%v", r1["is_pro"])) tt.AssertEqual(t, "is_pro", "true", fmt.Sprintf("%v", r1["is_pro"]))
tt.AssertEqual(t, "default_channel", "main", fmt.Sprintf("%v", r1["default_channel"])) tt.AssertEqual(t, "default_channel", "main", fmt.Sprintf("%v", r1["default_channel"]))
tt.AssertEqual(t, "max_body_size", "2097152", fmt.Sprintf("%d", (int64)(r1["max_body_size"].(float64)))) tt.AssertEqual(t, "max_body_size", "2097152", fmt.Sprintf("%d", (int64)(r1["max_body_size"].(float64))))

View File

@@ -3,13 +3,14 @@ package util
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"git.blackforestbytes.com/BlackForestBytes/goext/langext"
"github.com/gin-gonic/gin"
"math" "math"
"reflect" "reflect"
"runtime/debug" "runtime/debug"
"strings" "strings"
"testing" "testing"
"git.blackforestbytes.com/BlackForestBytes/goext/langext"
"github.com/gin-gonic/gin"
) )
func AssertJsonMapEqual(t *testing.T, key string, expected map[string]any, actual map[string]any) { func AssertJsonMapEqual(t *testing.T, key string, expected map[string]any, actual map[string]any) {
@@ -36,6 +37,7 @@ func AssertJsonMapEqual(t *testing.T, key string, expected map[string]any, actua
} }
func AssertEqual(t *testing.T, key string, expected any, actual any) { func AssertEqual(t *testing.T, key string, expected any, actual any) {
t.Helper()
// try to fix types, kinda hacky, but its only unit tests... // try to fix types, kinda hacky, but its only unit tests...
switch vex := expected.(type) { switch vex := expected.(type) {