@@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
22import type { OpenClawConfig } from "../config/config.js" ;
33
44const readConfigFileSnapshotMock = vi . hoisted ( ( ) => vi . fn ( ) ) ;
5- const writeConfigFileMock = vi . hoisted ( ( ) => vi . fn ( ) ) ;
5+ const replaceConfigFileMock = vi . hoisted ( ( ) => vi . fn ( ) ) ;
66const resolveSecretInputRefMock = vi . hoisted ( ( ) =>
77 vi . fn ( ( ) : { ref : unknown } => ( { ref : undefined } ) ) ,
88) ;
@@ -29,7 +29,7 @@ const randomTokenMock = vi.hoisted(() => vi.fn(() => "generated-token"));
2929
3030vi . mock ( "../config/config.js" , ( ) => ( {
3131 readConfigFileSnapshot : readConfigFileSnapshotMock ,
32- writeConfigFile : writeConfigFileMock ,
32+ replaceConfigFile : replaceConfigFileMock ,
3333} ) ) ;
3434
3535vi . mock ( "../config/types.secrets.js" , ( ) => ( {
@@ -153,7 +153,7 @@ describe("resolveGatewayInstallToken", () => {
153153 expect ( result . unavailableReason ) . toContain ( "gateway.auth.mode is unset" ) ;
154154 expect ( result . unavailableReason ) . toContain ( "openclaw config set gateway.auth.mode token" ) ;
155155 expect ( result . unavailableReason ) . toContain ( "openclaw config set gateway.auth.mode password" ) ;
156- expect ( writeConfigFileMock ) . not . toHaveBeenCalled ( ) ;
156+ expect ( replaceConfigFileMock ) . not . toHaveBeenCalled ( ) ;
157157 expect ( resolveSecretRefValuesMock ) . not . toHaveBeenCalled ( ) ;
158158 } ) ;
159159
@@ -171,7 +171,7 @@ describe("resolveGatewayInstallToken", () => {
171171 expect (
172172 result . warnings . some ( ( message ) => message . includes ( "without saving to config" ) ) ,
173173 ) . toBeTruthy ( ) ;
174- expect ( writeConfigFileMock ) . not . toHaveBeenCalled ( ) ;
174+ expect ( replaceConfigFileMock ) . not . toHaveBeenCalled ( ) ;
175175 } ) ;
176176
177177 it ( "persists auto-generated token when requested" , async ( ) => {
@@ -185,16 +185,17 @@ describe("resolveGatewayInstallToken", () => {
185185 } ) ;
186186
187187 expect ( result . warnings . some ( ( message ) => message . includes ( "saving to config" ) ) ) . toBeTruthy ( ) ;
188- expect ( writeConfigFileMock ) . toHaveBeenCalledWith (
189- expect . objectContaining ( {
188+ expect ( replaceConfigFileMock ) . toHaveBeenCalledWith ( {
189+ baseHash : undefined ,
190+ nextConfig : expect . objectContaining ( {
190191 gateway : {
191192 auth : {
192193 mode : "token" ,
193194 token : "generated-token" ,
194195 } ,
195196 } ,
196197 } ) ,
197- ) ;
198+ } ) ;
198199 } ) ;
199200
200201 it ( "drops generated plaintext when config changes to SecretRef before persist" , async ( ) => {
@@ -227,7 +228,7 @@ describe("resolveGatewayInstallToken", () => {
227228 expect (
228229 result . warnings . some ( ( message ) => message . includes ( "skipping plaintext token persistence" ) ) ,
229230 ) . toBeTruthy ( ) ;
230- expect ( writeConfigFileMock ) . not . toHaveBeenCalled ( ) ;
231+ expect ( replaceConfigFileMock ) . not . toHaveBeenCalled ( ) ;
231232 } ) ;
232233
233234 it ( "does not auto-generate when inferred mode has password SecretRef configured" , async ( ) => {
@@ -254,7 +255,7 @@ describe("resolveGatewayInstallToken", () => {
254255 expect ( result . token ) . toBeUndefined ( ) ;
255256 expect ( result . unavailableReason ) . toBeUndefined ( ) ;
256257 expect ( result . warnings . some ( ( message ) => message . includes ( "Auto-generated" ) ) ) . toBe ( false ) ;
257- expect ( writeConfigFileMock ) . not . toHaveBeenCalled ( ) ;
258+ expect ( replaceConfigFileMock ) . not . toHaveBeenCalled ( ) ;
258259 } ) ;
259260
260261 it ( "passes the install env through to gateway auth resolution" , async ( ) => {
@@ -286,7 +287,7 @@ describe("resolveGatewayInstallToken", () => {
286287 expect ( result . token ) . toBeUndefined ( ) ;
287288 expect ( result . unavailableReason ) . toBeUndefined ( ) ;
288289 expect ( result . warnings . some ( ( message ) => message . includes ( "Auto-generated" ) ) ) . toBe ( false ) ;
289- expect ( writeConfigFileMock ) . not . toHaveBeenCalled ( ) ;
290+ expect ( replaceConfigFileMock ) . not . toHaveBeenCalled ( ) ;
290291 } ) ;
291292
292293 it ( "skips token SecretRef resolution when token auth is not required" , async ( ) => {
0 commit comments