@@ -5,8 +5,10 @@ import (
5
5
"testing"
6
6
7
7
"github.com/stretchr/testify/require"
8
+ "go.jetpack.io/devbox/internal/boxcli/featureflag"
8
9
"go.jetpack.io/devbox/internal/devpkg"
9
10
"go.jetpack.io/devbox/internal/lock"
11
+ "go.jetpack.io/devbox/internal/nix"
10
12
)
11
13
12
14
func TestUpdateNewPackageIsAdded (t * testing.T ) {
@@ -28,3 +30,193 @@ func TestUpdateNewPackageIsAdded(t *testing.T) {
28
30
29
31
require .Contains (t , lockfile .Packages , raw )
30
32
}
33
+
34
+ func TestUpdateNewCurrentSysInfoIsAdded (t * testing.T ) {
35
+ featureflag .RemoveNixpkgs .EnableForTest (t )
36
+ devbox := devboxForTesting (t )
37
+
38
+
39
+ sys := currentSystem (t )
40
+ devPkg := & devpkg.Package {
41
+ Raw : raw ,
42
+ }
43
+ resolved := & lock.Package {
44
+ Resolved : "resolved-flake-reference" ,
45
+ Systems : map [string ]* lock.SystemInfo {
46
+ sys : {
47
+ StorePath : "store_path1" ,
48
+ CAStorePath : "ca_path1" ,
49
+ },
50
+ },
51
+ }
52
+ lockfile := & lock.File {
53
+ Packages : map [string ]* lock.Package {
54
+ raw : {
55
+ Resolved : "resolved-flake-reference" ,
56
+ // No system infos.
57
+ },
58
+ },
59
+ }
60
+
61
+ err := devbox .mergeResolvedPackageToLockfile (context .Background (), devPkg , resolved , lockfile )
62
+ require .NoError (t , err , "update failed" )
63
+
64
+ require .Contains (t , lockfile .Packages , raw )
65
+ require .Contains (t , lockfile .Packages [raw ].Systems , sys )
66
+ require .Equal (t , "store_path1" , lockfile .Packages [raw ].Systems [sys ].StorePath )
67
+ require .Equal (t , "ca_path1" , lockfile .Packages [raw ].Systems [sys ].CAStorePath )
68
+ }
69
+
70
+ func TestUpdateNewSysInfoIsAdded (t * testing.T ) {
71
+ featureflag .RemoveNixpkgs .EnableForTest (t )
72
+ devbox := devboxForTesting (t )
73
+
74
+
75
+ sys1 := currentSystem (t )
76
+ sys2 := "system2"
77
+ devPkg := & devpkg.Package {
78
+ Raw : raw ,
79
+ }
80
+ resolved := & lock.Package {
81
+ Resolved : "resolved-flake-reference" ,
82
+ Systems : map [string ]* lock.SystemInfo {
83
+ sys1 : {
84
+ StorePath : "store_path1" ,
85
+ CAStorePath : "ca_path1" ,
86
+ },
87
+ sys2 : {
88
+ StorePath : "store_path2" ,
89
+ },
90
+ },
91
+ }
92
+ lockfile := & lock.File {
93
+ Packages : map [string ]* lock.Package {
94
+ raw : {
95
+ Resolved : "resolved-flake-reference" ,
96
+ Systems : map [string ]* lock.SystemInfo {
97
+ sys1 : {
98
+ StorePath : "store_path1" ,
99
+ CAStorePath : "ca_path1" ,
100
+ },
101
+ // Missing sys2
102
+ },
103
+ },
104
+ },
105
+ }
106
+
107
+ err := devbox .mergeResolvedPackageToLockfile (context .Background (), devPkg , resolved , lockfile )
108
+ require .NoError (t , err , "update failed" )
109
+
110
+ require .Contains (t , lockfile .Packages , raw )
111
+ require .Contains (t , lockfile .Packages [raw ].Systems , sys1 )
112
+ require .Contains (t , lockfile .Packages [raw ].Systems , sys2 )
113
+ require .Equal (t , "store_path2" , lockfile .Packages [raw ].Systems [sys2 ].StorePath )
114
+ }
115
+
116
+ func TestUpdateOtherSysInfoIsReplaced (t * testing.T ) {
117
+ featureflag .RemoveNixpkgs .EnableForTest (t )
118
+ devbox := devboxForTesting (t )
119
+
120
+
121
+ sys1 := currentSystem (t )
122
+ sys2 := "system2"
123
+ devPkg := & devpkg.Package {
124
+ Raw : raw ,
125
+ }
126
+ resolved := & lock.Package {
127
+ Resolved : "resolved-flake-reference" ,
128
+ Systems : map [string ]* lock.SystemInfo {
129
+ sys1 : {
130
+ StorePath : "store_path1" ,
131
+ CAStorePath : "ca_path1" ,
132
+ },
133
+ sys2 : {
134
+ StorePath : "store_path2" ,
135
+ },
136
+ },
137
+ }
138
+ lockfile := & lock.File {
139
+ Packages : map [string ]* lock.Package {
140
+ raw : {
141
+ Resolved : "resolved-flake-reference" ,
142
+ Systems : map [string ]* lock.SystemInfo {
143
+ sys1 : {
144
+ StorePath : "store_path1" ,
145
+ CAStorePath : "ca_path1" ,
146
+ },
147
+ sys2 : {
148
+ StorePath : "mismatching_store_path" ,
149
+ CAStorePath : "ca_path2" ,
150
+ },
151
+ },
152
+ },
153
+ },
154
+ }
155
+
156
+ err := devbox .mergeResolvedPackageToLockfile (context .Background (), devPkg , resolved , lockfile )
157
+ require .NoError (t , err , "update failed" )
158
+
159
+ require .Contains (t , lockfile .Packages , raw )
160
+ require .Contains (t , lockfile .Packages [raw ].Systems , sys1 )
161
+ require .Contains (t , lockfile .Packages [raw ].Systems , sys2 )
162
+ require .Equal (t , "store_path1" , lockfile .Packages [raw ].Systems [sys1 ].StorePath )
163
+ require .Equal (t , "store_path2" , lockfile .Packages [raw ].Systems [sys2 ].StorePath )
164
+ require .Empty (t , lockfile .Packages [raw ].Systems [sys2 ].CAStorePath )
165
+ }
166
+
167
+ func TestUpdateCAPathIsNotReplaced (t * testing.T ) {
168
+ featureflag .RemoveNixpkgs .EnableForTest (t )
169
+ devbox := devboxForTesting (t )
170
+
171
+
172
+ sys1 := currentSystem (t )
173
+ sys2 := "system2"
174
+ devPkg := & devpkg.Package {
175
+ Raw : raw ,
176
+ }
177
+ resolved := & lock.Package {
178
+ Resolved : "resolved-flake-reference" ,
179
+ Systems : map [string ]* lock.SystemInfo {
180
+ sys1 : {
181
+ StorePath : "store_path1" ,
182
+ CAStorePath : "ca_path1" ,
183
+ },
184
+ sys2 : {
185
+ StorePath : "store_path2" ,
186
+ // No CAPath here because this is not the current system.
187
+ },
188
+ },
189
+ }
190
+ lockfile := & lock.File {
191
+ Packages : map [string ]* lock.Package {
192
+ raw : {
193
+ Resolved : "resolved-flake-reference" ,
194
+ Systems : map [string ]* lock.SystemInfo {
195
+ sys1 : {
196
+ StorePath : "store_path1" ,
197
+ CAStorePath : "ca_path1" ,
198
+ },
199
+ sys2 : {
200
+ StorePath : "store_path2" ,
201
+ CAStorePath : "ca_path2" , // we already have CAPath for this system; it should not be replaced
202
+ },
203
+ },
204
+ },
205
+ },
206
+ }
207
+
208
+ err := devbox .mergeResolvedPackageToLockfile (context .Background (), devPkg , resolved , lockfile )
209
+ require .NoError (t , err , "update failed" )
210
+
211
+ require .Contains (t , lockfile .Packages , raw )
212
+ require .Contains (t , lockfile .Packages [raw ].Systems , sys1 )
213
+ require .Contains (t , lockfile .Packages [raw ].Systems , sys2 )
214
+ require .Equal (t , "store_path2" , lockfile .Packages [raw ].Systems [sys2 ].StorePath )
215
+ require .Equal (t , "ca_path2" , lockfile .Packages [raw ].Systems [sys2 ].CAStorePath )
216
+ }
217
+
218
+ func currentSystem (t * testing.T ) string {
219
+ sys , err := nix .System () // NOTE: we could mock this too, if it helps.
220
+ require .NoError (t , err )
221
+ return sys
222
+ }
0 commit comments