@@ -6,13 +6,13 @@ import {
66 validateEnsIndexerPublicConfigCompatibility ,
77} from "@ensnode/ensnode-sdk" ;
88
9- import { EnsDbWriterWorker } from "@/lib/ensdb-writer-worker/ensdb-writer-worker" ;
109import type { IndexingStatusBuilder } from "@/lib/indexing-status-builder/indexing-status-builder" ;
1110import type { PublicConfigBuilder } from "@/lib/public-config-builder/public-config-builder" ;
1211
1312import {
1413 createMockCrossChainSnapshot ,
1514 createMockEnsDbWriter ,
15+ createMockEnsDbWriterWorker ,
1616 createMockIndexingStatusBuilder ,
1717 createMockOmnichainSnapshot ,
1818 createMockPublicConfigBuilder ,
@@ -51,10 +51,10 @@ describe("EnsDbWriterWorker", () => {
5151 vi . mocked ( buildCrossChainIndexingStatusSnapshotOmnichain ) . mockReturnValue ( snapshot ) ;
5252
5353 const ensDbClient = createMockEnsDbWriter ( ) ;
54- const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
55- const indexingStatusBuilder = createMockIndexingStatusBuilder ( omnichainSnapshot ) ;
56-
57- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
54+ const worker = createMockEnsDbWriterWorker ( {
55+ ensDbClient ,
56+ indexingStatusBuilder : createMockIndexingStatusBuilder ( omnichainSnapshot ) ,
57+ } ) ;
5858
5959 // act
6060 await worker . run ( ) ;
@@ -81,31 +81,58 @@ describe("EnsDbWriterWorker", () => {
8181
8282 it ( "throws when stored config is incompatible" , async ( ) => {
8383 // arrange
84- const incompatibleError = new Error ( "incompatible" ) ;
8584 vi . mocked ( validateEnsIndexerPublicConfigCompatibility ) . mockImplementation ( ( ) => {
86- throw incompatibleError ;
85+ throw new Error ( "incompatible" ) ;
8786 } ) ;
8887
8988 const ensDbClient = createMockEnsDbWriter ( {
9089 getEnsIndexerPublicConfig : vi . fn ( ) . mockResolvedValue ( mockPublicConfig ) ,
9190 } ) ;
92- const publicConfigBuilder = createMockPublicConfigBuilder ( mockPublicConfig ) ;
93- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
94-
95- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
91+ const worker = createMockEnsDbWriterWorker ( {
92+ ensDbClient ,
93+ publicConfigBuilder : createMockPublicConfigBuilder ( mockPublicConfig ) ,
94+ } ) ;
9695
9796 // act & assert
9897 await expect ( worker . run ( ) ) . rejects . toThrow ( "incompatible" ) ;
9998 expect ( ensDbClient . upsertEnsDbVersion ) . not . toHaveBeenCalled ( ) ;
10099 } ) ;
101100
102- it ( "throws error when worker is already running " , async ( ) => {
101+ it ( "skips config validation when in dev mode " , async ( ) => {
103102 // arrange
104- const ensDbClient = createMockEnsDbWriter ( ) ;
105- const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
106- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
103+ vi . mocked ( validateEnsIndexerPublicConfigCompatibility ) . mockImplementation ( ( ) => {
104+ throw new Error ( "incompatible" ) ;
105+ } ) ;
106+
107+ const snapshot = createMockCrossChainSnapshot ( ) ;
108+ vi . mocked ( buildCrossChainIndexingStatusSnapshotOmnichain ) . mockReturnValue ( snapshot ) ;
107109
108- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
110+ const ensDbClient = createMockEnsDbWriter ( {
111+ getEnsIndexerPublicConfig : vi . fn ( ) . mockResolvedValue ( mockPublicConfig ) ,
112+ } ) ;
113+ const worker = createMockEnsDbWriterWorker ( {
114+ ensDbClient,
115+ publicConfigBuilder : createMockPublicConfigBuilder ( mockPublicConfig ) ,
116+ isInDevMode : true ,
117+ } ) ;
118+
119+ // act - should not throw even though configs are incompatible
120+ await worker . run ( ) ;
121+
122+ // assert - validation should not have been called
123+ expect ( validateEnsIndexerPublicConfigCompatibility ) . not . toHaveBeenCalled ( ) ;
124+ expect ( ensDbClient . upsertEnsDbVersion ) . toHaveBeenCalledWith (
125+ mockPublicConfig . versionInfo . ensDb ,
126+ ) ;
127+ expect ( ensDbClient . upsertEnsIndexerPublicConfig ) . toHaveBeenCalledWith ( mockPublicConfig ) ;
128+
129+ // cleanup
130+ worker . stop ( ) ;
131+ } ) ;
132+
133+ it ( "throws error when worker is already running" , async ( ) => {
134+ // arrange
135+ const worker = createMockEnsDbWriterWorker ( ) ;
109136
110137 // act - first run
111138 await worker . run ( ) ;
@@ -119,14 +146,11 @@ describe("EnsDbWriterWorker", () => {
119146
120147 it ( "throws error when config fetch fails" , async ( ) => {
121148 // arrange
122- const networkError = new Error ( "Network failure" ) ;
123- const ensDbClient = createMockEnsDbWriter ( ) ;
124149 const publicConfigBuilder = {
125- getPublicConfig : vi . fn ( ) . mockRejectedValue ( networkError ) ,
150+ getPublicConfig : vi . fn ( ) . mockRejectedValue ( new Error ( "Network failure" ) ) ,
126151 } as unknown as PublicConfigBuilder ;
127- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
128-
129- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
152+ const ensDbClient = createMockEnsDbWriter ( ) ;
153+ const worker = createMockEnsDbWriterWorker ( { ensDbClient, publicConfigBuilder } ) ;
130154
131155 // act & assert
132156 await expect ( worker . run ( ) ) . rejects . toThrow ( "Network failure" ) ;
@@ -136,14 +160,10 @@ describe("EnsDbWriterWorker", () => {
136160
137161 it ( "throws error when stored config fetch fails" , async ( ) => {
138162 // arrange
139- const dbError = new Error ( "Database connection lost" ) ;
140163 const ensDbClient = createMockEnsDbWriter ( {
141- getEnsIndexerPublicConfig : vi . fn ( ) . mockRejectedValue ( dbError ) ,
164+ getEnsIndexerPublicConfig : vi . fn ( ) . mockRejectedValue ( new Error ( "Database connection lost" ) ) ,
142165 } ) ;
143- const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
144- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
145-
146- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
166+ const worker = createMockEnsDbWriterWorker ( { ensDbClient } ) ;
147167
148168 // act & assert
149169 await expect ( worker . run ( ) ) . rejects . toThrow ( "Database connection lost" ) ;
@@ -152,17 +172,16 @@ describe("EnsDbWriterWorker", () => {
152172
153173 it ( "fetches stored and in-memory configs concurrently" , async ( ) => {
154174 // arrange
155- vi . mocked ( validateEnsIndexerPublicConfigCompatibility ) . mockImplementation ( ( ) => {
156- // validation passes
157- } ) ;
175+ vi . mocked ( validateEnsIndexerPublicConfigCompatibility ) . mockImplementation ( ( ) => { } ) ;
158176
159177 const ensDbClient = createMockEnsDbWriter ( {
160178 getEnsIndexerPublicConfig : vi . fn ( ) . mockResolvedValue ( mockPublicConfig ) ,
161179 } ) ;
162180 const publicConfigBuilder = createMockPublicConfigBuilder ( mockPublicConfig ) ;
163- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
164-
165- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
181+ const worker = createMockEnsDbWriterWorker ( {
182+ ensDbClient,
183+ publicConfigBuilder,
184+ } ) ;
166185
167186 // act
168187 await worker . run ( ) ;
@@ -182,9 +201,7 @@ describe("EnsDbWriterWorker", () => {
182201
183202 const ensDbClient = createMockEnsDbWriter ( ) ;
184203 const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
185- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
186-
187- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
204+ const worker = createMockEnsDbWriterWorker ( { ensDbClient, publicConfigBuilder } ) ;
188205
189206 // act
190207 await worker . run ( ) ;
@@ -203,10 +220,7 @@ describe("EnsDbWriterWorker", () => {
203220 // arrange
204221 const upsertIndexingStatusSnapshot = vi . fn ( ) . mockResolvedValue ( undefined ) ;
205222 const ensDbClient = createMockEnsDbWriter ( { upsertIndexingStatusSnapshot } ) ;
206- const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
207- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
208-
209- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
223+ const worker = createMockEnsDbWriterWorker ( { ensDbClient } ) ;
210224
211225 // act
212226 await worker . run ( ) ;
@@ -227,11 +241,7 @@ describe("EnsDbWriterWorker", () => {
227241 describe ( "isRunning - worker state" , ( ) => {
228242 it ( "indicates isRunning status correctly" , async ( ) => {
229243 // arrange
230- const ensDbClient = createMockEnsDbWriter ( ) ;
231- const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
232- const indexingStatusBuilder = createMockIndexingStatusBuilder ( ) ;
233-
234- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
244+ const worker = createMockEnsDbWriterWorker ( ) ;
235245
236246 // assert - not running initially
237247 expect ( worker . isRunning ) . toBe ( false ) ;
@@ -268,15 +278,13 @@ describe("EnsDbWriterWorker", () => {
268278 vi . mocked ( buildCrossChainIndexingStatusSnapshotOmnichain ) . mockReturnValue ( crossChainSnapshot ) ;
269279
270280 const ensDbClient = createMockEnsDbWriter ( ) ;
271- const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
272281 const indexingStatusBuilder = {
273282 getOmnichainIndexingStatusSnapshot : vi
274283 . fn ( )
275284 . mockResolvedValueOnce ( unstartedSnapshot )
276285 . mockResolvedValueOnce ( validSnapshot ) ,
277286 } as unknown as IndexingStatusBuilder ;
278-
279- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
287+ const worker = createMockEnsDbWriterWorker ( { ensDbClient, indexingStatusBuilder } ) ;
280288
281289 // act - run returns immediately
282290 await worker . run ( ) ;
@@ -324,16 +332,14 @@ describe("EnsDbWriterWorker", () => {
324332 . mockRejectedValueOnce ( new Error ( "DB error" ) )
325333 . mockResolvedValueOnce ( undefined ) ,
326334 } ) ;
327- const publicConfigBuilder = createMockPublicConfigBuilder ( ) ;
328335 const indexingStatusBuilder = {
329336 getOmnichainIndexingStatusSnapshot : vi
330337 . fn ( )
331338 . mockResolvedValueOnce ( snapshot1 )
332339 . mockResolvedValueOnce ( snapshot2 )
333340 . mockResolvedValueOnce ( snapshot2 ) ,
334341 } as unknown as IndexingStatusBuilder ;
335-
336- const worker = new EnsDbWriterWorker ( ensDbClient , publicConfigBuilder , indexingStatusBuilder ) ;
342+ const worker = createMockEnsDbWriterWorker ( { ensDbClient, indexingStatusBuilder } ) ;
337343
338344 // act
339345 await worker . run ( ) ;
0 commit comments