-
Notifications
You must be signed in to change notification settings - Fork 0
/
database_test.go
109 lines (84 loc) · 2.54 KB
/
database_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
package main
import (
"fmt"
"gotest.tools/v3/assert"
"testing"
)
func TestDatabase_GetEmpty(t *testing.T) {
// Given empty database
database := NewDatabase()
// When we ask for not existing key
values := database.Select("not_exists")
// Then key does not exist
assert.DeepEqual(t, values, []string{""})
}
func TestDatabase_Update(t *testing.T) {
// Given empty database
database := NewDatabase()
username := "john"
// When we update value
database.Update("username", username)
// Then value is set
values := database.Select("username")
assert.DeepEqual(t, values, []string{username})
// When we update value
newUsername := "alice"
database.Update("username", newUsername)
// Then value is updated
values = database.Select("username")
assert.DeepEqual(t, values, []string{newUsername})
}
func TestDatabase_Increment(t *testing.T) {
// Given empty database
database := NewDatabase()
money := 5.5
// When we increment counter
database.Increment("money", money)
// Then counter is set
values := database.Select("money")
assert.DeepEqual(t, values, []string{fmt.Sprintf("%f", money)})
// When we increment counter
database.Increment("money", money)
// Then counter is incremented
values = database.Select("money")
assert.DeepEqual(t, values, []string{fmt.Sprintf("%f", money*2)})
}
func TestDatabase_Append(t *testing.T) {
// Given empty database
database := NewDatabase()
firstOrder := "order 1"
// When we append value
database.Append("orders", firstOrder)
// Then value is appended
values := database.Select("orders")
assert.DeepEqual(t, values, []string{firstOrder})
// When we append another value
secondOrder := "order 2"
database.Append("orders", secondOrder)
// Then both values are there
values = database.Select("orders")
assert.DeepEqual(t, values, []string{firstOrder, secondOrder})
}
func TestDatabase_Clear(t *testing.T) {
// Given database with data
database := NewDatabase()
key := "username"
database.Update(key, "john")
// When database is cleared
database.Clear()
// Then data is gone
values := database.Select(key)
assert.DeepEqual(t, values, []string{""})
}
func TestDatabase_List(t *testing.T) {
// Given database with user data
database := NewDatabase()
database.Update("user_name", "John")
database.Increment("user_money", 100.0)
database.Append("user_orders", "order 1")
database.Increment("account_money", 1000.0)
// When we get user keys
keys := database.List("user_")
// Then user keys are returned
assert.DeepEqual(t, keys, []string{"user_name", "user_money", "user_orders"})
}