-
Notifications
You must be signed in to change notification settings - Fork 396
/
parcel_test.go
121 lines (97 loc) · 4.95 KB
/
parcel_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package main
import (
"database/sql"
"math/rand"
"testing"
"time"
"github.com/stretchr/testify/require"
)
var (
// randSource источник псевдо случайных чисел.
// Для повышения уникальности в качестве seed
// используется текущее время в unix формате (в виде числа)
randSource = rand.NewSource(time.Now().UnixNano())
// randRange использует randSource для генерации случайных чисел
randRange = rand.New(randSource)
)
// getTestParcel возвращает тестовую посылку
func getTestParcel() Parcel {
return Parcel{
Client: 1000,
Status: ParcelStatusRegistered,
Address: "test",
CreatedAt: time.Now().UTC().Format(time.RFC3339),
}
}
// TestAddGetDelete проверяет добавление, получение и удаление посылки
func TestAddGetDelete(t *testing.T) {
// prepare
db, err := // настройте подключение к БД
store := NewParcelStore(db)
parcel := getTestParcel()
// add
// добавьте новую посылку в БД, убедитесь в отсутствии ошибки и наличии идентификатора
// get
// получите только что добавленную посылку, убедитесь в отсутствии ошибки
// проверьте, что значения всех полей в полученном объекте совпадают со значениями полей в переменной parcel
// delete
// удалите добавленную посылку, убедитесь в отсутствии ошибки
// проверьте, что посылку больше нельзя получить из БД
}
// TestSetAddress проверяет обновление адреса
func TestSetAddress(t *testing.T) {
// prepare
db, err := // настройте подключение к БД
// add
// добавьте новую посылку в БД, убедитесь в отсутствии ошибки и наличии идентификатора
// set address
// обновите адрес, убедитесь в отсутствии ошибки
newAddress := "new test address"
// check
// получите добавленную посылку и убедитесь, что адрес обновился
}
// TestSetStatus проверяет обновление статуса
func TestSetStatus(t *testing.T) {
// prepare
db, err := // настройте подключение к БД
// add
// добавьте новую посылку в БД, убедитесь в отсутствии ошибки и наличии идентификатора
// set status
// обновите статус, убедитесь в отсутствии ошибки
// check
// получите добавленную посылку и убедитесь, что статус обновился
}
// TestGetByClient проверяет получение посылок по идентификатору клиента
func TestGetByClient(t *testing.T) {
// prepare
db, err := // настройте подключение к БД
parcels := []Parcel{
getTestParcel(),
getTestParcel(),
getTestParcel(),
}
parcelMap := map[int]Parcel{}
// задаём всем посылкам один и тот же идентификатор клиента
client := randRange.Intn(10_000_000)
parcels[0].Client = client
parcels[1].Client = client
parcels[2].Client = client
// add
for i := 0; i < len(parcels); i++ {
id, err := // добавьте новую посылку в БД, убедитесь в отсутствии ошибки и наличии идентификатора
// обновляем идентификатор добавленной у посылки
parcels[i].Number = id
// сохраняем добавленную посылку в структуру map, чтобы её можно было легко достать по идентификатору посылки
parcelMap[id] = parcels[i]
}
// get by client
storedParcels, err := // получите список посылок по идентификатору клиента, сохранённого в переменной client
// убедитесь в отсутствии ошибки
// убедитесь, что количество полученных посылок совпадает с количеством добавленных
// check
for _, parcel := range storedParcels {
// в parcelMap лежат добавленные посылки, ключ - идентификатор посылки, значение - сама посылка
// убедитесь, что все посылки из storedParcels есть в parcelMap
// убедитесь, что значения полей полученных посылок заполнены верно
}
}