-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathformicidae_test.go
157 lines (124 loc) · 3.13 KB
/
formicidae_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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package formicidae
import (
"os"
"testing"
)
const filename = "tests.env"
func setup() {
_, _ = os.Create(filename)
}
func teardown() {
_ = os.Remove(filename)
}
func TestUpdateOneVariable(t *testing.T) {
//setup
setup()
updateFileWithContent(
"DATABASE_ADDRESS=localhost\n"+
"DATABASE_NAME=postgres\n"+
"DATABASE_USERNAME=administrat0r\n"+
"DATABASE_PASSWORD=passw0rd\n"+
"DATABASE_PORT=5432", false)
//arrange
expected := "DATABASE_ADDRESS=localhost\n" +
"DATABASE_NAME=postgres\n" +
"DATABASE_USERNAME=administrat0r\n" +
"DATABASE_PASSWORD=NewPassw0rd\n" +
"DATABASE_PORT=5432"
//act
got, _ := UpdateVariable(filename, "DATABASE_PASSWORD", "NewPassw0rd")
//assert
if got != expected {
t.Error("Environment variable is not updated correctly.")
}
//teardown
teardown()
}
func TestUpdateTwoVariables(t *testing.T) {
//setup
setup()
updateFileWithContent(
"DATABASE_ADDRESS=localhost\n"+
"DATABASE_NAME=postgres\n"+
"DATABASE_USERNAME=administrat0r\n"+
"DATABASE_PASSWORD=passw0rd\n"+
"DATABASE_PORT=5432", false)
//arrange
expected := "DATABASE_ADDRESS=localhost\n" +
"DATABASE_NAME=postgres\n" +
"DATABASE_USERNAME=NewAdministrat0r\n" +
"DATABASE_PASSWORD=NewPassw0rd\n" +
"DATABASE_PORT=5432"
//act
_, _ = UpdateVariable(filename, "DATABASE_USERNAME", "NewAdministrat0r")
got, _ := UpdateVariable(filename, "DATABASE_PASSWORD", "NewPassw0rd")
//assert
if got != expected {
t.Error("Environment variables are not updated correctly.")
}
//teardown
teardown()
}
func TestUpdateDuplicateVariables(t *testing.T) {
//setup
setup()
updateFileWithContent(
"DATABASE_ADDRESS=localhost\n"+
"DATABASE_NAME=postgres\n"+
"DATABASE_USERNAME=administrat0r\n"+
"DATABASE_PASSWORD=passw0rd\n"+
"DATABASE_PORT=5432\n"+
"DATABASE_USERNAME=admin", false)
//arrange
expected := "DATABASE_ADDRESS=localhost\n" +
"DATABASE_NAME=postgres\n" +
"DATABASE_USERNAME=NewAdministrat0r\n" +
"DATABASE_PASSWORD=passw0rd\n" +
"DATABASE_PORT=5432\n" +
"DATABASE_USERNAME=NewAdministrat0r"
//act
got, _ := UpdateVariable(filename, "DATABASE_USERNAME", "NewAdministrat0r")
//assert
if got != expected {
t.Error("Duplicated Environment variables are not updated correctly.")
}
//teardown
teardown()
}
func TestUpdateMissingFile(t *testing.T) {
//setup
setup()
updateFileWithContent(
"DATABASE_ADDRESS=localhost\n"+
"DATABASE_NAME=postgres\n"+
"DATABASE_USERNAME=administrat0r\n"+
"DATABASE_PASSWORD=passw0rd\n"+
"DATABASE_PORT=5432\n"+
"DATABASE_USERNAME=admin", false)
//arrange
const missingFile = ".env"
//act
_, err := UpdateVariable(missingFile, "DATABASE_USERNAME", "NewAdministrat0r")
//assert
if err == nil {
t.Error("Expected error for missing file")
}
//teardown
teardown()
}
func updateFileWithContent(content string, readOnly bool) bool {
var permissions = os.FileMode(0644)
flag := os.O_RDWR
if readOnly {
permissions = os.FileMode(44)
flag = os.O_RDONLY
}
file, _ := os.OpenFile(filename, flag, permissions)
_, err := file.WriteString(content)
if err != nil {
_ = file.Close()
return false
}
err = file.Close()
return err == nil
}