@@ -153,6 +153,63 @@ func TestExtractPublishIDs_CaseInsensitiveConfig(t *testing.T) {
153153 assert .Equal (t , "0xLOWER" , cfgID )
154154}
155155
156+ func TestGetLastPublishedAt (t * testing.T ) {
157+ pubfile := filepath .Join (t .TempDir (), "Pub.localnet.toml" )
158+ content := `# generated by Move
159+ build-env = "testnet"
160+ chain-id = "localnet"
161+
162+ [[published]]
163+ source = { local = "/workspace/world-contracts/contracts/world" }
164+ published-at = "0xWORLD"
165+ original-id = "0xWORLD"
166+ version = 0
167+
168+ [[published]]
169+ source = { local = "/workspace/builder-scaffold/move-contracts/smart_gate_extension" }
170+ published-at = "0xEXT"
171+ original-id = "0xEXT"
172+ version = 0
173+ `
174+ require .NoError (t , os .WriteFile (pubfile , []byte (content ), 0600 ))
175+
176+ pkgID , err := getLastPublishedAt (pubfile )
177+ require .NoError (t , err )
178+ assert .Equal (t , "0xEXT" , pkgID )
179+ }
180+
181+ func TestWritePublishedIDs_FallsBackToPubfile (t * testing.T ) {
182+ workspace := t .TempDir ()
183+ builderDir := filepath .Join (workspace , "builder-scaffold" )
184+ require .NoError (t , os .MkdirAll (filepath .Join (builderDir , "deployments" , "localnet" ), 0750 ))
185+ require .NoError (t , os .WriteFile (filepath .Join (builderDir , ".env" ), []byte ("BUILDER_PACKAGE_ID=\n EXTENSION_CONFIG_ID=\n " ), 0600 ))
186+
187+ pubfile := filepath .Join (builderDir , "deployments" , "localnet" , "Pub.localnet.toml" )
188+ require .NoError (t , os .WriteFile (pubfile , []byte (`build-env = "testnet"
189+ chain-id = "localnet"
190+
191+ [[published]]
192+ source = { local = "/workspace/world-contracts/contracts/world" }
193+ published-at = "0xWORLD"
194+ original-id = "0xWORLD"
195+ version = 0
196+
197+ [[published]]
198+ source = { local = "/workspace/builder-scaffold/move-contracts/smart_gate_extension" }
199+ published-at = "0xEXT"
200+ original-id = "0xEXT"
201+ version = 0
202+ ` ), 0600 ))
203+
204+ output := `{"objectChanges":[{"type":"created","objectType":"0x::builder::ExtensionConfig","objectId":"0xCFG"}]}`
205+ require .NoError (t , writePublishedIDs (workspace , output , pubfile ))
206+
207+ envData , err := os .ReadFile (filepath .Join (builderDir , ".env" ))
208+ require .NoError (t , err )
209+ assert .Contains (t , string (envData ), "BUILDER_PACKAGE_ID=0xEXT" )
210+ assert .Contains (t , string (envData ), "EXTENSION_CONFIG_ID=0xCFG" )
211+ }
212+
156213// ── buildPublishCmd ────────────────────────────────────────────────
157214
158215func TestBuildPublishCmd_Localnet (t * testing.T ) {
@@ -163,11 +220,12 @@ func TestBuildPublishCmd_Localnet(t *testing.T) {
163220 pubFile := filepath .Join (pubDir , "Pub.extension.toml" )
164221 require .NoError (t , os .WriteFile (pubFile , []byte ("old" ), 0600 ))
165222
166- cmd , err := buildPublishCmd (nil , tmp , "localnet" , "/workspace/contracts/my_ext" )
223+ cmd , pubfilePath , err := buildPublishCmd (nil , tmp , "localnet" , "/workspace/contracts/my_ext" )
167224 require .NoError (t , err )
168225 assert .Contains (t , cmd , "sui client test-publish" )
169226 assert .Contains (t , cmd , "--pubfile-path /workspace/builder-scaffold/deployments/localnet/Pub.extension.toml" )
170227 assert .Contains (t , cmd , "/workspace/contracts/my_ext" )
228+ assert .Equal (t , pubFile , pubfilePath )
171229 // The stale file should have been removed
172230 _ , statErr := os .Stat (pubFile )
173231 assert .True (t , os .IsNotExist (statErr ))
@@ -177,24 +235,30 @@ func TestBuildPublishCmd_LocalnetWithExistingWorldPubfile(t *testing.T) {
177235 tmp := t .TempDir ()
178236 pubDir := filepath .Join (tmp , "builder-scaffold" , "deployments" , "localnet" )
179237 require .NoError (t , os .MkdirAll (pubDir , 0750 ))
180- require .NoError (t , os .WriteFile (filepath .Join (pubDir , "Pub.localnet.toml" ), []byte ("world" ), 0600 ))
238+ worldPubfile := filepath .Join (pubDir , "Pub.localnet.toml" )
239+ require .NoError (t , os .WriteFile (worldPubfile , []byte ("world" ), 0600 ))
181240
182- cmd , err := buildPublishCmd (nil , tmp , "localnet" , "/workspace/contracts/my_ext" )
241+ cmd , pubfilePath , err := buildPublishCmd (nil , tmp , "localnet" , "/workspace/contracts/my_ext" )
183242 require .NoError (t , err )
184243 assert .Contains (t , cmd , "sui client test-publish" )
185- assert .Contains (t , cmd , "--pubfile-path /workspace/builder-scaffold/deployments/localnet/Pub.localnet .toml" )
244+ assert .Contains (t , cmd , "--pubfile-path /workspace/builder-scaffold/deployments/localnet/Pub.extension .toml" )
186245 assert .NotContains (t , cmd , "sui client publish --pubfile-path" )
246+ assert .Equal (t , filepath .Join (pubDir , "Pub.extension.toml" ), pubfilePath )
247+ seededPubfile , readErr := os .ReadFile (pubfilePath )
248+ require .NoError (t , readErr )
249+ assert .Equal (t , "world" , string (seededPubfile ))
187250}
188251
189252func TestBuildPublishCmd_Testnet (t * testing.T ) {
190- cmd , err := buildPublishCmd (nil , "/ws" , "testnet" , "/workspace/contracts/ext" )
253+ cmd , pubfilePath , err := buildPublishCmd (nil , "/ws" , "testnet" , "/workspace/contracts/ext" )
191254 require .NoError (t , err )
192255 assert .Contains (t , cmd , "sui client publish" )
193256 assert .Contains (t , cmd , "--json" )
257+ assert .Empty (t , pubfilePath )
194258}
195259
196260func TestBuildPublishCmd_UnsupportedNetwork (t * testing.T ) {
197- _ , err := buildPublishCmd (nil , "/ws" , "mainnet" , "/dir" )
261+ _ , _ , err := buildPublishCmd (nil , "/ws" , "mainnet" , "/dir" )
198262 assert .Error (t , err )
199263 assert .Contains (t , err .Error (), "unsupported network" )
200264}
0 commit comments