@@ -231,21 +231,23 @@ private struct BadHeartbeatAcivity: ActivityDefinition {
231231 }
232232}
233233
234- private struct ReadingHeartbeatAcivity : ActivityDefinition {
234+ struct ReadingHeartbeatActivity : ActivityDefinition {
235235 struct HeartbeatDetails : Codable , Hashable {
236236 var string : String
237237 var data : Data
238238 }
239239 typealias Input = Void
240- typealias Output = HeartbeatDetails
240+ typealias Output = HeartbeatDetails ?
241241
242- static let name : String ? = " ReadingHeartbeatAcivity "
242+ static let name : String ? = " ReadingHeartbeatActivity "
243243
244- func run( input: Void ) async throws -> HeartbeatDetails {
245- let ( string, data) = try await ActivityExecutionContext . current!. info. heartbeatDetails (
244+ func run( input: Void ) async throws -> HeartbeatDetails ? {
245+ guard let ( string, data) = try await ActivityExecutionContext . current!. info. heartbeatDetails (
246246 as: String . self,
247247 Data . self
248- )
248+ ) else {
249+ return nil
250+ }
249251
250252 return . init( string: string, data: data)
251253 }
@@ -748,9 +750,9 @@ struct ActivityWorkerTests {
748750 }
749751 }
750752
751- @Test
752- static func readingHeartbeat( ) async throws {
753- let test = ActivityWorkerTests ( activities: [ ReadingHeartbeatAcivity ( ) ] )
753+ @Test ( " Read Heartbeat Details " , arguments : [ true , false ] )
754+ static func readingHeartbeat( heartbeatDetailsAvailable : Bool ) async throws {
755+ let test = ActivityWorkerTests ( activities: [ ReadingHeartbeatActivity ( ) ] )
754756
755757 try await withThrowingTaskGroup ( of: Void . self) { group in
756758 group. addTask {
@@ -760,40 +762,47 @@ struct ActivityWorkerTests {
760762 test. bridgeWorker. activityTaskContinuation. yield (
761763 . with {
762764 $0. taskToken = Data ( [ 1 ] )
763- $0. start. activityType = " ReadingHeartbeatAcivity "
765+ $0. start. activityType = " ReadingHeartbeatActivity "
764766 $0. start. activityID = " ActivityID1 "
765767 $0. start. attempt = 1
766768 $0. start. workflowType = " WorkflowType "
767769 $0. start. workflowExecution = . with {
768770 $0. runID = " RunID "
769771 $0. workflowID = " WorkflowID1 "
770772 }
771- $0. start. heartbeatDetails = [
772- . with {
773- $0. data = Data ( #""Foo""# . utf8)
774- $0. metadata = [ " encoding " : Data ( " json/plain " . utf8) ]
775- } ,
776- . with {
777- $0. data = Data ( [ 1 , 2 , 3 ] )
778- $0. metadata = [ " encoding " : Data ( " binary/plain " . utf8) ]
779- } ,
780- ]
773+ if heartbeatDetailsAvailable {
774+ $0. start. heartbeatDetails = [
775+ . with {
776+ $0. data = Data ( #""Foo""# . utf8)
777+ $0. metadata = [ " encoding " : Data ( " json/plain " . utf8) ]
778+ } ,
779+ . with {
780+ $0. data = Data ( [ 1 , 2 , 3 ] )
781+ $0. metadata = [ " encoding " : Data ( " binary/plain " . utf8) ]
782+ } ,
783+ ]
784+ }
781785 }
782786 )
783787
784788 var activityTaskCompletionIterator = test. bridgeWorker. activityTaskCompletionStream. makeAsyncIterator ( )
785789 let completion = try await activityTaskCompletionIterator. next ( )
786790 #expect( completion? . taskToken == Data ( [ 1 ] ) )
787791 let jsonDecoder = JSONDecoder ( )
788- let expectedHeartbeatDetails = ReadingHeartbeatAcivity . HeartbeatDetails (
789- string: " Foo " ,
790- data: Data ( [ 1 , 2 , 3 ] )
791- )
792792 let heartbeatDetails = try jsonDecoder. decode (
793- ReadingHeartbeatAcivity . HeartbeatDetails. self,
793+ ( ReadingHeartbeatActivity . HeartbeatDetails? ) . self,
794794 from: completion!. result. completed. result. data
795795 )
796- #expect( heartbeatDetails == expectedHeartbeatDetails)
796+
797+ if heartbeatDetailsAvailable {
798+ let expectedHeartbeatDetails = ReadingHeartbeatActivity . HeartbeatDetails (
799+ string: " Foo " ,
800+ data: Data ( [ 1 , 2 , 3 ] )
801+ )
802+ #expect( heartbeatDetails == expectedHeartbeatDetails)
803+ } else {
804+ #expect( heartbeatDetails == nil )
805+ }
797806 group. cancelAll ( )
798807 }
799808 }
0 commit comments