@@ -3,13 +3,80 @@ package repo
33import (
44 "os"
55 "path/filepath"
6+ "runtime"
67 "strings"
78 "testing"
89
910 "github.com/slobbe/appimage-manager/internal/config"
1011 models "github.com/slobbe/appimage-manager/internal/types"
1112)
1213
14+ func TestSaveDBCreatesParentDirectory (t * testing.T ) {
15+ tmp := t .TempDir ()
16+ dbPath := filepath .Join (tmp , "nested" , "state" , "aim" , "apps.json" )
17+
18+ if err := SaveDB (dbPath , & DB {SchemaVersion : 1 , Apps : map [string ]* models.App {}}); err != nil {
19+ t .Fatalf ("SaveDB returned error: %v" , err )
20+ }
21+
22+ if _ , err := os .Stat (dbPath ); err != nil {
23+ t .Fatalf ("expected database file to exist: %v" , err )
24+ }
25+
26+ db , err := LoadDB (dbPath )
27+ if err != nil {
28+ t .Fatalf ("LoadDB returned error: %v" , err )
29+ }
30+ if db .SchemaVersion != 1 {
31+ t .Fatalf ("db.SchemaVersion = %d, want 1" , db .SchemaVersion )
32+ }
33+ if len (db .Apps ) != 0 {
34+ t .Fatalf ("len(db.Apps) = %d, want 0" , len (db .Apps ))
35+ }
36+ }
37+
38+ func TestSaveDBPreservesExistingPermissions (t * testing.T ) {
39+ if runtime .GOOS == "windows" {
40+ t .Skip ("permission bits are not portable on Windows" )
41+ }
42+
43+ tmp := t .TempDir ()
44+ dbPath := filepath .Join (tmp , "apps.json" )
45+
46+ if err := os .WriteFile (dbPath , []byte (`{"schemaVersion":1,"apps":{}}` ), 0o600 ); err != nil {
47+ t .Fatalf ("failed to seed db file: %v" , err )
48+ }
49+
50+ if err := SaveDB (dbPath , & DB {SchemaVersion : 1 , Apps : map [string ]* models.App {}}); err != nil {
51+ t .Fatalf ("SaveDB returned error: %v" , err )
52+ }
53+
54+ info , err := os .Stat (dbPath )
55+ if err != nil {
56+ t .Fatalf ("failed to stat db file: %v" , err )
57+ }
58+ if got := info .Mode ().Perm (); got != 0o600 {
59+ t .Fatalf ("db mode = %o, want 600" , got )
60+ }
61+ }
62+
63+ func TestSaveDBUsesUniqueTempFilesAndCleansUp (t * testing.T ) {
64+ tmp := t .TempDir ()
65+ dbPath := filepath .Join (tmp , "apps.json" )
66+
67+ if err := SaveDB (dbPath , & DB {SchemaVersion : 1 , Apps : map [string ]* models.App {}}); err != nil {
68+ t .Fatalf ("SaveDB returned error: %v" , err )
69+ }
70+
71+ matches , err := filepath .Glob (filepath .Join (tmp , ".apps.json.*.tmp" ))
72+ if err != nil {
73+ t .Fatalf ("failed to glob temp files: %v" , err )
74+ }
75+ if len (matches ) != 0 {
76+ t .Fatalf ("expected no temp files after successful save, found %v" , matches )
77+ }
78+ }
79+
1380func TestUpdateCheckMetadataBatch (t * testing.T ) {
1481 tmp := t .TempDir ()
1582 dbPath := filepath .Join (tmp , "apps.json" )
0 commit comments