@@ -24,6 +24,7 @@ describe("JobsService schedule rows", () => {
2424 upsertSchedule : ReturnType < typeof vi . fn > ;
2525 deleteSchedulesForInactiveProviders : ReturnType < typeof vi . fn > ;
2626 deleteSchedulesByJobType : ReturnType < typeof vi . fn > ;
27+ deleteSchedulesForAddresses : ReturnType < typeof vi . fn > ;
2728 countPausedSchedules : ReturnType < typeof vi . fn > ;
2829 findDueSchedulesWithManager : ReturnType < typeof vi . fn > ;
2930 runTransaction : ReturnType < typeof vi . fn > ;
@@ -90,6 +91,7 @@ describe("JobsService schedule rows", () => {
9091 upsertSchedule : vi . fn ( ) ,
9192 deleteSchedulesForInactiveProviders : vi . fn ( async ( ) => [ ] ) ,
9293 deleteSchedulesByJobType : vi . fn ( async ( ) => 0 ) ,
94+ deleteSchedulesForAddresses : vi . fn ( async ( ) => [ ] ) ,
9395 countPausedSchedules : vi . fn ( async ( ) => [ ] ) ,
9496 findDueSchedulesWithManager : vi . fn ( ) ,
9597 runTransaction : vi . fn ( async ( callback : ( manager : unknown ) => Promise < void > ) => {
@@ -151,6 +153,8 @@ describe("JobsService schedule rows", () => {
151153 maintenanceWindowMinutes : 20 ,
152154 blockedSpIds : new Set ( ) ,
153155 blockedSpAddresses : new Set ( ) ,
156+ fullRateSpIds : new Set ( ) ,
157+ fullRateSpAddresses : new Set ( ) ,
154158 pieceCleanupPerSpPerHour : 1 ,
155159 maxPieceCleanupRuntimeSeconds : 300 ,
156160 maxDatasetStorageSizeBytes : 24 * 1024 * 1024 * 1024 ,
@@ -1337,7 +1341,7 @@ describe("JobsService schedule rows", () => {
13371341 } ;
13381342
13391343 const providerRegistryRepository = {
1340- findByAddress : vi . fn ( ( ) => ( { id : 1 , name : "test-provider" } ) ) ,
1344+ findByAddress : vi . fn ( ( ) => ( { id : 1 , name : "test-provider" , isApproved : true } ) ) ,
13411345 } ;
13421346
13431347 service = buildService ( {
@@ -1474,7 +1478,9 @@ describe("JobsService schedule rows", () => {
14741478 } as unknown as JobsServiceDeps [ 0 ] ;
14751479
14761480 const dataSetLifecycleService = { runLifecycleCheck : vi . fn ( async ( ) => undefined ) } ;
1477- const providerRegistryRepository = { findByAddress : vi . fn ( ( ) => ( { id : 1 , name : "test-provider" } ) ) } ;
1481+ const providerRegistryRepository = {
1482+ findByAddress : vi . fn ( ( ) => ( { id : 1 , name : "test-provider" , isApproved : true } ) ) ,
1483+ } ;
14781484
14791485 service = buildService ( {
14801486 configService,
@@ -1519,7 +1525,9 @@ describe("JobsService schedule rows", () => {
15191525 } as unknown as JobsServiceDeps [ 0 ] ;
15201526 service = buildService ( { configService } ) ;
15211527
1522- providerRegistryRepositoryMock . findActiveAddresses . mockResolvedValueOnce ( [ { address : "0xaaa" } ] ) ;
1528+ providerRegistryRepositoryMock . findActiveAddresses . mockResolvedValueOnce ( [
1529+ { address : "0xaaa" , providerId : 1n , isApproved : true } ,
1530+ ] ) ;
15231531
15241532 await callPrivate ( service , "ensureScheduleRows" , DEFAULT_NETWORK ) ;
15251533
@@ -1529,11 +1537,14 @@ describe("JobsService schedule rows", () => {
15291537 expect ( lifecycleUpserts ) . toHaveLength ( 1 ) ;
15301538 expect ( lifecycleUpserts [ 0 ] [ 1 ] ) . toBe ( "0xaaa" ) ;
15311539 expect ( jobScheduleRepositoryMock . deleteSchedulesByJobType ) . not . toHaveBeenCalled ( ) ;
1540+ expect ( jobScheduleRepositoryMock . deleteSchedulesForAddresses ) . not . toHaveBeenCalled ( ) ;
15321541 } ) ;
15331542
15341543 it ( "removes data_set_lifecycle_check schedules when disabled" , async ( ) => {
15351544 // base config has dataSetLifecycleCheckEnabled=false
1536- providerRegistryRepositoryMock . findActiveAddresses . mockResolvedValueOnce ( [ { address : "0xaaa" } ] ) ;
1545+ providerRegistryRepositoryMock . findActiveAddresses . mockResolvedValueOnce ( [
1546+ { address : "0xaaa" , providerId : 1n , isApproved : true } ,
1547+ ] ) ;
15371548
15381549 await callPrivate ( service , "ensureScheduleRows" , DEFAULT_NETWORK ) ;
15391550
@@ -1547,6 +1558,36 @@ describe("JobsService schedule rows", () => {
15471558 ) ;
15481559 } ) ;
15491560
1561+ it ( "does not schedule data_set_lifecycle_check for trickle-tier providers, and clears stale rows" , async ( ) => {
1562+ baseConfigValues = {
1563+ ...baseConfigValues ,
1564+ networks : {
1565+ calibration : { ...( baseConfigValues . networks as any ) . calibration , dataSetLifecycleCheckEnabled : true } ,
1566+ } as unknown as IConfig [ "networks" ] ,
1567+ } ;
1568+ configService = {
1569+ get : vi . fn ( ( key : keyof IConfig ) => baseConfigValues [ key ] ) ,
1570+ } as unknown as JobsServiceDeps [ 0 ] ;
1571+ service = buildService ( { configService } ) ;
1572+
1573+ providerRegistryRepositoryMock . findActiveAddresses . mockResolvedValueOnce ( [
1574+ { address : "0xaaa" , providerId : 1n , isApproved : false } ,
1575+ ] ) ;
1576+
1577+ await callPrivate ( service , "ensureScheduleRows" , DEFAULT_NETWORK ) ;
1578+
1579+ const lifecycleUpserts = jobScheduleRepositoryMock . upsertSchedule . mock . calls . filter (
1580+ ( call ) => call [ 0 ] === "data_set_lifecycle_check" ,
1581+ ) ;
1582+ expect ( lifecycleUpserts ) . toHaveLength ( 0 ) ;
1583+ expect ( jobScheduleRepositoryMock . deleteSchedulesByJobType ) . not . toHaveBeenCalled ( ) ;
1584+ expect ( jobScheduleRepositoryMock . deleteSchedulesForAddresses ) . toHaveBeenCalledWith (
1585+ "data_set_lifecycle_check" ,
1586+ [ "0xaaa" ] ,
1587+ DEFAULT_NETWORK ,
1588+ ) ;
1589+ } ) ;
1590+
15501591 it ( "sets active, inactive, and tested provider gauge values after refresh" , async ( ) => {
15511592 providerRegistryRepositoryMock . countByNetwork . mockResolvedValueOnce ( 10 ) ;
15521593 providerRegistryRepositoryMock . countActiveByNetwork . mockResolvedValueOnce ( 7 ) ;
0 commit comments