reprogl

Форк
0
/
codec_test.go 
90 строк · 2.0 Кб
1
package session
2

3
import (
4
	"fmt"
5
	"strings"
6
	"testing"
7
	"time"
8

9
	"xelbot.com/reprogl/security"
10
)
11

12
type testDataItem struct {
13
	data       internalData
14
	jsonString string
15
}
16

17
var time1, _ = time.Parse(time.RFC822, "05 Jul 23 16:24 MSK")
18
var time2, _ = time.Parse(time.RFC822, "01 Feb 19 01:37 EET")
19

20
var testData = []testDataItem{
21
	{
22
		data: internalData{
23
			identity: security.Identity{ID: 13, Username: "pupa", Role: security.Admin},
24
			deadline: deadline(time1),
25
		},
26
		jsonString: `{"a":{"i":13,"u":"pupa","r":"admin"},"d":"2023-07-05T16:24:00+03:00"}`,
27
	},
28
	{
29
		data: internalData{
30
			identity: security.Identity{},
31
			values: map[string]any{
32
				"token": "random data",
33
				"width": 15,
34
			},
35
			deadline: deadline(time2),
36
		},
37
		jsonString: `{"a":{},"v":{"token":"random data","width":15},"d":"2019-02-01T02:37:00+03:00"}`,
38
	},
39
	{
40
		data: internalData{
41
			identity: security.Identity{ID: 7, Username: "lupa", Role: security.User},
42
			values: map[string]any{
43
				"abc": "zxc",
44
			},
45
		},
46
		jsonString: `{"a":{"i":7,"u":"lupa","r":"user"},"v":{"abc":"zxc"},"d":"0001-01-01T00:00:00Z"}`,
47
	},
48
}
49

50
func TestJSONSerialization(t *testing.T) {
51
	var (
52
		codec        jsonEncoder
53
		serialized   []byte
54
		deserialized internalData
55
		err          error
56
	)
57

58
	for _, value := range testData {
59
		if serialized, err = codec.serialize(value.data); err != nil {
60
			t.Error(err)
61
		} else {
62
			if deserialized, err = codec.deserialize(serialized); err != nil {
63
				t.Error(err)
64
			}
65
			if fmt.Sprintf("%+v", deserialized) != fmt.Sprintf("%+v", value.data) {
66
				t.Errorf("Expected %+v, got %+v", value.data, deserialized)
67
			}
68
		}
69
	}
70
}
71

72
func TestJSONString(t *testing.T) {
73
	var (
74
		codec      jsonEncoder
75
		serialized []byte
76
		str        string
77
		err        error
78
	)
79

80
	for _, value := range testData {
81
		if serialized, err = codec.serialize(value.data); err != nil {
82
			t.Error(err)
83
		} else {
84
			str = strings.TrimRight(string(serialized), "\n")
85
			if str != value.jsonString {
86
				t.Errorf("Expected %s, got %+v", value.jsonString, str)
87
			}
88
		}
89
	}
90
}
91

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.