@@ -52,6 +52,19 @@ func TestNativePortUploadUsesPortsTrackAndManifestMetadata(t *testing.T) {
5252 t .Fatalf ("expected origin system metadata: %s" , prettyJSON (found ))
5353 }
5454
55+ portsOnly := h .request (http .MethodGet , "/saves?systemSlug=ports&limit=10" , nil )
56+ assertStatus (t , portsOnly , http .StatusOK )
57+ portsBody := decodeJSONMap (t , portsOnly .Body )
58+ if total := int (mustNumber (t , portsBody ["total" ], "ports.total" )); total != 1 {
59+ t .Fatalf ("expected one filtered native port save, got %d: %s" , total , prettyJSON (portsBody ))
60+ }
61+ n64Only := h .request (http .MethodGet , "/saves?systemSlug=n64&limit=10" , nil )
62+ assertStatus (t , n64Only , http .StatusOK )
63+ n64Body := decodeJSONMap (t , n64Only .Body )
64+ if total := int (mustNumber (t , n64Body ["total" ], "n64.total" )); total != 0 {
65+ t .Fatalf ("expected native port save to stay isolated from n64 list, got %d: %s" , total , prettyJSON (n64Body ))
66+ }
67+
5568 latest := h .request (http .MethodGet , "/save/latest?romSha1=port:ship-of-harkinian&slotName=" + url .QueryEscape ("file1" ), nil )
5669 assertStatus (t , latest , http .StatusOK )
5770 latestBody := decodeJSONMap (t , latest .Body )
@@ -83,3 +96,55 @@ func TestNativePortUploadRejectsUnmanifestedPath(t *testing.T) {
8396 t .Fatalf ("expected manifest rejection reason: %s" , prettyJSON (body ))
8497 }
8598}
99+
100+ func TestNativePortUploadAllowsManifestDefaultFilename (t * testing.T ) {
101+ h := newContractHarness (t )
102+
103+ payload := make ([]byte , 512 )
104+ payload [0 ] = 0x4d
105+ payload [1 ] = 0x4b
106+
107+ body := uploadSave (t , h , "/saves" , map [string ]string {
108+ "system" : "ports" ,
109+ "rom_sha1" : "port:spaghettikart" ,
110+ "slotName" : "default" ,
111+ "runtimeProfile" : "port/spaghettikart" ,
112+ "portId" : "spaghettikart" ,
113+ "portName" : "Mario Kart 64 (SpaghettiKart)" ,
114+ "originSystemSlug" : "n64" ,
115+ "portSaveKind" : "progress" ,
116+ "relativePath" : "default.sav" ,
117+ "rootRelativePath" : "MarioKart64/default.sav" ,
118+ "slotId" : "default" ,
119+ "displayTitle" : "Mario Kart 64 (SpaghettiKart) - Default" ,
120+ }, "default.sav" , payload )
121+
122+ save := mustObject (t , body ["save" ], "save" )
123+ saveID := mustString (t , save ["id" ], "save.id" )
124+ if saveID == "" {
125+ t .Fatalf ("expected manifest default save upload to succeed: %s" , prettyJSON (body ))
126+ }
127+
128+ list := h .request (http .MethodGet , "/saves?systemSlug=ports&limit=10" , nil )
129+ assertStatus (t , list , http .StatusOK )
130+ listBody := decodeJSONMap (t , list .Body )
131+ items := mustArray (t , listBody ["saves" ], "saves" )
132+ found := false
133+ for _ , raw := range items {
134+ item := mustObject (t , raw , "save" )
135+ if mustString (t , item ["id" ], "save.id" ) == saveID {
136+ found = true
137+ break
138+ }
139+ }
140+ if ! found {
141+ t .Fatalf ("manifest default save was accepted but missing from ports list: %s" , prettyJSON (listBody ))
142+ }
143+
144+ latest := h .request (http .MethodGet , "/save/latest?romSha1=" + url .QueryEscape ("port:spaghettikart" )+ "&slotName=default" , nil )
145+ assertStatus (t , latest , http .StatusOK )
146+ latestBody := decodeJSONMap (t , latest .Body )
147+ if mustString (t , latestBody ["id" ], "latest.id" ) != saveID {
148+ t .Fatalf ("latest did not resolve manifest default save: %s" , prettyJSON (latestBody ))
149+ }
150+ }
0 commit comments