@@ -17,10 +17,10 @@ import (
1717 "github.com/launchdarkly/ldcli/internal/dev_server/model"
1818)
1919
20- func TestSeedCommand (t * testing.T ) {
21- t .Run ("seeds database successfully from valid JSON file" , func (t * testing.T ) {
20+ func TestImportProjectCommand (t * testing.T ) {
21+ t .Run ("imports project successfully from valid JSON file" , func (t * testing.T ) {
2222 // Create temporary database
23- tmpDir , err := os .MkdirTemp ("" , "seed -test-*" )
23+ tmpDir , err := os .MkdirTemp ("" , "import -test-*" )
2424 require .NoError (t , err )
2525 defer os .RemoveAll (tmpDir )
2626
@@ -128,9 +128,9 @@ func TestSeedCommand(t *testing.T) {
128128 assert .True (t , overrides [0 ].Active )
129129 })
130130
131- t .Run ("rejects seeding into non-empty database " , func (t * testing.T ) {
131+ t .Run ("rejects importing when project already exists " , func (t * testing.T ) {
132132 // Create temporary database
133- tmpDir , err := os .MkdirTemp ("" , "seed -test-*" )
133+ tmpDir , err := os .MkdirTemp ("" , "import -test-*" )
134134 require .NoError (t , err )
135135 defer os .RemoveAll (tmpDir )
136136
@@ -140,7 +140,7 @@ func TestSeedCommand(t *testing.T) {
140140 require .NoError (t , err )
141141 ctx = model .ContextWithStore (ctx , sqlStore )
142142
143- // Insert an existing project
143+ // Insert an existing project with the same key
144144 existingProject := model.Project {
145145 Key : "existing-project" ,
146146 SourceEnvironmentKey : "test" ,
@@ -151,7 +151,7 @@ func TestSeedCommand(t *testing.T) {
151151 err = sqlStore .InsertProject (ctx , existingProject )
152152 require .NoError (t , err )
153153
154- // Create seed data file
154+ // Create seed data file for the same project key
155155 seedFile := filepath .Join (tmpDir , "seed.json" )
156156 seedData := map [string ]interface {}{
157157 "context" : map [string ]interface {}{
@@ -172,14 +172,72 @@ func TestSeedCommand(t *testing.T) {
172172 err = os .WriteFile (seedFile , data , 0644 )
173173 require .NoError (t , err )
174174
175- // Attempt to seed should fail
176- err = model .ImportProjectFromFile (ctx , "new -project" , seedFile )
175+ // Attempt to import with same project key should fail
176+ err = model .ImportProjectFromFile (ctx , "existing -project" , seedFile )
177177 require .Error (t , err )
178- assert .Contains (t , err .Error (), "database not empty" )
178+ assert .Contains (t , err .Error (), "already exists" )
179+ })
180+
181+ t .Run ("allows importing different project when database has other projects" , func (t * testing.T ) {
182+ // Create temporary database
183+ tmpDir , err := os .MkdirTemp ("" , "import-test-*" )
184+ require .NoError (t , err )
185+ defer os .RemoveAll (tmpDir )
186+
187+ dbPath := filepath .Join (tmpDir , "test.db" )
188+ ctx := context .Background ()
189+ sqlStore , err := db .NewSqlite (ctx , dbPath )
190+ require .NoError (t , err )
191+ ctx = model .ContextWithStore (ctx , sqlStore )
192+
193+ // Insert an existing project
194+ existingProject := model.Project {
195+ Key : "project-1" ,
196+ SourceEnvironmentKey : "test" ,
197+ Context : ldcontext .NewBuilder ("user" ).Key ("existing" ).Build (),
198+ AllFlagsState : model.FlagsState {},
199+ AvailableVariations : []model.FlagVariation {},
200+ }
201+ err = sqlStore .InsertProject (ctx , existingProject )
202+ require .NoError (t , err )
203+
204+ // Create seed data file for a DIFFERENT project
205+ seedFile := filepath .Join (tmpDir , "seed.json" )
206+ seedData := map [string ]interface {}{
207+ "context" : map [string ]interface {}{
208+ "kind" : "user" ,
209+ "key" : "test-user" ,
210+ },
211+ "sourceEnvironmentKey" : "production" ,
212+ "flagsState" : map [string ]interface {}{
213+ "flag-1" : map [string ]interface {}{
214+ "value" : true ,
215+ "version" : 1 ,
216+ },
217+ },
218+ }
219+
220+ data , err := json .Marshal (seedData )
221+ require .NoError (t , err )
222+ err = os .WriteFile (seedFile , data , 0644 )
223+ require .NoError (t , err )
224+
225+ // Import a different project should succeed
226+ err = model .ImportProjectFromFile (ctx , "project-2" , seedFile )
227+ require .NoError (t , err )
228+
229+ // Verify both projects exist
230+ project1 , err := sqlStore .GetDevProject (ctx , "project-1" )
231+ require .NoError (t , err )
232+ assert .Equal (t , "project-1" , project1 .Key )
233+
234+ project2 , err := sqlStore .GetDevProject (ctx , "project-2" )
235+ require .NoError (t , err )
236+ assert .Equal (t , "project-2" , project2 .Key )
179237 })
180238
181- t .Run ("validates required fields in seed data" , func (t * testing.T ) {
182- tmpDir , err := os .MkdirTemp ("" , "seed -test-*" )
239+ t .Run ("validates required fields in import data" , func (t * testing.T ) {
240+ tmpDir , err := os .MkdirTemp ("" , "import -test-*" )
183241 require .NoError (t , err )
184242 defer os .RemoveAll (tmpDir )
185243
@@ -238,8 +296,8 @@ func TestSeedCommand(t *testing.T) {
238296 }
239297 })
240298
241- t .Run ("handles complex seed data with all fields" , func (t * testing.T ) {
242- tmpDir , err := os .MkdirTemp ("" , "seed -test-*" )
299+ t .Run ("handles complex import data with all fields" , func (t * testing.T ) {
300+ tmpDir , err := os .MkdirTemp ("" , "import -test-*" )
243301 require .NoError (t , err )
244302 defer os .RemoveAll (tmpDir )
245303
@@ -357,8 +415,8 @@ func TestSeedCommand(t *testing.T) {
357415 assert .Equal (t , ldvalue .Int (100 ), overrideMap ["number-flag" ].Value )
358416 })
359417
360- t .Run ("handles seed data without optional fields" , func (t * testing.T ) {
361- tmpDir , err := os .MkdirTemp ("" , "seed -test-*" )
418+ t .Run ("handles import data without optional fields" , func (t * testing.T ) {
419+ tmpDir , err := os .MkdirTemp ("" , "import -test-*" )
362420 require .NoError (t , err )
363421 defer os .RemoveAll (tmpDir )
364422
@@ -412,7 +470,7 @@ func TestSeedCommand(t *testing.T) {
412470 })
413471
414472 t .Run ("preserves variation metadata" , func (t * testing.T ) {
415- tmpDir , err := os .MkdirTemp ("" , "seed -test-*" )
473+ tmpDir , err := os .MkdirTemp ("" , "import -test-*" )
416474 require .NoError (t , err )
417475 defer os .RemoveAll (tmpDir )
418476
0 commit comments